行转多列lateral view explode详解

行转多列lateral view explode详解:

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

1.单个lateral view
源表(table1)数据{A:string B:array<BIGINT>}
A                         B             
190     [1030,1031,1032,1033,1190] 
191     [1030,1031,1032,1033,1190]  

希望得到如下结果:
190    1030   
190    1031   
190    1032   
190    1033   
190    1190   
191    1030   
191    1031   
191    1032   
191    1033   
191    1190   

使用select A,B from table_1 lateral view explode(B) mytable as B 可以得到上述结果。

2.多个lateral view
Array<int> col1     Array<string> col2
[1, 2]              ['a', 'b', 'c']
[3, 4]              ['d', 'e', 'f']

转换目标:想同时把第一列和第二列拆开,类似做笛卡尔乘积。
结果如下:
myCol1  myCol2
1       'a'
1       'b'
1       'c'
2       'a'
2       'b'
2       'c'
3       'd'
3       'e'
3       'f'
4       'd'
4       'e'
4       'f'

select mycol1, mycol2 from basetable
lateral view explode(col1) mytable1 as mycol1
lateral view explode(col2) mytable2 as mycol2;

3.复杂方式:
select * from tb_split;

20141018  aa|bb  7|9|0|3
20141019  cc|dd  6|1|8|5

使用方式:select datenu,des,type from tb_split 
lateral view explode(split(des,"//|")) tb1 as des
lateral view explode(split(type,"//|")) tb2 as type
执行过程是先执行from到as cloumn的列过程,再执行select 和where后边的语句。
  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值