Database
 sql >> Base de Dados >  >> RDS >> Database

Carga incremental no SSIS


As pessoas estão cada vez mais apressadas. Eles querem seus dados quase agora. E ainda mais, os dados estão ficando cada vez maiores. Então, você não pode usar boas técnicas antigas porque elas são “boas o suficiente”. Tem que ser rápido. E as etapas de ETL não são uma exceção. É aqui que a carga incremental entra em jogo. E se você está nesta página, provavelmente está procurando por carga incremental no SSIS.

E esse é o nosso foco neste artigo. Faremos comparações e exemplos para explicar a carga de dados incremental no SSIS passo a passo. E tenha certeza de que não vai quebrar sua cabeça descobrir isso.



Aqui está o que está reservado para você:
  • O que são carga total e carga incremental no ETL?
  • O que é carregamento de dados incremental no SSIS?
  • As diferenças entre carga total e carga incremental no SSIS
  • Carga incremental no SSIS usando CDC ou Change Data Capture
  • Carregamento incremental no SSIS usando colunas DateTime
  • Como fazer carregamento incremental no SSIS usando o Lookup
  • A melhor ferramenta para carregamento de dados SSIS

Cada seção terá subseções. Você pode pular para o tópico que precisa clicando nos links.

Antes de começarmos com os exemplos, vamos comparar a carga incremental com seu oposto, a carga total.

O que são Carga Completa e Carga Incremental em ETL


Não importa quais ferramentas ETL você use, cargas completas e incrementais têm o mesmo significado. Vamos descrevê-los abaixo.

Carga total em ETL


Como o nome sugere, Full Load em ETL está carregando TODOS os dados da origem para o destino. Uma tabela de destino é truncada antes de carregar tudo da origem. É por isso que esta técnica também é conhecida como Carga Destrutiva . Esta técnica também é mais fácil de fazer. E isso também garante a mais alta integridade de dados. Mas o tamanho dos seus dados hoje é maior do que ontem. Portanto, se você usar isso em dados cada vez maiores, o processo ficará mais lento com o tempo.

Casos de uso de carga completa de ETL

  • O tamanho dos dados de origem é pequeno e não crescerá significativamente nos próximos anos. Os exemplos incluem uma lista de cores, algumas categorias/classificações, lista de países e cidades e muito mais.
  • É difícil dizer o que é novo ou alterado na fonte.
  • Os dados precisam ser exatamente os mesmos da origem ao destino
  • O histórico dos dados é irrelevante e é substituído com mais frequência

Carga incremental em ETL


Enquanto isso, Incremental Load também é como o nome sugere. Somente os dados alterados serão carregados da origem para o destino. Isso é feito de forma incremental ao longo do tempo. Os que não mudaram permanecerão como estão. Isso é um pouco difícil de fazer. Você precisa garantir que todas as alterações foram reunidas e carregadas no destino. Mas isso será mais rápido que o Full Load em dados muito grandes.

Casos de uso de carga incremental de ETL

  • O tamanho dos dados é muito grande e a consulta será muito lenta para grandes conjuntos de resultados
  • As alterações são fáceis de consultar
  • Os dados excluídos precisam ser retidos no destino, como um sistema de auditoria

O que é carga incremental no SSIS


Os constituintes básicos de uma carga incremental no SSIS são mostrados na Figura 1.

O carregamento incremental no SSIS tende a ser mais complexo dependendo de seus requisitos. Mas o simples “cartão de receitas” na Figura 1 inclui o que você precisa para “cozinhar” os dados em incrementos. Capturar mudanças nos dados é a parte desafiadora. Você pode estragar o destino se não for cuidadoso.

Nas próximas seções, você verá como fazer carga incremental no SSIS com exemplos. Isso inclui o uso de ChangeData Capture (CDC), colunas DateTime e pesquisas. Você também verá como isso é feito usando componentes Devart SSIS.

Vamos comparar a carga incremental com a carga total no SSIS na próxima seção.

A diferença entre carga completa e carga incremental no SSIS


Você já viu como é a carga incremental no SSIS (Figura 1). Enquanto isso, veja como funciona com o SSIS Full load na Figura 2 abaixo.

A diferença entre carga completa e carga incremental no SSIS está no design do pacote. Um projeto de carga completa precisa de menos componentes arrastados para o pacote SSIS. É tão simples que há pouco pensamento envolvido. É por isso que, por uma falsa sensação de produtividade, alguns desenvolvedores tendem a recorrer a essa técnica na maioria das vezes.

