簡體   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