SCD2 con gli snapshot di dbt

dbt intermedio

Mike Metzger

Data Engineer

Cos'è uno snapshot?

  • Uno sguardo ai cambiamenti di un insieme di dati nel tempo
  • Mostra i vari stati di un oggetto, ad esempio
    • Stato dell'ordine
    • Stato di produzione
    • Stato di spedizione

Ordine

1 Foto di micheile henderson su Unsplash
dbt intermedio

SCD2

  • Dimensione a cambiamento lento
  • Traccia i cambiamenti nel tempo
  • dbt implementa SCD2 con gli snapshot

Dati che cambiano

1 Foto di Luke Chesser su Unsplash
dbt intermedio

Esempio SCD2

  • Stato dell'ordine
  • Stati disponibili:
    • 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
dbt intermedio

SCD2 in dbt

  • dbt usa gli snapshot per implementare SCD2
  • Può tracciare i cambiamenti in automatico
  • Aggiunge colonne extra all'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
dbt intermedio

Implementare gli snapshot di dbt

  • File 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 intermedio

dbt snapshot

  • Esegui dbt snapshot
  • Crea un nuovo modello usando il comando ref() per interrogare lo snapshot
    • select * from {{ ref('snapshot_orders') }}
  • Esegui spesso dbt snapshot per vedere i dati che potrebbero essere cambiati
    • Pianifica aggiornamenti automatici
dbt intermedio

Esercitiamoci!

dbt intermedio

Preparing Video For Download...