HiveQL查詢操作全解(六):explode函數(shù)詳解

假設(shè)我們的數(shù)據(jù)如下所示,表為test表:


A              B                          C

190     [1030,1031,1032,1033,1190]      select id
191     [1030,1031,1032,1033,1190]      select id

可以看到,我們的B字段是ARRAY類型的,我們假如想把B的每一個(gè)元素變成一行,我們可以使用explode函數(shù):

select explode(B) as D from test

這樣可以達(dá)到如下的目的

D
1030
1031
1032
1033
....

不過假如我們想要達(dá)到下面的效果呢?

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

此時(shí),我們?cè)偈褂孟旅娴膆ive語句,發(fā)現(xiàn)已經(jīng)不行了,因?yàn)閑xplode函數(shù)使用時(shí)不能再有其他的列:

select A,explode(B),C as D from test

如果想實(shí)現(xiàn)上面的效果,正確的做法是使用LATERAL VIEW,hive sql如下:

select A,B,C from test LATERAL VIEW explode(B) table1 as B

lateral view用于和split、explode等UDTF一起使用的,能將一行數(shù)據(jù)拆分成多行數(shù)據(jù),在此基礎(chǔ)上可以對(duì)拆分的數(shù)據(jù)進(jìn)行聚合,lateral view首先為原始表的每行調(diào)用UDTF,UDTF會(huì)把一行拆分成一行或者多行,lateral view在把結(jié)果組合,產(chǎn)生一個(gè)支持別名表的虛擬表。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容