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 | +------------+------------+------------+------------+
関連関数
詳細については、「」をご参照ください。その他の関数.