Hive 配置单元将列转换为行
以下是我在hive中的数据: 客户Hive 配置单元将列转换为行,hive,Hive,以下是我在hive中的数据: 客户 id | name ---+------- 1 | n1 2 | n2 oid | cid | amt ----+-----+---- 1 | 1 | 10 2 | 1 | 20 3 | 1 | 30 4 | 2 | 10 订单 id | name ---+------- 1 | n1 2 | n2 oid | cid | amt ----+-----+---- 1 | 1 |
id | name
---+-------
1 | n1
2 | n2
oid | cid | amt
----+-----+----
1 | 1 | 10
2 | 1 | 20
3 | 1 | 30
4 | 2 | 10
订单
id | name
---+-------
1 | n1
2 | n2
oid | cid | amt
----+-----+----
1 | 1 | 10
2 | 1 | 20
3 | 1 | 30
4 | 2 | 10
我想得到这样的东西:
select c.id,avg(o.amt),.... from customers c join orders o on c.id = o.cid;
cid、平均(金额)、oid1、oid2、oid3……等
换句话说,我希望每个custid
、平均金额以及与cid
关联的所有订单id都排在一行中
我想出了这样的办法:
select c.id,avg(o.amt),.... from customers c join orders o on c.id = o.cid;
请有人填写如何实现这一点。很难为每个订单id设置一列(我假设每个客户的订单数量不同),但您可以将它们收集到一个数组中,并将其设置为自己的列。另外,你说你要的是
custid
,avg_amt
,以及所有订单;由于这不包括名称
,您不需要将客户
加入到订单
查询
select cid
,AVG(amt) as avg_amt
,collect_list(oid) as orders_array
from customers
group by cid;
输出
1 20 [1,2,3]
2 10 [4]