ARRAY_CONTACT() returns 空数组
ARRAY_CONTACT() returns empty array
我正在将来自 2 个不同列的每个用户的值列表编译成一个数组,例如:
with test as (
select 1 as userId, 'something' as value1, cast(null as string) as value2
union all
select 1 as userId, cast(null as string), cast(null as string)
)
select
userId,
ARRAY_CONCAT(
ARRAY_AGG(distinct value1 ignore nulls ),
ARRAY_AGG(distinct value2 ignore nulls )
) as combo,
from test
group by userId
一切正常,直到 ARRAY_AGG() 但随后 ARRAY_CONCAT() 就没有它了,returns 和空数组 [] 而我希望它是 [ 'something'].
我不知道为什么会发生这种情况,也不知道我是否可以在这里强制执行解决方法。
I am at loss as to why this is happening ...
ARRAY_CONCAT 函数 returns NULL 如果任何输入参数为 NULL
... and whether I can force a workaround here
使用以下解决方法
select
userid,
array_concat(
ifnull(array_agg(distinct value1 ignore nulls ), []),
ifnull(array_agg(distinct value2 ignore nulls ), [])
) as combo,
from test
group by userid
如果应用于您问题中的示例数据 - 输出为
我正在将来自 2 个不同列的每个用户的值列表编译成一个数组,例如:
with test as (
select 1 as userId, 'something' as value1, cast(null as string) as value2
union all
select 1 as userId, cast(null as string), cast(null as string)
)
select
userId,
ARRAY_CONCAT(
ARRAY_AGG(distinct value1 ignore nulls ),
ARRAY_AGG(distinct value2 ignore nulls )
) as combo,
from test
group by userId
一切正常,直到 ARRAY_AGG() 但随后 ARRAY_CONCAT() 就没有它了,returns 和空数组 [] 而我希望它是 [ 'something'].
我不知道为什么会发生这种情况,也不知道我是否可以在这里强制执行解决方法。
I am at loss as to why this is happening ...
ARRAY_CONCAT 函数 returns NULL 如果任何输入参数为 NULL
... and whether I can force a workaround here
使用以下解决方法
select
userid,
array_concat(
ifnull(array_agg(distinct value1 ignore nulls ), []),
ifnull(array_agg(distinct value2 ignore nulls ), [])
) as combo,
from test
group by userid
如果应用于您问题中的示例数据 - 输出为