Hive 将 JSON 数组中的每个 JSON 元素分解为行
Posted
技术标签:
【中文标题】Hive 将 JSON 数组中的每个 JSON 元素分解为行【英文标题】:Hive explode each JSON element in JSON array to rows 【发布时间】:2020-06-22 10:19:03 【问题描述】:我已经收集了 JSON 数据,例如:
"body":"metrics":["a":1,"a1":1.1,"properties":"propA":"name","propB":"age","b":2]
"body":"metrics":["c":3]
我可以使用select get_json_object(get_json_object(columnA,'$.Body'),'$.metrics') from...
来提取嵌套的 json 数组,例如:
["a":1,"a1":1.1,"a2":"propA":"name","propB":"age","b":2]
["c":3]
我想将它们转换成如下行:
"a":1,"a1":1.1,"a2":"propA":"name","propB":"age"
"b":2
"c":3
get_json_object
返回的数组似乎是字符串,当我使用later view
时,它总是说:
UDFArgumentException explode() takes an array or a map as a parameter
每个数组的长度是不确定的,我无权将 jar 文件上传到活动的新 udf 或 serde 类。如何实现这一点...
【问题讨论】:
你是说这是 STRING: ["a":1,"b":2] 吗? @leftjoin 感谢您的回复。我不确定......它是由get_json_object
返回的,它看起来像字符串......或者你有更好的主意吗?顺便说一句,我刚刚修改了原来的问题帖子。
【参考方案1】:
假设您的 json 在表 test
中。您可以使用以下查询来获得所需的输出:
select m.* from test s
LATERAL view explode(split(regexp_replace(get_json_object(value,'$.body.metrics'),'^\\[|]$',''), ',(?!")')) m
【讨论】:
以上是关于Hive 将 JSON 数组中的每个 JSON 元素分解为行的主要内容,如果未能解决你的问题,请参考以下文章