將一行資料轉為多行的UDTF。
注意事項
如果參數是
array<T>
類型,則將列中儲存的ARRAY轉為多行。如果參數是
map<K, V>
類型,則將列中儲存的MAP的每個Key-Value對轉換為包含兩列的行,其中一列儲存Key,另一列儲存Value。如果表中存在NULL資料,不會單獨返回。
使用限制
在一個
select
中只能出現一個explode
函數,不可以出現表的其他列。不可以與
group by
、cluster by
、distribute by
、sort by
一起使用。
命令格式
explode (<var>)
參數說明
var:必填。array<T>
類型或map<K, V>
類型。
傳回值說明
返迴轉換後的行。
使用樣本
樣本1:例如表
t_table_map
的欄位為c1 bigint, t_map map<string,bigint>
,包含資料如下:+------------+-------+ | c1 | t_map | +------------+-------+ | 1000 | {k11:86, k21:15} | | 1001 | {k12:97, k22:2} | | 1002 | {k13:99, k23:1} | +------------+-------+
命令樣本如下。
select explode(t_map) from t_table_map; --返回結果如下。 +-----+------------+ | key | value | +-----+------------+ | k11 | 86 | | k21 | 15 | | k12 | 97 | | k22 | 2 | | k13 | 99 | | k23 | 1 | +-----+------------+
樣本2:返回結果中不包含單獨的NULL行資料。
--建立表 create table explod_array (arr array<string>); --插入資料 insert into table explod_array values (array('1','2','3',null,'agb')), (array('1','2','3',null,'ag')), (null); --查詢資料 select * from explod_array; --返回: +------------+ | arr | +------------+ | ["1","2","3",null,"agb"] | | ["1","2","3",null,"ag"] | | NULL | +------------+ --展開資料 select explode(arr) from explod_array; --返回結果裡沒有包括單獨的NULL行資料 +------------+ | col | +------------+ | 1 | | 2 | | 3 | | NULL | | agb | | 1 | | 2 | | 3 | | NULL | | ag | +------------+
相關函數
EXPLODE函數屬於複雜類型函數,更多對複雜類型資料(例如ARRAY、MAP、STRUCT、JSON資料)的處理函數請參見複雜類型函數。