2017-06-05 674 views
0

我想将下表转换为具有两行的新表。在新表中,每个user_id都有一个JSON文件来汇总第一个表中的所有其他列。如何为HIVE中的每个组将多个列聚合为JSON文件

user_id reservation_id nights price AAA 10001 1 100 AAA 10002 1 120 BBB 20003 7 350 user_id reservation_details AAA {10001:{'nights':1, 'price':100}, 10002:{'nights':1, 'price':120}} BBB {20003:{'nights':7, 'price':350}}

回答

1
select  user_id 
      ,concat("{",concat_ws(',',collect_list(concat(string(reservation_id),":{'nights':",string(nights),",'price':",string(price),"}"))),"}") as reservation_details 

from  mytable 

group by user_id  

+---------+-----------------------------------------------------------------+ 
| user_id |      reservation_details      | 
+---------+-----------------------------------------------------------------+ 
| AAA  | {10001:{'nights':1,'price':100},10002:{'nights':1,'price':120}} | 
| BBB  | {20003:{'nights':7,'price':350}}        | 
+---------+-----------------------------------------------------------------+ 
+0

谢谢!有点扭曲使得它通过用'cast(varname as string)替换'string(varname)'来实现HIVE'' –

+0

不客气:-)这是一个经过测试的代码。你使用的是什么Hive版本? –

+0

hive-common-0.13.1-cdh5.3.3.jar –