Hive案例陈述

时间:2017-09-19 13:35:16

标签: sql hive

我有一个包含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
.....
.....

提前致谢。

1 个答案:

答案 0 :(得分:0)

首先拆分keyhelper 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')