SCD2 med dbt-snapshots

Intermediate dbt

Mike Metzger

Data Engineer

Vad är en snapshot?

  • En inblick i hur en datamängd förändras över tid
  • Illustrerar ett objekts olika tillstånd, till exempel
    • Orderstatus
    • Produktionsstatus
    • Leveransstatus

Order

1 Foto av micheile henderson på Unsplash
Intermediate dbt

SCD2

  • Långsamt föränderlig dimension
  • Spårar förändringar över tid
  • dbt implementerar SCD2 med snapshots

Föränderlig data

1 Foto av Luke Chesser på Unsplash
Intermediate dbt

SCD2-exempel

  • Orderstatus
  • Tillgängliga tillstånd:
    • Mottagen
    • Packad
    • Skickad
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
Intermediate dbt

SCD2 i dbt

  • dbt använder snapshots för att implementera SCD2
  • Kan spåra förändringar automatiskt
  • Lägger till extra kolumner i utdata
    • 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
Intermediate dbt

Implementera dbt-snapshots

  • SQL-fil, 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 %}
Intermediate dbt

dbt snapshot

  • Kör dbt snapshot
  • Skapa en ny modell med kommandot ref() för att fråga mot snapshot
    • select * from {{ ref('snapshot_orders') }}
  • Kör dbt snapshot regelbundet för att fånga eventuella dataförändringar
    • Schemalägg för automatiska uppdateringar
Intermediate dbt

Nu kör vi en övning!

Intermediate dbt

Preparing Video For Download...