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
- Prefect — Python-native, проще в развёртывании, меньше boilerplate. Популярен в стартапах.
- Dagster — фокус на data assets, а не на задачах. Удобен для аналитиков: описываете «что хотите получить», а не «что запустить».
- Luigi — лёгкий оркестратор от Spotify. Проще Airflow, но менее мощный.
- dbt Cloud — для оркестрации SQL-трансформаций. Не заменяет Airflow полностью, но покрывает T в ELT.
Airflow — стандарт индустрии. Даже если компания использует альтернативу, концепции (DAG, задачи, зависимости, расписание) — те же.
Вопросы с собеседований
Что такое Airflow и зачем он нужен? — Оркестратор задач для дата-пайплайнов. Управляет порядком выполнения, расписанием и ретраями. Решает проблему хаоса из cron-скриптов: зависимости, мониторинг, логи, алерты.
Что такое DAG? — Directed Acyclic Graph — описание пайплайна: набор задач и зависимостей между ними. «Directed» — задачи выполняются в определённом порядке. «Acyclic» — нет циклических зависимостей.
Чем Airflow лучше cron? — Зависимости между задачами (cron запускает всё независимо), ретраи, централизованные логи, веб-интерфейс для мониторинга, backfill за прошлые даты.
Данные в дашборде пустые за вчера. Ваши действия? — Проверить Airflow: нашёл ли DAG, отработал ли он, есть ли ошибки в логах. Если DAG упал — перезапустить руками или дождаться ретрая. Если не запускался — проверить расписание и триггеры.
Что такое 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+ вопросов, которые спрашивают на собеседованиях аналитика. Бесплатно.