lateral view和表生成函式(例如split、explode等函式)結合使用,它能夠將一行資料拆成多行資料,並對拆分後的資料進行聚合。
語法定義如下。
lateralview: lateral view [outer] udtf(expression) tablealias as columnalias (',' columnalias) * fromclause: from basetable (lateralview)*
lateral view outer:當您定義的表生成函式不輸出任何一行時,對應的輸入行在lateral view結果中依然保留,且所有表生成函式輸出列為null。
示例如下。
假設您有一張表pageads,它有兩列資料,第一列是pageid string,第二列是adid_list,即用逗號分隔的廣告id集合。
string pageid
arrayadid_list
「front_page」
[1, 2, 3]
「contact_page」
[3, 4, 5]
假如您需要統計所有廣告id在所有頁面**現的次數,實現過程如下所示。
拆分廣告id。
select pageid, adid
from pageads lateral view explode(adid_list) adtable as adid;
執行結果如下。
string pageid
int adid
「front_page」
1「front_page」
2「front_page」
3「contact_page」
3「contact_page」
4「contact_page」
5進行聚合的統計,語句如下。
select adid, count(1)
from pageads lateral view explode(adid_list) adtable as adid
group by adid;
執行結果如下。
int adid
count(1)11
2132
4151
乙個from語句後可以跟多個lateral view語句,後面的lateral view語句能夠引用它前面的所有表和列名。
以下面的表為例。
arraycol1
arraycol2
[1, 2]
[「a」, 「b」, 「c」]
[3, 4]
[「d」, 「e」, 「f」]
hive中的lateral view 用法詳解下篇
假設我們有一張表pageads,它有兩列資料,第一列是pageid string,第二列是adid list,即用逗號分隔的廣告id集合 string pageid arrayadid list front page 1,2,3 contact page 3,4,5 要統計所有廣告id在所有頁面中出...
阿里雲 vs Azure 大資料
本文比較了azure和阿里雲提供的資料庫服務,以幫助專業人士了解兩者的差異和共同點。無論您計畫從azure遷移至阿里雲,或是選擇同時使用azure 阿里雲的多雲模式,本文都將幫助您了解阿里雲的資料庫服務。阿里雲將資料庫服務分為如下表中的服務型別,每種型別提供了各具特點的產品,本文將從以下列表中重點介...
MAPJOIN HINT 阿里大資料用法
當乙個大表和乙個或多個小表join時,您可以在select語句中顯式指定mapjoin以提公升查詢效能。通常情況下,join操作在reduce階段執行表連線。整個join過程包含map shuffle reduce三個階段。mapjoin在map階段執行表連線,而非等到reduce階段才執行表連線。...