Как разложить таблицу в озере
Вопрос
Как вы организуете хранение таблицы событий (1 млрд строк в день) в озере данных, чтобы запросы были быстрыми и дешёвыми?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Колоночный формат Parquet со сжатием Zstd или Snappy
Партиционирование по дате события, проверка размера партиций
Сортировка или кластеризация внутри партиции по частым фильтрам
Размер файлов сотни мегабайт, компакция мелких
Табличный формат для транзакций и эволюции схемы
Запросы фильтруют по колонке партиции и выбирают только нужные колонки
Что могут спросить следом
- Что делать, если события приходят с опозданием на несколько дней?
- Как часто запускать компакцию?
Разбор
Образцовый ответ: «Формат Parquet со сжатием Zstd: колоночное чтение, статистики, хорошее сжатие. Сверху табличный формат вроде Iceberg, чтобы были атомарные записи, удаления и эволюция схемы. Партиционирую по дате события: это основной фильтр, и миллиард строк в день даёт крупные партиции. Внутри дня сортирую по колонкам частых фильтров, например по типу события и стране, чтобы статистики row groups отсекали данные. Целевой размер файла сотни мегабайт; если пишет стриминг, регулярная компакция склеивает мелкие файлы. Опоздавшие события пишутся в свою дату, поэтому компакция идёт по нескольким последним партициям. И учу пользователей фильтровать по колонке партиции и не делать SELECT звёздочка».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.