TRANS_ARRAY函数用法详解(ODPS)

TRANS_ARRAY

命令格式:
trans_array (num_keys, separator, key1,key2,…,col1, col2,col3) as (key1,key2,…,col1, col2)
用途:
用于将一行数据转为多行的UDTF,将列中存储的以固定分隔符格式分隔的数组转为多行。
参数说明:

●  num_keys: bigint类型常量,必须>=0。在转为多行时作为转置key的列的个数。
Key是指在将一行转为多行时,在多行中重复的列。
●  separator:string类型常量,用于将字符串拆分成多个元素的分隔符。为空时报异常。
●  keys:转置时作为key的列, 个数由num_keys指定。如果num_keys指定所有的列都作为key(即num_keys等于所有列的个数),则只返回一行。
●  cols: 要转为行的数组,keys之后的所有列视为要转置的数组,必须为string类型,存储的内容是字符串格式的数组,如“Hangzhou;Beijing;shanghai”,是以”;”分隔的数组。
返回:
    转置后的行,新的列名由as指定。作为key的列类型保持不变,其余所有的列是string类型。拆分成的行数以个数多的数组为准,不足的补NULL。
注:
    UDTF使用上有一些限制
●  所有作为key的列必须处在前面,而要转置的列必须放在后面。
●  在一个select中只能有一个udtf,不可以再出现其它的列
●  不可以与group by/cluster by/distribute by/sort by一起使用。

例,表中的数据如

Login_id      LOGIN_IP                     LOGIN_TIME
wangwangA     192.168.0.1,192.168.0.2      20120101010000,20120102010000

则trans_array(1, “,”, login_id, login_ip, login_time) as (login_id,login_ip,login_time)
产生的数据是

Login_id      Login_ip        Login_time
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值