No artigo anterior, discutimos o conceito de dimensões de mudança lenta tipo 2 e exploramos diferentes opções de implementação no Integration Services (SSIS). Também começamos a implementar um fluxo de dados usando transformações padrão para carregar uma dimensão tipo 2. Neste artigo, continuaremos a implementação e nos concentraremos na otimização do fluxo de dados.
Verificando Mudanças Tipo 2
Na parte anterior, verificamos se uma linha era uma inserção ou uma atualização usando o componente de pesquisa. Agora, precisamos verificar se uma linha possui colunas que foram alteradas em comparação com a linha mais recente da chave de negócio. Para fazer isso, adicionaremos uma divisão condicional ao fluxo de dados e conectaremos com a saída de correspondência do componente de pesquisa. Na condição, verificaremos se o novo valor de um campo é diferente do valor atual recuperado na pesquisa.
Se ocorreu uma mudança, uma nova linha precisa ser inserida na dimensão. Ao mesmo tempo, também precisamos atualizar a versão anterior. Para resolver esse problema, usaremos um multicast para criar duas cópias da linha. Uma cópia será enviada para o destino OLE DB para inserção e a outra cópia será enviada para uma atualização.
Atualizando Mudanças Tipo 2 e Tipo 1
Para atualizar o campo ValidTo da versão anterior quando ocorrer uma mudança de campo Tipo 2, criaremos duas tabelas: UPD_DimCustomer_SCD2 e UPD_DimCustomer_SCD1. Essas tabelas armazenarão as mudanças para Tipo 2 e Tipo 1, respectivamente. Usaremos instruções T-SQL para criar essas tabelas.
Após criar as tabelas, adicionaremos outro destino OLE DB para gravar as mudanças Tipo 2 na tabela UPD_DimCustomer_SCD2. Mapearemos a chave substituta recuperada na pesquisa e o campo ValidFrom.
Da mesma forma, adicionaremos um terceiro destino OLE DB para gravar as mudanças Tipo 1 na tabela UPD_DimCustomer_SCD1. No painel de mapeamento, mapearemos a chave de negócio da dimensão (CustomerName) e todos os campos Tipo 1 da dimensão para a tabela de atualização.
Configurando Atualizações
Após o fluxo de dados, adicionaremos uma tarefa Execute SQL para emitir as instruções de atualização. Primeiro, definiremos o campo ValidTo da versão anterior de uma linha usando uma instrução de atualização T-SQL. Vamos unir a tabela de dimensão com a tabela UPD_DimCustomer_SCD2 na chave substituta e definir o campo ValidTo para um dia antes do campo ValidFrom.
Em seguida, atualizaremos as colunas Tipo 1 usando a chave de negócio. Vamos unir a tabela de dimensão com a tabela UPD_DimCustomer_SCD1 na chave de negócio e atualizar o campo Email. Também verificaremos se o valor do email foi alterado para minimizar o número de atualizações.
Testando o Pacote
Agora que o pacote está concluído, podemos testar alguns cenários. Podemos alterar a localização na tabela de estágio para acionar uma mudança Tipo 2. O fluxo de dados irá inserir uma nova linha na dimensão e atualizar o campo ValidTo da versão anterior.
Também podemos fazer uma mudança Tipo 1 alterando o endereço de e-mail. O fluxo de dados irá atualizar o e-mail para cada versão.
Conclusão
Neste artigo, finalizamos o design do pacote SSIS que carrega uma dimensão de mudança lenta tipo 2. No entanto, ainda existem algumas otimizações possíveis. Atualmente, sempre atualizamos os campos Tipo 1, mesmo quando não há alteração real. Podemos tornar isso mais eficiente usando hashes para detectar atualizações. Na próxima parte desta série, abordaremos mudanças intra-dia e exploraremos mais otimizações.