将最后一个非空值填充到下一个空行中,直到Hive中出现下一个可用的非空值

qncylg1j  于 12个月前  发布在  Hive
关注(0)|答案(1)|浏览(229)

我的输入数据如下,new MD_flag是基于md_flag列值的输出列。

sellingseason|item|location|wk|md_flag|New md_flag
Q1-23|BP608WZ271812|LBDI|Mar W5-23|TRUE|TRUE
Q1-23|BP608WZ271812|LBDI|Apr W1-23|TRUE|TRUE
Q1-23|BP608WZ271812|LBDI|Apr W2-23|TRUE|TRUE
Q1-23|BP608WZ271812|LBDI|Apr W3-23|TRUE|TRUE
Q1-23|BP608WZ271812|LBDI|Apr W4-23|TRUE|TRUE
Q2-23|BP608WZ271812|LBDI|May W1-23|TRUE|TRUE
Q2-23|BP608WZ271812|LBDI|May W2-23|TRUE|TRUE
Q2-23|BP608WZ271812|LBDI|May W3-23|TRUE|TRUE
Q2-23|BP608WZ271812|LBDI|May W4-23|TRUE|TRUE
Q2-23|BP608WZ271812|LBDI|Jun W1-23|FALSE|FALSE
Q2-23|BP608WZ271812|LBDI|Jun W2-23|TRUE|TRUE
Q2-23|BP608WZ271812|LBDI|Jun W3-23|NULL|TRUE
Q2-23|BP608WZ271812|LBDI|Jun W4-23|TRUE|TRUE
Q2-23|BP608WZ271812|LBDI|Jun W5-23|NULL|TRUE
Q2-23|BP608WZ271812|LBDI|Jul W1-23|NULL|TRUE
Q2-23|BP608WZ271812|LBDI|Jul W2-23|FALSE|FALSE
Q2-23|BP608WZ271812|LBDI|Jul W3-23|NULL|FALSE
Q2-23|BP608WZ271812|LBDI|Jul W4-23|NULL|FALSE
Q3-23|BP608WZ271812|LBDI|Aug W1-23|NULL|FALSE
Q3-23|BP608WZ271812|LBDI|Aug W2-23|NULL|FALSE

字符串
New md_flag的逻辑是当Md_flagNull时,我们需要填充前一个非空值,直到下一个非空值。
我尝试使用Hive窗口功能,但无法实现所需的逻辑。有人可以帮助我的逻辑。
我在社区中看到类似的帖子,但没有提供正确的答案。How to populate null column values w/ next non-null value

bvjveswy

bvjveswy1#

您可以使用WINDOW函数last_value,其中另一个参数为TRUE,以忽略null,如下所示:

select t.*,
       coalesce(md_flag,
                last_value(md_flag, true) 
                   over (partition by item, location order by wk) 
               )   as  md_flag
from your_table t

字符串

相关问题