dbtスナップショットによるSCD2

中級 dbt

Mike Metzger

Data Engineer

スナップショットとは?

  • データセットの変化を時系列で確認
  • オブジェクトのさまざまな状態を記録
    • 注文ステータス
    • 製造状態
    • 配送ステータス

注文

1 Photo by micheile henderson on Unsplash
中級 dbt

SCD2

  • ゆっくり変化するディメンション
  • 変更を時系列で追跡
  • dbtはスナップショットでSCD2を実装

変化するデータ

1 Photo by Luke Chesser on Unsplash
中級 dbt

SCD2の例

  • 注文ステータス
  • 利用可能な状態:
    • 受注
    • 梱包済み
    • 発送済み
id order_status last_updated
1 Shipped 2023-07-01 11:30
id order_status last_updated
1 Received 2023-07-01 10:45
1 Packed 2023-07-01 11:15
1 Shipped 2023-07-01 11:30
中級 dbt

dbtにおけるSCD2

  • dbtはSCD2の実装にスナップショットを使用
  • 変更を自動的に追跡
  • 出力に追加列を付与
    • dbt_valid_from
    • dbt_valid_to
id order_status last_updated dbt_valid_from dbt_valid_to
1 Received 2023-07-01 10:45 2023-07-01 10:45 2023-07-01 11:15
1 Packed 2023-07-01 11:15 2023-07-01 11:15 2023-07-01 11:30
1 Shipped 2023-07-01 11:30 2023-07-01 11:30 null
中級 dbt

dbtスナップショットの実装

  • SQLファイル: snapshots/snapshot_name.sql
{% snapshot snapshot_orders %}

{{ config(
target_schema='snapshots',
strategy='timestamp',
unique_key='id',
updated_at='last_updated'
) }}
select * from {{ source('raw', 'orders') }}
{% endsnapshot %}
中級 dbt

dbt snapshot

  • dbt snapshotを実行
  • ref()コマンドでスナップショットを参照する新しいモデルを作成
    • select * from {{ ref('snapshot_orders') }}
  • データ変更を確認するためdbt snapshotを定期的に実行
    • 自動更新のスケジュール設定
中級 dbt

練習しましょう!

中級 dbt

Preparing Video For Download...