Ответ вслух Senior Parquet и партиционирование спрашивают часто обновлено

Как разложить таблицу в озере

Вопрос

Как вы организуете хранение таблицы событий (1 млрд строк в день) в озере данных, чтобы запросы были быстрыми и дешёвыми?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Образцовый ответ: «Формат Parquet со сжатием Zstd: колоночное чтение, статистики, хорошее сжатие. Сверху табличный формат вроде Iceberg, чтобы были атомарные записи, удаления и эволюция схемы.

Что должно прозвучать в ответе

  • Колоночный формат Parquet со сжатием Zstd или Snappy

  • Партиционирование по дате события, проверка размера партиций

  • Сортировка или кластеризация внутри партиции по частым фильтрам

  • Размер файлов сотни мегабайт, компакция мелких

  • Табличный формат для транзакций и эволюции схемы

  • Запросы фильтруют по колонке партиции и выбирают только нужные колонки

Что могут спросить следом

  • Что делать, если события приходят с опозданием на несколько дней?
  • Как часто запускать компакцию?

Разбор

Образцовый ответ: «Формат Parquet со сжатием Zstd: колоночное чтение, статистики, хорошее сжатие. Сверху табличный формат вроде Iceberg, чтобы были атомарные записи, удаления и эволюция схемы. Партиционирую по дате события: это основной фильтр, и миллиард строк в день даёт крупные партиции. Внутри дня сортирую по колонкам частых фильтров, например по типу события и стране, чтобы статистики row groups отсекали данные. Целевой размер файла сотни мегабайт; если пишет стриминг, регулярная компакция склеивает мелкие файлы. Опоздавшие события пишутся в свою дату, поэтому компакция идёт по нескольким последним партициям. И учу пользователей фильтровать по колонке партиции и не делать SELECT звёздочка».

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

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