当填充为NULL时如何在配置单元表中移动地址列

问题描述 投票:2回答:1

例如,示例表测试具有以下带有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?但是我正在尝试使用蜂巢案例语句来实现这一点。任何帮助,将不胜感激

python hive hiveql
1个回答
1
投票

连接没有空元素的所有列,再次拆分,地址数组元素:

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)
© www.soinside.com 2019 - 2024. All rights reserved.