一郑原、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()接受一個(gè)數(shù)組(或一個(gè)map)作為輸入断国,并將數(shù)組元素(map)作為單獨(dú)的行輸出。 UDTF可以在SELECT表達(dá)式列表中使用脉让,也可以作為LATERAL VIEW的一部分使用骗奖。
使用如下圖:
- 將Map作為輸入端
- 將ArrayList作為輸入端:
二、Lateral View用法
lateral view的意義是配合explode(或者其他的UDTF),一個(gè)語句生成把單行數(shù)據(jù)拆解成多行后的數(shù)據(jù)結(jié)果集城侧。
首先準(zhǔn)備一張表test,test表的數(shù)據(jù)結(jié)構(gòu)如下
利用 lateral view explode 結(jié)合map的使用方式和結(jié)果如下:
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
;
輸出結(jié)果:
結(jié)果注解:
test本身只有4條記錄彼妻, explode(map('1',100,'2',200)) 本身只有2條記錄嫌佑,
上述sql的原理實(shí)質(zhì)上是對2個(gè)結(jié)果集做了笛卡爾積。
實(shí)現(xiàn)形式如下:
select
t1.column1
,t1.column2
,…
,t2.column1
,t2.column2
from tablea t1
lateral view explode(…) t2 as column1,column2
;
利用 lateral view explode 結(jié)合array的使用方式和結(jié)果如下:
select
t.cola
,t.indexa
,tt.class_id
from test t
lateral view explode(array(1,100)) tt as class_id
;
輸出如下: