阿里P8深夜总结!之如何在 Apache Hive 中解析 Json 数组

阿里P8深夜总结!之如何在 Apache Hive 中解析 Json 数组注意:json_tuple 相对于 get_json_object 的优势就是一次可以解析多个 Json 字段。

欢迎大家来到IT世界,在知识的湖畔探索吧!

阿里P8深夜总结!之如何在 Apache Hive 中解析 Json 数组

如何在 Apache Hive 中解析 Json 数组

Hive 内部提供了大量的内置函数用于处理各种类型的需求。从内置的 UDF 可以看到两个用于解析 Json的函数:get_json_object json_tuple。用过这两个函数的肯定知道,其只能解析最普通的 Json 字符串,如下:

select get_json_object(‘{“website”:”www.cnss.cn”,”name”:”juying”}’, ‘$.website’);

select json_tuple(‘{“website”:”www.cnss.cn”,”name”:”juying”}’, ‘website’, ‘name’);

注意:json_tuple 相对于 get_json_object 的优势就是一次可以解析多个 Json 字段。

如果我们有个 Json 数组,这两个函数都无法处理,get_json_object 处理 Json 数组的功能很有限

select get_json_object(‘[{“website”:”www.cnss.cn”,”name”:”juying”},

{“website”:”cloud.cnss.com”,”name”:”juying 中文文档”}]’, ‘$.[1].website’);

注意:如果我们想将整个 Json 数组里面的 website 字段都解析出来,如果这么写将非常麻烦,因为我们无法确定数组的长度,而且即使确定了,这么写可维护性也很差,所以我们需要想别的办法。

使用explode函数解析json数组

explode() 接收一个 array map 类型的数据作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。其可以配合 LATERAL VIEW 一起使用。

语句举例一:

select json_tuple(json, ‘website’, ‘name’)

from

(SELECT explode(split(regexp_replace(regexp_replace(‘[{“website”:”www.cnss.cn”,”name”:”juying”},{“website”:”cloud.cnss.com”,”name”:”carbondata 中文文档”}]’, ‘},{‘,’};{‘),'[|]’,”),’;’)) as json) cnss;

语句举例二:

select explode(split(regexp_replace(regexp_replace(‘[{“website”:”www.cnss.cn”,”name”:”juying”},

{“website”:”cloud.cnss.com”,”name”:”carbondata 中文文档”}]’, ‘},{‘,’};{‘),'[|]’,”),’;’)) as json

解释:

regexp_replace(‘json数组’, ‘},{‘,’};{‘) ====》把json数组中的分隔符替换成为;分号

regexp_replace(‘qweqw’,'[|]’,”) ====》 |表示or 把json中的[或者]替换成为空

sql语法解释:

explode 函数只能接收数组或 map 类型的数据,而 split 函数生成的结果就是数组;


语句举例一 regexp_replace 的作用是将 Json 数组元素之间的逗号换成分号,,

regexp_replace(‘[{“website”:”www.cnss.cn”,”name”:”juying”},{“website”:”cloud.cnss.com”,”name”:”carbondata 中文文档”}]’, ‘},{‘,’};{‘)

语句举例二 regexp_replace 的作用是将 Json 数组两边的中括号去掉,所以使用完这个函数之后

regexp_replace(regexp_replace(‘[{“website”:”www.cnss.cn”,”name”:”juying”},{“website”:”cloud.cnss.com”,”name”:”carbondata 中文文档”}]’, ‘},{‘,’};{‘),'[|]’,”)

如果觉得对你有所帮助。记得收藏和关注呦!(每日更新各种大数据框架)

如需转载请注明出处(创作不易请见谅)

和巨婴程序猿一起成长。让自己变得更优秀

阿里P8深夜总结!之如何在 Apache Hive 中解析 Json 数组

想了解更多精彩内容,快来关注跟着巨婴去逆袭

我最近一直在思考(大数据通俗讲解)的问题,你的看法是什么呢?关注我快说出来一起交流一下吧~

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/31652.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信