Mas executar um pacote de design de carga total todas as noites não é aconselhável para dados grandes, digamos 15 TB. Você acha que terminará a tempo antes que os usuários cheguem pela manhã? Isso não acontecerá porque você está tentando reinserir os registros que não foram alterados. Se isso for cerca de 70% dos dados, você precisará de mais tempo de inatividade dependendo dos recursos do servidor.

Isso é inaceitável.

Portanto, quanto mais você precisa usar a carga incremental nesses cenários. Nas seções a seguir, você aprenderá a carregar dados mais rapidamente usando o carregamento incremental.

Carregamento incremental no SSIS usando CDC


Primeiro, vamos considerar o uso do Change Data Capture (CDC). Observe que daqui até os próximos 3 exemplos, usaremos exemplos simples. Assim, o design da embalagem não irá desfocar o objetivo.

Antes de começarmos com o exemplo, esta seção cobrirá o seguinte:
  • Primeiro, como habilitar o CDC em um banco de dados e uma tabela
  • Em seguida, criando o pacote SSIS para carga incremental do SSIS usando CDC
  • Finalmente, executando e verificando os resultados

A Figura 3 mostra os constituintes deste exemplo.

Inserções, exclusões e atualizações de registros de Change Data Capture (CDC) em uma tabela. Antes de fazer este exemplo funcionar, você precisa de um banco de dados e uma tabela configurados para CDC.

Como habilitar o CDC em um banco de dados e uma tabela


As configurações de banco de dados e tabela são padrão sem CDC. Para tornar um banco de dados habilitado para CDC, aqui está a sintaxe T-SQL:
-- point to the database you need to CDC-enable
USE SportsCarSales
GO

-- this will enable CDC to the current database.
EXEC sys.sp_cdc_enable_db
GO

Em seguida, para verificar se o CDC está realmente ativado, execute isto:
select name from sys.databases
where is_cdc_enabled=1

Se o nome do banco de dados que você habilitou para CDC aparecer, você está pronto para ir. Seu banco de dados agora está habilitado para CDC.

Mas não termina aqui. Você precisa indicar qual tabela você deseja rastrear para quaisquer alterações. A sp_cdc_enable_table vai fazer o truque. Abaixo está um exemplo disso.
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name   = N'sportsCarSales',
@role_name     = NULL,
@supports_net_changes = 1
GO

A execução do código acima deve resultar em mensagens semelhantes abaixo:
Job 'cdc.SportsCarSales_capture' started successfully.
Job 'cdc.SportsCarSales_cleanup' started successfully.

Essas mensagens são os 2 novos trabalhos do SQL Server Agent criados após habilitar uma tabela para CDC. É por isso que você precisa do SQL Server Agent para fazer o CDC funcionar. Veja uma captura de tela na Figura 4.

Fazendo inserções, exclusões e atualizações no sportsCarSales table irá gravar automaticamente as alterações em outra tabela chamada cdc.dbo_sportsCarSales_CT . Esta tabela tem colunas como a original. Veja uma captura de tela na Figura 5.

A _$operação coluna na tabela esquerda é de particular interesse. Os valores possíveis para esta coluna são 1 (Excluir), 2 (Inserir), 3 e 4 (Atualizar). A atualização usa 2 valores:um para valores de coluna antes a atualização (que é 3). E o outro para valores de coluna depois a atualização (que é 4). Você pode verificar esta coluna ao verificar os valores antes de executar seu pacote SSIS. A CDCSource e Divisor de CDC componentes usam esta tabela ao identificar mudanças. Mais sobre isso na próxima seção.

Criando o pacote SSIS para carga incremental do SSIS usando CDC


Aqui estão as etapas para criar o pacote SSIS com carga incremental usando o CDC. Isso pressupõe que você já tenha um pacote em branco no Visual Studio 2019. Nosso objetivo aqui é carregar as linhas de sportsCarSales tableno FactSportsCarSales tabela de fatos em um data warehouse.

A seguir, o resumo das etapas:

PASSO 1. Crie 2 gerenciadores de conexões de banco de dados
PASSO 2. Arraste 2 Tarefa de Controle do CDC para o Fluxo de Controle
ETAPA 3. Arraste uma tarefa de fluxo de dados e conecte-se à tarefa de controle do CDC

ETAPA #1. Crie 2 gerenciadores de conexões de banco de dados


Precisamos de 2 conexões de banco de dados aqui. Uma é a conexão ADO.Net que deve apontar para o banco de dados habilitado para CDC. E, em seguida, crie uma conexão OLE DB com um data warehouse como destino. Ambos são bancos de dados do SQL Server 2019. Consulte as Figuras 6 e 7 em conformidade. Neste exemplo, os dois bancos de dados estão na mesma máquina. E estamos usando a autenticação do Windows para conectar.

