根据条件将记录分为两个记录

时间:2019-10-16 10:08:32

标签: sql apache-spark-sql

我有一张看起来像的桌子:

product | eff_dt | store | region | type
12345 | 18/05/2017 | HA | CA | F
12345 | 05/10/2018 | K1 | CA | F
12345 | 01/02/2019 | K1 | CA | F

要求是对记录(partition by product_id进行排序,并将每个记录中的列与序列中 next 记录中的列进行比较。如果找到更改,则用eff_date = [eff_date (of the 2nd record) - 1 day]在这2条记录之间创建一条记录,这样现在我们将得到3条记录。因此生成的新记录将继承其父记录的列值。但是,如果与先前的记录相比在记录中没有发现任何更改,那么我们需要忽略该记录而不输出它。

预期输出:

product | eff_dt | store | region | type
12345 | 18/05/2017 | HA | CA | F   <--- output
12345 | 04/10/2017 | HA | CA | F   <--- new record generated with (eff_dt - 1)
12345 | 05/10/2018 | K1 | CA | F   <--- output as-is
                                   <--- 3rd record discarded since no change with previous record 

因此,从上面的示例开始,我们将从比较第一条记录和第二条记录开始,然后发现差异(HA!=K1)。因此,需要在这两个记录之间生成一个新记录。现在,在比较第二条记录和第三条记录时,我们发现列值没有任何变化。因此,不需要生成新记录,并且也将丢弃该记录并从输出中禁止该记录。

可以通过串联每个记录的列来生成MD5()哈希来进行比较。允许在临时视图中保留中间结果。

我试图找到一种方法来生成此类记录并相应地填充列。

感谢您的帮助。

0 个答案:

没有答案
相关问题