用于在 json 中爆炸的值列表的 Hive 查询
Posted
技术标签:
【中文标题】用于在 json 中爆炸的值列表的 Hive 查询【英文标题】:Hive query for exploding list of values in a json 【发布时间】:2020-12-17 21:59:34 【问题描述】:Json
"Event": "StudentMarks",
"Marks Info":
"Marks": [
"ID": 1,
"Name": "Sub1",
"Value": "95"
,
"ID": 2,
"Name": "Sub2",
"Value": "96"
,
"ID": 3,
"Name": "Sub3",
"Value": 100
]
,
"Grade":
"metric": "pass"
我正在尝试获取 Marks Info json 下的值,其中包含带有键 Marks 的 json 列表。我能够获得这些值,但我无法像单独的值一样将其拆分出来。
查询我使用
select Student_ID, get_json_object(get_json_object(json_blob,'$.Marks Info'), '$.Marks[*].Value') from my_table where my_condition;
Student_ID |get_json_object(get_json_object(json_blob, '$.Marks Info'), '$.Marks[*].Value')
1 | ["95","96,100"]
所需输出
我希望列名应该是这样的 Sub1 Sub2 Sub2 Grade 并且值应该从列表中爆炸 ["95","96,100"]
有人可以帮我解决这个问题吗?
Student_ID | Sub1 | Sub2| Sub2 | Grade
1 | "95" | "96"| 100 | "pass"
【问题讨论】:
【参考方案1】:尝试以下查询。 get_json_object 返回一个字符串,所以你需要摆弄它才能得到你想要的。
select
Student_ID,
trim('[]"', x[0]) sub1,
trim('[]"', x[1]) sub2,
trim('[]"', x[2]) sub3,
grade
from (
select
Student_ID,
split(get_json_object(json_blob, '$.Marks Info.Marks[*].Value'), ',') x,
get_json_object(json_blob, '$.Grade.metric') grade
from my_table
)
【讨论】:
以上是关于用于在 json 中爆炸的值列表的 Hive 查询的主要内容,如果未能解决你的问题,请参考以下文章