Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 配置单元将列转换为行_Hive - Fatal编程技术网

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 |

以下是我在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  | 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]