HIVE常用函数的用法之JSON解析下

HIVE常用函数之JSON_TUPLE

如果JSON为空或者为非法的JSON格式,返回NULL。
如果键Key为空或者不合法(JSON中不存在)返回NULL。
如果JSON合法,键Key也存在,则返回对应字符串。
支持包含中文的JSON数据解析。
支持多层嵌套的JSON数据解析。
支持包含多重嵌套的数组的JSON数据解析。
在需要对同一个JSON字符串多次解析的情况下,相比于多次调用GET_JSON_OBJECT,JSON_TUPLE可以一次输入多个Key,且JSON字符串只被解析一次,效率更高。
JSON_TUPLE是UDTF,在需要选取其他列时应配合LATERAL VIEW使用。

Table:school
±-----------±-----------+
| Id | json |
±-----------±-----------+
| 1 | {
“校名”: “湖畔大学”,
“地址”:“杭州”,
“SchoolRank”: “00”,
“Class1”:{
“Student”:[{
“studentId”:1,
“scoreRankIn3Year”:[1,2,[3,2,6]]
}, {
“studentId”:2,
“scoreRankIn3Year”:[2,3,[4,3,1]]
}]}
} |
±-----------±-----------+
hive>SELECT JSON_TUPLE(school.json,“SchoolRank”,“Class1”) AS (item0,item1) FROM school;
–相当于
SELECT GET_JSON_OBJECT(school.json," . S c h o o l R a n k " ) i t e m 0 , G E T J S O N O B J E C T ( s c h o o l . j s o n , " .SchoolRank") item0,GET_JSON_OBJECT(school.json," .SchoolRank")item0,GETJSONOBJECT(school.json,".Class1") item1 FROM school;

–返回值为
±------±------+
| item0 | item1 |
±------±------+
| 00 | {“Student”:[{“studentId”:1,“scoreRankIn3Year”:[1,2,[3,2,6]]},{“studentId”:2,“scoreRankIn3Year”:[2,3,[4,3,1]]}]} |
±------±------+
hive>SELECT JSON_TUPLE(school.json,“校名”,“地址”) AS (item0,item1) FROM school;
–返回值
±------±------+
| item0 | item1 |
±------±------+
| 湖畔大学 | 杭州 |
±------±------+
hive>SELECT sc.Id, q.item0, q.item1
FROM school sc LATERAL VIEW JSON_TUPLE(sc.json,“Class1.Student.[*].studentId”,“Class1.Student.[0].scoreRankIn3Year”) q AS item0,item1;

–返回值
±-----------±------±------+
| id | item0 | item1 |
±-----------±------±------+
| 1 | [1,2] | [1,2,[3,2,6]] |
±-----------±------±------+
hive>SELECT sc.Id, q.item0, q.item1
FROM school sc LATERAL VIEW JSON_TUPLE(sc.json,“Class1.Student[0].scoreRankIn3Year[2]”,“Class1.Student[0].scoreRankIn3Year[2][1]”) q AS item0,item1;
–返回值
±-----------±------±------+
| id | item0 | item1 |
±-----------±------±------+
| 1 | [3,2,6] | 2 |
±-----------±------±------+

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值