SCD2 met dbt-snapshots

Gevorderde dbt

Mike Metzger

Data Engineer

Wat is een snapshot?

  • Inzicht in hoe een gegevensset verandert in de tijd
  • Laat verschillende statussen van een object zien, zoals
    • Bestelstatus
    • Productiestatus
    • Verzendstatus

Bestelling

1 Photo by micheile henderson on Unsplash
Gevorderde dbt

SCD2

  • Slowly changing dimension
  • Volgt veranderingen in de tijd
  • dbt implementeert SCD2 met snapshots

Veranderende data

1 Photo by Luke Chesser on Unsplash
Gevorderde dbt

SCD2-voorbeeld

  • Bestelstatus
  • Beschikbare statussen:
    • Received
    • Packed
    • Shipped
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
Gevorderde dbt

SCD2 in dbt

  • dbt gebruikt snapshots om SCD2 te implementeren
  • Kan wijzigingen automatisch volgen
  • Voegt extra kolommen toe aan de output
    • 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
Gevorderde dbt

dbt-snapshots implementeren

  • SQL-bestand, 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 %}
Gevorderde dbt

dbt snapshot

  • Voer dbt snapshot uit
  • Maak een nieuw model met het ref()-commando om de snapshot te bevragen
    • select * from {{ ref('snapshot_orders') }}
  • Voer regelmatig dbt snapshot uit om mogelijke wijzigingen te zien
    • Plan voor automatische updates
Gevorderde dbt

Laten we oefenen!

Gevorderde dbt

Preparing Video For Download...