hive使用技巧(五)—— 一行转多行,多行转一行

时间:2022-05-30 10:24:43

相关文章推荐:

hive使用技巧(一)自动化动态分配表分区及修改hive表字段名称
hive使用技巧(二)——共享中间结果集
hive使用技巧(三)——巧用group by实现去重统计

hive使用技巧(四)——巧用MapJoin解决数据倾斜问题

Hive使用技巧(五)—— 一行转多行,多行转一行


在数据处理过程中,经常需要使用一行转多行,多行转一行的变换,oracle中有相应的函数,Hive中也是可以实现的。


数据据集,三个字段 用户IDuserId,设备device,安装列表applist

hive使用技巧(五)—— 一行转多行,多行转一行


1、一行转多行

说明:lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。

create table specter.userapps as
select mid,device,app from specter.userapp_list
lateral view explode(split(applist,',')) r1 AS app;
hive使用技巧(五)—— 一行转多行,多行转一行

2、多行转一行 

说明 :collect_set: 返回去重的元素数组。

select mid,device,collect_set(app) from
(select a.mid,a.device,a.app from specter.userapps a join specter.userapps b
on a.mid = b.mid and a.device=b.device) tmp
group by mid,device;

hive使用技巧(五)—— 一行转多行,多行转一行