【hive】lateral view的使用


當使用UDTF函數的時候,hive只允許對拆分字段進行訪問的

 

例如:

select id,explode(arry1) from table; —錯誤

會報錯FAILED: SemanticException 1:40 Only a single expression in the SELECT clause is supported with UDTF's.  

 

select explode(array1) from table; —正確

 

但是實際中經常要拆某個字段,然后一起與別的字段一起出.例如上面的id和拆分的array元素是對應的.我們應該如何進行連接呢?我們知道直接select id,explode()是不行的.這個時候就需要lateral view出廠了.

 

lateral view為側視圖,意義是為了配合UDTF來使用,把某一行數據拆分成多行數據.不加lateral view的UDTF只能提取單個字段拆分,並不能塞會原來數據表中.加上lateral view就可以將拆分的單個字段數據與原始表數據關聯上.

在使用lateral view的時候需要指定視圖別名和生成的新列別名

例如

select id,num from table lateral view explode(array1) subview as num;

subview為視圖別名,num為指定新列別名

lateral view explode 相當於一個拆分array1字段的虛表,然后根據id將其與原表進行笛卡爾積關聯.

我們也可以多次使用lateral view explode

select id,num1,num2 from table 

lateral view explode(array1) subview1 as num1

lateral view explode(array2) subview2 as num2

where ...;

我們可以理解為lateral view為table的一個cross join,關聯鍵是table的id

 

我們在上篇講解的json解析使用到的json_tuple()函數也是UDTF函數,因為一個json字符串對應了解析出n個字段.與原表數據關聯的時候需要使用lateral view

select id from table lateral view json_tuple(property,'tag_id','tag_type’);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM