Slowly Changing Dimensions Tipo 2 sem dor de cabeça
O padrão essencial para rastrear histórico em dimensões — explicado com um exemplo concreto e os erros mais comuns.
Toda vez que alguém pergunta "qual era o endereço deste cliente quando a venda aconteceu?", você está diante de um problema de Slowly Changing Dimension (SCD). E a resposta, na maioria das vezes, é o SCD Tipo 2.
O problema
Imagine uma dimensão de clientes. Um cliente muda de cidade. Se você simplesmente atualizar a linha (SCD Tipo 1), perde a informação de onde ele estava antes — e suas vendas históricas passam a apontar para a cidade errada.
A solução: Tipo 2
No SCD Tipo 2, você nunca atualiza uma linha existente para um atributo rastreado. Em vez disso, você fecha a linha atual e insere uma nova versão. Cada linha ganha três colunas de controle:
valid_from— quando a versão passou a valervalid_to— quando deixou de valer (ouNULL/data futura se ativa)is_current— flag booleana para a versão vigente
-- Fecha a versão anterior
UPDATE dim_cliente
SET valid_to = current_date(), is_current = false
WHERE cliente_id = 42 AND is_current = true;
-- Insere a nova versão
INSERT INTO dim_cliente (cliente_id, cidade, valid_from, valid_to, is_current)
VALUES (42, 'Lisboa', current_date(), NULL, true);
A tabela fato sempre referencia a chave substituta (surrogate key) da versão correta no momento do evento — não a chave natural do cliente.
Os erros mais comuns
- Usar a chave natural na fato. Use sempre a surrogate key da versão vigente no momento.
- Esquecer da idempotência. Se o pipeline rodar duas vezes, ele não pode criar versões duplicadas. Compare os atributos antes de gerar uma nova versão.
- Rastrear atributos demais. Nem todo campo precisa de histórico. Decida conscientemente o que é Tipo 1 e o que é Tipo 2.
No Lakehouse, o MERGE do Delta Lake torna o Tipo 2 muito mais elegante do que era nos tempos de SSIS. Mas o conceito é o mesmo há décadas — e continua sendo um dos fundamentos que mais separa quem sabe modelar de quem só sabe carregar tabelas.
Articles liés
Chargement incrémental dans Azure Data Factory : le pattern de watermark pas à pas
Comment faire un chargement incrémental dans Azure Data Factory avec le pattern de watermark : Lookup de la dernière valeur, Copy Data uniquement de la nouvelle fenêtre et Stored Procedure qui met à jour le contrôle. Guide pratique.
Lire l'articleData Flow SSIS jusqu'à 3× plus rapide : régler le buffer et le Fast Load
Comment utiliser AutoAdjustBufferSize, DefaultBufferMaxRows et Fast Load pour accélérer les gros chargements dans le Data Flow SSIS. Guide pratique avec des chiffres réels.
Lire l'articleVous avez aimé ? Découvrez les e-books pour du contenu approfondi.
E-books