Что такое DAG в Airflow?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
DAG в Airflow — это описанный в коде граф задач, где явно задан порядок выполнения. Он нужен для оркестрации пайплайнов: загрузки, обработки и проверки данных. Важно понимать, что DAG задаёт зависимости между шагами, а Airflow уже выполняет их по расписанию или по событию.
Определение:
DAG (Directed Acyclic Graph) — это направленный ациклический граф. В Airflow под DAG обычно понимают набор задач и связей между ними, где каждая задача может запускаться только после завершения зависимых задач.
"Направленный" означает, что связь идёт в одну сторону, а "ациклический" — что нельзя построить маршрут, который вернётся в исходную задачу.
Пример использования:
Типичный DAG в Airflow может описывать ETL-процесс: сначала загрузить данные из источника, затем очистить и преобразовать их, после чего записать результат в хранилище и отправить уведомление об успехе.
from airflow import DAG
from airflow.operators.empty import EmptyOperator
from datetime import datetime
with DAG(
dag_id="etl_example",
start_date=datetime(2024, 1, 1),
schedule="@daily",
catchup=False,
) as dag:
start = EmptyOperator(task_id="start")
extract = EmptyOperator(task_id="extract")
transform = EmptyOperator(task_id="transform")
load = EmptyOperator(task_id="load")
finish = EmptyOperator(task_id="finish")
start >> extract >> transform >> load >> finish
Пояснение кода:
В этом примере DAG создаётся через контекст with DAG(...) as dag:.
dag_id — уникальное имя пайплайна, start_date — дата, с которой Airflow может начать планирование, schedule="@daily" задаёт ежедневный запуск, а catchup=False отключает догоняющие запуски за прошлые даты.
EmptyOperator здесь используется как заглушка вместо реальных задач, а оператор >> задаёт порядок выполнения: каждая следующая задача стартует после завершения предыдущей.
Ключевые моменты:
- DAG в Airflow — это не сами данные, а описание процесса их обработки.
- Задачи в DAG связаны зависимостями и выполняются в заданном порядке.
- Граф должен быть ациклическим: циклы в зависимостях недопустимы.
- DAG обычно хранится как Python-код, что удобно для версионирования и review.
- Airflow использует DAG для планирования, мониторинга и повторных запусков задач.
- На собеседовании важно уметь отличать DAG как структуру графа от конкретных task/operator.