Sql UNNEST对于空数组不返回任何行
在Athena查询中,我使用unnest来更扁平化多个数组。当数组有一些记录时,它返回正确的结果。但当第二个数组为空时,它不返回任何记录。有人能告诉我如何在一个查询中对多个数组执行unnest到unnest操作吗 以下查询返回空行Sql UNNEST对于空数组不返回任何行,sql,arrays,presto,amazon-athena,unnest,Sql,Arrays,Presto,Amazon Athena,Unnest,在Athena查询中,我使用unnest来更扁平化多个数组。当数组有一些记录时,它返回正确的结果。但当第二个数组为空时,它不返回任何记录。有人能告诉我如何在一个查询中对多个数组执行unnest到unnest操作吗 以下查询返回空行 WITH example AS ( SELECT devop, devs FROM UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop), UNNEST(ARRAY[]) AS
WITH example AS (
SELECT devop, devs
FROM
UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop),
UNNEST(ARRAY[]) AS t(devs)
)
select array_join(array_agg(distinct example.devop),';'),array_join(array_agg(distinct example.devs),';') from example
下面的查询返回正确的结果
WITH example AS (
SELECT devop, devs
FROM
UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop),
UNNEST(ARRAY['a','b']) AS t(devs)
)
select array_join(array_agg(distinct example.devop),';'),array_join(array_agg(distinct example.devs),';') from example
当第二个数组为空时,我希望得到以下结果
_col0 _col1
----------------------------------------------
Sally;John;Bob;Sharon
我认为你不想在这里交叉连接。相反,您可以将其表述为:
select
array_join(
array_agg(distinct unnest(array['Sharon', 'John', 'Bob', 'Sally'])),
';'
) devops,
array_join(
array_agg(distinct unnest(array[])),
';'
) devs
我认为你不想在这里交叉连接。相反,您可以将其表述为:
select
array_join(
array_agg(distinct unnest(array['Sharon', 'John', 'Bob', 'Sally'])),
';'
) devops,
array_join(
array_agg(distinct unnest(array[])),
';'
) devs
使用左连接:
使用左连接:
尝试使用空数组数组\u并集
下面的查询将为您提供所需的结果。在雅典娜发动机1版上测试
尝试使用空数组数组\u并集
下面的查询将为您提供所需的结果。在雅典娜发动机1版上测试
由于LEFT JOIN UNNEST在Athena Presto上不起作用,因此可以使用和交叉连接空值,如下所示:
WITH example AS (
SELECT devop, devs
FROM UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop) CROSS JOIN
UNNEST(IF(CARDINALITY(ARRAY[])=0, ARRAY[NULL], ARRAY[]) AS t(devs)
)
这样,如果数组[]/列为空,则基数检查数组的大小,返回数组[NULL],并且不跳过该行
在Presto 0.217/Athena engine版本2上测试,由于LEFT JOIN UNNEST在Athena Presto上不起作用,因此可以使用和这样交叉连接空值:
WITH example AS (
SELECT devop, devs
FROM UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop) CROSS JOIN
UNNEST(IF(CARDINALITY(ARRAY[])=0, ARRAY[NULL], ARRAY[]) AS t(devs)
)
这样,如果数组[]/列为空,则基数检查数组的大小,返回数组[NULL],并且不跳过该行
在Presto 0.217/Athena engine version 2上测试,当第二个数组为空时,您会期望哪个结果?更新了问题。当第二个数组为空时,您会期望哪个结果?更新了问题。LEFT JOIN UNNEST是正确的答案,而这个问题正是我们实现它的原因!请注意,您需要Presto 323或更高版本,因此它在Athena中尤其不起作用。在Athena中,我得到此错误语法。\u错误:第4:12行:不支持交叉连接右侧以外的其他位置上的UNNEST我尝试了以下命令,示例为SELECT devop,devs FROM UNNESTARRAY['Sharon',John',Bob',Sally']AS tdevop LEFT JOIN UNNESTARRAY[]AS tdevs ON 1=1选择数组_joinarray_aggdistinct example.devop,“;”,array_joinarray_aggint example.devs,“;”例如,即使雅典娜引擎版本2也基于Presto 0.217。因此,没有办法做左连接不必要。还有其他解决方法吗?LEFT JOIN UNNEST是正确的答案,而这个问题正是我们实现它的原因!请注意,您需要Presto 323或更高版本,因此它在Athena中尤其不起作用。在Athena中,我得到此错误语法。\u错误:第4:12行:不支持交叉连接右侧以外的其他位置上的UNNEST我尝试了以下命令,示例为SELECT devop,devs FROM UNNESTARRAY['Sharon',John',Bob',Sally']AS tdevop LEFT JOIN UNNESTARRAY[]AS tdevs ON 1=1选择数组_joinarray_aggdistinct example.devop,“;”,array_joinarray_aggint example.devs,“;”例如,即使雅典娜引擎版本2也基于Presto 0.217。因此,没有办法做左连接不必要。还有其他解决方法吗?我无法使其工作无效的函数参数:中不支持输入类型arrayvarchar6Athena@somename例如我又试了一次。请检查。我无法使其工作无效的函数参数:中不支持输入类型arrayvarchar6Athena@somename例如我又试了一次。请查收。