【发布时间】:2014-09-16 11:32:34
【问题描述】:
我有一个名为“sales”的 Hive 表,结构如下:
id,ptype,amount,time,date
1,a,12,2240,2013-12-25
1,a,4,1830,2013-12-25
1,b,2,1920,2013-12-25
1,b,3,2023,2013-12-25
2,a,5,1220,2013-12-25
2,a,1,1320,2013-12-25
以下是我对不同变量变量的查询:
Q1: select id,sum(amount) as s_amt from sales group by id;
Q2: select id, sum(amount) as s_a_amt from sales where ptype='a' group by id;
Q3: select id, sum(amount) as s_b_amt from sales where ptype='b' group by id;
就我在 Hive 中学到的知识而言,只有当我们具有相同的列名或查询架构时,我们才能应用“union all”选项。以下是我想要使用 Hive 查询实现的最终结果:
id,s_amt,s_a_amt,s_b_amt
1,21,16,5
2,6,6,0
以下是我尝试过的一个查询,它成功执行。但是当您必须为超过 300 个变量设计相同的查询时,这将是一项非常痛苦的任务。考虑到我们有超过 300 个变量,是否有任何有效的方法来完成相同的任务?感谢您的 cmets!
select t.id,max(t.s_amt) as s_amt,max(t.s_a_amt) as s_a_amt, max(t.s_b_amt) as s_b_amt
from
(select s1.id,sum(amount) as s_amt,0 as s_a_amt,0 as s_b_amt from sales s1 group by id union all
select s2.id, 0 as s_amt, sum(amount) as s_a_amt, 0 as s_b_amt from sales s2 where ptype='a' group by id union all
select s3.id, 0 as s_amt,0 as s_a_amt, sum(amount) as s_b_amt from sales s3 where ptype='b' group by id) t
group by t.id;
【问题讨论】: