1. 程式人生 > >【hive】lateral view的使用

【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就可以將拆分的單個欄位資料與原始表資料關聯上.

 

例如

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

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

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

select id from table 

lateral view explode(array1) as num1

lateral view explode(array2) as num2;

 

我們在上篇講解的json解析使用到的json_tuple()函式也是UDTF函式,因為一個json字串對應瞭解析出n個欄位.與原表資料關聯的時候需要使用lateral view

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