Apache Airflow — что это и зачем аналитику

Что такое Apache Airflow

Apache Airflow — это оркестратор задач. Он управляет порядком, расписанием и зависимостями между задачами в пайплайне данных. Проще говоря: Airflow запускает ваши скрипты в нужное время, в нужном порядке, и сообщает, если что-то сломалось.

Представьте: каждое утро нужно выгрузить данные из продуктовой базы, очистить их, загрузить в хранилище и обновить дашборд. Без оркестратора это четыре скрипта на cron, и если второй упал — третий и четвёртый всё равно запустятся на пустых данных. Airflow решает эту проблему: он знает зависимости между задачами и не запустит следующую, пока предыдущая не завершилась успешно.

На собеседованиях аналитиков Airflow спрашивают всё чаще — особенно для позиций middle+ и в компаниях, где аналитики работают близко к data engineering. Не обязательно уметь писать DAG-и с нуля, но понимать концепции — must have.

Какую проблему решает Airflow

Без оркестратора типичная дата-команда живёт так:

  • 20 Python-скриптов на cron, никто не помнит, что от чего зависит
  • Упал один скрипт — остальные дали мусорные данные
  • Нет логов, нет алертов, нет ретраев
  • Чтобы перезапустить — надо зайти на сервер и руками запустить нужные скрипты

Airflow заменяет этот хаос единой системой:

  • Зависимости: задача B не запустится, пока не завершится задача A
  • Расписание: запуск по cron-выражению (каждый день в 3:00, каждый понедельник)
  • Ретраи: если задача упала — автоматическая повторная попытка
  • Мониторинг: веб-интерфейс с логами, статусами, историей запусков
  • Алерты: уведомление в Slack/почту, если пайплайн упал

Ключевые концепции

DAG (Directed Acyclic Graph)

DAG — основная единица в Airflow. Это описание вашего пайплайна: какие задачи выполнять и в каком порядке. «Directed» — задачи выполняются в определённом направлении. «Acyclic» — без циклов, задача не может зависеть сама от себя.

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime

dag = DAG(
    'daily_etl',
    schedule_interval='0 3 * * *',  # каждый день в 3:00
    start_date=datetime(2026, 1, 1),
    catchup=False
)

Task (задача)

Task — отдельная операция внутри DAG: выполнить SQL-запрос, запустить Python-скрипт, отправить файл в S3. Задачи связаны зависимостями:

extract >> transform >> load >> notify

Здесь extract выполняется первым, за ним transform, потом load, в конце notify. Если transform упал — load и notify не запустятся.

Operator (оператор)

Оператор — шаблон для задачи. Вместо того чтобы каждый раз писать с нуля, вы используете готовые операторы:

  • PythonOperator — запускает Python-функцию
  • BashOperator — выполняет bash-команду
  • PostgresOperator — выполняет SQL-запрос в PostgreSQL
  • S3ToRedshiftOperator — копирует данные из S3 в Redshift
  • EmailOperator — отправляет email

Есть сотни готовых операторов для разных систем: BigQuery, Snowflake, Spark, Docker.

Практический пример: ежедневный ETL

Задача: каждое утро выгружать новые заказы из продуктовой базы, считать дневные агрегаты и загружать в хранилище.

from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.providers.postgres.operators.postgres import PostgresOperator
from datetime import datetime, timedelta

default_args = {
    'retries': 2,
    'retry_delay': timedelta(minutes=5),
}

with DAG(
    'daily_orders_etl',
    default_args=default_args,
    schedule_interval='0 3 * * *',
    start_date=datetime(2026, 1, 1),
    catchup=False,
) as dag:

    extract = PostgresOperator(
        task_id='extract_orders',
        postgres_conn_id='prod_db',
        sql="""
            INSERT INTO staging.raw_orders
            SELECT * FROM orders
            WHERE created_at >= '{{ ds }}'
              AND created_at < '{{ next_ds }}'
        """,
    )

    transform = PostgresOperator(
        task_id='build_daily_stats',
        postgres_conn_id='warehouse',
        sql="""
            INSERT INTO mart.daily_order_stats
            SELECT
                DATE(created_at) AS order_date,
                COUNT(*) AS order_count,
                SUM(amount) AS revenue,
                AVG(amount) AS avg_check
            FROM staging.raw_orders
            WHERE DATE(created_at) = '{{ ds }}'
            GROUP BY DATE(created_at)
        """,
    )

    notify = PythonOperator(
        task_id='send_alert',
        python_callable=lambda: print("ETL завершён"),
    )

    extract >> transform >> notify

{{ ds }} — это шаблонная переменная Airflow: дата исполнения в формате YYYY-MM-DD. Airflow подставляет её автоматически, и вы можете перезапустить DAG за прошлую дату — данные будут корректными.

