ダイナミックテーブル

Snowflakeにおけるデータパイプラインの自動化

Emily Melhuish

Technical Curriculum Developer, Snowflake

ダイナミックテーブル vs ストリームとタスク

ダイナミックテーブル:

Screenshot 2026-05-11 at 11.14.23 am.png

  • SQL宣言文を使用してデータパイプラインの変換を簡素化
  • 自動更新プロセス
  • Snowflakeが検出・スケジュール・マージを実行

ストリームとタスク:

Screenshot 2026-05-11 at 11.14.13 am.png

1 * Snowflake Learning Material
Snowflakeにおけるデータパイプラインの自動化

ダイナミックテーブルとは?

宣言的パイプライン自動化

  • 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:データの鮮度を管理

ユーザーとSnowflake間の鮮度の契約

TARGET_LAG 値 効果
'5 minutes' 最大5分の遅延 — 頻繁に更新
'1 hour' 更新頻度が低い — コンピューティング消費を削減
DOWNSTREAM 下流の依存関係からラグを推定 — テーブル連鎖に最適
Snowflakeにおけるデータパイプラインの自動化

完全更新 vs 増分更新

増分更新

  • 変更されたソース行を正確に追跡
  • 影響を受けた行のみを更新 — 大規模環境で高速・低コスト
-- Incremental-friendly: 
SELECT region, COUNT(*) AS shipments
FROM logistics.shipments 
GROUP BY region;

完全更新

  • クエリ全体を再処理
  • 特定の集計やセット演算で必要
Snowflakeにおけるデータパイプラインの自動化

ダイナミックテーブルの連鎖

パイプライン図 — delivery_events(ソース)→ cleaned_events(target_lag = DOWNSTREAM)→ delivery_summary(target_lag = 1 HOUR)

  • 各変換は独自のクエリを持つ個別のダイナミックテーブル
  • 更新はチェーン全体に自動で伝播
  • DOWNSTREAM ラグは次のテーブルのニーズに従い、過剰更新を防止
Snowflakeにおけるデータパイプラインの自動化

ダイナミックテーブル vs ストリームとタスク

ダイナミックテーブル: 宣言的

  • 出力を定義し、Snowflakeが更新を管理、運用が容易
  • 分析・レポートレイヤーに最適
-- Declare the result for Snowflake 
CREATE DYNAMIC TABLE logistics.summary
  TARGET_LAG = '1 hour' 
  WAREHOUSE = harbr_wh
AS SELECT region, COUNT(*) 
FROM shipments 
GROUP BY 1;

ストリーム+タスク: 命令的

  • 実行内容とタイミングを制御
  • 分岐・複雑なカスタムロジックや運用パイプラインに最適
-- You control every step
CREATE TASK process_events 
  SCHEDULE = '5 MINUTE'
  WHEN SYSTEM$STREAM_HAS_DATA
  ('events_stream')
AS CALL logistics.process_new_events();
Snowflakeにおけるデータパイプラインの自動化

DYNAMIC_TABLE_REFRESH_HISTORY

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におけるデータパイプラインの自動化

練習しましょう!

Snowflakeにおけるデータパイプラインの自動化

Preparing Video For Download...