apache-spark - 用于在 json 中爆炸的值列表的 Hive 查询
问题描述
杰森
{
"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的 jsons 列表。我能够获得这些值,但我无法像单独的值一样将其拆分出来。
查询我使用
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"
解决方案
尝试以下查询。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
)
推荐阅读
- google-compute-engine - TPU突然停止训练
- batch-file - 批处理脚本备份 USB 中的文件
- mysql - 为返回 2 行和 1 行 2 列的特定用户查询模拟 Facebook SQL 数据库的性别和位置?
- html - 点击 ionic4 全屏图像
- r - “i”在for循环中遍历R中的对象列表时表示的对象的访问名称
- react-native - React Native Text Input 固定文本
- java - Java For 循环三角形模式
- ios - 为什么我的 swift 项目在我的设备和模拟器上看起来不同?
- c# - 如何将 ContentControl.Range 设置为我正在使用的当前 ContentControl?
- python - 我的卷积神经网络如何只给通道数而没有高度和宽度?