Факт доставок «Гонца» растёт каждый день. Сейчас в нём четыре месяца, через год будет двенадцать, через пять лет шестьдесят. А Отто почти всегда спрашивает про вчера или про прошлую неделю. Каждый такой запрос пробегает всю таблицу, чтобы найти несколько сотен нужных строк среди миллионов. Есть и вторая беда: ночной пайплайн за 1 июня упал на полпути, и его надо перезалить, не задев остальные дни.
Папки по месяцам
Бухгалтер хранит чеки. Можно сложить их в одну большую коробку, и тогда, чтобы найти чеки за март, придётся перебрать все. А можно завести по папке на месяц. Чеки за март лежат в папке «Март», и в другие папки за ними лезть не надо. Год закончился, и старые папки уезжают в архив целиком. Перепутал чеки за март, достал одну папку, переложил заново.
Партиционирование это такие папки для таблицы. Для запросов таблица остаётся одной, а внутри разложена на партиции по значению колонки. Эту колонку называют ключом партиционирования, и почти всегда это дата.
Что это даёт
Запрос читает только нужные партиции. Если в условии есть ключ партиционирования, база заранее знает, в каких папках искать, и остальные не открывает. Это называют отсечением партиций.
Перезаливка и удаление дёшевы. Чтобы перезалить июнь, достаточно очистить одну партицию и загрузить её заново, остальные месяцы не трогаются. Удалить старые данные можно, отцепив целую партицию, вместо медленного DELETE по миллионам строк. К этому мы вернёмся в уроке про повторные запуски.
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.