Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

[Dúvida] Snapshot x Dimensão

Aqui não entendi um ponto.

Se eu quiser ter o histórico do dado, eu teria que amarrar a fato com o snapshot?

Não seria mais fácil simplesmente já criar a dimensão com SCD 2?

Na maneira como foi apresentada eu fico com dados redundantes, eu tenho a dimensão e mais todo o histórico no snapshot, fiquei com essa dúvida.

Isso é uma boa prática?

2 respostas

Olá, Fernando!

Sobre snapshots no dbt e SCD Tipo 2, sua dúvida faz bastante sentido porque, à primeira vista, realmente parece que estamos guardando o mesmo histórico em dois lugares.

Respondendo à sua primeira pergunta:

Se eu quiser ter o histórico do dado, eu teria que amarrar a fato com o snapshot?

Sim. Quando você precisa analisar os dados considerando o estado que uma dimensão possuía em determinado momento, é necessário relacionar a tabela fato com uma versão histórica da dimensão.

Inclusive, no final da aula é comentado que, para utilizar esse histórico em um Data Warehouse, precisamos conciliar os períodos de validade da dimensão com as datas dos fatos. É justamente nesse ponto que entram as colunas dbt_valid_from e dbt_valid_to geradas pelo snapshot.

Por exemplo, se um cliente morava em São Paulo quando realizou uma compra e depois mudou para o Rio de Janeiro, o snapshot permite identificar qual versão do cadastro estava válida na data daquela compra.

Agora, sobre sua segunda pergunta:

Não seria mais fácil simplesmente já criar a dimensão com SCD 2?

Essa é uma abordagem bastante comum.

O ponto é que o snapshot não é exatamente a dimensão SCD Tipo 2, mas sim um mecanismo que registra automaticamente as mudanças dos dados ao longo do tempo.

Com isso, você ganha uma base histórica confiável sem precisar implementar manualmente toda a lógica de comparação de registros, abertura e fechamento de vigência e criação de novas versões.

Dependendo da arquitetura do projeto, você pode:

  • consumir o snapshot diretamente;
  • utilizar o snapshot como origem para construir uma dimensão SCD Tipo 2;
  • implementar uma SCD Tipo 2 sem utilizar snapshots.

Por isso, não existe uma única abordagem correta. O snapshot é uma ferramenta que facilita muito a implementação desse tipo de histórico.

Sobre a questão da redundância:

Eu tenho a dimensão e mais todo o histórico no snapshot. Isso é uma boa prática?

Pode ser, sim.

Em muitos projetos o snapshot funciona como uma camada de histórico das alterações da origem, enquanto a dimensão é modelada para facilitar consultas analíticas e relacionamento com as tabelas fato.

Já em projetos menores, pode acontecer de o próprio snapshot ser consumido diretamente, sem a necessidade de uma dimensão intermediária.

Então a "redundância" nem sempre é um problema. Muitas vezes ela é intencional para separar responsabilidades: uma tabela preserva o histórico bruto das mudanças e outra é otimizada para consumo analítico.

Conteúdos para complementar seus estudos
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Perfeito!!!

Fez mais sentido pra mim agora o snapshot.