二.explode和lateral view的使用
这两个参数通常是一起搭配使用,所以放一起说明。
explode作用于数组array和map,将其从行数据,转为列数据
2.数据样例:
array('A','B','C')
2.1使用explode
数组行转列
explode(array('A','B','C'))
>>>
col
A
B
C
Map行转列
explode(map('A','水果','B','汽车','C','餐具'))
>>>
key value
A 水果
B 汽车
C 餐具
知道explode的作用后,再看来一般是什么场景使用。一般是一行数据中,单个字段对应,对应多个属性。
如:
v1 v2
P40 数码,电子产品,通讯,华为
期望以上数据如下展示:
v1 v2
P40 数码
P40 电子产品
P40 通讯
P40 华为
可以得知行转列可以使用explode(),这里的v2是字符串,explode只接收数组和map,所以需要使用split(),该函数返回的结果是一个数组,那是不是直接:
select v1,explode(split(v2,',')) ;
其实这么执行会报错,因为explode()是UDTF函数,不能和其他字段一起使用。
这时候就需要用到lateral view 将行转列的数据"侧写"到v1字段上,达到想要的效果。
select v1,tmp from table lateral view explode(array('A','B','C')) temple_data as tmp;
>>>
v1 tmp
P40 数码
P40 电子产品
P40 通讯
P40 华为
到这里就演示完了。另外 lateral view 还有一个关键字 outer ,lateral view outer。
加上该参数后,explode(array()) 如果返回的是空,数据也不会空结果,会是如下:
select v1,tmp from table lateral view outer explode(array()) temple_data as tmp;
>>>
v1 tmp
P40 NULL
P40 NULL
P40 NULL
P40 NULL