Выбор ответа Middle Parquet и партиционирование спрашивают часто обновлено

Когда predicate pushdown не помогает

Вопрос

Таблица событий в Parquet, запрос WHERE user_id = 42. Движок читает почти все row groups, хотя пользователь встречается редко. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Данные не отсортированы по userid: у каждой row group широкий min..max, и пропустить нечего. Пропуск row group возможен, только если значение вне её диапазона.

Варианты ответа

  1. Parquet не хранит статистики min и max для целочисленных колонок, только для строковых и дат
  2. Predicate pushdown работает только для строковых колонок с включённым словарным кодированием
  3. Нужно включить сжатие Gzip: со Snappy статистики row groups не записываются в футер файла
  4. Данные не отсортированы по user_id: у каждой row group широкий min..max, и пропустить нечегоправильный ответ

Разбор

Пропуск row group возможен, только если значение вне её диапазона. При случайном порядке почти в каждой группе есть и маленькие, и большие id. Сортировка или кластеризация по колонке фильтра (или bloom-фильтры Parquet) делают пропуск эффективным. Статистики для чисел есть, pushdown работает для любых сравнимых типов. Алгоритм сжатия на пропуск групп не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.