Streams e Change Data Capture

Automação de Pipelines de Dados no Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Processar só o que mudou

CDC: Change Data Capture Duas comparações de como os dados são processados

Automação de Pipelines de Dados no Snowflake

Streams

O que um stream faz

  • Rastreia todo INSERT, UPDATE e DELETE na tabela de origem

Screenshot 2026-05-11 at 10.50.31 am.png

  • Mantém um log contínuo de mudanças — sem duplicar dados
  • Ao consumir, o offset avança; a próxima leitura começa do zero
1 * Recurso de aprendizado da Snowflake
Automação de Pipelines de Dados no Snowflake

Tipos de stream

 

Tipo de stream Captura Ideal para
Padrão Todos os tipos de tabela e views & todas as mudanças DML - rastreia inserts, updates, deletes Tabelas onde qualquer linha pode mudar (ex.: shipments)
Append-only Todos os tipos de tabela e views, exceto tabelas externas - rastreia só inserts Tabelas de inserção única (ex.: delivery events) - mais eficiente
Insert-only Apache Iceberg gerenciado externamente e tabelas externas - rastreia só inserts Tabelas externas

Directory tables expõem metadados de arquivos de um stage (nome, tamanho, timestamp da última modificação)

Automação de Pipelines de Dados no Snowflake

Criando um stream

Stream padrão na tabela shipments

CREATE STREAM shipments_stream
  ON TABLE logistics.shipments;

Stream append-only na tabela delivery events

CREATE STREAM delivery_events_stream
  ON TABLE logistics.delivery_events
  APPEND_ONLY = TRUE;
Automação de Pipelines de Dados no Snowflake

Colunas de metadados do Stream

SELECT product, quantity, METADATA$ACTION, METADATA$ISUPDATE, METADATA$ROW_ID
FROM shipments_stream;
  • METADATA$ACTION: INSERT ou DELETE
  • METADATA$ISUPDATE: TRUE quando parte de um par de update
  • METADATA$ROW_ID: Identificador físico único da linha
  • Updates aparecem como um par DELETE + INSERT, ambos com METADATA$ISUPDATE = TRUE

Colunas de metadados do stream mostrando METADATA$ACTION, METADATA$ISUPDATE, METADATA$ROW_ID com dados de exemplo

Automação de Pipelines de Dados no Snowflake

O Offset do Stream

Diagrama de timeline - Stream criado (offset começa aqui) → Mudanças ocorrem na tabela fonte (stream acumula registros) → Stream consumido em uma transação (offset avança para agora)

Automação de Pipelines de Dados no Snowflake

Visão geral: Streams no pipeline

  • Streams trabalham com tasks — objetos Snowflake que executam SQL em agenda
  • A task lê só linhas alteradas; com 10M linhas: 2 s vs 2 min

Screenshot 2026-05-11 at 10.48.51 am.png

1 * Recurso de aprendizado da Snowflake
Automação de Pipelines de Dados no Snowflake

Query: Streams no pipeline

  • Streams trabalham com tasks - objetos Snowflake que executam SQL em agenda
  • A task lê só linhas alteradas; com 10M linhas: 2 s vs 2 min
CREATE TASK logistics.sync_shipments
  WAREHOUSE = compute_wh
  SCHEDULE = '5 MINUTE'
  WHEN SYSTEM$STREAM_HAS_DATA('logistics.staging_shipments_stream')
AS
  INSERT INTO logistics.shipments
  SELECT shipment_id, region, carrier, delivery_days
  FROM logistics.staging_shipments_stream
  WHERE METADATA$ACTION = 'INSERT';
Automação de Pipelines de Dados no Snowflake

Vamos praticar!

Automação de Pipelines de Dados no Snowflake

Preparing Video For Download...