Portanto, nos Gerenciadores de conexões janela, clique com o botão direito do mouse e selecione Nova conexão ADO.Net . Em seguida, preencha as configurações do servidor, autenticação e banco de dados conforme mostrado na Figura 6 abaixo.

Em seguida, crie uma conexão OLE DB com o data warehouse. Na janela Gerenciador de Conexões, clique com o botão direito do mouse e selecione Nova Conexão OLE DB . Em seguida, preencha o servidor, a autenticação e o nome do banco de dados. Especifique o data warehouse aqui.

PASSO #2. Arraste 2 Tarefas de Controle do CDC para o Fluxo de Controle


Há duas coisas que precisamos fazer depois de arrastar uma tarefa de controle do CDC no fluxo de controle.
Marcar início do CDC

Primeiro, precisamos configurar a tarefa de controle do CDC para marcar o início do CDC. E, em seguida, crie uma tabela de estado do CDC. Isso pode ser feito em uma janela de configuração. Veja a Figura 8 abaixo.

Seguindo as etapas numeradas na Figura 9, a seguir estão os detalhes.
  1. Selecione a conexão ADO.Net que criamos na Figura 6.
  2. Em seguida, selecione Marcar início do CDC .
  3. Clique em Novo para criar uma variável de estado CDC. Em seguida, aparecerá uma janela. Clique em OK para criar o nome da variável padrão User::CDC_State .
  4. Selecione a conexão ADO.Net para que possamos armazenar o estado do CDC nesse banco de dados.
  5. Clique em Novo para criar uma tabela para armazenar o estado. O script já foi criado para você. Então, basta clicar em Executar na próxima janela.
  6. Em seguida, selecione CDC_State como o nome do estado.
  7. Por fim, clique em OK .

Após configurar esta Tarefa de Controle do CDC, execute o pacote. Você ainda não verá os registros copiados para o outro banco de dados. Mas a tabela de estados (dbo.cdc_state ) será preenchido com valores iniciais.

A partir daqui, você pode optar por desabilitar essa tarefa de controle do CDC ou substituí-la novamente por novos valores na próxima tarefa.
Obter intervalo de processamento

