当前位置:   article > 正文

hive json字段解析_hive json解析多层key

hive json解析多层key

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

1. get_json_object()

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

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

2. json_tuple()

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

  1. select A,B,C,dt
  2. from (
  3. select *
  4. from test.table_name t1
  5. lateral view json_tuple(message, 'A','B','C') t2 as A,B,C
  6. where dt='2023-03-01'
  7. ) t
  8. ;

个人测试结论:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/911252
推荐阅读
相关标签
  

闽ICP备14008679号