解析Hive复杂字段1--lateral view explode
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析Hive复杂字段1--lateral view explode相关的知识,希望对你有一定的参考价值。
参考技术A 一次比较复杂的从Hive复杂格式字段解析出多个hotelid的过程1. 所需数据信息在value字段中,value字段是json格式,首先要提取出该字段中的htllist信息
get_json_object(value,'$.htllist')
2. get_json_object的返回值是string格式,具体信息如下
字符串前后有'['和']',每个内是单个酒店的信息,之前以','分隔
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
hive中lateral view json_tuple的用法
参考技术A select * from t1 lateral view json_tuple(t1.info,'apply_time','pro_code') t2 as apply_time,pro_code意思是:t1中的info信息通过lateral view进行进行解析。
lateral view:如果指定字段名则需要把lateral view查询出的列写到select中,才能在结果中出现;如果直接是select * 则自动会把lateral view查询出的列追加在后面。
要确保被解析的字段是string类型才可以使用json解析.解析map类型不能使用json解析,解析map类型可以使用col_name['key']获取对应key的value.
hive解析json\tuple网址:
https://blog.csdn.net/u010002184/article/details/89639422
hive解析json网址:
https://blog.csdn.net/qq_34105362/article/details/80454697
以上是关于解析Hive复杂字段1--lateral view explode的主要内容,如果未能解决你的问题,请参考以下文章
hive中lateral view json_tuple的用法
Hive中grouping sets与lateral view explode的用法