我有一个蜂巢表 - 表A如下:
id | partner | recent_use | count |
1 | ab | 20160101 | 5 |
1 | cd | 20160304 | 12 |
2 | ab | 20160205 | 1 |
2 | cd | 20150101 | 2 |
3 | ab | 20150401 | 4 |
从表A中,我想得到一个这样的表 - 表B:
id | partner |
1 | [ ab : { recent_use:20160101, count:5 } , cd : { recent_use:20160304, count:12 } ]
2 | [ ab : { recent_use:20160205, count:1 } , cd : { recent_use:20150101, count:2 } ]
3 | [ ab : { recent_use:20150401, count:4 } ]
基本上,表B是表A的嵌套版本,因此对于给定的id,来自其每个伙伴的所有数据都被分组到一列中。
我有两个问题:
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
简单地实现这一点是使用UDAF - 用户定义的聚合函数。您可以编写自定义函数以简化操作。这是你可以使用内置函数的一些东西。试一试。
选择id,CONCAT(“[”,concat_ws(',',collect_set(CONCAT('“',partner, '“:{”recent_use“:',recent_use,',”count“:',count,”}“))),”]“)as 来自tableA group by id
的collJ
上面的SQL将获取您要查找的字符串中的ID和collJ,之后可以使用get_json_object函数转换为JSON对象。
参考
https://www.qubole.com/resources/cheatsheet/hive-function-cheat-sheet/
https://cwiki.apache.org/confluence/display/Hive/GenericUDAFCaseStudy