ODPS之合併與拆分 Lateral View

2021-09-26 22:21:56 字數 1279 閱讀 1034

編輯 · 

· 我的收藏

本頁目錄

lateral view和split,explode等udtf一起使用,它能夠將一行資料拆成多行資料,並在此基礎上對拆分後的資料進行聚合。

語法定義如下:

lateralview: lateral view [outer] udtf(expression) tablealias as columnalias (',' columnalias) * fromclause: from basetable (lateralview)*
說明如下:

示例如下:

假設我們有一張表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」]

Oracle String 合併與拆分

oracle 10g及以上版本 長字串拆分成多行,利用正規表示式,功能類似於split select dbms lob.substr regexp substr abc,1234,abcd,test 1,x.n field from dual,select rownum n from dual co...

Oracle 行列轉換(行合併與拆分)

在 oracle 中,將某乙個欄位的多行資料轉換成使用逗號風格的一行顯示,可以使用函式 wmsys.wm concat 達成。中也介紹到。參考這一段 case 1 列轉換行。以一行顯示所有員工的名字 select wmsys.wm concat name from employee 結果 user1...

Oracle行列轉換(行合併與拆分)

在 oracle 中,將某乙個欄位的多行資料轉換成使用逗號風格的一行顯示,可以使用函式 wmsys.wm concat 達成。這個在上一篇 中也介紹到。參考這一段 case 1 列轉換行。以一行顯示所有員工的名字 select wmsys.wm concat name from employee 結...