一、Explode用法
- hive wiki对于expolde的解释如下:
explode() takes in an array (or a map) as an input and outputs the elements of the array (map) as separate rows. UDTFs can be used in the SELECT expression list and as a part of LATERAL VIEW.
explode()接受一个数组(或一个map)作为输入,并将数组元素(map)作为单独的行输出。 UDTF可以在SELECT表达式列表中使用,也可以作为LATERAL VIEW的一部分使用。
使用如下图:
- 将Map作为输入端
- 将ArrayList作为输入端:
二、Lateral View用法
lateral view的意义是配合explode(或者其他的UDTF),一个语句生成把单行数据拆解成多行后的数据结果集。
首先准备一张表test,test表的数据结构如下
利用 lateral view explode 结合map的使用方式和结果如下:
select
t.cola
,t.indexa
,tt.class_id
,tt.score
from test t
LATERAL VIEW explode(map('1',100,'2',200)) tt as class_id ,score
;
输出结果:
结果注解:
test本身只有4条记录, explode(map('1',100,'2',200)) 本身只有2条记录,
上述sql的原理实质上是对2个结果集做了笛卡尔积。
实现形式如下:
select
t1.column1
,t1.column2
,…
,t2.column1
,t2.column2
from tablea t1
lateral view explode(…) t2 as column1,column2
;
利用 lateral view explode 结合array的使用方式和结果如下:
select
t.cola
,t.indexa
,tt.class_id
from test t
lateral view explode(array(1,100)) tt as class_id
;
输出如下: