gpt4 book ai didi

sql - 在 AWS Athena/Presto 中的 unnest 和 array_agg 之后保留数组元素的顺序

转载 作者:行者123 更新时间:2023-12-04 13:18:27 26 4
gpt4 key购买 nike

我有一个取消嵌套数组的 Athena 查询,将元素与另一个表连接起来,然后使用 array_agg 将它们收集回数组中。我想保留元素的原始顺序,但 Athena 不支持向 array_agg 添加 ORDER BY 子句的 Presto 功能。如何保持元素的顺序?

查询类似于这个例子:

SELECT x, array_agg(b) bs
FROM table1 -- table1 columns are x, ys
CROSS JOIN UNNEST(ys) AS t(y)
JOIN table2 ON y=a -- table2 columns are a, b
GROUP BY x
  1. 默认行为似乎是保留顺序。可靠吗?
  2. 如果不是 (1),是否有一个实现可以在 bs 中保留 ys 的顺序?

最佳答案

有同样的问题,我的解决方法是聚合值以以序号为键进行映射。然后将映射的值转换为数组(按键排序):

SELECT t1.x, 
transform(sequence(1,cardinality(map_agg(n,y)),(x)-> map_agg(n,y)[x])
FROM table1 t1 CROSS JOIN
UNNEST(t1.ys) WITH ORDINALITY AS t(y, n) JOIN
table2 t2
ON t1.y = t2.a
GROUP BY t1.x;

关于sql - 在 AWS Athena/Presto 中的 unnest 和 array_agg 之后保留数组元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57424748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com