Выбор ответа Middle Parquet и партиционирование спрашивают часто обновлено
Когда predicate pushdown не помогает
Вопрос
Таблица событий в Parquet, запрос WHERE user_id = 42. Движок читает почти все row groups, хотя пользователь встречается редко. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Данные не отсортированы по userid: у каждой row group широкий min..max, и пропустить нечего. Пропуск row group возможен, только если значение вне её диапазона.
Варианты ответа
- Parquet не хранит статистики min и max для целочисленных колонок, только для строковых и дат
- Predicate pushdown работает только для строковых колонок с включённым словарным кодированием
- Нужно включить сжатие Gzip: со Snappy статистики row groups не записываются в футер файла
- Данные не отсортированы по
user_id: у каждой row group широкий min..max, и пропустить нечегоправильный ответ
Разбор
Пропуск row group возможен, только если значение вне её диапазона. При случайном порядке почти в каждой группе есть и маленькие, и большие id. Сортировка или кластеризация по колонке фильтра (или bloom-фильтры Parquet) делают пропуск эффективным. Статистики для чисел есть, pushdown работает для любых сравнимых типов. Алгоритм сжатия на пропуск групп не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.