在Hive中将多个列的内容合并成一个列

5
有没有办法在Apache Hive中对explode()函数进行反向操作?假设我有一个表格,格式如下:id int, description string, url string, ...。我想要创建一个新表格,格式为id int, json string,其中json列存储所有其他列的json数据。"description":"blah blah", "url":"http:", ...
2个回答

11
Hive拥有一些字符串操作,可以将多个列合并为一个列。
SELECT id, CONCAT(CONCAT("(", CONCAT_WS(", ", description, url)), ")") as descriptionAndUrl 
FROM originalTable

这很明显会很快变得复杂,因为需要将许多列合并成有效的JSON。如果只是一次性的操作,并且您知道所有JSON字符串都具有相同的属性,则可以尝试使用CONCAT。
“正确”的方法是编写一个用户定义函数,它接受列列表并生成JSON字符串。如果您需要添加列或对其他表执行相同的操作,这将更易于维护。
很可能已经有人编写了您可以使用的函数,所以您应该四处寻找。不幸的是,Hive提供的[与JSON相关的UDF](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object)仅适用于JSON字符串,而不能生成它们。

1
你可以使用Hive中的CONCAT_WS连接字符串变量
从TABLE中选择CONCAT_WS(' - ','string1','string2','string3')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接