Hive - 从另一个非嵌套的Hive表创建嵌套的Hive表

时间:2016-10-05 19:14:17

标签: json hadoop hive nested

我有一个蜂巢表 - 表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,来自其每个伙伴的所有数据都被分组到一列中。

我有两个问题:

  1. 如何从表A创建表B?
  2. 如何将表B转换为JSON文档,以便将文档加载到任何NOSQL数据库中?
  3. 非常感谢任何帮助。谢谢!

1 个答案:

答案 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