Вы соберёте пайплайн на Airflow 3, который безопасно перезапускать за любой день, и сдадите его проверке без задвоенных строк в таблице. Пайплайны на cron с ручными перезапусками дают дубли и пропуски, а о сбое узнают от пользователей. Ставить ничего не нужно: лабораторные идут в браузере на настоящем Airflow 3.3 с живым терминалом.
Окно со 2 по 6 ноября, расписание по будням в 02:00, и в выводе четыре запуска, а не пять. Пятая дата не попала за правую границу. Такое лучше увидеть до перезапуска, а не после.
Тот же вопрос про catchup: DAG со start_date в январе, включённый в ноябре с catchup=True, создаёт около 315 запусков сразу. В курсе вы сначала смотрите, что запланирует Airflow, и только потом запускаете.
Python на уровне функций, модулей и декораторов
Базовый SQL: SELECT, INSERT, GROUP BY
Знать Airflow заранее не нужно
Суточный DAG стартует после конца интервала: данные за 9 марта целиком появляются к полуночи 10-го. Вывод airflow dags test показывает все четыре времени рядом, и вы сами видите, чем ds отличается от начала интервала.
Поэтому задача, которая берёт «вчера» через datetime.now(), после перезапуска через неделю пишет не тот день. Лабораторная проверяет ваш DAG на двух датах, которых в условии нет: зашитая дата не пройдёт.
Три строки заказов на сумму 37.75 после двойного запуска с обычным INSERT превращаются в шесть строк на 75.5. Ошибки при этом нет, просто отчёт врёт. Ретраи делают такой двойной запуск обычным делом.
Курс показывает и границу решения: INSERT OR REPLACE не удаляет строки, которых в новом источнике уже нет. Если источник могут исправить в меньшую сторону, нужна перезапись партиции в одной транзакции.
Каждая лабораторная принимается проверкой, а не самооценкой. Проверка запускает ваш DAG командой airflow dags test, смотрит на состояния задач, созданные файлы и содержимое sqlite, а для идемпотентности запускает загрузку повторно и сравнивает число строк и контрольную сумму.
Итоговая работа: пайплайн ETL на файлах и sqlite. Он не загружается, потом падает на данных, потом дублирует строки при ретрае. Вы чините причины по очереди и добавляете pytest, который не даст им вернуться.
Инженерам данных, которые переводят скрипты по cron в пайплайны с историей запусков
Бэкенд-разработчикам, которым поручили регулярные загрузки и отчёты
DevOps-инженерам, которые сопровождают чужие DAG и разбирают ночные падения
Вы также можете задать любой вопрос по курсу у поддержки t.me/mentorix_support
Модулей: 7, уроков: 31. Задачи с кодом проверяются автоматически.
Стоимость курса: 5990 ₽