語法:
lateralView: LATERAL VIEW [OUTER] udtf(expression) tableAlias AS columnAlias (',' columnAlias) * fromClause: FROM baseTable (lateralView)*
Lateral view outer:當table function不輸出任何一行時,對應的輸入行在Lateral view結果中依然保留,且所有table function輸出列爲null。
在Hive0.12.0版本後引入
用戶可以指定可選的OUTER關鍵字來生成行,即使LATERAL VIEW通常不會生成行。當所使用的UDTF不產生任何行時(使用explode()函數時,explode的列爲空時,很容易發生上述這種情況)。 在這種情況下,源數據行不會出現在結果中。如果想讓源數據行繼續出現在結果中,可以使用 OUTER可以用來阻止關鍵字,並且來自UDTF的列使用NULL值代替
舉例:
sql1:select goods_id2,area from explode_lateral_view LATERAL VIEW explode(split(goods_id,','))goods as goods_id2;
第一個sql中explode返回的數據不是空值,所以正常拆分
sql2:select goods_id2,area from explode_lateral_view LATERAL VIEW explode(array())goods as goods_id2;
第二個sql中explode返回的數據是空值,所以不用outer的情況下,不輸出任何東西
sql3:select goods_id2,area from explode_lateral_view LATERAL VIEW Outer explode(array())goods as goods_id2;
第三個sql在第二個sql的基礎上添加了一個Outer,結果會展示。只是來自UDTF的列被NULL值替代。
備註:
<property>
<!--展示當前數據庫名稱>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<!--查詢的時候打印字段信息>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
參考:https://help.aliyun.com/document_detail/87722.html?spm=a2c4g.11186623.6.694.19c16f41znW7iW