在 hive 中使用 wm_concat 时如何用 0 填充不存在的值



>我有一个按pt分区的表。数据:

K V PT

100 1 20150101

101 1 20150102

100 1 20150103

我想使用 wm_concat 来获得这样的结果,其中填充为 0 的分区中不存在 k:

凯特斯

100 1,0,1

101 0,1,0

但我只能得到这样的结果:

凯特斯

100 1,1

101 1

蜂巢脚本如下:


select m1.k, wm_concat(',', m1.v) as ts
from
(
    select k, v, pt
    from test_table
    where pt <= ${date}
    order by pt
) m1
group by m1.k

实现此目的的一种方法是首先使用不同分区的子查询进行交叉连接,并计算一个新的"v"列,当特定 k 的 pt 存在时,该列的值为 1,否则值为 0。然后你需要取每个k的最大值,v对按pt分组。我的意思是:

select k, max(if(pt_join.pt == tb.pt, 1, 0)) as v, pt_join.pt as pt
from test_table tb
cross join (select distinct pt
            from test_table) pt_join
group by k, pt_join.pt

这将输出以下内容:

k       v       pt
100     1       20150101
100     0       20150102
100     1       20150103
101     0       20150101
101     1       20150102
101     0       20150103

然后,您应该能够使用上面的方法来获得所需的结果:

k ts
100 1,0,1
101 0,1,0

最新更新