Step 1 of 5

О сенсорах я вкратце рассказывал в разделе про основные компоненты Apache Airflow. Сейчас же самое время попробовать их на практике.

Сенсоры это разновидность операторов, чья задача реагировать на какое-либо событие и в зависимости от результата продолжать цепочку выполнения тасков или "засыпать" для повторной проверки через X секунд. Например, вы ожидаете появление файла в источнике (S3-бакет, FTP-сервер и т.д.). Если файл на месте, то можно продолжить цепочку задач — скачать, преобразовать, загрузить в другое место. Если файла ещё нет, то сенсор повторит проверку через заданное время (в секундах).

В Apache Airflow существует ряд готовых сенсоров на все случаи жизни:

  1. PythonSensor — выполняет функцию, переданную в python_callable, и в случае, если она возвращает True продолжает цепочку дальше.
  2. DateTimeSensor — ждёт наступления заданной даты и времени
  3. S3KeySensor — ждёт появления S3-объекта по переданному пути
  4. FileSensor — проверяет появился ли файл или директория с файлом по заданному пути
  5. HttpSensor — делает запрос на заданный URL, повторяет его пока удалённый хост не вернёт успешный запрос (статусы 2xx)

Это далеко не весь список сенсоров, с базовыми сенсорами Airflow можно познакомиться по ссылке.

Как же нам применить сенсоры в работе с датасетом поездок на такси? Очень просто. Можно заменить SimpleHttpOperator на HttpSensor с минимальными модификациями. Во-первых, будет происходить точно такая же проверка наличия файла перед его загрузкой. Во-вторых, в случае если файла нет на сервере, то таск не будет падать, а будет автоматически перезапускаться через заданный интервал для повторной проверки.

Обратите внимание, что на сайте https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page нет данных за 2021 год хотя прошло 2 полных месяца (январь и февраль), датасеты появляются с задержкой в несколько месяцев. Поэтому реализация через сенсор имеет большой плюс — не нужно самостоятельно следить когда данные появятся на сайте и перезапускать DAG для конкретного месяца. Датасет будет загружен автоматически как только данные станут доступны на сайте.

Приступим к реализации.

Comments

В пятом пункте: повторяет его пока что?

Спасибо, добавил! =) Как то потерялся текст при копировании из редактора.