hive json字段解析

        在写Hive SQL时,需要从一个json列中解析出多个key的信息,可以使用get_json_object或json_tuple。

1. get_json_object()

        是个UDF,在Mapper阶段的列投影时完成获取解析json的操作,如果要获取多个key,那么json字段就要解析多次但比较常用

select get_json_object(msg, '$.A') as A
,get_json_object(msg, '$.B') as B
,get_json_object(msg, '$.C.C1') as C1 -- 多层json嵌套,有时可能不太好用
-- ,get_json_object(get_json_object(msg, '$.C'), '$.C1') as C1
,dt
from test.table_name
where dt='2023-03-01';

2. json_tuple()

        在Hive里面是使用UDTF来实现的,即普通的一行转多行。它会生成两个Select Operator 操作,一个扫描不用解析的数据,生成一行,另外一个扫描需要解析的数据进行解析,然后再使用Lateral View Join Operator 操作将这两部分数据join关联起来。但这里的Join并不会真正触发Shuffle的join,只是将非UDTF和UDTF字段通过ArrayList的addAll()连接在一起而已。

select A,B,C,dt
from (
    select *
    from test.table_name t1
    lateral view json_tuple(message, 'A','B','C') t2 as A,B,C
    where dt='2023-03-01'
) t
;

个人测试结论:

        json_tuple 对于从json字段中解析的key特别多时(50个以上的key),性能要高于get_json_object! 否则性能并不乐观。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值