在配置单元中将多列中的列合并为一列

iih3973s  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(567)

在ApacheHive中,是否有任何方法可以对explode()函数执行反向操作。假设我有一张这样的table id int, description string, url string, ... 从这个表中,我想创建一个 id int, json string 在哪里 json 列将所有其他列存储为json。 "description":"blah blah", "url":"http:", ...

polhcujo

polhcujo1#

配置单元可以访问一些字符串操作,这些操作可用于将多个列合并到一个列中

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-从json字符串中获取(json对象),它们不会生成json字符串。

pkwftd7m

pkwftd7m2#

可以在配置单元中使用concat\u ws连接字符串变量
从表中选择concat\u ws('-','string1','string2','string3')

相关问题