Как заставить Афину / Престо распознать индекс паркета? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть 25-килобайтный файл паркета «строка» (всего 469,5 КБ), где каждый элемент в паркете имеет уникальный целочисленный идентификатор.Зная это, я поместил индекс в этот столбец, но он не отображается, поскольку индексирование столбца фактически влияет на производительность при использовании Athena (сервис AWS) / Presto (базовый движок).Я пытаюсь сделать простой выбор из того места, где я хочу вытащить одну из строк по ее id-

SELECT *
FROM widgets w
WHERE w.id = 1

. Столбец id проиндексирован, поэтому, как только Presto находит это совпадение, делать это не следует.любое дальнейшее сканирование.Столбец также упорядочен, поэтому он должен быть в состоянии выполнить бинарный поиск для определения местоположения вместо тупого сканирования.

Я могу сказать, правильно ли используется индекс со времен Афинывозвращает количество байтов, отсканированных в операции.С индексом и без него Athena возвращает размер самого файла в байтах в качестве размера сканирования, то есть сканирует весь файл.Просто чтобы быть уверенным, порядок так, чтобы id был самой первой строкой, также не имел влияния.

Разве это невозможно в текущей версии Athena / Presto?Я использую питона, панд и пиарроу.

1 Ответ

0 голосов
/ 24 сентября 2018

Вы не указали, как создали индекс, я предполагаю, что вы говорите об индексе Hive.Согласно 1 и 2 , Presto не поддерживает индексы Hive.Согласно 3 , сам Hive прекратил поддержку для них в Hive 3.

Это отвечает на ваш вопрос относительно того, почему присутствие индекса не влияет на то, как Presto выполняет запрос.Итак, какие существуют другие способы ограничения объема данных, которые должны быть обработаны?

  • Метаданные паркета включают минимальное и максимальное значения для каждой группы строк для каждого столбца.Если в вашей таблице несколько групп строк, будут прочитаны только те из них, которые потенциально могут совпадать.
  • Предстоящая функция PARQUET-1201 добавит индексы на уровне страниц в сами файлы Parquet.
  • Если вы запрашиваете определенные столбцы, будут прочитаны только эти столбцы.
  • Если ваша таблица разбита на разделы, фильтрация по столбцу «разделить по» будет считывать только этот раздел.

Обратите внимание, однако, что все эти меры имеют смысл только для размеров данных несколько десятков раз больше, чем 500 КБ.Фактически, сам Паркет является излишним для таких маленьких столов.Размер группы строк по умолчанию составляет 128 МБ, и ожидается, что у вас будет много групп строк.

...