Было бы полезно, если бы вы опубликовали пример того, чего вы хотите достичь и как он сканирует слишком много. Ваш вопрос очень широкий и трудно ответить.
Если я вас правильно понимаю, я думаю, что вы можете достичь того, на что вы ссылаетесь, сделав что-то вроде:
SELECT *
FROM table1
WHERE something IN (SELECT something FROM table2 WHERE col1 = 'the thing' LIMIT 1)
Но уменьшит ли это количество отсканированных данных, зависит от ваших конкретных обстоятельств. Идея, лежащая в основе вышеприведенного запроса, заключается в том, что Athena проверяет только table2
, пока не найдет конкретную строку, к которой вы хотите присоединиться. Если вам не повезет, она все равно будет сканировать всю таблицу, поскольку не может найти значение или значение находится в конце.
Вы также можете использовать … WHERE EXISTS (SELECT …
, но согласно эта проблема Presto преобразуется в объединение и может означать, что вся таблица читается - хотя с LIMIT
это может быть не случай.