SCD2 mit dbt Snapshots

dbt für Forgeschrittene

Mike Metzger

Data Engineer

Was ist ein Snapshot?

  • Ein Blick auf die Veränderungen eines Datensatzes im Zeitverlauf
  • Veranschaulicht die verschiedenen Zustände eines Objekts, wie z. B.
    • Bestellstatus
    • Produktionsstatus
    • Versandstatus

Bestellung

1 Foto von Micheile Henderson auf Unsplash
dbt für Forgeschrittene

SCD2

  • Sich langsam verändernde Dimensionen
  • Verfolgt Änderungen im Zeitverlauf
  • dbt implementiert SCD2 mit Snapshots

Sich verändernde Daten

1 Foto von Louis Reed auf Unsplash
dbt für Forgeschrittene

SCD2-Beispiel

  • Bestellstatus
  • Verfügbare Zustände:
    • Empfangen
    • Verpackt
    • Versendet
id order_status last_updated
1 Versendet 2023-07-01 11:30
id order_status last_updated
1 Empfangen 2023-07-01 10:45
1 Verpackt 2023-07-01 11:15
1 Versendet 2023-07-01 11:30
dbt für Forgeschrittene

SCD2 in dbt

  • dbt verwendet Snapshots zur Implementierung von SCD2
  • Kann Änderungen automatisch nachverfolgen
  • Fügt der Ausgabe zusätzliche Spalten hinzu
    • dbt_valid_from
    • dbt_valid_to
id order_status last_updated dbt_valid_from dbt_valid_to
1 Empfangen 2023-07-01 10:45 2023-07-01 10:45 2023-07-01 11:15
1 Verpackt 2023-07-01 11:15 2023-07-01 11:15 2023-07-01 11:30
1 Versendet 2023-07-01 11:30 2023-07-01 11:30 null
dbt für Forgeschrittene

dbt-Snapshots implementieren

  • SQL-Datei, 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 für Forgeschrittene

dbt-Snapshot

  • dbt snapshot Asuführen
  • Neues Modell mit dem Befehl ref() erstellen, um einen Snapshot abzufragen
    • select * from {{ ref('snapshot_orders') }}
  • dbt snapshot regelmäßig ausführen, um geänderte Daten zu erfassen
    • Automatisch (z. B. nach Zeitplan) ausführen
dbt für Forgeschrittene

Lass uns üben!

dbt für Forgeschrittene

Preparing Video For Download...