Autoría de DAGs de Airflow

Escribe DAGs de Apache Airflow de nivel de producción utilizando la API TaskFlow: tareas idempotentes, programación y catchup correctos, reintentos/SLA, conexiones/variables, y evitando código de nivel superior. Úsalo al crear o revisar DAGs de Airflow, programar pipelines, cablear dependencias de tareas, configurar reintentos/backfills o corregir tareas no idempotentes.

¿Qué es Autoría de DAGs de Airflow?

Esta habilidad está diseñada para desarrolladores que trabajan con Apache Airflow y desean crear DAGs robustos y mantenibles utilizando la API TaskFlow. Se centra en principios esenciales como la idempotencia de tareas, la programación correcta con catchup y backfill, y la gestión eficiente de reintentos y SLAs. Además, enseña a evitar el código pesado a nivel de módulo, que puede ralentizar el scheduler, y a utilizar XComs y conexiones/variables de manera segura y eficiente. La habilidad es útil tanto para la creación de nuevos DAGs como para la revisión y refactorización de pipelines existentes, y proporciona patrones concretos y advertencias sobre errores comunes, como el uso de `datetime.now()` que rompe la idempotencia o `catchup=True` no intencionado que puede saturar el clúster. Es compatible con cualquier versión moderna de Airflow que soporte TaskFlow y se basa en las mejores prácticas de la comunidad.

Compatible con~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 Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Autoría de DAGs de Airflow?

Cuándo usar

  • Crear o refactorizar DAGs y tareas de Airflow.
  • Configurar schedules, catchup/backfill, reintentos y SLAs.
  • Pasar datos entre tareas (XCom) o usar conexiones/variables.
  • NO usar para diagnosticar un DAG en ejecución que está roto (usar depuración-de-pipelines-de-airflow).

Flujo de trabajo

- [ ] Hacer que cada tarea sea idempotente y parametrizada por el intervalo de datos
- [ ] Mantener el código costoso/pesado en importaciones dentro de las tareas, no al nivel superior del módulo
- [ ] Configurar schedule + catchup de manera deliberada
- [ ] Configurar reintentos, retry_delay y SLAs
- [ ] Cablear dependencias mediante valores de retorno de TaskFlow o operadores >>
  1. Tareas idempotentes — una tarea para el intervalo 2026-01-15 debe producir el mismo resultado sin importar si se ejecuta una vez o se vuelve a ejecutar. Usa el intervalo de datos, no datetime.now().
  2. Sin código pesado de nivel superior — el scheduler analiza cada archivo DAG con frecuencia; las llamadas a bases de datos, API o importaciones grandes a nivel de módulo ralentizan la programación y pueden romper el análisis. Colócalas dentro de las tareas.
  3. Schedule + catchup a propósito — catchup=True rellena cada intervalo perdido desde start_date; por defecto pon False a menos que quieras eso.
  4. Reintentos y SLAs — los fallos transitorios son normales; establece retries y retry_delay; usa SLAs/alertas para la demora.

Patrones

DAG TaskFlow, idempotente y correctamente cableado:

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):
        # Usa el intervalo, no now(), para que las re-ejecuciones sean deterministas.
        return fetch_orders(day=data_interval_start.date())

    @task
    def load(rows):
        # Borra-inserta la partición -> idempotente al reintentar.
        overwrite_partition("fct_orders", rows)

    load(extract())

orders_pipeline()

Pasar datos pequeños vía XCom (valores de retorno); pasar datos grandes vía almacenamiento — escribe en S3/GCS/warehouse y pasa la ruta/clave, nunca megabytes a través de XCom.

Usar conexiones/variables para secretos y configuración (BaseHook.get_connection, Variable.get), nunca credenciales hardcodeadas.

Errores comunes

  • Llamadas a API/DB de nivel superior o importaciones pesadas — ralentizan el scheduler y pueden fallar el análisis del DAG en todo el despliegue.
  • datetime.now() dentro de las tareas — rompe la idempotencia y el backfill; usa data_interval_start/_end.
  • catchup=True no intencionado — inunda el clúster con ejecuciones históricas en el primer despliegue.
  • Payloads grandes a través de XCom — infla la base de datos de metadatos; pasa referencias.
  • start_date dinámico (ej. days_ago) — hace que los schedules sean no deterministas; usa una marca de tiempo fija.
  • Una tarea monstruosa — divide extracción/transformación/carga para que los reintentos sean granulares.

Referencias

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 relacionados