Automação de Pipelines de Dados no Snowflake
Emily Melhuish
Technical Curriculum Developer, Snowflake
CDC: Change Data Capture

O que um stream faz

| 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)
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;
SELECT product, quantity, METADATA$ACTION, METADATA$ISUPDATE, METADATA$ROW_ID
FROM shipments_stream;
METADATA$ACTION: INSERT ou DELETEMETADATA$ISUPDATE: TRUE quando parte de um par de updateMETADATA$ROW_ID: Identificador físico único da linhaMETADATA$ISUPDATE = TRUE


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