Implementar uma Lenta Mudança de Tipo 2 Dimensão no SQL Server Integration Services – Parte 1

Implementar uma Lenta Mudança de Tipo 2 Dimensão no SQL Server Integration Services – Parte 1

Por: Koen Verbeeck | Atualizado em: 2018-08-09 | Comentários (4) | Relacionados: 1 | 2 | 3 | 4 | Mais > Integração de Serviços de Desenvolvimento

Livre MSSQLTips Webinar: Introdução com o SSIS

Saiba como começar com o SQL Server Integration Services e como construir um projeto do SSIS com esta demonstração focado webinar.,

problema

gostaríamos de manter a história no nosso armazém de dados por várias dimensões.Utilizamos os Serviços de integração de servidores SQL (SSIS) para implementar o ETL (Extracttttransform e carga). Nós tentamos o built-in lentamente mudando mago dimensão, mas o desempenho parece pobre. Como podemos implementar a funcionalidade desejada com componentes SSIS regulares?

solução

Introdução A Dimensões em mudança lenta

uma dimensão em mudança lenta (SCD) acompanha a história dos seus membros individuais., Existem vários métodos propostos por Ralph Kimball em seu livro O DatawarehouseToolkit:

  • tipo 1-sobrepor os campos quando o valor muda. Não há história.
  • tipo 2-crie uma nova linha com os novos valores para os campos. Extracolumns indicam quando no tempo uma linha era válida.
  • Tipo 3-Manter o valor antigo de uma coluna numa coluna separada.
  • Existem mais tipos de SCD, mas eles são principalmente uma combinação híbrida do acima.nesta ponta, vamos focar-nos na situação do tipo 2. Vamos ilustrar com um exemplo., Temos uma tabela simples de armazenamento de dados do cliente.

    a coluna SK_Customer é uma coluna com um identitiproperty que irá gerar um novo valor para cada linha. Gostaríamos de guardar o atributo da localização. Quando a localização muda de Antuérpia para Bruxelas,não actualizamos a linha, mas inserimos um novo registo:

    usando os campos valid from e ValidTo, indicamos quando um registo era válido no tempo. Uma nova chave de substituição é gerada, mas a chave de Negócio-Nome Personalizado-permanece a mesma., Quando um table fato é carregado, uma pesquisa será feita na mesa do cliente. Dependendo da data do registo, uma das duas linhas será devolvida. Por exemplo:

    todos os factos são para o mesmo cliente. Quando você pede o montante total de vendas para CustomerA, o resultado é 31. O total das vendas por local é de 12,75 para Antuérpia e de 18,25 para Bruxelas, embora os dados sejam para o mesmo cliente. Usando o SCDType 2, podemos analisar nossos dados com atributos históricos.,Métodos de implementação

    Existem vários métodos para carregar uma dimensão em mudança lenta do tipo 2 do armazém de dados ina. Você pode optar por uma abordagem T-SQL pura, seja com declarações multipleT-SQL ou usando a instrução MERGE. Este último é explicado na tentativa de fundir a instrução SQL Server para processar o tipo 2 mudando lentamente as dimensões.

    com a SSIS, você pode usar o Assistente de dimensão em lenta mudança, que pode ajudar em vários cenários., Este assistente é descrito no tipsLoading Historical Data into a SQL Server Data Warehouse andHandle Slowly Changing Dimensions in SQL Server Integration Services. A desvantagem deste assistente é o desempenho: ele usa o comando OLE DB para o everyupdate, o que pode resultar em mau desempenho para conjuntos de dados maiores. Se você fizer mudanças no fluxo de dados para resolver estes problemas, você não pode executar o assistente novamente como você perderia todas as mudanças.

    a última opção-além de usar componentes 3rdparty-é construir a lógica SCD tipo 2 você mesmo no fluxo de dados,que vamos descrever na próxima seção.,

    implementação na SSIS

    a solução proposta nesta dica funciona para qualquer versão da SSIS. Reprise o exemplo da dimensão do cliente, mas foi acrescentado um campo adicional:o atributo email. Não mantemos o histórico dos endereços de E-mail, por isso qualquer novo valor irá sobrepor todos os outros valores.

    primeiro, nós lemos os dados a partir de uma fonte, provavelmente um ambiente de estadiamento. Ao usar uma fonte relacional, você pode usar o componente fonte OLE DB com um SQL Query para ler os dados. Seleccione apenas as colunas de que necessita para a sua dimensão. O valor do campo também é calculado aqui., Uma vez que você digitaliza os dados do dia anterior, valid from está definido para a data de ontem. Se você não tem uma fonte relacional, você pode adicionar esta coluna usando uma Columntransformação derivada.

    no próximo passo, estamos a fazer uma pesquisa contra a dimensão.Aqui vamos verificar se as linhas de entrada são ou uma inserção ou uma atualização.Se não for encontrada nenhuma correspondência, a linha é um membro da nova dimensão e precisa ser inserida.Se for encontrada uma correspondência, o membro da dimensão já existe e precisaremos de tocheck para alterações do tipo 2 do SCD., A menos que tenha uma dimensão muito grande, poderá usar a ‘cache’ completa:

    configurar a transformação de pesquisa para enviar linhas não correspondentes para a saída de não correspondência. In SSIS 2005 this option doesn’t exist yet, so you can either use the error output, or set the transformation to ignore failures andsplit out inserts and updates using a conditional split.

    na área de ligação, a seguinte pesquisa SQL obtém a chave substituta, a chave de Negócio (Nome Personalizado) e as colunas do tipo 2 do SCD., Para cada membro, apenas a linha mais recente é recuperada, filtrando no campo ValidTo.

    o campo de localização é renomeado para Location_OLD para clareza. Na área de columns, combine com a chave de negócio e selecione todas as outras colunas.

    Agora podemos adicionar um Destino OLE DB na tela. Este destino irá gravar novas linhas na dimensão. Ligar a pesquisa sem correspondência da transformação de pesquisa ao destino.,

    no painel de mapeamento, mapeie as colunas do fluxo de dados com as colunas da tabela de dimensão.

    a coluna SK_Customer é deixada por mapear, uma vez que é uma coluna de identidade e os seus valores são gerados pelo motor de base de dados. O validto columnis também deixou em branco. As linhas novas não têm valor para esta coluna.

    na parte 2 desta dica vamos continuar a nossa configuração do fluxo de dados,onde vamos verificar se uma linha é uma atualização do tipo 2 ou não.,

    Próximos Passos
    • Se você quiser saber mais sobre a implementação de mudar lentamente dimensões inSSIS, você pode conferir as dicas a seguir:
      • Usando o SQL Server MERGE Instrução do Processo Tipo 2, Mudando Lentamente Dimensões
      • a Carregar o Histórico de Dados no SQL Server Data Warehouse
      • Lidar com Dimensões de Alteração Lenta no SQL Server Integration Services
    • Você pode encontrar mais SSIS dicas de desenvolvimento inthis visão geral.,

    Última actualização: 2018-08-09

    Sobre o autor
    Koen Verbeeck é um BI profissional, especializando-se na pilha do Microsoft BI com um amor particular do SSIS.
    ver todas as minhas dicas

    Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *