Quando criamos um D.W com suas tabelas fato e dimensão temos de pensar em formas de controlar as alterações, ainda que sejam em menor volume que o banco transacional, aqui não é menos importante.

Pensando neste aspecto e controle das alterações que venho compartilhar este post sobre o controle de mudanças utilizando um recurso chamado Slowly-changing Dimension. Vamos ver também seus tipos, cenários e como eles controlam as alterações dentro do nosso banco.

CONCEITO

O recurso de SCD tem por característica controlar e manter registros sobre como as alterações no D.W através do processo de ETL são efetuadas para não ter exatamente o mesmo registro no banco.

Dentro do recurso temos alguns tipos de formas de controle cada um com sua particularidade e indicado para um cenário específico e definimos qual tipo de controle de mudanças desejamos utilizar quando vamos definir nosso fluxo para os dados dentro do D.W.

SLOWLY CHANGING DIMENSION E SEUS TIPOS

Agora vamos observar cada um dos tipos de controle com exemplos:

SCD TIPO 01

É um tipo de controle que sobrescreve um determinado atributo da coluna apagando o antigo sem criar um dado histórico para tal.

Os atributos que foram sobrescritos e estão no cubo olap podem ser afetados sendo necessário atualizar ambos.

Suponhamos que o banco tenha a seguinte tabela dimensão e precisamos atualizar uma linha.

Quando o processo de ETL rodar e atualizarmos o fabricante, o que ficará válido para o banco é a linha pós atualização e este registro não terá um histórico armazenado.

Ficando os dados da segunda tabela como válidos para análise.

SCD TIPO 2 – Criando uma nova linha histórica

Este tipo cria uma nova linha sempre que uma mudança é feita mantendo um registro histórico do atributo alterado.

Quando utilizamos na tabela dimensão uma nova linha é adicionada contendo a data de alteração e o status daquele registro se ele é atual ou não e data final do registro anterior passa para data inicial do novo registro.

E o resultado final seria:

SCD TIPO 03 – Criando uma nova coluna (atributo)

Quando configuramos o tipo três para uma determinada tabela ou coluna, estamos sinalizando que queremos manter apenas o registro daquele item.

Quando há uma atualização por exemplo em produto, a coluna que foi atualizada se torna a coluna histórica e uma data de mudança é registrada.

O ponto positivo deste tipo é que ele permite o agrupamento dos registros, tanto histórico quanto novo para gerar insight.

Veja o resultado final:

SCD TIPO 04 – Criando uma mini dimensão

Imagine que em nosso ambiente temos uma dimensão que cresce de forma acelerada e que manter o controle histórico dela não é tão simples para os modelos vistos até o momento.

Quando nos deparamos com este tipo de cenário, temos um recurso que é muito similar ao particionamento de tabelas e que podemos aplicar perfeitamente aqui que é criar uma mini dimensão para registros muito antigos.

Mesmo que sua dimensão ou fato não cresçam de maneira desenfreada, este recurso também é recomendado quando temos tabelas com milhares de linhas e muitas destas com registros históricos, mas muito antigos.

Abaixo, um cenário hipotético a respeito de uma ‘mini dimensão’ criada.

E pra finalizar temos um tipo que combina os três primeiros tipos de controle de mudança em um único modelo.

SCD TIPO 06 – Controle combinado (unindo os tipos 01,02,03).

Ao ser implementado para controle de mudança ele executa algumas ações decorrentes dos tipos anteriores.

  1. Sobrescreve
  2. Cria uma linha para registro histórico
  3. Cria um atributo histórico
  4. E gera uma nova coluna indicando o id da linha

Ao final deste processo uma coluna com flag é criada indicando qual o dado é atual.

Veja o cenário abaixo:

Esta é a linha atual, sendo o primeiro insert da linha na tabela DIM_PRODUTO.

Reparem que o produto é o mesmo e a data final consta o máximo permitido, indicando que este registro ainda não foi alterado. Além disso, podemos destacar que esta linha tem o ID 1.

No dia seguinte, em um novo processo de ETL, este mesmo registro foi atualizado, indicando que o fabricante mudou de nome.

Veja que houve atualização da coluna ROW_KEY, FABRI_HIST, DATAS E STATUS indicando que o registro foi alterado e o nome do fabricante validado no banco. 

Agora, a linha atual passou a ter o ROW_KEY de ID 2 e perceba que tanto o antigo registro quanto o novo passaram a ter o mesmo nome de fabricante. Indicando que houve sobrescrita, processo proveniente do TIPO 1.

E se houver uma última atualização na coluna de fabricante, veja como fica o resultado final.

Então, podemos perceber que houve uma junção dos três tipos de SCD já vistos no início mantendo um controle bem completo quando utilizamos este modelo de configuração.

Existe ainda o tipo 0 que não foi exemplificado aqui, no início, mas que é utilizado para registros que quase nunca ou nunca são modificados como por exemplo: RG, CPF, Nascimento etc.

Ele é conhecido por manter o registro original e é bastante utilizado nas mais diversas tabelas e atributos de dimensão.

Este foi um post em que eu quis abordar as formas de se controlar as mudanças no D.W de maneira efetiva e dentro do processo de ETL. Existem outros recursos é claro e alguns outros métodos de se implementar o SCD. 

Estes que eu trouxe são os mais utilizados e que eu julguei mais úteis e contam com formas de exemplificar de maneira simples.

Fiquem ligados, em breve veremos como implementar na prática.

Espero que tenham gostado, saúde!