Partilhar via


Captura de Dados de Alteração (SSIS)

Aplica-se a:SQL Server SSIS Integration Runtime em Azure Data Factory

No SQL Server, a captura de dados de alterações oferece uma solução eficaz para o desafio de realizar eficientemente cargas incrementais desde tabelas de origem para data marts e data warehouses.

O que é a Captura de Dados de Alteração?

As tabelas de origem mudam ao longo do tempo. Um data mart ou data warehouse baseado nessas tabelas precisa de refletir essas alterações. No entanto, um processo que copia periodicamente um snapshot de todo o código-fonte consome demasiado tempo e recursos. Abordagens alternativas que incluem colunas de carimbo temporal, gatilhos ou consultas complexas frequentemente prejudicam o desempenho e aumentam a complexidade. O que é necessário é um fluxo fiável de dados de mudança, estruturado de forma a que possa ser facilmente aplicado pelos consumidores para direcionar representações dos dados. A captura de dados de alterações no SQL Server fornece esta solução.

A funcionalidade de captura de dados de alteração do Motor de Base de Dados capta a atividade de inserção, atualização e eliminação aplicada às tabelas SQL Server, tornando os detalhes das alterações disponíveis num formato relacional e fácil de consumir. As tabelas de alterações usadas pela captura de dados de alterações contêm colunas que espelham a estrutura de colunas das tabelas de origem acompanhadas, juntamente com os metadados necessários para compreender as alterações que ocorreram linha a linha.

Observação

A captura de dados de alterações não está disponível em todas as edições do Microsoft SQL Server. Para obter uma lista de recursos suportados pelas edições do SQL Server, consulte Recursos com suporte nas edições do SQL Server 2016.

Como Funciona a Captura de Dados de Alterações nos Serviços de Integração

Um pacote de Serviços de Integração pode facilmente recolher os dados de alterações nas bases de dados SQL Server para realizar cargas incrementais eficientes num data warehouse. No entanto, antes de poder usar os Serviços de Integração para carregar dados de alterações, um administrador deve ativar a captura de dados de alterações na base de dados e nas tabelas de onde pretende capturar as alterações. Para mais informações sobre como configurar a captura de dados de alterações numa base de dados, consulte Ativar e Desabilitar a Captura de Dados de Alteração (SQL Server).

Depois de um administrador ativar a captura de dados de alterações na base de dados, pode criar um pacote que execute uma carga incremental dos dados de alteração. O diagrama seguinte mostra os passos para criar tal pacote que realiza uma carga incremental a partir de uma única tabela:

Passos de Criação de Pacotes de Captura de Alteração de Dados

Como mostrado no diagrama anterior, criar um pacote que execute uma carga incremental de dados alterados envolve os seguintes passos:

Passo 1: Desenhar o Fluxo de Controlo
No fluxo de controlo do pacote, é necessário definir as seguintes tarefas:

  • Calcula os valores de data-hora inicial e final para o intervalo de alterações aos dados de origem que queres recuperar.

    Para calcular estes valores, utilize uma tarefa Executar SQL ou expressões de Serviços de Integração com funções de data-hora. Depois, armazena estes endpoints em variáveis de pacote para usar mais tarde no pacote.

    Para mais informações:Especificar um Intervalo de Dados de Alteração

  • Determine se os dados de alteração para o intervalo selecionado estão prontos. Este passo é necessário porque o processo de captura assíncrona pode ainda não ter alcançado o ponto final selecionado.

    Para determinar se os dados estão prontos, comece com um contentor For Loop para atrasar a execução, se necessário, até que os dados de alteração para o intervalo selecionado estejam prontos. Dentro do contentor do loop, use uma tarefa Executar SQL para consultar as tabelas de mapeamento temporal mantidas pela captura de dados de alteração. Depois, use uma tarefa Script que chame o método Thread.Sleep , ou outra tarefa Execute SQL com uma instrução WAITFOR , para atrasar temporariamente a execução do pacote, se necessário. Opcionalmente, use outra tarefa Script para registar uma condição de erro ou um timeout.

    Para mais informações:Determinar se os dados de alteração estão prontos

  • Prepare a cadeia de consulta que será usada para consultar os dados de alteração.

    Use uma tarefa Script ou uma tarefa Execute SQL para montar a instrução SQL que será usada para consultar alterações.

    Para mais informações:Preparar-se para Consultar os Dados de Alteração

Passo 2: Configurar a Consulta para Dados de Alteração
Crie a função com valor de tabela para consultar os dados.

Use o SQL Server Management Studio para desenvolver e guardar a consulta.

Para mais informações:Recuperar e Compreender os Dados de Alteração

Passo 3: Desenhar o Fluxo de Dados
No fluxo de dados do pacote, é necessário definir as seguintes tarefas:

  • Recupere os dados de alteração das tabelas de alterações.

    Para recuperar os dados, utilize um componente fonte para consultar as tabelas de alterações das alterações que se enquadram no intervalo selecionado. A fonte chama uma função com valor de tabela Transact-SQL que deve ter criado previamente.

    Para mais informações:Recuperar e Compreender os Dados de Alteração

  • Divida as alterações em inserções, atualizações e eliminações para processamento.

    Para dividir as alterações, use uma transformação de Divisão Condicional para direcionar inserções, atualizações e eliminações para diferentes saídas para processamento adequado.

    Para mais informações:Inserções, Atualizações e Eliminações de Processos

  • Aplique as inserções, eliminações e atualizações ao destino.

    Para aplicar as alterações ao destino, use um componente de destino para aplicar os inserts ao destino. Além disso, utilize transformações de comandos OLE DB com instruções UPDATE e DELETE parametrizadas para aplicar atualizações e deletes ao destino. Também pode aplicar atualizações e eliminações usando componentes de destino para guardar as linhas em tabelas temporárias. Depois, use tarefas de Execução de SQL para realizar operações de atualização e eliminação em massa no destino, a partir das tabelas temporárias.

    Para mais informações:Aplicar as Alterações ao Destino

Alterar Dados a partir de Múltiplas Tabelas

O processo descrito no diagrama e nos passos anteriores envolve uma carga incremental a partir de uma única tabela. Quando se tem de realizar uma carga incremental a partir de múltiplas tabelas, o processo global é o mesmo. No entanto, o design do pacote precisa de ser alterado para acomodar o processamento de múltiplas tabelas. Para mais informações sobre como criar um pacote que realize uma carga incremental a partir de múltiplas tabelas, veja Realizar uma Carga Incremental de Múltiplas Tabelas.

Entrada no blog, Padrão de Design SSIS - Carga Incremental, em sqlblog.com