Fala meus amigos, espero que todos estejam bem.
Hoje vim falar um pouco sobre o comando MERGE em SQL, um comando que é de grande valia para nós de engenharia de dados e utilizadores da linguagem SQL. Ele nos possibilita ganharmos horas de processamento, controle e desenvolvimento em um pipeline de dados.
O que é o comando Merge? O comando MERGE é um comando SQL que combina as operações de INSERT, UPDATE e DELETE em uma única instrução. Ele permite que você atualize uma tabela de destino com dados de uma tabela de origem, realizando ações diferentes com base nas condições especificadas, além de nos oferecer a cláusula OUTPUT, que nos oferece visibilidade sobre o resultado do que foi feito durante o comando MERGE. O comando MERGE é suportado em vários bancos de dados, incluindo Microsoft SQL Server, Oracle, MySQL e PostgreSQL. Por se tratar de um comando SQL, ele pode ser utilizado de diversas formas, desde que a ferramenta utilizada para executar o processamento dos dados nos permita essa possibilidade. Sendo mais claro, algumas ferramentas da própria Microsoft como o Integration Service, Azure Data Factory ou ferramentas que possuem execução de script SQL como Databricks e Pentaho Data Integration, podem fazer usos da solução de MERGE via script SQL.
Em qual etapa de um pipeline ele é utilizado?
O MERGE é utilizado quando é necessário inserir, atualizar ou excluir linhas de uma tabela destino condicionalmente. Em outras palavras, se uma linha existir na tabela de destino, atualize os valores de uma ou várias colunas. Se não existir, insira uma nova linha e se existir no destino, mas não na origem excluir a linha do destino.
O objetivo do comando é sincronizar dados de duas tabelas, garantindo que toda operação feita na tabela de origem seja refletida na tabela de destino, após a execução do comando MERGE.
Qual o benefício ele traz em um processo de ingestão de dados? O comando MERGE pode trazer diversos pontos positivos para um pipeline de dados, como por exemplo:
Eficiência: Pode-se combinar várias operações de INSERT, UPDATE e DELETE em uma única instrução SQL, o que pode ser mais eficiente do que executar essas operações separadamente, com isso o ganho de performance em pipeline de dados, é enorme.
Confiabilidade: Ele garante que os dados na tabela de destino estejam sempre atualizados e sincronizados com os dados de origem. Isso auxilia no processo de Data Quality, garantindo que os dados do destino são os mesmos que dá origem.
Flexibilidade: Pode ser usado para combinar dados de diferentes fontes e aplicar regras de negócios personalizadas com base em necessidades específicas.
Manutenção: Por se tratar de um comando em linguagem SQL, ele pode simplificar o código e o processo de sincronização dos dados, facilitando a manutenção e o suporte ao pipeline de dados ao longo do tempo.
Controle: O comando MERGE nos oferece a clausula OUTPUT que é uma visão dos resultados do que o comando MERGE executa. Através dessa clausula é possível criarmos tabela de controle, e sabermos a quantidade de dados que foram, ALTERADOS, INSERIDOS ou DELETADOS na origem.
Após algumas explicações, quero demonstrar como utilizar esse comando tão poderoso.
Bom, durante uma atividade do meu dia-a-dia surgiu a necessidade do desenvolvimento de um pipeline de ingestão, onde eu precisaria de velocidade no processamento desses dados e um controle, onde seria necessário uma tabela de auditoria, que eu pudesse ter a informação de quantos dados foram inseridos, alterados e deletados na tabela de destino, e qual foi a quantidade de dados final de cada tabela executada.
A ferramenta que utilizei foi o Pentaho Data Integration, que é Open Source e possui integração com a linguagem SQL, sendo assim foi utilizado o step Script SQL dentro de uma transformação.
No exemplo é lido dados da camada transient para a camada raw, é importante deixar dito que ambas as camadas estão no mesmo database e são separados apenas por owners diferentes.
ETAPA 1 - CRIANDO UMA TABELA TEMPORÁRIA
ETAPA 2 - DECLARANDO AS VÁRIAVEIS QUE VOU USAR NO OUTPUT
ETAPA 3 - CLAUSULA MERGE E SUAS CONDIÇÕES
ETAPA 4 - RESULTADO DO MERGE
ETAPA 5 - SETANDO AS VARIAVEIS E CONTANTDO
ETAPA 6 - INSERINDO OS DADOS NA TABELA DE CONTROLE
ETAPA 7 - EXCLUINDO A TABELA TEMPORÁRIA
Detalhando as etapas:
1- Criação da tabela temporária , onde ela será utilizada para gravar os dados resultantes do Output.
2- Declaração das variáveis que serão utilizadas para a contagem de dados que o comando Merge manuseou.
3- A instrução do clausula Merge e suas respectivas condições para executar os comandos, Insert, Update e Delete.
4- Saída da clausula Merge, nesse momento é feito a leitura da ação que foi executada e inserida na tabela temporária #LOG_TEMP, na coluna MergeAction.
5- Setando as variáveis e inserindo valor a elas. Nessa etapa é feito uma contagem em cada linha resultante da tabela #LOG_TEMP. Além de ser feito uma contagem geral na tabela destino, para saber quantos dados a tabela possui após a execução da clausula Merge.
6- Feito um Insert em uma tabela de controle, passa que futuramente seja possível uma auditoria desse comando, possibilitando saber quantos dados foram inserido, deletados ou alterados pela clausula Merge.
7- Exclusão da tabela temporária, para que na próxima execução possa ser criado novamente a mesma tabela.
Espero, que esse material possa ajudar muita gente em nossa comunidade.
Forte abraço a todos, e conte comigo.
Jhonatan Benevenuto
Engenheiro de dados