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

Creating new column in Hive based on previous value of another column

我有这样的数据:

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 解决。我研究了 window 函数(等级、Dense_rank、Row_number、滞后、领先)。有什么建议么?

你需要的是等价群。然后就可以使用window函数来填充数据了。一个组可以定义为最多包含给定值的非空值的数量。

这假定您有一列指定排序。

所以:

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

? 用于指定排序的列。