Раздел 26 · Data Engineering

Идемпотентность и повторные запуски

junior~10 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Ночью 3 октября загрузка «Гонца» упала на последней минуте: сеть моргнула, и Airflow, как мы и настроили, повторил задачу. Утром Отто увидел, что 3 октября «Гонец» заработал в два раза больше обычного. Никакого чуда: повтор дописал заказы дня во второй раз. А через неделю бухгалтерия попросит перезалить первую неделю октября, и это будет третий раз. Повторы и перезаливки у дата-инженера случаются постоянно, поэтому каждая задача должна их переживать.

Кнопка лифта

Ты вызываешь лифт и жмёшь кнопку. Лифт не едет, и ты жмёшь ещё три раза. Приедет всё равно один лифт: повторное нажатие ничего не меняет, кнопка уже горит.

А теперь представь, что каждое нажатие вызывает отдельный лифт. Нервный пассажир собрал бы у своего этажа все лифты дома.

Кнопка лифта идемпотентна: сколько ни нажимай, результат один. Задача пайплайна должна быть такой же: запусти её за 3 октября один раз или пять, в хранилище окажутся одни и те же заказы.

Посмотри сам

Две загрузки одного дня, 1 июня, обе запущены дважды. Первая просто дописывает строки. Вторая сначала удаляет строки своего дня, потом вставляет заново, и всё это в одной транзакции.

Загрузка дня, запущенная дважды

База · courier

Загружаю редактор…

База загрузится, когда ты выполнишь запрос или откроешь таблицы.

Выполни запрос, чтобы увидеть результат.

Выполни весь запрос кнопкой или Ctrl/Cmd+Enter. Ctrl+Space открывает подсказки. Можно писать несколько команд через точку с запятой, менять данные и открывать транзакции. У каждой песочницы своя база, изменения живут до ухода со страницы. «Сбросить базу» возвращает учебные данные, но не меняет SQL.

В наивной таблице 666 строк и выручка 141 390 рублей, ровно вдвое больше настоящей. Во второй 333 строки и 70 695 рублей, сколько бы раз ни выполнить блок между BEGIN и COMMIT. Попробуй скопировать его ещё пару раз и проверь.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.