【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’);