全部產品
Search
文件中心

MaxCompute:EXPLODE

更新時間:Jun 19, 2024

將一行資料轉為多行的UDTF。

注意事項

  • 如果參數是array<T>類型,則將列中儲存的ARRAY轉為多行。

  • 如果參數是map<K, V>類型,則將列中儲存的MAP的每個Key-Value對轉換為包含兩列的行,其中一列儲存Key,另一列儲存Value。

  • 如果表中存在NULL資料,不會單獨返回。

使用限制

  • 在一個select中只能出現一個explode函數,不可以出現表的其他列。

  • 不可以與group bycluster bydistribute bysort 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資料)的處理函數請參見複雜類型函數