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