Hive Lateral View使用指南

 2023-12-09 阅读 28 评论 0

摘要:1. 語法 lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)* fromClause: FROM baseTable (lateralView)* 2. 描述 Lateral View一般與用戶自定義表生成函數(如explode())結合使用。 如內置表生成函數中所述&#x

1. 語法

lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*

2. 描述

Lateral View一般與用戶自定義表生成函數(如explode())結合使用。 如內置表生成函數中所述,UDTF為每個輸入行生成零個或多個輸出行。 Lateral View 首先將UDTF應用于基表的每一行,然后將結果輸出行連接到輸入行,以形成具有提供的表別名的虛擬表。

在Hive 0.6.0之前,Lateral View 不支持謂詞下推優化。 
在Hive 0.5.0和更早版本中,如果你使用WHERE子句,你的查詢如果沒有沒有編譯。
解決方法是在你查詢之前添加 set hive.optimize.ppd = false 。 
這個問題是在Hive 0.6.0中進行修復的, 請參閱https://issues.apache.org/jira/browse/HIVE-1056。
從Hive 0.12.0中,可以省略列別名。
在這種情況下,別名繼承自從UTDF返回的StructObjectInspector的字段名稱。

3. Example

考慮以下名為pageAds的基表。 它有兩列:pageid(網頁名稱)和adid_list(網頁上顯示的廣告數組):
在這里插入圖片描述

而且用戶希望統計廣告在所有網頁上展示的總次數。

Lateral View 與 explode()函數 結合使用可以將adid_list轉換為單獨的行:

	hive> SELECT pageid, adid> FROM tmp_laterview LATERAL VIEW explode(adid_list) adTable AS adid;OKfront_page	1front_page	2front_page	3contact_page	3contact_page	4contact_page	5Time taken: 0.132 seconds, Fetched: 6 row(s)

然后,為了計算特定廣告的展示次數,使用如下命令:

hive> SELECT adid, count(1)> FROM tmp_laterview LATERAL VIEW explode(adid_list) adTable AS adid> GROUP BY adid;OK
1	1
2	1
3	2
4	1
5	1
Time taken: 11.456 seconds, Fetched: 5 row(s)

4. Multiple Lateral Views

FROM子句可以有多個LATERAL VIEW子句。 后面的LATERAL VIEWS子句可以引用出現在LATERAL VIEWS左側表的任何列。

例如,如下查詢:

SELECT * FROM exampleTable
LATERAL VIEW explode(col1) myTable1 AS myCol1
LATERAL VIEW explode(col2) myTable2 AS myCol2;

LATERAL VIEW子句按照它們出現的順序應用。 例如使用以下基表:

單個Lateral View查詢

hive> SELECT pageid_list, adid > FROM tmp_laterview> LATERAL VIEW explode(adid_list) adTable AS adid;
OK
[1,2,3]	a
[1,2,3]	b
[1,2,3]	c
[4,5]	c
[4,5]	d

多個Lateral View查詢:

hive> SELECT pageid, adid > FROM tmp_laterview> LATERAL VIEW explode(adid_list) adTable AS adid> LATERAL VIEW explode(pageid_list) adTable AS pageid;
OK
1	a
2	a
3	a
1	b
2	b
3	b
1	c
2	c
3	c
4	c
5	c
4	d
5	d

5. Outer Lateral Views

在Hive0.12.0版本后引入

用戶可以指定可選的OUTER關鍵字來生成行,即使LATERAL VIEW通常不會生成行。當所使用的UDTF不產生任何行時(使用explode()函數時,explode的列為空時,很容易發生上述這種情況)。 在這種情況下,源數據行不會出現在結果中。如果想讓源數據行繼續出現在結果中,可以使用 OUTER可以用來阻止關鍵字,并且來自UDTF的列使用NULL值代替。

例如,以下查詢返回空結果:

hive> SELECT * FROM tmp_laterview LATERAL VIEW explode(array()) C AS a;
OK
Time taken: 0.077 seconds

但是使用OUTER關鍵詞:

hive> SELECT * FROM tmp_laterview LATERAL VIEW OUTER explode(array()) C AS a;
OK
[1,2,3]	["a","b","c"]	NULL
[4,5]	["c","d"]	NULL
Time taken: 0.053 seconds, Fetched: 2 row(s)

原文:https://blog.csdn.net/SunnyYoona/article/details/62894761

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/195618.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息