Você arrasta uma nova Tarefa de Controle do CDC para o Fluxo de Controle ou substitui a anterior. A configuração é a mesma da Figura 9, exceto pela Operação de Controle do CDC (#2). Desta vez, selecione Obter intervalo de processamento . Em seguida, clique em OK . Conecte-o à Tarefa de Fluxo de Dados na ETAPA 3 posteriormente.
Marcar intervalo processado

Configure a outra tarefa de controle do CDC como a primeira, exceto que desta vez, selecione Marcar intervalo processado para a Operação de Controle do CDC. Conecte a tarefa de fluxo de dados na ETAPA 3 a isso.

Passo #3. Arraste uma tarefa de fluxo de dados e conecte-se à tarefa CDCControl


Esta Tarefa de Fluxo de Dados fará a extração e o carregamento conforme visto na Figura 3 anterior. Antes de nos aprofundarmos nos detalhes de cada etapa, aqui está um resumo:

A. Adicionar uma fonte de CDC
B. Adicione um Divisor de CDC e conecte-o à Fonte de CDC
C. Adicionar um comando OLE DB para excluir registros
D. Adicionar um destino OLE DB para inserir registros
E. Adicione outro comando OLE DB para atualizar registros

Agora, vamos mergulhar.
A. Adicionar uma fonte de CDC

Arraste uma Fonte de CDC componente com as configurações mostradas na Figura 9 abaixo.

Seguindo as etapas numeradas na Figura 9, a seguir estão os detalhes:
  1. Primeiro, selecione a conexão ADO.Net que criamos na Figura 6.
  2. Em seguida, selecione a tabela habilitada para CDC sportsCarSales .
  3. Selecione a instância de captura dbo_SportsCarSales .
  4. Em seguida, selecione Rede para o modo de processamento CDC. Isso retornará apenas alterações líquidas. Para uma descrição detalhada de cada modo de processamento, confira este link. Você também pode clicar em Visualizar para ver quais linhas serão incluídas.
  5. Selecione a variável CDC State que criamos anteriormente (Figura 9).
  6. Por fim, clique em OK .
B. Adicione um CDC Splitter e conecte-o à origem do CDC

O único requisito de um Divisor de CDC é uma Fonte de CDC precedendo-o. Portanto, conecte a Fonte do CDC anterior a este componente. Isso separará as alterações nas inserções, atualizações e exclusões.
C. Adicionar um comando OLE DB para excluir registros

Primeiro, você precisa rotular esse componente como Excluir registros (consulte a Figura 3). Em seguida, conecte-o ao CDC Splitter. Quando um prompt aparecer, selecione ExcluirSaída para a saída e clique em OK .

Em seguida, configure o comando OLE DB Gerenciadores de conexão aba. Veja a Figura 10.

Em seguida, nas Propriedades do componente guia, especifique o comando DELETE para o SQLCommand propriedade. O comando deve ficar assim:
DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Veja uma captura de tela na Figura 11 abaixo.

O ponto de interrogação criará um parâmetro para SalesID . Cada SalesID valor proveniente do CDCSplitter será usado para excluir linhas no FactSportsCarSales tabela.

Em seguida, nos Mapeamentos de coluna guia, mapeie o SalesID coluna da tabela para o parâmetro (Param_0 ) Veja a Figura 12.

Por fim, clique em OK.
D. Adicionar um destino OLE DB para inserir registros

Primeiro, arraste um Destino OLE DB . Em seguida, rotule-o como Inserir registros . Conecte-o ao Divisor de CDC . Em seguida, selecione InserirSaída quando um prompt de janela aparece. Consulte a Figura 14 para obter as configurações básicas.

Seguindo os passos numerados na Figura 13, abaixo estão os detalhes:
  1. Primeiro, selecione a conexão OLE DB que criamos na Figura 7.
    Em seguida, selecione FactSportsCarSales tabela de fatos.
  2. Por fim, clique em OK .
E. Adicionar um comando OLE DB para atualizar registros

Arraste outro Comando OLE DB e rotule-o como Atualizar registros. Em seguida, conecte-o ao Divisor CDC . Ele escolherá automaticamente o UpdateOutput saída. Os Gerenciadores de conexão A configuração da guia deve ser a mesma da Figura 11.

Mas o Component PropertiesSQLCommand deve ter um valor assim:
UPDATE [dbo].[FactSportsCarSales]
   SET [ClientID] = ?
      ,[SportsCarID] = ?
      ,[PurchaseDate] = ?
      ,[Quantity] = ?
      ,[UnitPrice] = ?
 WHERE [SalesID]= ?

O número de pontos de interrogação no código acima informará quantos parâmetros usar a partir de Param_0 .A posição dos parâmetros de Param_0 para Param_5 é organizado com base em seu lugar no código. Então, Param_0 isfor ClientID , Param_1 é para SportsCarID ,e assim por diante.

Confira os mapeamentos de coluna na Figura 15.

Depois de configurar o CDC no banco de dados e no nível da tabela, a maneira de testar se o CDC funciona é adicionando e alterando linhas. Então, vamos adicionar alguns registros à tabela.

USE SportsCarSales
GO

INSERT INTO SportsCarSales (ClientID, SportsCarID, PurchaseDate, Quantity, UnitPrice)
	VALUES (1, 1920, '02/03/2022', 1, 845000.0000),
	(5, 1920, '01/22/2022', 1, 845000.0000),
		(54, 1920, '01/15/2022', 1, 845000.0000),
		(62, 1920, '02/04/2022', 1, 845000.0000);
GO

Para ver se isso está registrado no CDC é consultando o cdc.dbo_sportsCarSales_CT tabela.
SELECT * FROM cdc.dbo_sportsCarSales_CT;

Confira os resultados na captura de dados alterados após o comando INSERT na Figura 15.

Então, ele gravou as inserções. Isso é bom.

Agora, tente executar o pacote SSIS anteriormente. O resultado deve ser o mesmo da Figura 16 abaixo.

Figura 16 . Resultado do tempo de execução do pacote SSIS para carga incremental usando CDC.

E, finalmente, consultando os resultados no FactSportsCarSales tabela revelam o mesmo conjunto de 4 registros.

Carregamento incremental no SSIS usando colunas DateTime


A carga incremental no SSIS usando colunas DateTime é outra maneira de coletar dados em incrementos. Se acontecer de você fazer ETL em uma tabela sem CDC, esta é sua próxima opção.

A tabela de origem pode ter um Modificado ou Última Atualização coluna como a da Figura 17.

Para consultar as alterações é preciso conhecer o máximo Modificado valor da coluna do destino. Em seguida, consulte todos os registros da fonte que tenham maior que o Modificado valor da coluna do destino.

Os ingredientes típicos desta técnica são mostrados na Figura 18.

Por favor, siga as instruções sobre como cozinhar este tipo de carga incremental. A seguir estão os subtópicos desta seção:
  • Criando o pacote para fazer o carregamento incremental do SSIS com colunas DateTime
  • Resultados do tempo de execução do pacote

Criando o pacote para fazer a carga incremental do SSIS com colunas DateTime


Nosso objetivo é carregar os SportsCars tabela em dimSportsCars tabela de dimensões em outro banco de dados. A seguir, um resumo das etapas:

PASSO 1. Crie 2 gerenciadores de conexões OLE DB
PASSO 2. Crie 2 variáveis ​​de pacote
ETAPA 3. Adicione uma Tarefa de Execução SQL no fluxo de controle
PASSO 4. Adicionar uma Tarefa de fluxo de dados

Vamos começar.

ETAPA #1. Crie 2 gerenciadores de conexões OLE DB


A primeira conexão OLE DB é de um banco de dados transacional. E as configurações são simples, conforme mostrado na Figura 19.

Em seguida, crie outra conexão OLE DB com o data warehouse. Isso deve ser o mesmo que na Figura 7.

PASSO #2. Crie 2 variáveis ​​de pacote


A primeira variável conterá a data da última modificação do dimSportsCars tabela de dimensão. Em seguida, o segundo conterá a consulta SQL personalizada.
A. Crie a variável User::sportsCars_lastUpdate
  1. Nas Variáveis janela, clique em Adicionar variável .
  2. Nomeie como sportsCars_lastupdate .
  3. Defina o tipo de dados como DateTime .
B. Crie a variável User::sqlCommand
  1. Nas Variáveis janela, clique em Adicionar variável .
  2. Nomeie como sqlCommand .
  3. Defina o tipo como String .
  4. Clique no botão de reticências para criar a Expressão . Consulte a Figura 21 para o Construtor de expressões janela e a expressão de string real.
  5. Clique em OK .

A string SQL deve ficar assim:
"SELECT  SportsCarID, StyleID, ManufacturerID, Model, UnitPrice, created, modified 
FROM sportsCars
WHERE modified > '" + (DT_WSTR, 50) @[User::sportsCars_lastupdate]  + "' 
ORDER BY SportsCarID;"

Observe que definimos a cláusula WHERE como Modificada maior que User::sportsCars_lastupdate .

Haverá mais detalhes sobre como definir as 2 variáveis ​​nas etapas seguintes.

PASSO #3. Adicionar uma tarefa Executar SQL no fluxo de controle


Esta tarefa consultará a tabela de destino para obter o último Modificado valor da data. Arraste uma Executar tarefa SQL ao Fluxo de Controle. Em seguida, rotule-o Obter data da última modificação do DW . Em seguida, veja as configurações na Figura 21.

As propriedades importantes a serem definidas aqui são a Conexão , SQLStatement e ResultSet propriedades.

Defina a Conexão propriedade para a segunda conexão OLE DB definida na ETAPA #1. Em seguida, defina o SQLStatement propriedade para o código abaixo.
select max(modified) as LastUpdate from dimSportsCars

Em seguida, defina o ResultSet propriedade para uma linha única .

Finalmente, você precisa mapear o LastUpdate alias de coluna (veja o código acima) para User::sportsCars_lastupdate variável. Veja uma captura de tela na Figura 22.

Por fim, clique em OK para salvar as novas configurações.

PASSO #4. Adicionar uma tarefa de fluxo de dados


Arraste uma Tarefa de fluxo de dados ao fluxo de controle e conecte o Execute SQL Task para isso. Em seguida, rotule a Tarefa de fluxo de dados Atualizar dimensão dimSportsCars . Em seguida, siga as etapas para adicionar componentes à Tarefa de fluxo de dados .

A Tarefa de fluxo de dados tem vários passos dentro dele:

A. Adicionar uma fonte OLE DB
B. Adicione uma Transformação de Pesquisa para comparar a origem com o destino
C. Adicionar um comando OLE DB para atualizar registros
D. Adicionar um destino OLE DB para inserir registros

Agora, vamos começar.
A. Adicionar uma fonte OLE DB

Esta fonte OLE DB irá consultar a tabela de origem para os registros alterados. Veja as configurações na Figura 23.

Seguindo os números na Figura 23, aqui estão os detalhes:
  1. Primeiro, especifique a conexão OLE DB que criamos. Veja a Figura 20.
  2. Em seguida, defina o Modo de acesso a dados para comando SQL de a variável .
  3. Em seguida, selecione a variável User::sqlCommand que criamos anteriormente. Veja a Figura 21.
  4. Por fim, clique em OK .
B. Adicione uma transformação de pesquisa para comparar a origem com o destino

Agora, precisamos ter uma maneira de comparar as tabelas de origem e de destino. Podemos usar a Pesquisa componente de transformação para fazer isso. Isto irá realizar uma junção entre as 2 tabelas.

Então, arraste uma Pesquisa Transformação no fluxo de dados e nomeie-o Classifique a mudança . Em seguida, conecte-o à Origem OLE DB mais cedo. Clique duas vezes nele. Consulte a Figura 24 para configurar o Geral página.

Defina a lista suspensa para Redirecionar linhas para saída sem correspondência como visto na Figura 24. Isso significa que vamos usar as linhas que não têm correspondência. E neste caso, isso é para detectar linhas presentes na origem, mas não no destino.

Em seguida, clique em Conexão página no painel esquerdo do Editor de Transformação de Pesquisa . Em seguida, consulte a Figura 25 sobre o que definir.

Na Figura 26, você precisa especificar a Conexão OLE DB para a tabela de destino. (Ver Figura 7). E então, defina a consulta SQL para o código abaixo.
SELECT SportsCarID from dimSportsCars

Só precisamos do SportsCarID columnpara comparar, então usamos uma consulta em vez de toda a tabela.

Em seguida, clique nas Colunas page para definir o mapeamento da coluna da chave de consulta de origem para o destino. Consulte a Figura 26 para o mapeamento.

Como visto na Figura 26, deve haver uma linha da origem ao destino usando o SportsCarID coluna chave. Ambas as colunas-chave serão usadas para a comparação.

Por fim, clique em OK .
C. Adicionar um comando OLE DB para atualizar registros

Esta parte atualizará os registros que possuem SportsCarID correspondentes valores-chave da Pesquisa Transformação.

Então, arraste um Comando OLE DB no fluxo de dados e nomeie-o Atualizar dimSportsCars . Em seguida, conecte-o à Pesquisa Transformação anterior. Quando um prompt aparecer, defina a Saída para Saída de correspondência de pesquisa . Em seguida, clique em OK .

Clique duas vezes no Comando OLE DB e defina as propriedades nos Gerenciadores de conexões aba. Consulte a Figura 27.

A Figura 27 mostra que você precisa definir o Gerenciador de conexões para o banco de dados de destino (consulte a Figura 8). Em seguida, clique em Propriedades do componente aba. Consulte a Figura 28 para obter as configurações de propriedade.

A propriedade SQLCommand é definida como:
UPDATE dimSportsCars
SET StyleID = ?, ManufacturerID = ? , MODEL = ? , UnitPrice = ? , modified = ?
WHERE SportsCarID = ?

Já fizemos algo parecido anteriormente. Os pontos de interrogação são espaços reservados para parâmetros. E se mapearmos a coluna de origem correta, a coluna de destino correspondente será definida. Veja os mapeamentos na Figura 29.

Por fim, clique em OK .
D. Adicionar um destino OLE DB para inserir registros

Esta parte irá inserir novos registros encontrados nos SportsCars tabela em dimSportsCars dimensional.

Então, arraste um Destino OLE DB componente e nomeie-o Inserir novos registros em dimSportsCars. Clique duas vezes nele e defina a conexão e a tabela de destino. Consulte a Figura 30.

Conforme mostrado na Figura 30, defina a conexão com o data warehouse (Figura 8) e selecione o dimSportsCars tabela de dimensão.

Em seguida, clique em Mapeamentos pagepara ver se as colunas estão mapeadas de acordo. Como os nomes das colunas são os mesmos na origem e no destino, eles serão mapeados automaticamente.

Por fim, clique em OK .

Resultados do tempo de execução do pacote


Agora que o pacote está completo, aqui está uma captura de tela do resultado na Figura 31.

O processo atualizou 8 linhas e inseriu 1 nova linha no dimSportsCars tabela de dimensão.

Carregamento incremental no SSIS usando pesquisa


Outro método para fazer o carregamento incremental é comparar a origem do destino para ver o que precisa ser inserido, atualizado e excluído. E esta é sua opção se não houver coluna DateTime e CDCon nas duas tabelas. Uma maneira de fazer isso é usar Pesquisa Transformação.

Os ingredientes típicos para esta abordagem são mostrados na Figura 32.

Observe que a abordagem simples na Figura 32 é aplicável para tabelas que não permitem exclusões definitivas. Se for necessário lidar com exclusões, uma junção de mesclagem usando uma junção completa pode ser aplicável.

Existem 2 subtópicos para esta seção:

Criando o pacote SSIS para a carga incremental do SSIS usando Lookup
Resultados do tempo de execução do pacote

Vamos mergulhar.

Criando o pacote SSIS para a carga incremental do SSIS usando pesquisa


Nosso objetivo aqui é carregar as linhas de Fabricantes tabela para os dimManufacturers dimensional.

Isso pressupõe que você tenha um pacote SSIS em branco pronto.

A seguir, o resumo das etapas:

PASSO 1. Criar 2 conexões OLE DB
PASSO 2. Adicionar uma tarefa de fluxo de dados

Comecemos pelo exemplo.

ETAPA #1. Crie 2 conexões OLE DB


Você pode consultar a Figura 19 para a origem e a Figura 7 para o destino. Estamos usando os mesmos gerenciadores de conexões aqui.

PASSO #2. Adicionar uma tarefa de fluxo de dados


Arraste uma Tarefa de fluxo de dados no fluxo de controle e nomeie-o Atualizar a tabela de dimensões dos fabricantes. Clique duas vezes nele e siga os próximos passos. Abaixo estão resumidas as etapas dentro da Tarefa de fluxo de dados .

A. Adicione uma Fonte OLE DB
B. Adicione uma Pesquisa Transformação para procurar novos registros
C. Adicionar um Destino OLE DB para inserir registros.
D. Adicionar outra pesquisa Transformação para verificar alterações
E. Adicionar um Comando OLE DB para atualizar a tabela de destino
A. Adicionar uma fonte OLE DB

Arraste uma Fonte OLE DB e rotule-o como Fabricantes . Defina o Gerenciador de conexões como visto na Figura 33.
B. Adicionar uma transformação de pesquisa para verificar novos registros

Esta Pesquisa A transformação fará a varredura de registros que não existem no destino com base no ManufacturerID coluna-chave. E todas as linhas não correspondentes são candidatas a inserção de tabela.

Arraste uma Pesquisa transformação e nomeie-o Pesquisa dimFabricantes. Em seguida, clique duas vezes nele.

As configurações para o Geral página deve ser a mesma da Figura 24. Enquanto isso, defina a conexão com o data warehouse e use uma consulta para as Conexões configurações da página. Consulte a Figura 34.
C. Adicionar um destino OLE DB para inserir registros

Arraste um Destino OLE DB e nomeie-o Inserir novos registros. Conecte-o à Pesquisa Transformação e selecione Procurar saída sem correspondência quando um prompt aparece. Clique duas vezes nele e defina a conexão e a tabela de destino como visto na Figura 35.

As tabelas de origem e destino têm os mesmos nomes de coluna e serão mapeadas automaticamente. Consulte a Figura 36.

Por fim, clique em OK .
D. Adicionar outra transformação de pesquisa para verificar alterações

Ao contrário da Pesquisa anterior Transformação, este irá procurar por mudanças no Fabricante coluna. E se houver alterações, ela será candidata à atualização da tabela.

Arraste outra Pesquisa Transformação e nomeie Pesquisa de Registros que Mudaram. Conecte-o à primeira Pesquisa Transformação. O Geral página para esta pesquisa deve ser a mesma da Figura 24.

Enquanto isso, a Conexão página deve se parecer com a Figura 37 abaixo.

Enquanto isso, observe os mapeamentos na Figura 38.

A Figura 38 mostra mapeamentos por meio de Fabricante nome. Se não for igual, há uma mudança na fonte. E ele precisa ser copiado no destino.
E. Adicione um comando OLE DB para atualizar a tabela de destino

As configurações devem ser as mesmas da Figura 29, exceto para o SQLCommand . O comando UPDATE deve ser assim:
UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Ajuste os mapeamentos de coluna para os parâmetros de acordo.

Resultados do tempo de execução do pacote


Feito? Em seguida, execute o pacote. Você verá resultados de tempo de execução iguais aos da Figura 39.

A melhor ferramenta para carregamento de dados SSIS


Todos os exemplos anteriores usam os componentes prontos para uso que vêm da Microsoft. Embora seja bom o suficiente para alguns projetos, e se você precisar integrar fontes de nuvem e banco de dados via SSIS?

É aqui que os componentes Devart SSIS entram em ação. Esses componentes SSIS são fáceis de usar. E eles oferecem carregamento de dados de alto desempenho usando otimizações específicas da fonte de dados e armazenamento em cache avançado. Eles também têm mais de 40 fontes de dados, incluindo favoritos RDBMS como MySQL, PostgreSQL e Oracle. Também estão incluídos serviços em nuvem como Salesforce, HubSpot, Google Analytics e muito mais. Portanto, vale a pena tentar carregar milhões de registros no SSIS usando o Devart SSIS Components.

Por que não um exemplo?

Usando componentes Devart SSIS para fazer carga incremental


Vamos tentar replicar os dimManufacturers table no MySQL e use o Lookup do Devart e Destino componentes para MySQL. A receita é mostrada na Figura 40.

Vamos começar adicionando um novo pacote SSIS ao seu projeto do Visual Studio Integration Services. Em seguida, adicione uma Data FlowTask e clique duas vezes nele. Em seguida, siga os passos abaixo.

Antes disso, aqui está um resumo das etapas:

PASSO 1. Adicionar uma fonte OLE DB
PASSO 2. Adicione um Devart MySQL Connection Manager
ETAPA 3. Adicione uma Pesquisa MySQL do Devart para procurar novos registros
PASSO 4. Adicionar outro Devart MySQL Lookup Transformação para verificar se há alterações
PASSO #5. Adicionar um Destino MySQL Devart para inserir registros
PASSO #6. Adicionar outro Destino MySQL Devart para atualizar registros

ETAPA #1. Adicionar uma fonte OLE DB


Isso se conectará ao banco de dados SQL Server que tínhamos anteriormente. Consulte a Figura 8. Em seguida, defina a tabela para dimManufacturers .

PASSO #2. Adicionar um gerenciador de conexões MySQL Devart


Precisamos dessa conexão para o banco de dados e a tabela de destino. Portanto, nos Gerenciadores de conexão janela, clique com o botão direito do mouse e selecione Nova conexão . Em seguida, selecione o DevartMySQL Tipo de gerenciador de conexões. Then, configure the database access as shown in Figure 41. Notice the simpler interface to connect. Though you can go to the Advanced tab and see more properties there.

I’m running MySQL 8 in my local machine and there’s a copy of the same database in SQL Server, but the rows are older.

STEP #3. Add a Devart MySQL Lookup Transformation to Scanfor New Records


Drag a Devart MySQL Lookup and name it Compare Source to Target . Then, connect it to the Devart MySQL Connection Manager earlier. Now, follow the configuration in Figure 42.

Following the numbers in Figure 42, the following are the details:
  1. First, select the Devart MySQL Connection Manager created in STEP #2.
  2. Then, select the dimmanufacturers table.
  3. In Lookup Columns , mark checked the ManufacturerID column.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

OBSERVAÇÃO :If you encounter a duplicate name error, go to Advanced Editor. And then, click Input and Output Properties . Rename either the Input or Output Column to a different name.

STEP #4. Add another Devart MySQL Lookup Transformation toScan for Changes


This second MySQL Lookup will scan forrecords that changed.

Drag another Devart MySQL Lookup andlabel it Get Records that Changed. Connect it to thefirst Devart MySQL Lookup . Then, choose Lookup Match Output .

The setup is the same as in Figure 42. But choose the Manufacturer column instead of ManufacturerID . Do this for Lookup Columns , Input Columns , and Reference Columns .

STEP #5. Add a Devart MySQL Destination to Insert Records


This step will insert records from thesource that have no match in the target.

So, drag a Devart MySQL Destination and label it Insert New Records. Connect it to the first Devart MySQL Lookup . Double-click it and configure the Connection Manager . See Figure 43.

In Figure 43, you need to set the connection to the MySQL connection manager we did in STEP #2. Then, click Component Properties . See the configuration in Figure 44.

After setting the TableName to dimmanufacturers ,click Column Mappings . Since both the source and target tables havethe same column names, the columns are automatically mapped.

Finally, click OK .

STEP #6. Add Another Devart MySQL Destination to UpdateRecords


Unlike the other Devart MySQLDestination , this will update records that changed from the source.

So, drag another Devart MySQL Destination and label it Update Existing. Connect it to the second Devart MySQL Lookup Transformation. And select Lookup No Match Output when a prompt appears. The setup is the same as in STEP #5 except for the Component Properties . See Figure 45 on what to change.

Using the Devart MySQL Destination is dead easy than using an OLE DB Command. There’s no need to map parameters to columns. It also works for a Delete operation. This is unlike an OLE DB Destination that works for inserts only.

Package Runtime Results


See the runtime results in Figure 46.

Conclusão


É isso.

You learned 3 ways to do incremental load in SSIS by using the following:
  • Change Data Capture
  • DateTime Columns
  • Lookup Transformation

You also learned how to do it using DevartSSIS Components.

Though our examples are simplified to makethe principle easier to understand as possible, there’s room for improvement.We didn’t use a staging table to store all changes, whether insert, update, ordelete. This is recommended for very large data, especially when the target isin another server. You can also add an executeprocess task in SSIS for special scenarios.

Anyway, if you like this post, please shareit on your favorite social media platforms.