AWS athena (presto SQL):如何在 group by 语句中获取数组的(类似集合的)并集

Roe*_*ant 3 sql amazon-web-services presto amazon-athena

我正在尝试将唯一用户 ID 的数组合并为一个唯一用户 ID 的数组。AWS athena没有该set_union功能,所以我无法使用

, set_union(userids)
Run Code Online (Sandbox Code Playgroud)

而且reduce_agg似乎不允许数组

, reduce_agg(userids, ARRAY[], (a, b) -> array_union(a, b), (a, b) -> array_union(a, b))
Run Code Online (Sandbox Code Playgroud)

是否有任何其他技巧可以用来将数组组合成一个数组(不同的项目)

Gur*_*ron 5

一种选择是通过and来使用array_agg和处理生成的数组数组:flattenarray_distinct

-- sample data
WITH dataset (id, userids) AS (
    VALUES (1, array [ 1, 2, 3 ]),
        (1, array [ 3, 4, 5 ])
) 

--query
SELECT array_distinct(flatten(array_agg(userids)))
FROM dataset
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

输出:

_col0
[1,2,3,4,5]