CommunityPesquisa e Análise de Dadosgithub.com

Autorando DAGs do Airflow

Escreva DAGs do Apache Airflow de nível de produção usando a TaskFlow API — tarefas idempotentes, agendamento e catchup corretos, retentativas/SLAs, conexões/variáveis e evitando código de nível superior. Use ao criar ou revisar DAGs do Airflow, agendar pipelines, conectar dependências de tarefas, configurar retentativas/backfills ou corrigir tarefas não idempotentes.

O que é Autorando DAGs do Airflow?

Esta skill orienta você na criação de DAGs do Apache Airflow prontas para produção, utilizando a API TaskFlow. Ela cobre desde a idempotência de tarefas — garantindo que uma tarefa execute da mesma forma independentemente de quantas vezes for executada — até a configuração correta de agendamento, catchup e backfill, evitando armadilhas comuns que degradam a performance do scheduler. A skill também explica como evitar código de nível superior (top-level code) que pesa na parse dos DAGs, configurar retentativas e SLAs para tratamento de falhas transitórias, usar XComs de forma eficiente e gerenciar segredos com segurança através de conexões e variáveis. O conteúdo é adequado para desenvolvedores usando Airflow em qualquer plataforma (Cloud Composer, MWAA, Airflow self-hosted) e inclui exemplos práticos de código, padrões recomendados e uma lista de erros frequentes para evitar. O fluxo de trabalho sugerido ajuda a garantir que cada DAG seja robusto, escalável e mantenha a integridade dos dados em cenários de execução repetida.

Funciona com~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 Pesquisa e Análise de Dados skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Autorando DAGs do Airflow faz?

Quando usar

  • Ao criar ou refatorar DAGs e tarefas do Airflow.
  • Ao configurar agendamentos, catchup/backfill, retentativas e SLAs.
  • Ao passar dados entre tarefas (XCom) ou usar conexões/variáveis.
  • Não use para diagnosticar um DAG em execução com falha (use debugging-airflow-pipelines).

Fluxo de trabalho

- [ ] Torne cada tarefa idempotente e parametrizada pelo intervalo de dados
- [ ] Mantenha código pesado/de import dentro das tarefas, não no nível superior do módulo
- [ ] Defina schedule + catchup deliberadamente
- [ ] Configure retentativas, retry_delay e SLAs
- [ ] Conecte dependências via valores de retorno da TaskFlow ou operadores >>
  1. Tarefas idempotentes — uma tarefa para o intervalo 2026-01-15 deve produzir o mesmo resultado independentemente de ser executada uma vez ou reexecutada. Use o intervalo de dados, não datetime.now().
  2. Sem código pesado no nível superior — o scheduler parseia cada arquivo de DAG frequentemente; chamadas a banco de dados, chamadas a API ou imports grandes no nível do módulo tornam o agendamento lento e podem quebrar o parsing. Coloque-os dentro das tarefas.
  3. Schedule + catchup intencionalmente — catchup=True faz backfill de todos os intervalos perdidos desde start_date; defina como False a menos que você queira isso.
  4. Retentativas e SLAs — falhas transitórias são normais; defina retries e retry_delay; use SLAs/alertas para atrasos.

Padrões

DAG TaskFlow, idempotente e com dependências claras:

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):
        # Use o intervalo, não now(), para que reexecuções sejam determinísticas.
        return fetch_orders(day=data_interval_start.date())

    @task
    def load(rows):
        # Delete-insert da partição -> idempotente em caso de retentativa.
        overwrite_partition("fct_orders", rows)

    load(extract())

orders_pipeline()

Passe dados pequenos via XCom (valores de retorno); dados grandes via armazenamento — escreva para S3/GCS/warehouse e passe o caminho/chave, nunca megabytes através de XCom.

Use conexões/variáveis para segredos e configuração (BaseHook.get_connection, Variable.get), nunca credenciais hard-coded.

Armadilhas comuns

  • Chamadas a API/DB ou imports pesados no nível superior — tornam o scheduler lento e podem falhar o parsing dos DAGs em todo o ambiente.
  • datetime.now() dentro de tarefas — quebra a idempotência e os backfills; use data_interval_start/_end.
  • catchup=True não intencional — inunda o cluster com execuções históricas na primeira implantação.
  • Payloads grandes através de XCom — incha o banco de dados de metadados; passe referências.
  • start_date dinâmico (ex.: days_ago) — torna os agendamentos não determinísticos; use um timestamp fixo.
  • Uma tarefa monstro — divida extract/transform/load para que as retentativas sejam granulares.

Referências

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.

Habilidades Relacionadas