Я работаю с 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, поэтому я не уверен, поддерживается ли он или нет.
Что обходной путь для этого в Афине?