有没有什么方法可以对 Apache Hive 中的explode() 函数执行相反的操作。
假设我有一张这种形式的表格id int, description string, url string, ...
我想从这个表中创建一个看起来像这样的表id int, json string
在哪里json
列将所有其他列存储为 json。"description":"blah blah", "url":"http:", ...
Hive 可以访问一些字符串操作 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions可用于将多列合并为一列
SELECT id, CONCAT(CONCAT("(", CONCAT_WS(", ", description, url)), ")") as descriptionAndUrl
FROM originalTable
显然,将许多列组合成有效的 JSON 会很快变得复杂。如果这是其中之一,并且您知道所有 JSON 字符串都具有相同的属性,那么您可能只需使用 CONCAT 即可达到您的目的。
“正确”的方法是写一个用户定义函数 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF它获取列列表并输出 JSON 字符串。如果您需要添加列或对其他表执行相同的操作,这将更易于维护。
很可能有人已经写了一个你可以使用的,所以你应该四处看看。不幸的是 [Hive 提供的 JSON 相关 UDF]https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object)从 JSON 字符串开始工作,但他们不制作它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)