У меня есть файл паркета размером 25 тыс. Строк (всего 469,5 килобайта), где каждый элемент паркета имеет уникальный целочисленный идентификатор. Зная это, я поместил индекс в этот столбец, но он не показывает, что индексирование столбца фактически влияет на производительность при использовании athena (aws service)/prestodb (базовый движок). Я пытаюсь сделать простой выбор, где я хочу вытащить одну из строк id-
SELECT *
FROM widgets w
WHERE w.id = 1
Столбец id
проиндексирован, поэтому, как только prestodb находит это совпадение, он не должен делать никакого дальнейшего сканирования. Столбец также упорядочен, поэтому он должен иметь возможность выполнять двоичный поиск, чтобы разрешить местоположение вместо немого сканирования.
Я могу сказать, правильно ли используется индекс, поскольку athena возвращает количество байтов, отсканированных в операции. С индексом и без него athena возвращает размер байта самого файла в качестве размера сканирования, то есть сканирует весь файл. Чтобы быть уверенным, что заказ, чтобы идентификатор был самой первой строкой, также не повлиял.
Разве это невозможно в текущей версии athena/prestodb? Я использую python, pandas и pyarrow.
Вы не указали, как вы создали индекс, я предполагаю, что вы говорите об индексе Hive. Согласно 1 и 2, Presto не поддерживает индексы улья. Согласно 3, Hive сам отказался от поддержки для них в Hive 3.
Это отвечает на ваш вопрос относительно того, почему присутствие индекса не влияет на то, как Presto выполняет запрос. Итак, какие другие способы ограничить объем данных, которые необходимо обработать?
Обратите внимание, однако, что все эти меры имеют смысл только для размеров данных, превышающих 500KB. Фактически, сам Паркет является излишним для таких маленьких столов. Размер по умолчанию для группы строк составляет 128 МБ, и ожидается, что у вас будет много групп строк.