Могу ли я использовать Athena / Presto для сортировки таблицы перед записью?

Я хочу заархивировать свои журналы в формате Parquet. Перед написанием таблицы я хочу отсортировать ее по столбцу c, чтобы каждый файл Parquet имел только небольшой диапазон c. Это позволит Athena / Presto эффективно сканировать таблицу, когда запрос включает предложение WHERE в столбце c (с помощью раскрывающегося вниз предиката).

Однако мне неясно, могу ли я использовать Athena или Presto для сортировки всей таблицы. Мне нужна распределенная сортировка, а не сортировка на одном узле, потому что набор данных слишком велик, чтобы поместиться на одном узле. Возможен ли такой сорт? Если да, то как его вызвать?


person conradlee    schedule 12.03.2019    source источник


Ответы (2)


Presto поддерживает распределенную сортировку с версии 0.206. Athena в настоящее время основана на Presto 0.172 и я не знаю, поддержали ли они эту функцию.

Итак, ваш выбор

  • скачать последнюю версию Presto @ https://trino.io/download.html
  • легко развернуть Presto на AWS из Starburst (https://www.starburstdata.com/presto-aws-cloud/) (отказ от ответственности: я из Starburst)
  • используйте Presto в комплекте с EMR (я не знаю, как он настроен, но, вероятно, распределенная сортировка все еще включена по умолчанию)
person Piotr Findeisen    schedule 12.03.2019
comment
подождите, это действительно позволяет обойти ограничения памяти предыдущих сортов presto? Откуда здесь (prestodb.github.io/docs/current/admin/ dist-sort.html), все данные по-прежнему находятся на одном узле. «Распределенная» часть сортировки заключается в том, что некоторая предварительная сортировка происходит распределенным образом, прежде чем все данные попадут на один узел. - person conradlee; 12.03.2019
comment
Окончательная сортировка слиянием выполняется на одном узле, но выполняется в потоковом режиме (подумайте: слияние часть алгоритма сортировки слиянием). Сравните это с нераспределенной сортировкой, когда все данные хранятся в памяти одного узла до сортировки (также в памяти). - person Piotr Findeisen; 12.03.2019
comment
Спасибо за разъяснения. Если вы добавите это к ответу и в основном скажете, что «нет возможности сделать это полностью распределенным (и, следовательно, масштабируемым) способом в presto», то я приму ваш ответ. - person conradlee; 12.03.2019
comment
В вопросе, который у вас есть ... потому что набор данных слишком велик для размещения на одном узле - это ограничение снимается при использовании распределенной сортировки, потому что распределенная сортировка масштабируется с точки зрения использования памяти. Я согласен с тем, что он не масштабируется с точки зрения времени обработки. - person Piotr Findeisen; 12.03.2019
comment
ах, мне кажется, я неправильно понял, как потоковая природа сортировки слиянием решает проблему с памятью. Если он обойдет узкое место в памяти, тогда да, это решение проблемы, которую я изложил. Я приму ответ. - person conradlee; 12.03.2019

Движок Athena версии 2 (выпущенный 13 ноября 2020 г.) теперь поддерживает распределенную ORDER BY функцию Presto:

https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html#:%7E:text=engine%20version%202.-,Query%20Performance,-Помечено%20tables%20%E2%80%93%20Улучшено

Операции ORDER BY - ORDER BY теперь распределяются по умолчанию, что позволяет использовать более крупные предложения ORDER BY.

person thenickdude    schedule 14.05.2021