MERGE nos pacotes do Integration Services

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

Na versão atual do SQL Server Integration Services, a instrução SQL em uma tarefa Executar SQL pode conter uma instrução MERGE. Essa MERGE instrução permite que você execute várias operações INSERT, UPDATE e DELETE em uma única instrução.

Para usar a instrução MERGE em um pacote, siga estas etapas:

  • Crie uma tarefa Fluxo de Dados que carrega, transforma e salva os dados de origem em uma tabela temporária ou de preparação.

  • Crie uma tarefa de Executar SQL que contenha a instrução MERGE.

  • Conecte a tarefa Fluxo de Dados à tarefa Execute SQL e use os dados da tabela de staging como entrada da instrução MERGE.

    Observação

    Embora uma instrução MERGE normalmente exija uma tabela de staging nesse cenário, o desempenho da instrução MERGE geralmente é superior ao da pesquisa linha por linha executada pela transformação Lookup. MERGE também é útil quando o tamanho elevado de uma tabela de consulta colocaria à prova a memória disponível para a transformação Lookup armazenar em cache a tabela de referência.

Usando MERGE

Normalmente, você usa a MERGE instrução quando deseja aplicar alterações que incluem inserções, atualizações e exclusões de uma tabela para outra. Antes do SQL Server 2008 (10.0.x), este processo exigia uma transformação Lookup e várias transformações OLE DB Command. A transformação Pesquisa executava uma pesquisa em linha por linha para determinar se cada linha era nova ou tinha sido alterada. As transformações Comando OLE DB executaram então as operações INSERT, UPDATE e DELETE necessárias. A partir do SQL Server 2008 (10.0.x), uma única instrução MERGE pode substituir tanto a transformação Lookup quanto as transformações OLE DB Command correspondentes.

MERGE com cargas incrementais

A funcionalidade de alteração da captura dos dados que é nova no SQL Server 2008 (10.0.x) facilita a execução de cargas incrementais com segurança em um data warehouse. Como alternativa ao uso de transformações de comando OLE DB parametrizadas para executar as inserções e as atualizações, você pode usar a MERGE instrução para combinar ambas as operações.

Para obter mais informações, consulte Aplicar as alterações ao destino.

MERGE em outros cenários

Nos cenários a seguir, você pode usar a instrução MERGE tanto fora quanto dentro de um pacote do Integration Services. No entanto, um pacote do Integration Services geralmente deve carregar esses dados a partir de várias fontes heterogêneas e, em seguida, combinar e limpar os dados. Portanto, você pode considerar usar a instrução MERGE em um pacote por conveniência e facilidade de manutenção.

Acompanhar hábitos de compra

A tabela FactBuyingHabits no data warehouse rastreia a última data em que um cliente comprou um determinado produto. A tabela consiste nas colunas ProductID, CustomerID e PurchaseDate. Todas as semanas, o banco de dados transacional gera uma tabela PurchaseRecords que inclui as compras feitas durante aquela semana. O objetivo é usar uma única MERGE instrução para mesclar as informações na tabela PurchaseRecords na tabela FactBuyingHabits. Para pares produto-cliente que não existem, a instrução MERGE insere novas linhas. Para pares de produto e cliente já existentes, a instrução MERGE atualiza a data de compra mais recente.

Acompanhar o histórico de preços

A tabela DimBook representa a lista de livros do inventário de um vendedor de livros e identifica o histórico de preços de cada livro. Esta tabela tem estas colunas: ISBN, ProductID, Price, Shelf e IsCurrent. Esta tabela também tem uma linha para cada preço que o livro já teve. Uma dessas linhas contém o preço atual. Para indicar qual linha contém o preço atual, o valor da coluna IsCurrent para essa linha é definido como 1.

Todas as semanas, o banco de dados gera uma tabela WeeklyChanges que contém as alterações de preço da semana e os novos livros que foram adicionados durante a semana. Usando uma única MERGE instrução, você pode aplicar as alterações na tabela WeeklyChanges à tabela DimBook. A MERGE instrução insere novas linhas para livros recém-adicionados e atualiza a coluna IsCurrent para 0 para linhas de livros existentes cujos preços foram alterados. A MERGE instrução também insere novas linhas para livros cujos preços foram alterados e, para essas novas linhas, define o valor da coluna IsCurrent como 1.

Mesclar uma tabela com dados novos em uma tabela antiga

O banco de dados define as propriedades de um objeto usando um "esquema aberto", ou seja, uma tabela que contém pares nome-valor para cada propriedade. A tabela Properties tem três colunas: EntityID, PropertyID e Value. Uma tabela NewProperties que é uma versão mais nova da tabela deve ser sincronizada com a tabela Properties. Para sincronizar essas duas tabelas, você pode usar uma única MERGE instrução para executar as seguintes operações:

  • Exclua propriedades da tabela Properties se elas não existirem na tabela NewProperties.

  • Atualize os valores das propriedades que estão na tabela Properties com os novos valores encontrados na tabela NewProperties.

  • Insira novas propriedades para as propriedades que estão na tabela NewProperties, mas não são encontradas na tabela Properties.

Essa abordagem é útil em cenários que lembram cenários de replicação, onde o objetivo é manter os dados das duas tabelas em dois servidores sincronizados.

Acompanhar o inventário

O banco de dados Inventory tem uma tabela ProductsInventory que tem as colunas ProductID e StockOnHand. Uma tabela Shipments com as colunas ProductID, CustomerID e Quantity rastreia o envio de produtos para os clientes. A tabela ProductInventory deve ser atualizada diariamente com base nas informações da tabela Shipments. Uma única MERGE instrução pode reduzir o inventário na tabela ProductInventory com base nas remessas feitas. Se o inventário de um produto tiver sido reduzido para 0, essa MERGE instrução também poderá excluir essa linha do produto da tabela ProductInventory.