![](/img/trans.png)
[英]Preserve order of array elements after unnest and array_agg in AWS Athena / Presto
[英]athena array_agg sort by multiple values results in incorrect order
AWS Athena 的array_agg
按多个值排序时,可能会返回错误的顺序。
这是最小再现
with xxx(id, sort_by, val) as (
values
(1, 'a' , 999),
(1, 'b', 555)
)
select
id,
array_agg(val order by sort_by) as single_sort, -- [999, 555]
array_agg(val order by sort_by, val) as dual_sort -- [555, 999]
from
xxx
group by
id
结果
id | single_sort | dual_sort |
-------------------------------
1 | [999, 555] | [555, 999] |
我检查了 Presto 和 PostgreSQL 并且它们都为单排序和双排序返回了正确的[999, 555]
。
有谁知道这个问题是否正在被跟踪,或者有一个可以支持任意数据类型的建议解决方法?
一个不完整的解决方法:
使用row()
将多列排序转换为复合类型以强制 athena 将它们排序在一起。
with xxx(id, sort_by, val) as (
values
(1, 'a' , 999),
(1, 'b', 555)
)
select
id,
array_agg(val order by sort_by) as single_sort, -- [999, 555]
array_agg(val order by row(sort_by, val)) as dual_sort -- [999, 555]
from
xxx
group by
id
笔记
array_agg(val order by row(sort_by, val))
对比
array_agg(val order by sort_by, val)
但这只有在所有值都按相同方向排序时才有效(asc/desc)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.