欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Hive之解析Json数组

时间:2023-04-22
目录

Hive自带的json解析函数

1、get_json_object函数2、json_tuple函数 Hive解析json数组

一、嵌套子查询解析json数组二、使用 lateral view 解析json数组 Hive自带的json解析函数 1、get_json_object函数

语法:get_json_object(json_string, ‘$.key’)

说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。这个函数每次只能返回一个数据项。

示例:

select get_json_object('{"name":"zhangsan","age":18}','$.name'),--get_json_object('{"name":"zhangsan","age":18}','$.age'); namezhangsan

2、json_tuple函数

语法:json_tuple(json_string, k1, k2 …)

说明:解析json的字符串json_string,可指定多个json数据中的key,返回对应的value。如果输入的json字符串无效,那么返回NULL。

示例:

hive>select b.name,b.agefrom tableName a lateral viewjson_tuple('{"name":"zhangsan","age":18}','name','age') b as name,agenameagezhangsan18

注意:上面的json_tuple函数中没有$.
总结:json_tuple相当于get_json_object的优势就是一次可以解析多个json字段。但是如果我们有个json数组,这两个函数都无法处理。

Hive解析json数组

如果有一个hive表,表中 json_str 字段的内容如下:

json_str
[{“website”:“baidu.com”,“name”:“百度”},{“website”:“google.com”,“name”:“谷歌”}]
我们想把这个字段解析出来,形成如下的结构:

website name
baidu.com 百度
google.com 谷歌

一、嵌套子查询解析json数组

hive>select json_tuple(json, 'website', 'name') from (select explode(split(regexp_replace(regexp_replace('[{"website":"baidu.com","name":"百度"},{"website":"google.com","name":"谷歌"}]', '\[|\]',''),'\}\,\{','\}\|\{'),'\|')) as json) t;www.baidu.com 百度google.com 谷歌

二、使用 lateral view 解析json数组

hive表中 goods_id 和 json_str 字段的内容如下:

goods_id json_str
1,2,3 [{“source”:“7fresh”,“monthSales”:4900,“userCount”:1900,“score”:“9.9”},{“source”:“jd”,“monthSales”:2090,“userCount”:78981,“score”:“9.8”},{“source”:“jdmart”,“monthSales”:6987,“userCount”:1600,“score”:“9.0”}]
目的:把 goods_id 字段和 json_str 字段中的monthSales解析出来。

hive>select good_id,get_json_object(sale_json,'$.monthSales') as monthSalesfrom tableName LATERAL VIEW explode(split(goods_id,','))goods as good_id LATERAL VIEW explode(split(regexp_replace(regexp_replace(json_str , '\[|\]',''),'\}\,\{','\}\;\{'),'\;')) sales as sale_json;goods_idmonthSales149001209016987249002209026987349003209036987

参考链接:https://mp.weixin.qq.com/s?src=http://www.kaotop.com/skin/sinaskin/image/nopic.gif>eynmozDA-6WeYEZvLTb8Sl6LVFwTnUTGp4gsVvRoEhT4AHA43bXMpqrjfnOGTL&new=1

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。