將一行資料轉為多行資料的UDTF,將不同的列拆分為不同的行。
使用限制
所有作為
key
的列必須處在前面,而要轉置的列必須放在後面。在一個
select
中只能有一個UDTF,不可以再出現其他的列。
命令格式
trans_cols (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) as (<idx>, <key1>,<key2>,…,<col1>, <col2>)
參數說明
num_keys:必填。BIGINT類型常量,值必須
>=0
。在轉為多行時作為轉置key的列的個數。keys:必填。轉置時作為key的列, 個數由num_keys指定。如果num_keys指定所有的列都作為key(即num_keys等於所有列的個數),則只返回一行。
idx:必填。轉換後的行號。
cols:必填。 要轉為行的列。
傳回值說明
返迴轉置後的行,新的列名由as
指定。輸出的第一列是轉置的下標,下標從1開始。作為key的列類型保持不變,其餘所有的列與原來的資料類型一致。
使用樣本
例如表t_table
中的資料如下。
+----------+----------+------------+
| Login_id | Login_ip1 | Login_ip2 |
+----------+----------+------------+
| wangwangA | 192.168.0.1 | 192.168.0.2 |
+----------+----------+------------+
--執行SQL。
select trans_cols(1, login_id, login_ip1, login_ip2) as (idx, login_id, login_ip) from t_table;
--返回結果如下。
idx login_id login_ip
1 wangwangA 192.168.0.1
2 wangwangA 192.168.0.2
相關函數
TRANS_COLS函數屬於其他函數,更多其他業務情境的函數請參見其他函數。