Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql UNNEST对于空数组不返回任何行_Sql_Arrays_Presto_Amazon Athena_Unnest - Fatal编程技术网

Sql 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

在Athena查询中,我使用unnest来更扁平化多个数组。当数组有一些记录时,它返回正确的结果。但当第二个数组为空时,它不返回任何记录。有人能告诉我如何在一个查询中对多个数组执行unnest到unnest操作吗

以下查询返回空行

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例如我又试了一次。请查收。