AWS Athena поддерживает Order by в Array_AGG? - PullRequest
0 голосов
/ 26 марта 2020

Я работаю с AWS Афиной, чтобы объединить несколько строк в один.

Пример таблицы: (имя: unload)

xid pid sequence    text
1   1   0           select * from
1   1   1           mytbl
1   1   2   
2   1   0           update test
2   1   1            set mycol=
2   1   2           'a';

Итак, хотите связаться с текстовым столбцом.

Ожидаемый результат:

xid pid text
1   1   select * from mytbl
2   1   update test set mycol='a';

I запустил следующий запрос, чтобы сначала разбить его на части в правильном порядке и выполнить конкатат.

with cte as
    (SELECT  
         xid,
        pid,

         sequence,
         text,
        row_number()
        OVER (PARTITION BY  xid,pid
    ORDER BY  sequence) AS rank
    FROM unload 
    GROUP BY   xid,pid,sequence,text
    )
SELECT 
         xid,
        pid,
        array_join(array_agg(text),'') as text
FROM cte
GROUP BY   xid,pid

Но если вы видите вывод ниже, порядок будет смещен.

xid pid text
1   1   mytblselect * from
2   1   update test'a'; set mycol=

Я проверил документацию Presto, последняя версия поддерживает order by в массиве agg, но Athena использует Presto 0.172, поэтому я не уверен, поддерживается ли он или нет.

Что обходной путь для этого в Афине?

...