hive中,行转列,json组解析


hive中常规处理json数据,array类型json用get_json_object(#,"$.#")这个方法足够了,map类型复合型json就需要通过数据处理才能解析。

explode:字段行转列

select explode(split(字段,',')) as abc from explode_lateral_view;

select explode(split(字段,',')) as abc from explode_lateral_view;

LATERAL VIEW:单行数据拆解成多行数据
侧视图的意义是配合explode(或者其他的UDTF),一个语句生成把单行数据拆解成多行后的数据结果集。

select get_json_object(concat('{',sale_info_r,'}'),'$.monthSales') as monthSales from explode_lateral_view 
LATERAL VIEW explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{'))sale_info as sale_info_r;

统一版

通过下面的句子,把这个json格式的一行数据,完全转换成二维表的方式展现

select t1.id ,get_json_object(col,'$.key') as value ,get_json_object(col,'$.key') as value
from 
(select id,s.col as col from table_a
lateral view explode(split(regexp_replace(regexp_extract(json,'^\\[(.+)\\]$',1),'\\}\\,|[, ]{0,1}\\{', '\\}\\|\\|\\{'),'\\|\\|')) s as col ) t1 

或者另一版本

select get_json_object(concat('{',sale_info_1,'}'),'$.source') as source,
     get_json_object(concat('{',sale_info_1,'}'),'$.monthSales') as monthSales, get_json_object(concat('{',sale_info_1,'}'),'$.userCount') as monthSales, get_json_object(concat('{',sale_info_1,'}'),'$.score') as monthSales from explode_lateral_view LATERAL VIEW explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{'))sale_info as sale_info_1

hive  数据转成json数据组

concat('{\"name\":\"',name,'\",\"cus_nam\":\"',NVL(t2.cus_nam, ''),
'\",\"orderNo\":\"',
NVL(orderNo, ''),
'\",\"ord_no\":\"',
NVL(t1.ord_no, ''),
'\",\"trigger\":\"',
NVL(trigger, ''),
'\",\"assignmentOfClaims\":\"',
NVL(assignmentOfClaims, ''),
'\"}') as value

通过get_json_object函数解析,测试无误

hive 正则匹配

regexp_extract(字段,正则表达式,序号)

匹配样例

select regexp_extract('honey123moon', 'hon([0-9]+)(moon)', 0)
select regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','x=([0-9]+)([a-z]+)',1)

 

其他:

hive高阶函数工具:窗口函数

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM