Оптимизация сканирования под-запроса Athena и данных LEFT JOIN - PullRequest
0 голосов
/ 07 октября 2019

Существует таблица с паркетным форматом данных 20 ГБ, и простой запрос даст результаты, отсканировав только 1 ГБ данных. select columns from table1 where id in (id1, id2, idn)

Если тот же запрос выполняется с подзапросом, таким как - select columns from table1 where id in (select id from table2 limit n) Этот запрос даст результаты при сканировании 20 ГБ, всей таблицы. Даже n - очень маленькое число, равное 10, 50 или 5000.

То же самое происходит с LEFT JOIN.

SELECT table1.* FROM
table2 LEFT JOIN table1
ON table2.id=table1.id 

Есть ли способ достичь этого, выполнив один запрос вместо выборки и сохраняя результат подзапроса и передавая его как аргументы в другой запрос? Какие-либо передовые практики того, как в настоящее время пользователи выполняют LEFT JOIN или подзапрос без полного сканирования таблиц в Афине?

Похожие вопросы- Вопрос -1 , Вопрос -2

1 Ответ

1 голос
/ 07 октября 2019

Есть ли способ достичь этого, запустив один запрос вместо извлечения и сохранения результата подзапроса и передачи в качестве аргументов в другой запрос?

Это чаще всего охватывается«Динамическая фильтрация». В настоящее время нет способа сделать это.

Athena основана на Presto, а Presto еще не поддерживает динамическую фильтрацию, но, вероятно, поддержит ее в следующем выпуске (Presto 321). Вы можете отследить проблему здесь: https://github.com/prestosql/presto/issues/52

Афина в настоящее время основана на Presto 0.172 , поэтому ей все еще нужно обновить.

...