在 Snowflake 進行資料管線自動化
Emily Melhuish
Technical Curriculum Developer, Snowflake
Dynamic Tables:

Streams 與 Tasks:

宣告式管線自動化
SELECT 查詢定義——你描述結果,Snowflake 負責重新整理CREATE DYNAMIC TABLE logistics.delivery_summary
TARGET_LAG = '1 hour'
WAREHOUSE = harbr_wh
AS
SELECT region, COUNT(*) AS shipments,
AVG(delivery_days) AS avg_days
FROM logistics.shipments GROUP BY region;
你與 Snowflake 的新鮮度約定
| TARGET_LAG 值 | 效果 |
|---|---|
'5 minutes' |
表格最多僅落後 5 分鐘—頻繁重新整理 |
'1 hour' |
較少重新整理—計算資源較省 |
DOWNSTREAM |
由下游相依推斷延遲—適合串接表格 |
增量式重新整理
-- 適合增量:
SELECT region, COUNT(*) AS shipments
FROM logistics.shipments
GROUP BY region;
完整重新整理

DOWNSTREAM 依下游需求決定延遲—避免過度刷新Dynamic tables:宣告式
-- 向 Snowflake 宣告結果
CREATE DYNAMIC TABLE logistics.summary
TARGET_LAG = '1 hour'
WAREHOUSE = harbr_wh
AS SELECT region, COUNT(*)
FROM shipments
GROUP BY 1;
Streams + Tasks:指令式
-- 你掌握每一步
CREATE TASK process_events
SCHEDULE = '5 MINUTE'
WHEN SYSTEM$STREAM_HAS_DATA
('events_stream')
AS CALL logistics.process_new_events();
SELECT name, state, refresh_start_time, refresh_end_time
FROM TABLE (
INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (
NAME_PREFIX => 'HARBR_DB.DELIVERY_SUMMARY.', ERROR_ONLY => TRUE
)
)
ORDER BY name, data_timestamp;
| NAME | TRIGGER | STATE | START | END |
|---|---|---|---|---|
| DELIVERY_SUMMARY | SCHEDULED | SUCCEEDED | 2026-03-01 05:00:00 | 2024-03-01 05:00:08 |
| DELIVERY_SUMMARY | SCHEDULED | FAILED | 2026-03-01 04:00:00 | 2024-03-01 04:00:03 |
在 Snowflake 進行資料管線自動化