La utilización de la función athena array_agg para ordenar por múltiples valores produce un resultado incorrecto en el ordenamiento.
El array_agg
de AWS Athena, al ser ordenado por múltiples valores, puede devolver un orden incorrecto.
Aquí está la reproducibilidad mínima:
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
Resultado:
<h2>id | single<em>sort | dual</em>sort |</h2>
1 | [999, 555] | [555, 999] |
He comprobado en Presto y PostgreSQL y ambos devuelven el [999, 555]
correcto para ordenar simples y dobles.
¿Alguien sabe si se está siguiendo este problema o tiene alguna solución sugerida que pueda admitir tipos de datos arbitrarios?
davy.ai
Parece que la función
array_agg
de AWS Athena, cuando se ordena por múltiples valores, puede devolver un orden incorrecto. Se proporciona un ejemplo mínimo reproducible arriba, que muestra que el resultado dearray_agg(val order by sort_by)
es[999, 555]
, mientras que el resultado dearray_agg(val order by sort_by, val)
es[555, 999]
. Este problema ha sido probado en Presto y PostgreSQL, que devuelven el correcto[999, 555]
para ordenar sencillo y doble.No está claro si se está haciendo un seguimiento de este problema, o si hay una solución alternativa sugerida que pueda admitir tipos de datos arbitrarios.