Pular para o conteúdo principal

Input SQL Server CDC

Lê as alterações feitas em tabelas de um SQL Server usando o CDC (Change Data Capture), recurso do próprio banco. Cada INSERT, UPDATE e DELETE vira uma mensagem, na ordem em que aconteceu.

O trabalho acontece em duas fases, automaticamente:

  1. Carga inicial (snapshot) — o conteúdo atual das tabelas é copiado de uma vez.
  2. Fluxo contínuo (CDC) — depois disso, só as alterações trafegam.

A virada de uma fase para a outra é automática.

Antes de começar

No SQL Server de origem:

  • CDC habilitado no banco e nas tabelas que serão replicadas.
  • SQL Server Agent rodando — é ele que alimenta o CDC.
  • Um usuário com leitura nas tabelas e nas estruturas de CDC.
  • Cada tabela precisa ter chave primária (ou índice único) — é ela que vira a Key da mensagem.

Campos

Conexão

CampoO que éPadrão
HostEndereço do servidor SQL Server.
PortaPorta de conexão. Se não souber, deixe o padrão.1433
Instância (opcional)Só preencha se o servidor usa instância nomeada.vazio
UsuárioO usuário de leitura.
Secret (senha)O Secret com a senha.
Banco de dadosO banco de origem.
EncryptComo a conexão é cifrada. true cifra a sessão inteira; false cifra apenas o login; disable não cifra nada. O padrão é disable porque criptografia deve ser uma escolha explícita, não algo tentado em silêncio e que falha por um detalhe de certificado.disable

Tabelas

CampoO que éPadrão
TabelasLista schema.tabela separada por vírgula — ex.: dbo.clientes, dbo.pedidos. Cada tabela ganha seu próprio tópico de saída. Este é o único campo que não aceita variável de ambiente: os nomes precisam ser conhecidos para os tópicos serem criados.

Leitura contínua

CampoO que éPadrão
Intervalo de polling (ms)De quanto em quanto tempo procurar mudanças novas. Menor deixa a captura mais rápida e gera mais consultas ao banco.500
Máx. linhas por loteQuantas linhas de mudança são lidas por vez. Uma transação muito grande é lida em vários lotes deste tamanho, o que mantém a memória sob controle.5000
Nº máximo de tabelas em paraleloQuantas tabelas são capturadas ao mesmo tempo no fluxo contínuo. Maior acelera quando há muitas tabelas, mas abre mais conexões com o banco.4

Carga inicial

CampoO que éPadrão
Modo do snapshot inicialinitial copia tudo o que já existe antes de capturar mudanças novas, uma vez só (recomendado). always repete a cópia completa a cada reinício. no_data pula a cópia e captura só o que acontecer daqui para frente. snapshot_only copia uma vez e para, sem capturar mudanças.initial
Tamanho do lote do snapshotQuantos registros são copiados de cada vez na carga inicial. Maior é mais rápido e usa mais memória.5000

Comportamento

CampoO que éPadrão
Ignorar deletesCom Sim, exclusões no banco não são enviadas adiante — o destino mantém o histórico. Com Não, exclusões também são capturadas.Não
Desabilitar detecção de mudanças de schema (DDL)Quando marcado, o conector não acompanha ALTER TABLE nas tabelas monitoradas. Colunas novas passam a ser ignoradas em silêncio até você desmarcar. Use com cuidado.desmarcado

O que este Input escreve no tópico

Este é o Input mais rico da plataforma — ele preenche Value, Key e Headers.

ParteConteúdo
ValueA linha inteira em JSON plano, uma chave por coluna. Vem vazio quando op=d.
KeySó as colunas da chave primária, em JSON. Presente em todas as mensagens.
HeadersVer tabela abaixo

Headers

HeaderO que é
opr carga inicial · c inserção · u atualização · d exclusão
dbNome do banco de origem
schemaSchema da tabela de origem
tableNome da tabela de origem
lsnPosição da mudança no log de transações
ts_msMomento do evento, em milissegundos
snapshottrue somente nas mensagens da carga inicial
seqval, command_id, operationDetalhes de ordenação dentro da transação (só no fluxo contínuo)

Exemplo 1 — carga inicial (op=r)

Key: {"ID":42}
Value: {"ID":42,"CLIENTE":"ACME","TOTAL":199.90,"ATUALIZADO_EM":"2026-07-26T10:15:00Z"}
Headers: op=r db=vendas schema=dbo table=pedidos
lsn=0x0000002A000004B00001 ts_ms=1785060000000 snapshot=true

Exemplo 2 — atualização (op=u)

Key: {"ID":42}
Value: {"ID":42,"CLIENTE":"ACME","TOTAL":249.90,"ATUALIZADO_EM":"2026-07-26T11:02:31Z"}
Headers: op=u db=vendas schema=dbo table=pedidos
lsn=0x0000002A000004B80003 seqval=0x0000002A000004B80002
command_id=1 operation=4 ts_ms=1785063751000

O Value é a linha depois da mudança. Não é enviado um "antes e depois" — só o estado novo.

Exemplo 3 — exclusão (op=d)

Key: {"ID":42}
Value: (vazio)
Headers: op=d db=vendas schema=dbo table=pedidos
lsn=0x0000002A000004C10002 seqval=0x0000002A000004C10001
command_id=1 operation=1 ts_ms=1785065120000

Quando uma linha é apagada não existe conteúdo novo para enviar — a identificação de qual linha sumiu viaja na Key. Cada Output reage de um jeito a essa mensagem, e nem todos aplicam a exclusão: veja Mensagens de Value vazio.

Chave composta

Quando a tabela tem chave primária de mais de uma coluna, a Key traz todas:

Key: {"PEDIDO_ID":1234,"ITEM_ID":3}
Value: {"PEDIDO_ID":1234,"ITEM_ID":3,"PRODUTO":"Cabo HDMI","QTD":2}
Headers: op=c schema=dbo table=pedido_itens …

Um tópico por tabela

Cada tabela configurada ganha seu próprio tópico. Isso importa na prática: uma tabela com um volume enorme de alterações não atrasa a entrega das outras, e cada uma tem sua própria medição de atraso.

Adicionar ou remover uma tabela na configuração cria ou remove o tópico correspondente automaticamente.

Uma cópia só, sempre

Este Input nunca escala horizontalmente, mesmo sob carga alta: dois leitores lendo o mesmo CDC entregariam eventos duplicados e fora de ordem. Para ganhar velocidade, aumente o Nº máximo de tabelas em paralelo, não o número de cópias.

Combinações comuns

QueroLigue este Input a
Réplica operacionalOutput PostgreSQL
Data warehouseOutput Snowflake
Busca sobre os dadosOutput Elasticsearch
Data lakeOutput GCS

O passo a passo completo, de ponta a ponta, está em Criar uma pipeline.