hive将列转换为行

时间:2014-07-12 05:29:18

标签: hive

以下是我在蜂巢中的数据:

客户

 id |  name
 ---+-------
 1  |  n1
 2  |  n2

订单

oid | cid | amt
----+-----+----
 1  |  1  | 10
 2  |  1  | 20
 3  |  1  | 30
 4  |  2  | 10

我想得到这样的东西:

cid,avg(amt),oid1,oid2,oid3 ......等

换句话说,我希望每行custid,平均值和所有与cid相关联的订单ID排成一行。

我想出了类似的东西:

select c.id,avg(o.amt),.... from customers c join orders o on c.id = o.cid;

可以请一些人填写如何实现这一点。

1 个答案:

答案 0 :(得分:1)

每个订单ID都有一个列很难(我假设每个客户的订单数量会有不同的数量),但您可以将它们收集到一个数组并使其成为自己的列。此外,您说您想要custidavg_amt和所有订单;由于这不包括name,因此您不需要加入customersorders

<强>查询

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]