Orquestração

Tutorial Apache Airflow em português, com DAGs que rodam

Airflow é o orquestrador padrão em engenharia de dados: ele não processa seus dados, ele garante que cada etapa rode na ordem certa, no horário certo, e avise quando quebrar. Aqui estão os conceitos e o código que você vai escrever no primeiro dia.

Os 5 conceitos que explicam tudo

  • DAG — o pipeline: quais tarefas existem e em que ordem.
  • Task — uma unidade de trabalho (extrair, transformar, carregar).
  • Operator — o tipo da task: Python, Bash, SQL, Spark, dbt, Docker.
  • Scheduler — o processo que decide o que precisa rodar agora.
  • Data interval — a janela de tempo que aquela execução representa. É isso que torna o backfill possível.

Sua primeira DAG

from datetime import datetime
from airflow.decorators import dag, task


@dag(
    dag_id="vendas_diarias",
    start_date=datetime(2024, 1, 1),
    schedule="0 6 * * *",   # todo dia às 06:00
    catchup=False,
    default_args={"retries": 2},
    tags=["vendas", "diario"],
)
def vendas_diarias():

    @task
    def extrair(ds: str) -> str:
        # ds = a data da execução, ex. "2024-05-12"
        caminho = f"s3://raw/vendas/dt={ds}/vendas.csv"
        print("lendo", caminho)
        return caminho

    @task
    def transformar(caminho: str) -> int:
        # aqui você chamaria Spark, dbt ou SQL no warehouse
        linhas = 12_345
        return linhas

    @task
    def carregar(linhas: int) -> None:
        print(f"carregadas {linhas} linhas na camada silver")

    carregar(transformar(extrair()))


vendas_diarias()

As dependências saem de graça: como carregar recebe o retorno de transformar, o Airflow já sabe a ordem. Nada de set_upstream escrito à mão.

Agendamento: o cron que você precisa decorar

"0 6 * * *"     # todo dia às 06:00
"*/15 * * * *"  # a cada 15 minutos
"0 * * * *"     # de hora em hora
"0 7 * * 1"     # segundas às 07:00
"0 5 1 * *"     # dia 1 de cada mês, 05:00
"@daily"        # atalho para 0 0 * * *

catchup=True faz o Airflow executar todas as janelas passadas desde o start_date — ótimo para reprocessar histórico, perigoso se você não controlar a concorrência com max_active_runs.

Airflow orquestra, não processa

O padrão profissional: a task do Airflow apenas dispara o trabalho em quem sabe fazê-lo. Exemplo com dbt e Spark:

from airflow.operators.bash import BashOperator

roda_dbt = BashOperator(
    task_id="dbt_run_silver",
    bash_command="cd /opt/dbt && dbt run --select silver+ --target prod",
)

roda_spark = BashOperator(
    task_id="spark_agrega_eventos",
    bash_command=(
        "spark-submit --master yarn "
        "/jobs/agrega_eventos.py --data {{ ds }}"
    ),
)

roda_spark >> roda_dbt

{{ ds }} é template Jinja: o Airflow injeta a data da execução. É assim que o mesmo código serve para hoje e para um backfill de 2022.

Erros que reprovam em code review

  • Usar datetime.now() dentro da DAG em vez de {{ ds }} — quebra reprocessamento.
  • Ler gigabytes com pandas dentro do worker em vez de mandar para Spark/warehouse.
  • Task que não é idempotente: rodar duas vezes duplica dados. Use MERGE ou delete-insert por partição.
  • Fazer chamadas de API pesadas no topo do arquivo — o scheduler reparseia as DAGs constantemente.
  • Sem alerta: DAG que falha em silêncio é pipeline que ninguém mantém.

Perguntas frequentes

O que é o Apache Airflow?
É um orquestrador de workflows escrito em Python. Você declara pipelines como código (DAGs), o Airflow agenda as execuções, respeita dependências entre tarefas, faz retry no que falhou e guarda o histórico de cada execução.
O que é uma DAG no Airflow?
DAG (Directed Acyclic Graph) é o grafo das suas tarefas e das dependências entre elas, sem ciclos. Na prática é um arquivo Python que define quando o pipeline roda e em que ordem as tasks executam.
Airflow serve para processar dados?
Não. Airflow orquestra: ele dispara Spark, dbt, SQL no warehouse, containers, chamadas de API. Processar terabytes dentro do worker do Airflow é um erro clássico — mande o trabalho pesado para o engine certo.
Qual a diferença entre Airflow e cron?
Cron só dispara comandos no horário. Airflow entrega dependências entre tarefas, retries com backoff, backfill de datas passadas, visibilidade de logs, alertas de falha e paralelismo controlado.
Airflow ainda é usado no mercado brasileiro?
Sim, é o orquestrador mais pedido em vagas de engenharia de dados no Brasil, geralmente junto de Spark/Databricks, dbt e um warehouse como BigQuery, Redshift ou Snowflake.
Preciso saber Python para usar Airflow?
Python básico é suficiente para começar: funções, listas, dicionários e imports. DAGs são código Python declarativo, não algoritmos complexos.

Pronto para assinar?

7 dias grátis. Depois, menos que um café por mês — cancele quando quiser.

Assinar — 7 dias grátis