О сенсорах я вкратце рассказывал в разделе про основные компоненты Apache Airflow. Сейчас же самое время попробовать их на практике.
Сенсоры это разновидность операторов, чья задача реагировать на какое-либо событие и в зависимости от результата продолжать цепочку выполнения тасков или "засыпать" для повторной проверки через X секунд. Например, вы ожидаете появление файла в источнике (S3-бакет, FTP-сервер и т.д.). Если файл на месте, то можно продолжить цепочку задач — скачать, преобразовать, загрузить в другое место. Если файла ещё нет, то сенсор повторит проверку через заданное время (в секундах).
В Apache Airflow существует ряд готовых сенсоров на все случаи жизни:
python_callable
, и в случае, если она возвращает True продолжает цепочку дальше.Это далеко не весь список сенсоров, с базовыми сенсорами Airflow можно познакомиться по ссылке.
Как же нам применить сенсоры в работе с датасетом поездок на такси? Очень просто. Можно заменить SimpleHttpOperator
на HttpSensor
с минимальными модификациями. Во-первых, будет происходить точно такая же проверка наличия файла перед его загрузкой. Во-вторых, в случае если файла нет на сервере, то таск не будет падать, а будет автоматически перезапускаться через заданный интервал для повторной проверки.
Обратите внимание, что на сайте https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page нет данных за 2021 год хотя прошло 2 полных месяца (январь и февраль), датасеты появляются с задержкой в несколько месяцев. Поэтому реализация через сенсор имеет большой плюс — не нужно самостоятельно следить когда данные появятся на сайте и перезапускать DAG для конкретного месяца. Датасет будет загружен автоматически как только данные станут доступны на сайте.
Приступим к реализации.
Спасибо, добавил! =) Как то потерялся текст при копировании из редактора.
Alexander Anfimov 6 Июль 2021
В пятом пункте: повторяет его пока что?