将一行数据转为多行数据的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函数属于其他函数,更多其他业务场景的函数请参见其他函数。