博客
关于我
hive中的lateral view 与 explode函数的使用
阅读量:798 次
发布时间:2023-04-02

本文共 2018 字,大约阅读时间需要 6 分钟。

在关系型数据库中,explode与lateral view的使用本身就是在操作不满足第一范式的数据,这种情况在传统的业务系统或数据仓库中通常被避免。然而随着大数据技术的普及,许多类似PV、UV的数据在业务系统中被存储在非关系型数据库中,使用JSON格式的概率越来越大。这种数据直接导入Hive基础的数仓系统时,通常需要经过ETL过程解析,explode与lateral view在这种场景中就显得尤为重要。

explode的作用

explode主要用于处理map结构的字段。以下是一个使用Hive的示例:

建表语句

drop table explode_lateral_view;create table explode_lateral_view (  `area` string,  `goods_id` string,  `sale_info` string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '|'STORED AS textfile;

导入数据

a:shandong,b:beijing,c:hebei|1,2,3,4,5,6,7,8,9|[{"source":"7fresh","monthSales":4900,"userCount":1900,"score":"9.9"},{"source":"jd","monthSales":2090,"userCount":78981,"score":"9.8"},{"source":"jdmart","monthSales":6987,"userCount":1600,"score":"9.0"}]

explode的使用

我们可以使用explode来拆解array字段:

select explode(split(goods_id, ',')) as goods_id from explode_lateral_view;

同样,可以拆解map字段:

select explode(split(area, ',')) as area from explode_lateral_view;

拆解json字段

对于更复杂的json数据,可以结合get_json_object进行处理。例如,为了提取monthSales字段:

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

然而,UDTF(用户定义的转换函数)不能直接嵌套使用。如果需要同时处理多个字段,lateral view就成为必要的工具。

lateral view的使用

lateral view的作用是配合UDTF(如explode)生成多行数据结果集。例如:

select goods_id2,sale_info from explode_lateral_view lateral view explode(split(goods_id, ',')) goods as goods_id2;

这种方式通过笛卡尔积的方式将结果与原表关联,非常适合多字段拆解场景。

复杂数据处理

对于更复杂的json数据,可以通过以下方式实现全面的数据转换:

select   get_json_object(concat('{',sale_info_r,'}'),'$.source') as source,  get_json_object(concat('{',sale_info_r,'}'),'$.monthSales') as monthSales,  get_json_object(concat('{',sale_info_r,'}'),'$.userCount') as userCount,  get_json_object(concat('{',sale_info_r,'}'),'$.score') as score from explode_lateral_view lateral view explode(split(regexp_replace(regexp_replace(sale_info,'\\[\\{',''),'}]',''),'},\\{')) sale_info as sale_info_r;

这种方法能够将json格式的数据完整转换为结构化表格,实现数据的可用性提升。

总结

在处理非结构化数据时,explode和lateral view是Hive中非常实用的工具。通过合理搭配这些技术,可以有效地将复杂的json数据转换为结构化表格,提升数据分析的效率。

转载地址:http://bqefk.baihongyu.com/

你可能感兴趣的文章
P1865 A % B Problem
查看>>
P1908 逆序对
查看>>
P2158 [SDOI2008]仪仗队
查看>>
P2161 [SHOI2009]Booking 会场预约
查看>>
P2260 [清华集训2012]模积和
查看>>
P2x与P3x的区别
查看>>
P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?
查看>>
P3240 [HNOI2015]实验比较 树形DP
查看>>
SpringBoot中集成Minio高性能分布式存储文件服务入门
查看>>
P3383 素数筛
查看>>