如何在 Snowflake SELECT 中展平一组 ARRAY_AGGS

Cur*_*tte 2 arrays ansi-sql snowflake-cloud-data-platform

我正在尝试对多个连接的 VARIANT 列表进行 SELECT。主记录作为 DATA 返回,它周围的所有支持信息都由作为 INCLUDED 返回的支持连接表组成。

我在支持的 VARIANT 记录和 ARRAY_AGG(DISTINCT [record]) 上使用 ARRAY_CONSTRUCT_COMPACT 来聚合它们并消除重复。

问题是 ARRAY_AGG 在我的一个连接表 (ENTITIES) 上生成了多个记录。当它们使用 ARRAY_CONSTRUCT_COMPACT() 构造时,结果是一个数组数组,我需要将其展平为单个对象数组。

我尝试将 ARRAY_COMPACT 和 ARRAY_CAT 与嵌套的 ARRAY_AGGS 结合使用,但需要注意的是 ARRAY_CAT 只接受 2 个参数。下面的代码让我最接近我需要的东西,但我似乎无法弄清楚如何将最终数组展平为包含。


SELECT
    a1.appointment data,
    ARRAY_CONSTRUCT_COMPACT(
        ARRAY_AGG(DISTINCT c1.call),
        ARRAY_AGG(DISTINCT e1.entity),
        ARRAY_AGG(DISTINCT a2.address)
    ) included

FROM APPOINTMENTS a1

INNER JOIN CALLS c1 ON c1.call:id = a1.appointment:callId

INNER JOIN ENTITIES e1 ON e1.entity:id IN (
    a1.appointment:relationships.agent,
    a1.appointment:relationships.consultant,
    a1.appointment:relationships.contact
)

INNER JOIN ADDRESSES a2 ON a2.address:id = a1.appointment:relationships:office 

WHERE a1.appointment:id = 'some_appointment_id'

GROUP BY a1.appointment;

Run Code Online (Sandbox Code Playgroud)

我的 INCLUDED 列的输出目前是: [[{}], [{},{}], [{}]]

我需要扁平化为: [{}, {}, {}, {}]

任何帮助将不胜感激!

Bra*_*ley 5

您可以在函数中使用 javascript 来使这一切变得漂亮和整洁:

CREATE OR REPLACE FUNCTION ARRAY_CAT_ALL( source Array )
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
    return [].concat.apply([], SOURCE);
$$;
Run Code Online (Sandbox Code Playgroud)

然后你可以用这个函数包装你的 ARRAY_CONSTRUCT_COMPACT 结果,这会将数组的数组扁平化为一个数组。