您可以在SQL分析任務中使用複雜類型函數處理複雜資料類型,例如ARRAY、MAP。本文為您提供SQL分析任務支援的複雜類型函數的命令格式、參數說明及樣本,指導您使用複雜類型函數完成開發。
SQL支援的複雜類函數如下。
函數 | 功能 |
將一行資料轉為多行的UDTF。 |
EXPLODE
使用限制
在一個
select
中只能出現一個explode
函數,不可以出現表的其他列。不可以與
group by
、cluster by
、distribute by
、sort by
一起使用。
命令格式
explode (<var>)
命令說明
將一行資料轉為多行的UDTF。
如果參數是
array<T>
類型,則將列中儲存的ARRAY轉為多行。如果參數是
map<K, V>
類型,則將列中儲存的MAP的每個Key-Value對轉換為包含兩列的行,其中一列儲存Key,另一列儲存Value。如果表中存在NULL資料,不會單獨返回。
參數說明
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 | +------------+