在配置单元中使用wm\u concat时,如何用0填充不存在的值?

hec6srdp  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(261)

我有一张table是用pt隔开的。数据:
k v点
100 1 20150101
101 1 20150102
100 1 20150103
我想用wmèconcat得到这样的结果,其中分区中不存在的k用0填充:
k ts公司
100 1,0,1
101 0,1,0
但我只能得到这样的结果:
k ts公司
100 1,1
101 1
Hive脚本如下:

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
xurqigkl

xurqigkl1#

实现这一点的一种方法是,首先对不同分区的子查询执行交叉联接,然后计算一个新的“v”列,当pt存在于某个特定的k时,该列的值为1,否则该列的值为0。然后你需要取每个k,v对的最大值。我的意思是:

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

相关问题