我有一个包含n列的表A.列c1具有以下模式的票证:
c1
79213
86420
94237
94237-H
65874
32650
26198
26198-H
52041
49567
49567-H
.....
.....
门票94237-H,26198-H,49567-H被称为助手票,他们的父母分别为94237,26198,49567。有人可以帮助编写一个hive查询来生成另一个表B,其中包含表A中的所有列,删除列c1中的帮助者票“H”,再添加一个列ch,结果如下:在ch列中,父票证应该是标记为1,其余票据应标记为0。
c1 ch
79213 0
86420 0
94237 1
65874 0
32650 0
26198 1
52041 0
49567 1
.....
.....
提前致谢。
答案 0 :(得分:0)
首先拆分key
和helper flag
select
replace(c1,'-H') c1,
case when c1 like '%-H' then 1 end as is_helper
from t1
简单地获取所有密钥(GROUP BY c1
)并使用MAX
检查密钥是否存在帮助。
with t2 as (
select
replace(c1,'-H') c1,
case when c1 like '%-H' then 1 end as is_helper
from t1)
select c1, max(is_helper) ch
from t2
group by c1;
给出
C1 CH
------- ----------
86420
65874
32650
26198 1
79213
94237 1
52041
49567 1
注意,我没有蜂巢,所以在问题改革或使用其他标准功能时。
示例:
select
replace(c1,'-H') c1,
max(case when c1 like '%-H' then 1 end) as ch
from t1
group by replace(c1,'-H')