No mundo acelerado de hoje, as empresas precisam capturar e analisar dados em tempo real para tomar decisões informadas. Um requisito comum é transmitir as alterações de dados de um SQL Server local para o Azure para processamento posterior. Neste post do blog, exploraremos como criar uma solução de ETL de transmissão usando o Change Data Capture (CDC) no SQL Server e o Azure Event Hubs.
Change Data Capture (CDC)
O CDC é um recurso no SQL Server que rastreia as alterações DML em tabelas de sistema separadas. Ele permite que você capture operações DML intermediárias em tabelas em um banco de dados SQL local. Se você não está familiarizado com o CDC, você pode aprender mais sobre ele aqui.
Arquitetura
A arquitetura final de nossa solução se parece com isso:
A solução captura as alterações de dados do SQL a partir das tabelas do sistema de rastreamento de alterações do CDC, cria mensagens JSON a partir das linhas de alteração e, em seguida, envia a mensagem para um Azure Event Hub. Uma vez aterrissado no Event Hub, um Job do Azure Stream Analytics (ASA) distribui as alterações em várias saídas.
Configurando o Banco de Dados SQL de Origem e as Tabelas
Para começar, precisamos criar uma tabela no banco de dados de origem que queremos rastrear, bem como uma tabela de deslocamento separada para gerenciar a última posição/linha que foi enviada para o Azure. Também precisamos habilitar o CDC no banco de dados de origem. Você pode encontrar o script para configurar o banco de dados de origem e as tabelas no artigo de exemplo.
Configurando a Solução “SQL CDC 2 Event Hub”
Para extrair dados das tabelas do sistema de rastreamento de alterações do CDC do SQL e criar mensagens do Event Hub, precisamos de um pequeno programa de linha de comando em C# e um Azure Event Hub. Você pode encontrar o código-fonte do programa no artigo de exemplo. Depois de criar o Azure Event Hub, você precisará da string de conexão desse Event Hub.
Agendando o Programa SQL2AEH no SQL Agent
Como queremos que os dados sejam transmitidos em tempo real do CDC do SQL, agendaremos o programa SQL2AEH no SQL Agent. Você pode encontrar as etapas para agendar o programa no artigo de exemplo.
Criando Mensagens do Event Hub a partir das Tabelas de Rastreamento do CDC
Depois de configurar tudo, você pode testar a solução criando novas linhas na tabela SQL de origem. O programa SQL2AEH lerá quaisquer novas linhas da tabela de rastreamento do CDC, criará uma mensagem JSON e a enviará para o Azure Event Hub. Você pode encontrar o script para criar novas linhas no artigo de exemplo.
Lendo Mensagens do CDC do Event Hub
Depois que os dados estiverem no Azure Event Hub, você terá muitas opções para processar esses dados. Você pode usar o Azure Stream Analytics, Azure Function Apps, Azure Logic Apps ou Web Apps para consumir os dados do CDC do SQL. No artigo de exemplo, o autor usa o Azure Stream Analytics para ler do Azure Event Hub e gravar em uma saída do Azure SQL DB.
Referência de Desempenho
O autor também realizou uma referência de desempenho para medir a velocidade de transmissão de dados do SQL Server de origem para o Azure SQL DB. Os resultados mostraram que o programa SQL2AEH poderia sustentar uma taxa de 166 linhas/seg. No entanto, com ajustes de aplicativo e aproveitando várias leituras de tabela do CDC do SQL de origem + threads de envio, o autor antecipa melhorias de ordens de magnitude.
Conclusão
Em conclusão, a transmissão de alterações de dados em tempo real do SQL Server para o Azure é uma solução poderosa para empresas que precisam capturar e analisar dados em tempo real. Usando o CDC no SQL Server e o Azure Event Hubs, você pode facilmente criar uma solução de ETL de transmissão que atenda aos seus requisitos. Lembre-se de testar a solução em seu próprio ambiente e fazer os ajustes necessários. Boa transmissão!