HiveQL查询操作全解(六):explode函数详解

假设我们的数据如下所示,表为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在把结果组合,产生一个支持别名表的虚拟表。

    原文作者:石晓文的学习日记
    原文地址: https://www.jianshu.com/p/0ecd686267fa
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