Выбор ответа Senior Parquet и партиционирование обновлено

Фильтр не по колонке партиции

Вопрос

Таблица партиционирована по event_date. Запрос WHERE CAST(event_ts AS date) = DATE '2025-09-01' читает все партиции. Почему?

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

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

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

Коротко

Правильный ответ: Фильтр стоит на eventts, и движок не может вывести из него eventdate для pruning. Pruning работает по условиям на колонке партиции.

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

  1. Фильтр стоит на event_ts, и движок не может вывести из него event_date для pruningправильный ответ
  2. Partition pruning работает только для партиций типа string, а дата хранится как date
  3. Партиции по дате читаются целиком, если в фильтре есть приведение типов CAST
  4. Нужно добавить ORDER BY event_date, иначе движок не знает порядок партиций и читает все

Разбор

Pruning работает по условиям на колонке партиции. Движок не знает, что event_date всегда равно дате из event_ts. Нужно фильтровать по event_date (или по обеим колонкам). Скрытое партиционирование Iceberg решает эту проблему: партиция задана как трансформация day(event_ts), и фильтр по event_ts использует её. Тип колонки не ограничен строками. Сортировка результата на чтение не влияет.

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

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