将多列中的列合并到Hive中

时间:2013-04-15 07:15:04

标签: hadoop hive

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

从这个表中我想创建一个类似于id int, json string的表,其中json列将所有其他列存储为json。 "description":"blah blah", "url":"http:", ...

2 个答案:

答案 0 :(得分:9)

Hive可以访问某些string operations,可用于将多个列合并为一列

SELECT id, CONCAT(CONCAT("(", CONCAT_WS(", ", description, url)), ")") as descriptionAndUrl 
FROM originalTable

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

执行此操作的“正确”方法是编写User Defined Function,其中包含列列表并吐出JSON字符串。如果您需要添加列或对其他表执行相同的操作,这将更易于维护。

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

答案 1 :(得分:1)

您可以使用HIve

中的CONCAT_WS连接字符串变量

SELECT CONCAT_WS(' - ','string1','string2','string3')  FROM TABLE