加入收藏 | 设为首页 | 会员中心 | 我要投稿 漯河站长网 (https://www.0395zz.cn/)- 云服务器、混合云存储、网络、内容创作、云渲染!
当前位置: 首页 > 大数据 > 正文

一文了解Hive解析Json数组

发布时间:2021-06-03 15:06:04 所属栏目:大数据 来源:互联网
导读:在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析。接下来就聊聊Hive中是如何解析json数据的。 Hive自带的json解析函数 1. get_json_object
在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析。接下来就聊聊Hive中是如何解析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');  
结果:
name
zhangsan
如果既要解析name字段,也解析age字段,则可以这样写:
select  
get_json_object('{"name":"zhangsan","age":18}','$.name'), 
get_json_object('{"name":"zhangsan","age":18}','$.age'); 
但是如果要解析的字段有很多,再这样写就太麻烦了,所以就有了 json_tuple 这个函数。
2. json_tuple
语法:json_tuple(json_string, k1, k2 ...)
说明:解析json的字符串json_string,可指定多个json数据中的key,返回对应的value。如果输入的json字符串无效,那么返回NULL。
示例:
select  
b.name 
,b.age 
from tableName a lateral view 
json_tuple('{"name":"zhangsan","age":18}','name','age') b as name,age; 
结果:
name age
zhangsan 18
注意:上面的json_tuple函数中没有$.
如果在使用json_tuple函数时加上$.就会解析失败:
select  
b.name 
,b.age 
from tableName a lateral view 
json_tuple('{"name":"zhangsan","age":18}','$.name','$.age') b as name,age; 
结果:
name age
NULL NULL
字段全是NULL,所以json_tuple函数不需要加$.了,否则会解析不到。
总结:json_tuple相当于get_json_object的优势就是一次可以解析多个json字段。但是如果我们有个json数组,这两个函数都无法处理。
Hive解析json数组
一、嵌套子查询解析json数组
如果有一个hive表,表中 json_str 字段的内容如下:
json_str
[{"website":"baidu.com","name":"百度"},{"website":"google.com","name":"谷歌"}]
我们想把这个字段解析出来,形成如下的结构:
website name
baidu.com 百度
google.com 谷歌
要解析这个json数组,仅用上面介绍的两个函数就解析不出来了,还需用到如下介绍的几个函数:
explode函数
语法:explode(Array OR Map)
说明:explode()函数接收一个array或者map类型的数据作为输入,然后将array或map里面的元素按照每行的形式输出,即将hive一列中复杂的array或者map结构拆分成多行显示,也被称为列转行函数。
示例:
-- 解析array 
hive> select explode(array('A','B','C')); 
OK 
-- 解析map 
hive> select explode(map('A',10,'B',20,'C',30)); 
OK 
A       10 
B       20 
C       30 
regexp_replace函数
语法: regexp_replace(string A, string B, string C)
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
示例:
hive> select regexp_replace('foobar', 'oo|ar', '');  
OK 
fb 
上述示例将字符串中的 oo 或 ar 替换为''。

(编辑:漯河站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读