すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:TRANS_ARRAY

最終更新日:Aug 22, 2026

1 行のデータを複数行に変換する UDTF です。列に格納されている、固定の区切り文字で分割された配列を複数行に変換します。

使用制限

  • key となるすべての列は先頭に配置し、転置する列は末尾に配置する必要があります。

  • 1 つの select 句内では、UDTF は 1 つしか使用できず、他の列を含めることはできません。

コマンド構文

trans_array (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) as (<key1>,<key2>,...,<col1>, <col2>, <col3>)

パラメーター

  • num_keys:必須。 複数行への変換時に転置 key となる列の数を、>=0 の BIGINT 型定数で指定します。

  • separator:必須。STRING 型の定数で、文字列を複数の要素に分割するための区切り文字を指定します。空の場合はエラーが返ります。

  • keys:必須。転置時に key となる列で、その数は num_keys で指定します。num_keys がすべての列を key として指定する場合 (つまり、num_keys が列の総数と等しい場合)、1 行のみが返されます。

  • cols: 必須。 行に変換する配列を指定します。 keys の後にあるすべての列が、転置対象の配列と見なされます。このパラメーターは STRING 型である必要があり、格納する内容は、 Hangzhou;Beijing;shanghai のような、セミコロン (;) で区切られた文字列形式の配列です。

戻り値

転置後の行を返します。新しい列名はas で指定されます。key としての列の型は変更されず、残りのすべての列は STRING 型になります。分割後の行数は、要素数が最も多い配列に準じ、不足分は NULL で補われます。

使用例

  • 例1:たとえば、テーブル t_table のデータは次のとおりです。

    +----------+----------+------------+
    | login_id | login_ip | login_time |
    +----------+----------+------------+
    | wangwangA | 192.168.0.1,192.168.0.2 | 20120101010000,20120102010000 |
    | wangwangB | 192.168.45.10,192.168.67.22,192.168.6.3 | 20120111010000,20120112010000,20120223080000 |
    +----------+----------+------------+
    -- SQL を実行します。
    select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table;
    -- 実行結果は次のとおりです。
    +----------+----------+------------+
    | login_id | login_ip | login_time |
    +----------+----------+------------+
    | wangwangB | 192.168.45.10 | 20120111010000 |
    | wangwangB | 192.168.67.22 | 20120112010000 |
    | wangwangB | 192.168.6.3 | 20120223080000 |
    | wangwangA | 192.168.0.1 | 20120101010000 |
    | wangwangA | 192.168.0.2 | 20120102010000 |
    +----------+----------+------------+
    
    -- テーブル内のデータが次のようになっている場合。
    Login_id LOGIN_IP LOGIN_TIME 
    wangwangA 192.168.0.1,192.168.0.2 20120101010000
    -- 配列内の不足するデータは NULL で補完されます。
    Login_id Login_ip Login_time 
    wangwangA 192.168.0.1 20120101010000
    wangwangA 192.168.0.2 NULL
  • 例 2:テーブル mf_fun_array_test_t のデータが次のようになっている場合。

    +------------+------------+------------+------------+
    | id         | name       | login_ip   | login_time |
    +------------+------------+------------+------------+
    | 1          | Tom        | 192.168.100.1,192.168.100.2 | 20211101010101,20211101010102 |
    | 2          | Jerry      | 192.168.100.3,192.168.100.4 | 20211101010103,20211101010104 |
    +------------+------------+------------+------------+
    
    -- 2 つのキー (id と name) を使用して配列を転置する場合、SQL を実行します。
    select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t;
    -- 実行結果は次のとおりです。キーである id と name によってグループ化され、展開されています。
    +------------+------------+------------+------------+
    | id         | name       | login_ip   | login_time |
    +------------+------------+------------+------------+
    | 1          | Tom        | 192.168.100.1 | 20211101010101 |
    | 1          | Tom        | 192.168.100.2 | 20211101010102 |
    | 2          | Jerry      | 192.168.100.3 | 20211101010103 |
    | 2          | Jerry      | 192.168.100.4 | 20211101010104 |
    +------------+------------+------------+------------+

関連関数

TRANS_ARRAY 関数はその他の関数に属し、その他のビジネスシナリオの関数については、「その他の関数」をご参照ください。