假设我们的数据如下所示,表为test表:
A B C
190 [1030,1031,1032,1033,1190] select id
191 [1030,1031,1032,1033,1190] select id
可以看到,我们的B字段是ARRAY类型的,我们假如想把B的每一个元素变成一行,我们可以使用explode函数:
select explode(B) as D from test
这样可以达到如下的目的
D
1030
1031
1032
1033
....
不过假如我们想要达到下面的效果呢?
190 1030 select id
190 1031 select id
190 1032 select id
190 1033 select id
190 1190 select id
191 1030 select id
191 1031 select id
191 1032 select id
191 1033 select id
191 1190 select id
此时,我们再使用下面的hive语句,发现已经不行了,因为explode函数使用时不能再有其他的列:
select A,explode(B),C as D from test
如果想实现上面的效果,正确的做法是使用LATERAL VIEW,hive sql如下:
select A,B,C from test LATERAL VIEW explode(B) table1 as B
lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。