Fundamentos

O que é ETL — e por que hoje quase todo mundo faz ELT

ETL é o processo que tira dado do sistema que roda a empresa e entrega dado confiável para quem decide. Entender as três etapas — e onde a transformação acontece — é o que separa um pipeline que dura de um que quebra toda segunda-feira.

As três etapas, sem enrolação

  • Extract: ler das origens — banco transacional, API, arquivo, fila Kafka. Aqui você decide entre carga total e carga incremental.
  • Transform: padronizar tipos, tratar nulo, deduplicar, aplicar regra de negócio, juntar tabelas e criar métricas.
  • Load: gravar no destino analítico (data warehouse ou lakehouse) de forma que rodar de novo não duplique nada.

ETL vs ELT: a diferença é onde transforma

ETL  →  origem → ferramenta transforma → warehouse (dado já pronto)
ELT  →  origem → warehouse (dado bruto) → SQL transforma lá dentro
  • ELT ganha quando o warehouse é elástico (BigQuery, Snowflake, Databricks), você quer guardar o bruto para reprocessar e o time todo sabe SQL.
  • ETL ainda ganha quando há PII que não pode entrar crua no warehouse, o destino é um banco pequeno, ou existe restrição regulatória de mascaramento antes da carga.

Extração incremental na prática

import pandas as pd
from sqlalchemy import create_engine

origem = create_engine("postgresql://user:pass@host/loja")

# marca d'água: só o que mudou desde a última execução
ultima_carga = "2024-05-11 00:00:00"

query = """
    select id, cliente_id, status, valor_centavos, atualizado_em
    from pedidos
    where atualizado_em > %(desde)s
"""

df = pd.read_sql(query, origem, params={"desde": ultima_carga})
print(f"{len(df)} linhas novas ou alteradas")

Sem coluna de atualização confiável, você cai em carga total todo dia — caro e lento. Se a origem não tem updated_at, negocie CDC ou triggers.

Carga idempotente com MERGE

MERGE INTO silver.pedidos AS destino
USING staging.pedidos_novos AS origem
   ON destino.pedido_id = origem.pedido_id

WHEN MATCHED AND origem.atualizado_em > destino.atualizado_em THEN
  UPDATE SET
    status         = origem.status,
    valor          = origem.valor,
    atualizado_em  = origem.atualizado_em

WHEN NOT MATCHED THEN
  INSERT (pedido_id, cliente_id, status, valor, atualizado_em)
  VALUES (origem.pedido_id, origem.cliente_id, origem.status,
          origem.valor, origem.atualizado_em);

Rode dez vezes: o resultado é o mesmo. Esse é o teste que todo pipeline precisa passar antes de ir para produção.

Transformação com qualidade embutida

-- normaliza, deduplica e valida em um passo
with base as (
    select
        pedido_id,
        cliente_id,
        lower(trim(status))                    as status,
        valor_centavos / 100.0                 as valor,
        atualizado_em,
        row_number() over (
            partition by pedido_id
            order by atualizado_em desc
        ) as rn
    from staging.pedidos_novos
)
select *
from base
where rn = 1                       -- mantém só a versão mais recente
  and valor >= 0                   -- descarta valor negativo
  and status in ('pago','pendente','cancelado');

Checklist de um pipeline profissional

  • É idempotente e suporta reprocessamento de datas passadas.
  • Tem testes de chave única, nulo e integridade referencial.
  • Falha ruidosamente: alerta com contexto, não erro silencioso.
  • Guarda o dado bruto para auditoria e reprocessamento.
  • Está versionado em Git e roda em ambientes separados de dev e prod.
  • Tem custo monitorado — pipeline caro é pipeline que vai ser cortado.

Perguntas frequentes

O que significa ETL?
Extract, Transform, Load — extrair dados das origens, transformar em um formato confiável e carregar no destino analítico. É o processo que transforma dado bruto de sistema em informação para decisão.
Qual a diferença entre ETL e ELT?
No ETL a transformação acontece antes de carregar, em uma ferramenta externa. No ELT você carrega o dado bruto no warehouse e transforma lá dentro com SQL. ELT dominou porque warehouses ficaram baratos e elásticos.
Quais ferramentas de ETL são usadas no Brasil?
Airflow para orquestração, dbt para transformação, Spark/Databricks para volume, Fivetran e Airbyte para ingestão, além de Pentaho, Talend e SSIS ainda presentes em empresas mais tradicionais.
ETL é a mesma coisa que engenharia de dados?
Não. ETL é uma das atividades. Engenharia de dados inclui também modelagem, qualidade, governança, custo, orquestração, streaming e infraestrutura.
O que é um pipeline idempotente?
É um pipeline que pode rodar duas vezes para a mesma janela de dados sem duplicar nem corromper o resultado — normalmente com MERGE, upsert por chave ou sobrescrita de partição.
Preciso saber programar para fazer ETL?
SQL é obrigatório e Python é o padrão de mercado. Ferramentas visuais ajudam no começo, mas praticamente toda vaga brasileira de engenharia de dados pede SQL + Python.

Pronto para assinar?

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

Assinar — 7 dias grátis