首页 > 解决方案 > UNNEST 不返回空数组的行

问题描述

unnest在 Athena 查询中使用了多个扁平化数组。当数组有一些记录时,它会返回正确的结果。但是当第二个数组为空时,它不返回任何记录。有人可以让我知道如何在单个查询中取消嵌套多个数组吗?

以下查询返回空行。

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              

标签: sqlarraysprestoamazon-athenaunnest

解决方案


使用left join

WITH example AS (
      SELECT devop, devs 
      FROM UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop) LEFT JOIN
           UNNEST(ARRAY[]) AS t(devs)
           ON 1=1
    )
. . .

推荐阅读