Wiki Arquitetura e modelagem
ETL e ELT
A diferença é onde a transformação acontece: antes de carregar (ETL) ou dentro da plataforma, depois de carregar o bruto (ELT).
As três letras são as mesmas; muda a ordem.
- ETL (*extract, transform, load*): extrai da fonte, transforma num servidor intermediário e carrega pronto no destino. Era o caminho natural quando o armazenamento do data warehouse era caro: só entrava o que já estava limpo.
- ELT (*extract, load, transform*): carrega o bruto primeiro e transforma dentro da própria plataforma (Spark, Databricks SQL, o warehouse), onde está o poder de processamento.
Por que o ELT ganhou espaço
- Armazenamento em nuvem é barato, e guardar o bruto permite reprocessar quando a regra mudar.
- A transformação roda perto do dado, em motor distribuído, em vez de num servidor do meio.
- A camada bronze da arquitetura medalhão é exatamente o "L antes do T".
Quando o T vem antes
- Dado sensível que não pode chegar cru ao lake (mascarar ou descartar na extração).
- Fonte que só entrega em formato que precisa de conversão para ser carregado.
- Volume reduzido na origem para economizar transferência.
A mesma transformação nos dois mundos
import csv
import io
bruto = "id,valor\n1,230.50\n2,\n3,abc\n"
validos, rejeitados = [], []
for linha in csv.DictReader(io.StringIO(bruto)):
try:
validos.append({"id": int(linha["id"]), "valor": float(linha["valor"])})
except ValueError:
rejeitados.append(linha["id"])
print("carregados:", validos)
print("rejeitados:", rejeitados)Saída (conferida)
carregados: [{'id': 1, 'valor': 230.5}]
rejeitados: ['2', '3']No ETL, os rejeitados nunca chegam ao destino (e somem, se ninguém guardar). No ELT, as três linhas chegam à bronze, e a regra roda na silver, onde dá para mudar de ideia sobre o abc e reprocessar.
Fontes
Conhecimento compartilhado pela Genesis Innovation.