Authoring Airflow DAGs

Rédigez des DAGs Apache Airflow de niveau production avec l'API TaskFlow — tâches idempotentes, ordonnancement et rattrapage corrects, tentatives/SLA, connexions/variables, et évitement du code de niveau supérieur.

Qu'est-ce que Authoring Airflow DAGs ?

Ce skill guide le développement de DAGs Airflow robustes en utilisant l'API TaskFlow. Il met l'accent sur l'idempotence des tâches (paramétrées par l'intervalle de données), l'évitement du code lourd au niveau supérieur (pour ne pas ralentir le scheduler), la configuration délibérée de l'ordonnancement et du rattrapage, ainsi que la gestion des tentatives et des SLA. Il est utile lors de la création ou de la révision de DAGs, de l'ordonnancement de pipelines, du câblage des dépendances entre tâches, de la configuration des tentatives et des backfills, ou de la correction de tâches non idempotentes. Il s'applique aux environnements Airflow (y compris Cloud Composer, MWAA, Astronomer) et propose des patterns concrets pour passer de petites données via XCom (valeurs de retour) et de gros volumes via le stockage externe, ainsi que l'utilisation de connexions et variables pour les secrets.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Unknown-333/awesome-data-engineering-skills/tree/main/skills/authoring-airflow-dags

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Rédaction de DAGs Airflow

Quand l'utiliser

  • Créer ou refactoriser des DAGs et tâches Airflow.
  • Configurer les ordonnancements, rattrapages/backfills, tentatives et SLA.
  • Passer des données entre tâches (XCom) ou utiliser des connexions/variables.
  • NE PAS l'utiliser pour diagnostiquer un DAG en panne (utiliser debugging-airflow-pipelines).

Workflow

- [ ] Rendre chaque tâche idempotente et paramétrée par l'intervalle de données
- [ ] Garder le code coûteux/lourd à l'intérieur des tâches, pas au niveau supérieur du module
- [ ] Définir délibérément l'ordonnancement et le rattrapage
- [ ] Configurer les tentatives, le délai de tentative et les SLA
- [ ] Câbler les dépendances via les valeurs de retour TaskFlow ou les opérateurs >>
  1. Tâches idempotentes — une tâche pour l'intervalle 2026-01-15 doit produire le même résultat qu'elle soit exécutée une fois ou relancée. Utiliser l'intervalle de données, pas datetime.now().
  2. Pas de code lourd au niveau supérieur — le scheduler analyse fréquemment chaque fichier DAG ; des appels de base de données, des appels API ou des imports volumineux au niveau module ralentissent l'ordonnancement et peuvent casser l'analyse. Les placer dans les tâches.
  3. Ordonnancement et rattrapage délibérés — catchup=True remplit chaque intervalle manqué depuis start_date ; par défaut à False sauf si souhaité.
  4. Tentatives et SLA — les échecs transitoires sont normaux ; définir retries et retry_delay ; utiliser des SLA/alertes pour les retards.

Patterns

DAG TaskFlow, idempotent et proprement câblé :

from airflow.decorators import dag, task
import pendulum

@dag(
    schedule="@daily",
    start_date=pendulum.datetime(2026, 1, 1, tz="UTC"),
    catchup=False,
    default_args={"retries": 3, "retry_delay": pendulum.duration(minutes=5)},
    tags=["commandes"],
)
def pipeline_commandes():

    @task
    def extraire(data_interval_start=None):
        # Utiliser l'intervalle, pas now(), pour que les relances soient déterministes.
        return fetch_orders(day=data_interval_start.date())

    @task
    def charger(lignes):
        # Supprimer-insérer la partition -> idempotent en cas de tentative.
        overwrite_partition("fct_orders", lignes)

    charger(extraire())

pipeline_commandes()

Passer de petites données via XCom (valeurs de retour) ; passer de gros volumes via le stockage — écrire vers S3/GCS/warehouse et passer le chemin/clé, jamais de mégaoctets via XCom.

