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

MaxCompute:TRANS_ARRAY

最終更新日:Jan 17, 2025

1行のデータを複数の行に変換します。 この関数は、列内の固定区切り文字で区切られた配列を複数の行に転置するユーザー定義のテーブル値関数 (UDTF) です。

制限事項

  • キーとして使用されるすべての列は、転置する列の前に配置する必要があります。

  • SELECTステートメントで使用できるUDTFは1つだけです。

構文

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

パラメーター

  • num_keys: 必須です。 値はBIGINT型の定数であり、0以上でなければなりません。 このパラメーターは、1行を複数行に転置するときにキーとして使用できる列の数を指定します。

  • separator: 必須。 値はSTRING型の定数です。 このパラメーターは、文字列を複数の要素に分割するために使用されます。 このパラメーターを空のままにすると、エラーが返されます。

  • keys: 必須です。 このパラメーターは、1行を複数行に転置するときにkeyとして使用される列を指定します。 keyの数はnum_keysで指定します。 すべての列がkeyとして使用され、num_keysすべての列の総数と等しい場合、1行のみが返されます。

  • cols: 必須です。 このパラメーターは、行に転置する配列を指定します。 キーに続くすべての列は、転置される配列と見なされます。 Hangzhou;Beijing;shanghaiなどのSTRING形式で配列を格納するには、このパラメーターの値がSTRING型である必要があります。 この配列の値は、セミコロン (;) で区切ります。

戻り値

転置行が返されます。 新しい列名はasで指定します。 キーとして使用される列のデータ型は変更されません。 他のすべての列は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 |
    +----------+----------+------------+
    -- Execute the following SQL statement: 
    select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table;
    -- The following result is returned: 
    +----------+----------+------------+
    | 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 |
    +----------+----------+------------+
    
    -- The table contains the following data: 
    Login_id LOGIN_IP LOGIN_TIME 
    wangwangA 192.168.0.1,192.168.0.2 20120101010000
    -- The value null is added to supplement the array in which data is insufficient.  
    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 |
    +------------+------------+------------+------------+
    
    -- Use the id and name columns as keys to transpose data in the table. Execute the following SQL statement: 
    select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t;
    -- The following result is returned: 
    +------------+------------+------------+------------+
    | 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 |
    +------------+------------+------------+------------+

関連関数

詳細については、「」をご参照ください。その他の関数.