Запрос по нескольким значениям из таблицы AWS Athena - PullRequest
0 голосов
/ 15 октября 2019

У меня есть таблица с интервалами, из которой я хочу сделать запрос по нескольким значениям. Вот пример:

SELECT *
FROM my_bucketed_table
WHERE bucketed_column IN (value1, value2)

Результатом является полное сканирование таблицы вместо использования индекса.

Когда я использовал объединение для запроса каждого значения за раз, оно работало какожидается с точки зрения отсканированных данных:

SELECT *
FROM my_bucketed_table
WHERE bucketed_column = value1
UNION
SELECT *
FROM my_bucketed_table
WHERE bucketed_column = value2

, но я хочу, чтобы список был динамическим, поэтому это решение недостаточно для меня.

Я ожидаю, что отсканированные данные будут такими жекак в решении UNION с использованием оператора IN или JOIN с другой таблицей

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Это немного длинно для комментария.

Я думаю, что вы имеете в виду сокращение раздела, которое немного отличается от "использования индекса". Вы хотите, чтобы запрос считывал только соответствующие разделы.

Удаление разделов довольно сложно. Основная проблема заключается в том, что запрос должен знать, какие данные нужно прочитать , прежде чем начнет выполнять запрос. Обычно это выполняется с помощью явных сравнений столбца секционирования.

Определение правильных разделов должно корректно работать с =, >, >=, < и <=. С in и not in это может быть сложнее. Это, вероятно, не будет работать, если вы используете join для одной таблицы и не будете явно включать раздел для обеих таблиц в объединение.

0 голосов
/ 15 октября 2019

вы можете попробовать, как показано ниже, что может помочь в использовании индекса

SELECT *
FROM my_bucketed_table
WHERE bucketed_column = 0000 or bucketed_column IN (value1, value2)

при условии, что в вашем столбце нет значения 0000

...