栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

odps TRANS

odps TRANS

例如数据长这个样子

idnamevalue
1张三1,2,3
2李四4,5,6,7

想要这个样子

idnamevalue
1张三1
1张三2
1张三3
2李四4
2李四5
2李四6
2李四7

实现:

select
        TRANS_ARRAY(2,',',id,name,value) as (new_id,new_name,new_value)
from table

函数声明 : 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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735528.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号