ODPS的TRANS_ARRAY应用

–qlr拆分
drop table if exists tmp_fcxx_qlr;
create table tmp_fcxx_qlr as
select zl
,qlr_old
,qlr_new
from (
select trans_array(2, ‘;’, zl, qlr, qlr) as (zl, qlr_old, qlr_new)
from dc01_rkk_ml_zcxx_bdcqrxx
where dt = ‘ b d p . s y s t e m . b i z d a t e ′ a n d r e g e x p e x t r a c t ( q l r , ′ ( [ [ : p u n c t : ] ] ) ′ ) = ′ ; ′ u n i o n s e l e c t t r a n s a r r a y ( 2 , ′ , ′ , z l , q l r , q l r ) a s ( z l , q l r o l d , q l r n e w ) f r o m d c 0 1 r k k m l z c x x b d c q r x x w h e r e d t = ′ {bdp.system.bizdate}' and regexp_extract(qlr, '([[:punct:]])') = ';' union select trans_array(2, ',', zl, qlr, qlr) as (zl, qlr_old, qlr_new) from dc01_rkk_ml_zcxx_bdcqrxx where dt = ' bdp.system.bizdateandregexpextract(qlr,([[:punct:]]))=;unionselecttransarray(2,,,zl,qlr,qlr)as(zl,qlrold,qlrnew)fromdc01rkkmlzcxxbdcqrxxwheredt={bdp.system.bizdate}’
and regexp_extract(qlr, ‘([[:punct:]])’) = ‘,’
union
select trans_array(2, ‘/’, zl, qlr, qlr) as (zl, qlr_old, qlr_new)
from dc01_rkk_ml_zcxx_bdcqrxx
where dt = ‘ b d p . s y s t e m . b i z d a t e ′ a n d r e g e x p e x t r a c t ( q l r , ′ ( [ [ : p u n c t : ] ] ) ′ ) = ′ / ′ u n i o n s e l e c t t r a n s a r r a y ( 2 , ′ 、 ′ , z l , q l r , q l r ) a s ( z l , q l r o l d , q l r n e w ) f r o m d c 0 1 r k k m l z c x x b d c q r x x w h e r e d t = ′ {bdp.system.bizdate}' and regexp_extract(qlr, '([[:punct:]])') = '/' union select trans_array(2, '、', zl, qlr, qlr) as (zl, qlr_old, qlr_new) from dc01_rkk_ml_zcxx_bdcqrxx where dt = ' bdp.system.bizdateandregexpextract(qlr,([[:punct:]]))=/unionselecttransarray(2,,zl,qlr,qlr)as(zl,qlrold,qlrnew)fromdc01rkkmlzcxxbdcqrxxwheredt={bdp.system.bizdate}’
and regexp_extract(qlr, ‘([[:punct:]])’) = ‘、’
) t
where qlr_old is not null
;
trans_array (num_keys, separator, key1,key2,…,col1, col2,col3) as (key1,key2,…,col1, col2)
trans_array(2, ‘;’, zl, qlr, qlr) as (zl, qlr_old, qlr_new) – > 2指两列,zl / qlr两列,拆分第3列qlr,最后生成3列表:zl / 老权利人 / 新权利人

  • 命令说明
    将一行数据转为多行的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。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值