Выбор ответа Senior Parquet и партиционирование обновлено
Фильтр не по колонке партиции
Вопрос
Таблица партиционирована по event_date. Запрос WHERE CAST(event_ts AS date) = DATE '2025-09-01' читает все партиции. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Фильтр стоит на eventts, и движок не может вывести из него eventdate для pruning. Pruning работает по условиям на колонке партиции.
Варианты ответа
- Фильтр стоит на
event_ts, и движок не может вывести из негоevent_dateдля pruningправильный ответ - Partition pruning работает только для партиций типа string, а дата хранится как date
- Партиции по дате читаются целиком, если в фильтре есть приведение типов CAST
- Нужно добавить
ORDER BY event_date, иначе движок не знает порядок партиций и читает все
Разбор
Pruning работает по условиям на колонке партиции. Движок не знает, что event_date всегда равно дате из event_ts. Нужно фильтровать по event_date (или по обеим колонкам). Скрытое партиционирование Iceberg решает эту проблему: партиция задана как трансформация day(event_ts), и фильтр по event_ts использует её. Тип колонки не ограничен строками. Сортировка результата на чтение не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.