相关文章推荐:
hive使用技巧(一)自动化动态分配表分区及修改hive表字段名称
hive使用技巧(二)——共享中间结果集
hive使用技巧(三)——巧用group by实现去重统计
hive使用技巧(四)——巧用MapJoin解决数据倾斜问题
在数据处理过程中,经常需要使用一行转多行,多行转一行的变换,oracle中有相应的函数,Hive中也是可以实现的。
数据据集,三个字段 用户IDuserId,设备device,安装列表applist
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;
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;