解析Hive复杂字段1--lateral view explode

一次比较复杂的从Hive复杂格式字段解析出多个hotelid的过程

1.源数据

《解析Hive复杂字段1--lateral view explode》
《解析Hive复杂字段1--lateral view explode》

2.所需数据信息在value字段中,value字段是json格式,首先要提取出该字段中的htllist信息

get_json_object(value,’$.htllist’)

3.get_json_object的返回值是string格式,具体信息如下

《解析Hive复杂字段1--lateral view explode》
《解析Hive复杂字段1--lateral view explode》

字符串前后有'[‘和’]’,每个{}内是单个酒店的信息,{}之前以’,’分隔

4.为了之后把每个{}分隔出来,需要先将’,’分隔符替换成’|’分隔符,并且将'[]’替换成‘’

regexp_replace(regexp_replace(get_json_object(value,’$.htllist’),’},’,’}\\|’),’\\]|\\[‘,”)

5.将上一步得到的字符串按照’|’分隔,得到每个酒店信息的数组

lateral view explode(split(m.htllist,’\\|’)) n as htlinfo

6.str_to_map函数将酒店信息数组的每个元素转换成map格式,取其中的[‘hotelid’]信息

str_to_map(regexp_replace(n.htlinfo,’\\}|\\{|”‘,”),’,’,’:’)[‘hotelid’]

7.完整的提取sql如下

select str_to_map(regexp_replace(n.htlinfo,’\\}|\\{|”‘,”),’,’,’:’)[‘hotelid’] htlinfo,m.vid,m.sid,m.pvid,m.uid,m.cid

  from (select regexp_replace(regexp_replace(get_json_object(value,’$.htllist’),’},’,’}\\|’),’\\]|\\[‘,”) htllist,vid,sid,pvid,uid,cid

          from table_xxx

        where d=’2018-08-08′

          and pagecode=’condition1′

          and key =’condition2′ limit 100)m

  lateral view explode(split(m.htllist,’\\|’)) n as htlinfo

where m.htllist is not null

    原文作者:风筝flying
    原文地址: https://www.jianshu.com/p/f93adc8c57d0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