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

How can I fill non-exist value with 0 when use wm_concat in hive?

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

k v pt

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

完成此操作的一种方法是首先对不同分区的子查询进行交叉连接,并计算一个新的 "v" 列,当特定 k 和 a 的 pt 存在时,该列的值为 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