根据另一个列的先前值在Hive中创建新列

时间:2018-09-26 19:28:24

标签: hive window-functions

我有如下数据:

Status Order
NULL   1
NULL   2
1      3
NULL   4
NULL   5
0      6
NULL   7
NULL   8
NULL   9
1      10

我正在尝试添加一个新列,该列用以前的数字填充空值,例如:

Status     New
NULL       NULL
NULL       NULL
1          1
NULL       1
NULL       1
0          0
NULL       0
NULL       0
NULL       0
1          1

我正在使用hive,并且确实可以访问pyspark,但是在可能的情况下尝试通过SQL解决。我研究了窗口函数(Rank,Dense_rank,Row_number,Lag,Lead)。有什么建议么?

1 个答案:

答案 0 :(得分:1)

您需要的是对等组。然后,您可以使用窗口功能来填写数据。可以将组定义为直到包含给定值的非空值的数量。

这假定您有指定顺序的列。

所以:

select t.*, max(status) over (partition by grp) as new_status
from (select t.*, count(status) over (order by ?) as grp
      from t
     ) t;

?用于指定顺序的列。