Utiliser les connexions/variables pour les secrets et la configuration (BaseHook.get_connection, Variable.get), jamais de credentials codés en dur.

Pièges courants

  • Appels API/DB au niveau supérieur ou imports lourds — ralentissent le scheduler et peuvent faire échouer l'analyse des DAGs sur tout le déploiement.
  • datetime.now() à l'intérieur des tâches — casse l'idempotence et les backfills ; utiliser data_interval_start/_end.
  • catchup=True non intentionnel — inonde le cluster de runs historiques lors du premier déploiement.
  • Gros volumes via XCom — gonfle la base de données de métadonnées ; passer des références.
  • start_date dynamique (ex. days_ago) — rend les ordonnancements non déterministes ; utiliser un timestamp fixe.
  • Une seule tâche monstrueuse — diviser extract/transform/load pour que les tentatives soient granulaires.

Références

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

Unknown-333/building-dagster-assets

Build Dagster pipelines using software-defined assets — asset dependencies, partitions, resources and IO managers, asset checks, and schedules/sensors. Use when creating Dagster assets or jobs, modeling data as assets, adding partitions or backfills, wiring resources/IO managers, or migrating from task-based orchestration to assets.

Unknown-333/building-dbt-models

Build well-structured dbt models — staging/intermediate/marts layers, ref() and source(), materializations, and incremental models with the right strategy. Use when creating or refactoring dbt models, choosing table vs view vs incremental, structuring a dbt project, or writing incremental logic.

Unknown-333/building-feature-pipelines

Build ML feature pipelines and feature stores — point-in-time-correct joins to avoid label leakage, offline/online parity, feature freshness and backfills, and materialization with tools like Feast. Use when engineering features for ML, preventing train/serve skew or data leakage, building a feature store, or backfilling historical features for training.

Unknown-333/building-iceberg-tables

Design and operate Apache Iceberg tables — partitioning and hidden partitioning, partition/schema evolution, snapshots and time travel, compaction and small-file cleanup, and MERGE/upsert for lakehouse tables on Spark, Flink, Trino, or Snowflake. Use when creating or maintaining Iceberg tables, choosing partitioning, evolving schema/partitions, or fixing small-file and metadata bloat.

Unknown-333/building-ingestion-pipelines

Build batch and incremental data ingestion (extract-load) pipelines — full vs incremental extraction, change data capture (CDC), watermarks and high-water marks, API pagination and rate limits, and choosing managed EL tools (Fivetran, Airbyte) vs custom code. Use when ingesting data from databases, APIs, files, or SaaS into a warehouse/lake, or designing incremental extraction and CDC.

Unknown-333/building-kafka-consumers

Build reliable Apache Kafka consumers and producers — consumer groups and partition assignment, offset commit strategy, at-least-once vs exactly-once, idempotent/transactional producers, rebalancing, and dead-letter handling. Use when writing Kafka consumers/producers, configuring offset commits or consumer groups, tuning throughput, or handling rebalances and poison messages.

Unknown-333/debugging-data-pipelines

Systematically root-cause data pipeline failures and data incidents — job errors, wrong or missing data, duplicates, and freshness misses — by tracing lineage upstream, isolating the failing stage, reconciling against source, and planning a safe fix and backfill. Use when a pipeline fails, numbers look wrong, data is missing or duplicated, a dashboard is stale, or a stakeholder reports a data discrepancy.

Unknown-333/designing-backfills-and-replays

Plan and run safe data backfills and replays — idempotent reprocessing of historical windows, partition-by-partition execution, isolating backfill compute from production, verifying results, and avoiding double-counting or changed history. Use when backfilling a new or fixed model, reprocessing after a bug, replaying events, or loading history for a new pipeline without corrupting existing data.

Unknown-333/designing-data-contracts

Define and enforce data contracts between producers and consumers — explicit schema, semantics, ownership, SLAs, and versioning — to prevent silent upstream changes from breaking downstream pipelines. Use when a producer schema change could break consumers, defining an interface between teams/services and the warehouse, or adding schema enforcement at ingestion.

Skills associés