Airflow organizes work into Directed Acyclic Graphs (DAGs). Each DAG contains tasks with dependencies:
from airflow import DAG
from airflow.operators.python import PythonOperator
with DAG('daily_etl', schedule='@daily') as dag:
extract = PythonOperator(task_id='extract', ...)
transform = PythonOperator(task_id='transform', ...)
load = PythonOperator(task_id='load', ...)
extract >> transform >> load
DAG: The workflow definition. No cycles allowed (A can't depend on B if B depends on A).
Task: A single unit of work. Tasks are instances of Operators.