Does Athena support ORDER BY in ARRAY_AGG ?

0

It appears that Athena does not support ORDER BY within ARRAY_AGG function. Here is an example.

If I run the following query, it aggregates records into an array, as expected.

    WITH dataset AS (
       SELECT 1 AS breakdown_id, 1 AS history_order, 'OPEN' AS action
       UNION ALL
       SELECT 1 AS breakdown_id, 2 AS history_order, 'IN_PROGRESS' AS action
       UNION ALL
       SELECT 1 AS breakdown_id, 3 AS history_order, 'CLOSED' AS action
       UNION ALL
       SELECT 2 AS breakdown_id, 1 AS history_order, 'OPEN' AS action
       UNION ALL
       SELECT 2 AS breakdown_id, 2 AS history_order, 'IN_PROGRESS' AS action
       UNION ALL
       SELECT 3 AS breakdown_id, 1 AS history_order, 'OPEN' AS action
       UNION ALL
       SELECT 3 AS breakdown_id, 2 AS history_order, 'IN_PROGRESS' AS action
       UNION ALL
       SELECT 3 AS breakdown_id, 3 AS history_order, 'WAITING_FOR_INPUT' AS action
    
    )
    SELECT breakdown_id
         , ARRAY_AGG(action) AS actions
      FROM dataset
     GROUP BY breakdown_id

Result:

#breakdown_idactions
11[IN_PROGRESS, CLOSED, OPEN]
22[WAITING_FOR_INPUT, IN_PROGRESS, OPEN]
32[IN_PROGRESS, OPEN]
\
However the elements of the array need to be in the order specified by the history_order column. Unfortunately adding ORDER BY into the ARRAY_AGG function results in nothing being returned.
    WITH dataset AS (
       SELECT 1 AS breakdown_id, 1 AS history_order, 'OPEN' AS action
       UNION ALL
       SELECT 1 AS breakdown_id, 2 AS history_order, 'IN_PROGRESS' AS action
       UNION ALL
       SELECT 1 AS breakdown_id, 3 AS history_order, 'CLOSED' AS action
       UNION ALL
       SELECT 2 AS breakdown_id, 1 AS history_order, 'OPEN' AS action
       UNION ALL
       SELECT 2 AS breakdown_id, 2 AS history_order, 'IN_PROGRESS' AS action
       UNION ALL
       SELECT 3 AS breakdown_id, 1 AS history_order, 'OPEN' AS action
       UNION ALL
       SELECT 3 AS breakdown_id, 2 AS history_order, 'IN_PROGRESS' AS action
       UNION ALL
       SELECT 3 AS breakdown_id, 3 AS history_order, 'WAITING_FOR_INPUT' AS action
    
    )
    SELECT breakdown_id
         , ARRAY_AGG(action ORDER BY history_order) AS actions
      FROM dataset
     GROUP BY breakdown_id

Result:

#breakdown_idactions

Is it a defect or a feature? And, more importantly, is there another way to get the array ordered by history_order?

AWS
Denis_A
질문됨 3년 전1816회 조회
1개 답변
0
수락된 답변

Hi,

If you upgrade your Athena engine to v2, the query that was failing on you should work.

https://docs.aws.amazon.com/athena/latest/ug/engine-versions-changing.html

AWS
hamltm
답변함 3년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