将多列中的列合并到Hive中

use*_*986 4 hadoop hive

有没有办法为Apache Hive中的explode()函数做一些反向的事情.假设我有一张这种形式的表格id int, description string, url string, ...

而从这个表我想创建表看上去像id int, json string凡在json列存储的所有其他列的JSON."description":"blah blah", "url":"http:", ...

Dan*_*man 9

Hive可以访问一些字符串操作,可用于将多个列组合成一列

SELECT id, CONCAT(CONCAT("(", CONCAT_WS(", ", description, url)), ")") as descriptionAndUrl 
FROM originalTable
Run Code Online (Sandbox Code Playgroud)

对于将许多列组合成有效的JSON,这显然会变得很复杂.如果这是一个并且您知道所有JSON字符串将具有相同的属性,您可能只为了您的目的而使用CONCAT.

执行此操作的"正确"方法是编写用户定义函数,该函数获取列列表并吐出JSON字符串.如果您需要添加列或对其他表执行相同的操作,这将更易于维护.

可能有人已经写了一个你可以使用的,所以你应该环顾四周.不幸的是,[Hive提供的JSON相关UDF] https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object)可以使用JSON字符串,但它们不能生成它们.