HIVE 解析json和jsonarray

一、解析json对象

1、单层
select get_json_object(params,'$.key')

示例:

select stu_id
,get_json_object(score,'$.corse_name') as corse_name
,get_json_object(score,'$.score') as score
from 
(
select 1 as stu_id,'{"corse_name":"c++","score":10}' as score
)a 

结果:

stu_idcorse_namescore
1c++10
2、嵌套多层

select  stu_id
       ,get_json_object(score,'$.family_info')    as family_info
       ,get_json_object(score,'$.family_info.ba') as family_info_ba
from
(
	select  1                                                                                                                                             as stu_id
	       ,'{"stu_id":"stu_id_1","corse_list":[{"corse_name":"c++","score":10},{"corse_name":"mysql","score":20}],"family_info":{"ba":"liu","ma":"li"}}' as score
)a
stu_idfamily_infofamily_info_ba
1{"ba":"liu","ma":"li"}liu
3、解析多个字段:

json_tuple,如果解析的key不存在则为null

select  stu_id
       ,corse_list
       ,family
       ,corse_name
from
(
	select  1                                                                                                                                             as stu_id
	       ,'{"stu_id":"stu_id_1","corse_list":[{"corse_name":"c++","score":10},{"corse_name":"mysql","score":20}],"family_info":{"ba":"liu","ma":"li"}}' as score
)a
lateral view json_tuple(score,'corse_list','family_info','corse_name') tmp as corse_list,family,corse_name
stu_idcorse_listfamilycorse
1[{"corse_name":"c++","score":10},{"corse_name":"mysql","score":20}]{"ba":"liu","ma":"li"}null
二、解析jsonarray 
1、利用brickhouse 里面的json_split :将json格式的数组转成数组类型

--炸开json_array
select  stu_id
       ,get_json_object(score,'$.family_info')    as family_info
       ,get_json_object(score,'$.family_info.ba') as family_info_ba
       ,tmp 
from
(
	select  1                                                                                                                                             as stu_id
	       ,'{"stu_id":"stu_id_1","corse_list":[{"corse_name":"c++","score":10},{"corse_name":"mysql","score":20}],"family_info":{"ba":"liu","ma":"li"}}' as score
)a
lateral view explode(json_split(get_json_object(score,'$.corse_list'))) tmp as tmp
stu_idfamily_infofamily_info_batmp
1{"ba":"liu","ma":"li"}liu{"corse_name":"c++","score":10}
1{"ba":"liu","ma":"li"}liu{"corse_name":"mysql","score":20}
2、利用get_json_object 
select  stu_id
       ,get_json_object(score,'$.corse_list[0]')    as corse_1
       ,get_json_object(score,'$.corse_list[1]') as corse_2
from
(
	select  1                                                                                                                                             as stu_id
	       ,'{"stu_id":"stu_id_1","corse_list":[{"corse_name":"c++","score":10},{"corse_name":"mysql","score":20}],"family_info":{"ba":"liu","ma":"li"}}' as score
)a

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive中,我们可以使用一些内置的函数来解析JSON数据。其中最常用的函数是get_json_object和json_tuple。get_json_object函数用于提取JSON对象中的特定字段值,而json_tuple函数则可以一次解析多个JSON字段。但是这两个函数都无法处理JSON数组的情况。对于处理JSON数组,我们可以使用自定义的serde(序列化/反序列化)来解析。一个常用的serde是json-serde,它可以帮助Hive解析和处理JSON数据。你需要将json-serde.jar添加到Hive的classpath中,并创建一个外部表来指定使用该serde。然后可以使用Hive的查询语句来解析JSON数组中的数据。例如,你可以使用add jar命令将json-serde.jar添加到Hive中,并创建一个表来解析JSON数组数据。具体的使用方法可以参考相关文档或指南。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [学会Hive解析Json数组](https://blog.csdn.net/ytp552200ytp/article/details/125277965)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [hive解析json格式数据所需jar包](https://download.csdn.net/download/ls386239766/8662797)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值