繁体   English   中英

athena array_agg 按多个值排序导致顺序不正确

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM