CommunityRecherche & Datenanalysegithub.com

Unknown-333/authoring-airflow-dags

Produktionsreife Apache Airflow-DAGs mit der TaskFlow-API schreiben – idempotente Tasks, korrekte Zeitplanung und Catchup, Wiederholungen/SLAs, Verbindungen/Variablen und Vermeidung von Top-Level-Code.

Was ist authoring-airflow-dags?

Diese Skill-Anleitung hilft Entwicklern, robuste und effiziente Apache Airflow-DAGs zu erstellen, die auf Produktion ausgelegt sind. Sie betont die Verwendung der TaskFlow-API, um idempotente Tasks zu definieren, die bei Wiederholungen stets das gleiche Ergebnis liefern, was für zuverlässige Backfills und Nachholverarbeitung unerlässlich ist. Die Anleitung warnt vor häufigen Fehlern wie schwerem Top-Level-Code, der den Scheduler verlangsamt, der Verwendung von `datetime.now()` in Tasks, die Idempotenz verhindert, und ungewolltem `catchup=True`, das zu einer Überlastung des Clusters führt. Sie zeigt bewährte Methoden für die Übergabe kleiner Datenmengen via XCom (Rückgabewerte) und großer Datenmengen über Storage-Services sowie den sicheren Umgang mit Verbindungen und Variablen. Die Skill ist für die Nutzung in CLI-Tools wie Claude Code optimiert und bietet eine klare Checkliste, Referenzen und ein vollständiges Codebeispiel, das direkt übernommen werden kann.

Funktioniert mit~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 & Datenanalyse skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Authoring Airflow DAGs

Wann verwenden

  • Erstellen oder Refaktorieren von Airflow-DAGs und Tasks.
  • Konfigurieren von Zeitplänen, Catchup/Backfill, Wiederholungen und SLAs.
  • Daten zwischen Tasks übergeben (XCom) oder Verbindungen/Variablen nutzen.
  • NICHT verwenden zur Diagnose eines fehlerhaften, laufenden DAGs (dafür debugging-airflow-pipelines nutzen).

Arbeitsablauf

- [ ] Jeden Task idempotent und durch das Datenintervall parametrisiert machen
- [ ] Teure/importlastige Code-Abschnitte innerhalb der Tasks belassen, nicht auf Modulebene
- [ ] Zeitplan + Catchup bewusst setzen
- [ ] Wiederholungen, retry_delay und SLAs konfigurieren
- [ ] Abhängigkeiten über TaskFlow-Rückgabewerte oder >>-Operatoren verknüpfen
  1. Idempotente Tasks – Ein Task für das Intervall 2026-01-15 muss das gleiche Ergebnis liefern, unabhängig davon, ob er einmal oder erneut ausgeführt wird. Das Datenintervall verwenden, nicht datetime.now().
  2. Kein schwerer Top-Level-Code – Der Scheduler parst jede DAG-Datei häufig; Datenbankaufrufe, API-Aufrufe oder große Imports auf Modulebene verlangsamen die Planung und können das Parsen unterbrechen. Diese innerhalb der Tasks platzieren.
  3. Zeitplan + Catchup bewusst setzen – catchup=True führt für jedes verpasste Intervall seit start_date einen Backfill durch; standardmäßig auf False setzen, es sei denn, dies ist gewünscht.
  4. Wiederholungen und SLAs – Vorübergehende Fehler sind normal; retries und retry_delay setzen; SLAs/Benachrichtigungen für Verspätungen nutzen.

Muster

TaskFlow DAG, idempotent und sauber verknüpft:

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=["orders"],
)
def orders_pipeline():

    @task
    def extract(data_interval_start=None):
        # Das Intervall verwenden, nicht now(), damit Wiederholungen deterministisch sind.
        return fetch_orders(day=data_interval_start.date())

    @task
    def load(rows):
        # Partition löschen-einfügen -> idempotent bei Wiederholung.
        overwrite_partition("fct_orders", rows)

    load(extract())

orders_pipeline()

Kleine Daten via XCom übergeben (Rückgabewerte); große Daten via Storage übergeben – auf S3/GCS/Data Warehouse schreiben und den Pfad/Schlüssel übergeben, niemals Megabyte durch XCom.

Verbindungen/Variablen für Geheimnisse und Konfiguration nutzen (BaseHook.get_connection, Variable.get), niemals hartcodierte Anmeldedaten.

Häufige Fallstricke

  • Top-Level-API-/DB-Aufrufe oder schwere Imports – verlangsamen den Scheduler und können das DAG-Parsen in der gesamten Bereitstellung zum Scheitern bringen.
  • datetime.now() innerhalb von Tasks – bricht Idempotenz und Backfills; data_interval_start/_end verwenden.
  • catchup=True unbeabsichtigt – überschwemmt den Cluster beim ersten Deployment mit historischen Läufen.
  • Große Payloads durch XCom – bläht die Metadaten-Datenbank auf; Referenzen übergeben.
  • Dynamisches start_date (z.B. days_ago) – macht Zeitpläne nichtdeterministisch; einen festen Zeitstempel verwenden.
  • Ein Monstertask – Extract/Transform/Load aufteilen, damit Wiederholungen granulär sind.

Referenzen

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.

Verwandte Skills