Подробнее об ETL-процессах — в отдельной статье.

Airflow vs cron

cron Airflow
Зависимости между задачами Нет Да, через DAG
Ретраи при ошибке Нет Да, настраиваемые
Логи В файле, если настроили Веб-интерфейс
Мониторинг Нет Дашборд, алерты
Backfill (перезапуск за прошлые даты) Руками Встроенный
Порог входа Одна строка в crontab Нужно развернуть Airflow

Cron отлично работает для одного-двух простых скриптов. Когда пайплайнов становится больше пяти и появляются зависимости — пора переходить на Airflow.

Когда аналитик сталкивается с Airflow

Аналитик обычно не пишет DAG-и — это работа data-инженера. Но знать Airflow нужно в нескольких ситуациях:

«Почему данные за вчера пустые?» — Первое, что нужно проверить: отработал ли ETL-пайплайн. Откройте Airflow UI, найдите нужный DAG, посмотрите статус последнего запуска. Красный — упал, зелёный — успешно.

«Нужна новая витрина данных» — Вы написали SQL-запрос для новой аналитической таблицы. Чтобы она обновлялась автоматически, нужно добавить task в DAG. Если вы можете сделать это сами — ускоряете процесс в разы.

«Данные пришли с задержкой» — Airflow показывает время выполнения каждой задачи. Если extract выполнялся 3 часа вместо обычных 10 минут — продуктовая база под нагрузкой. Вы видите это в логах, а не гадаете.

Собеседование — На позициях middle+ ожидают, что вы понимаете, как данные попадают в хранилище. «Расскажите, как устроен ETL в вашей компании» — частый вопрос. Ответ «Airflow запускает DAG каждую ночь» показывает инженерную грамотность.

Альтернативы Airflow

  • PrefectPython-native, проще в развёртывании, меньше boilerplate. Популярен в стартапах.
  • Dagster — фокус на data assets, а не на задачах. Удобен для аналитиков: описываете «что хотите получить», а не «что запустить».
  • Luigi — лёгкий оркестратор от Spotify. Проще Airflow, но менее мощный.
  • dbt Cloud — для оркестрации SQL-трансформаций. Не заменяет Airflow полностью, но покрывает T в ELT.

Airflow — стандарт индустрии. Даже если компания использует альтернативу, концепции (DAG, задачи, зависимости, расписание) — те же.

Вопросы с собеседований

  1. Что такое Airflow и зачем он нужен? — Оркестратор задач для дата-пайплайнов. Управляет порядком выполнения, расписанием и ретраями. Решает проблему хаоса из cron-скриптов: зависимости, мониторинг, логи, алерты.

  2. Что такое DAG? — Directed Acyclic Graph — описание пайплайна: набор задач и зависимостей между ними. «Directed» — задачи выполняются в определённом порядке. «Acyclic» — нет циклических зависимостей.

  3. Чем Airflow лучше cron? — Зависимости между задачами (cron запускает всё независимо), ретраи, централизованные логи, веб-интерфейс для мониторинга, backfill за прошлые даты.

  4. Данные в дашборде пустые за вчера. Ваши действия? — Проверить Airflow: нашёл ли DAG, отработал ли он, есть ли ошибки в логах. Если DAG упал — перезапустить руками или дождаться ретрая. Если не запускался — проверить расписание и триггеры.

  5. Что такое backfill? — Перезапуск DAG за прошлые даты. Если ETL не работал три дня — backfill прогонит пайплайн за каждый пропущенный день отдельно, подставляя правильные даты.

FAQ

Нужно ли аналитику уметь писать DAG-и в Airflow?

Для джуна — нет. Достаточно понимать концепции: что такое DAG, как зависимости работают, как смотреть логи. Для middle+ аналитика — крайне желательно: умение добавить SQL-задачу в существующий DAG ускоряет работу и показывает инженерную зрелость.

Где попрактиковаться с Airflow?

Установите через Docker Compose — официальная документация описывает процесс за 10 минут. Создайте простой DAG, который читает CSV, трансформирует данные и записывает в PostgreSQL. Это покрывает 80% того, что спрашивают на собеседованиях.

Airflow или dbt — что важнее для аналитика?

Они решают разные задачи: Airflow оркестрирует (когда и в каком порядке запускать), dbt трансформирует (SQL-модели в хранилище). Часто используются вместе: Airflow запускает dbt по расписанию. Если выбирать одно — dbt ближе к ежедневной работе аналитика.


Потренируйте вопросы по ETL и дата-инженерии на реальных задачах — откройте тренажёр. 1500+ вопросов, которые спрашивают на собеседованиях аналитика. Бесплатно.