hive函数 get_json_object的使用

1,对于jsonArray(json数组),如person表的xjson字段有数据:

[{"name":"王二狗","sex":"男","age":"25"},{"name":"李狗嗨","sex":"男","age":"47"}]

取出第一个json对象,那么hive sql为:

SELECT get_json_object(xjson,"$.[0]") FROM person;

结果是:

 {"name":"王二狗","sex":"男","age":"25"}

取出第一个json的age字段的值:

SELECT get_json_object(xjson,"$.[0].age") FROM person;

结果:

25

总结:

get_json_object(param1,"$.param2")

param1:需要解析的json字段

param2:遇到数组就用 [0,1,2…] 0,1,2是数组对应的元素,遇到jsonObject直接用 ".key"取出想要获取的value。

2,json_tuple(jsonStr, k1, k2, …)

参数为一组键k1,k2,。。。。。和json字符串,返回值的元组。该方法比get_json_object高效,因此可以在一次调用中输入多次键

0: jdbc:hive2://master:10000> select b.b_movie,b.b_rate,b.b_timeStamp,b.b_uid from json a 
lateral view json_tuple(a.data,'movie','rate','timeStamp','uid')b 
as b_movie,b_rate,b_timeStamp,b_uid;

在这里插入图片描述
3,Json数组解析
用Hive自带的函数解析Json数组,Hive的内置的explode函数,explode()函数接收一个 array或者map 类型的数据作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。其可以配合 LATERAL VIEW 一起使用。

hive> select explode(array('A','B','C'));
OK
A
B
C
Time taken: 4.879 seconds, Fetched: 3 row(s)
hive> select explode(map('A',10,'B',20,'C',30));
OK
A       10
B       20
C       30
Time taken: 0.261 seconds, Fetched: 3 row(s)

explode函数和我们解析json数据是有关系的,我们可以使用explode函数将json数组里面的元素按照一行一行的形式输出:

hive> SELECT explode(split(regexp_replace(regexp_replace('[{"website":"www.baidu.com","name":"百度"},{"website":"google.com","name":"谷歌"}]', '\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;'));
OK
{"website":"www.baidu.com","name":"百度"}
{"website":"google.com","name":"谷歌"}
Time taken: 0.14 seconds, Fetched: 2 row(s)

原文链接:https://www.cnblogs.com/yfb918/p/10644262.html

进阶版:多个字段需要一行变多行后解析

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值