例如,示例表测试具有以下带有4条记录的架构:
id ad1 ad2 ad3 ad4 ad5
1 X Y Z M N
2 K L N O
3 G M P
4 J K N
Ouput I want is :
id ad1 ad2 ad3 ad4 ad5
1 X Y Z M N
2 K L N O
3 G M P
4 J K N
基本上,这些地址列之间的空格不应为空值。如果第二列为空,则需要将第三列的值移至第二列,依此类推。此表位于蜂巢中,是否可以仅使用蜂巢来实现?还是应该编写UDF?但是我正在尝试使用蜂巢案例语句来实现这一点。任何帮助,将不胜感激
连接没有空元素的所有列,再次拆分,地址数组元素:
with data as(
select stack(4,
1 ,'X','Y','Z','M','N',
2 ,null,'K','L','N','O',
3 ,'G',null,'M',null,'P',
4 ,'J',null,'K',null,'N'
) as (id,ad1,ad2,ad3,ad4,ad5)
)
select id, a[0] as ad1, a[1] as ad2, a[2] as ad3, a[3] as ad4, a[4] as ad5
from
(
select id, split(regexp_replace(regexp_replace(concat_ws(',',nvl(ad1,''),nvl(ad2,''),nvl(ad3,''),nvl(ad4,''),nvl(ad5,'')),',{2,}',','),'^,|,$',''),',') a
from data
)s
结果:
id ad1 ad2 ad3 ad4 ad5
1 X Y Z M N
2 K L N O NULL
3 G M P NULL NULL
4 J K N NULL NULL
Time taken: 0.394 seconds, Fetched: 4 row(s)