Hive之explode
##### 一. explode, 行轉列。 ###### 1.1. 用於array類型的數據 * table_name 表名 * array_col 為數組類型的字段 * new_col array_col被explode之后對應的列select explode(array_col) as new_col from table_name
1.2. 用於map類型數據時的語法如下
- 由於map是kay-value結構的,所以它在轉換的時候會轉換成兩列,一列是kay轉換而成的,一列是value轉換而成的。
- table_name 表名
- map_col 為map類型的字段
- may_key_col, may_value_col 分別對應map_col被拆分之后的map映射里的key 和 value
select explode(map_col) as (may_key_col, may_value_col) from table_name
二. explode函數的局限性
- 不能關聯原有的表中的其他字段。
- 不能與group by、cluster by、distribute by、sort by聯用。
- 不能進行UDTF嵌套。
- 不允許選擇其他表達式。
三. lateral view
lateral view 用於和UDTF相結合使用。他會將UDTF生成的結果放在一張虛擬表zhong(即lateral view里)。虛擬表相當於再和主表關聯, 從而達到添加“UDTF生成的字段“以外的字段, 即主表里的字段或者主表運算后的字段。
3.1 第一種形式
select o.*, table_view.new_col
from table_origin o
lateral view UDTF(expression) table_view as `new_col_1`, `new_col_2`
- lateral view 表示將UDTF分裂的字段放在虛擬表中, 然后和主表table_origin進行關聯。(個人理解,關聯條件應該是UDTF里的expression所產生的關聯條件)
- UDTF(expression):復合邏輯規則的UDTF函數,最常用的explode
- table_view : 對應的虛擬表的表名
- new_col: 虛擬表里存放的有效字段
- from子句后面也可以跟多個lateral view語句,使用空格間隔就可以了。 需要找示例驗證一下使用方法