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

问题描述 投票:0回答:1

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

销售季节|商品|地点|每周|md_flag|新md_flag Q1-23|BP608WZ271812|LBDI|3 月 W5-23|正确|正确 Q1-23|BP608WZ271812|LBDI|4 月 W1-23|TRUE|TRUE Q1-23|BP608WZ271812|LBDI|4 月 W2-23|TRUE|TRUE Q1-23|BP608WZ271812|LBDI|4 月 W3-23|TRUE|TRUE Q1-23|BP608WZ271812|LBDI|4 月 W4-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W1-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W2-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W3-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|5 月 W4-23|TRUE|TRUE Q2-23|BP608WZ271812|LBDI|W1-23 六月|假|假 Q2-23|BP608WZ271812|LBDI|W2-23 六月|正确|正确 Q2-23|BP608WZ271812|LBDI|Jun W3-23|NULL|TRUE Q2-23|BP608WZ271812|LBDI|Jun W4-23|正确|正确 Q2-23|BP608WZ271812|LBDI|Jun W5-23|NULL|TRUE Q2-23|BP608WZ271812|LBDI|7 月 W1-23|NULL|TRUE Q2-23|BP608WZ271812|LBDI|7 月 W2-23|假|假 Q2-23|BP608WZ271812|LBDI|7 月 W3-23|NULL|FALSE Q2-23|BP608WZ271812|LBDI|7 月 W4-23|NULL|FALSE Q3-23|BP608WZ271812|LBDI|8 月 W1-23|NULL|FALSE Q3-23|BP608WZ271812|LBDI|8 月 W2-23|NULL|FALSE

New md_flag 的逻辑是,当 Md_flag 为 Null 时,我们需要填充先前的非空值,直到下一个非空值。

我尝试使用 Hive windows 功能,但无法实现所需的逻辑。有人可以帮我解决这个逻辑吗?

我在社区中看到类似的帖子,但没有提供正确答案。 如何使用下一个非空值填充空列值

sql hive window-functions
1个回答
0
投票

您可以使用 WINDOW 函数

last_value
以及其中的另一个参数
TRUE
来忽略空值,如下所示:

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
© www.soinside.com 2019 - 2024. All rights reserved.