AWS Athena, паркет и предикатный пуш-ап - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь понять связь между разделением и предикатом pushdown.Представьте, что мы используем AWS Athena для работы с данными, хранящимися в S3 в формате Parquet.Набор данных разделен на столбцы date и type.Он также содержит столбец subtype, который всегда равен NULL, если type равен X.

Я пытаюсь выполнить запрос ниже

SELECT date, type, subtype FROM tablename WHERE date = '01012001' AND subtype IS NOT NULL;

Запрос сканирует тот же объем данных, что и

SELECT date, type, subtype FROM tablename WHERE date = '01012001' AND type <> X AND subtype IS NOT NULL;

Однако последний запрос выполняется значительно быстрее (около 30%)

Я пытаюсьпонять что происходит под капотом.Я предполагаю, что во втором случае исполнитель сканирует только те разделы, которые имеют заданный тип и дату, тогда как в первом случае он пытается сканировать все файлы, удовлетворяющие требованию даты, независимо от их типа.Это требует больше времени, даже если записи с подтипом NULL пропускаются, фактическая стоимость запроса остается той же.

Если бы кто-то мог проверить мои предположения и, если они ошибочны, исправить это, я был бы очень признателен.

1 Ответ

0 голосов
/ 24 января 2019

Вы упомянули, что данные разбиты на date и type.

В запросе WHERE date = '01012001' AND type <> X AND subtype IS NOT NULL, Presto (Афина) должен иметь доступ только к соответствующим файлам.

В запросе WHERE date = '01012001' AND subtype IS NOT NULL Presto получит доступ ко всем файлам для заданного date (для всех значений type).Благодаря информации, хранящейся в метаданных файла Parquet, файл может быть пропущен как не содержащий не NULL значений subtype.Однако выборка метаданных по-прежнему требует времени, поскольку при доступе к хранилищу возникает задержка (S3).

...