| name | airflow-1-dag-design-principles |
| description | Sub-skill of airflow: 1. DAG Design Principles (+3). |
| version | 1.0.0 |
| category | operations |
| type | reference |
| scripts_exempt | true |
1. DAG Design Principles (+3)
1. DAG Design Principles
dag_id='sales_daily_etl_pipeline'
dag_id='dag1'
max_active_runs=1
max_active_tasks_per_dag=16
tags=['production', 'etl', 'sales']
catchup=False
execution_timeout=timedelta(hours=2)
2. Task Best Practices
def process_partition(partition_date: str):
"""Idempotent: can be safely re-run."""
delete_partition(partition_date)
insert_data(partition_date)
default_args = {
'retries': 3,
'retry_delay': timedelta(minutes=5),
'retry_exponential_backoff': True,
}
3. Configuration Management
batch_size = Variable.get('batch_size', default_var=1000)
conn = BaseHook.get_connection('my_database')
env = Variable.get('environment')
config = Variable.get(f'config_{env}', deserialize_json=True)
4. Testing DAGs
import pytest
from airflow.models import DagBag
def test_dag_loads():
"""Test that DAGs load without errors."""
dagbag = DagBag()
assert len(dagbag.import_errors) == 0
def test_dag_structure():
"""Test DAG has expected structure."""
dagbag = DagBag()
dag = dagbag.get_dag('my_pipeline')
assert dag is not None
assert len(dag.tasks) == 5
assert dag.schedule_interval == '@daily'