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:
- Carga inicial (snapshot) — o conteúdo atual das tabelas é copiado de uma vez.
- 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
| Campo | O que é | Padrão |
|---|---|---|
| Host | Endereço do servidor SQL Server. | — |
| Porta | Porta 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ário | O usuário de leitura. | — |
| Secret (senha) | O Secret com a senha. | — |
| Banco de dados | O banco de origem. | — |
| Encrypt | Como 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
| Campo | O que é | Padrão |
|---|---|---|
| Tabelas | Lista 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
| Campo | O 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 lote | Quantas 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 paralelo | Quantas 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
| Campo | O que é | Padrão |
|---|---|---|
| Modo do snapshot inicial | initial 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 snapshot | Quantos registros são copiados de cada vez na carga inicial. Maior é mais rápido e usa mais memória. | 5000 |
Comportamento
| Campo | O que é | Padrão |
|---|---|---|
| Ignorar deletes | Com 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.
| Parte | Conteúdo |
|---|---|
| Value | A linha inteira em JSON plano, uma chave por coluna. Vem vazio quando op=d. |
| Key | Só as colunas da chave primária, em JSON. Presente em todas as mensagens. |
| Headers | Ver tabela abaixo |
Headers
| Header | O que é |
|---|---|
op | r carga inicial · c inserção · u atualização · d exclusão |
db | Nome do banco de origem |
schema | Schema da tabela de origem |
table | Nome da tabela de origem |
lsn | Posição da mudança no log de transações |
ts_ms | Momento do evento, em milissegundos |
snapshot | true somente nas mensagens da carga inicial |
seqval, command_id, operation | Detalhes 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
| Quero | Ligue este Input a |
|---|---|
| Réplica operacional | Output PostgreSQL |
| Data warehouse | Output Snowflake |
| Busca sobre os dados | Output Elasticsearch |
| Data lake | Output GCS |
O passo a passo completo, de ponta a ponta, está em Criar uma pipeline.