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
MERGEou 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- Sem cartão no teste grátis
- Cancele quando quiser
- 300+ exercícios
- 14 cursos completos