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