多个横向视图和在蜂箱中爆炸产生行重复



我正在使用4列

240 ^ 300年^ 210年^ 500年^ DBC ^ ODA ^ ICA ^半径标注

多个侧面视图生成笛卡尔积解决方案是使用单个横向视图posexplode,拆分其他列以获得数组,然后使用position来处理其他值。

有些列在末尾包含额外的^分隔符,在分隔前将其删除。

演示:

with table1 as (--Data example, use your table instead
select 'EBDR001' Ref_No, 'usd^usd^usd^usd^' Currency, '240^300^210^500^' Amount, 'DBC^ODA^ICA^DRA' Tag
)
select Ref_No, 
c.ccy, 
split(t1.Amount,"\^")[c.pos] amt, 
split(t1.Tag,"\^")[c.pos]    tag
from ( --Remove extra delimiter at the end
select Ref_No, 
regexp_replace(Currency,'\^$','') Currency, 
regexp_replace(Amount,'\^$','')   Amount,
regexp_replace(Tag,'\^$','')      Tag
from table1
) t1
lateral view posexplode(split(t1.Currency,"\^")) c as pos, ccy 

结果:

ref_no  c.ccy amt   tag
EBDR001 usd   240   DBC
EBDR001 usd   300   ODA
EBDR001 usd   210   ICA
EBDR001 usd   500   DRA

可能的替代品:

你可以在三个侧面视图中使用possexplode而不是explosion和WHERE子句来匹配三个侧面视图的位置,参见https://stackoverflow.com/a/59497463/2700344

你也可以使用三个cte,其中你posexplode每个数组,然后左连接与主表上Ref和Pos,类似的解决方案是在这里:https://stackoverflow.com/a/56244552/2700344.

相关内容

  • 没有找到相关文章

最新更新