Cum să configurezi snapshot-uri în dbt
DodaTech
Updated 2025-01-15
2 min read
In this tutorial, you'll learn about Cum să configurezi snapshot. We cover key concepts, practical examples, and best practices.
Vei învăța cum să configurezi snapshot-uri în dbt pentru a captura istoricul modificărilor din tabele folosind SCD Type 2 (Slowly Changing Dimensions).
Problema
Tabelele sursă suprascriu datele vechi. Pentru raportare istorică ai nevoie de starea anterioară a înregistrărilor. Snapshot-urile dbt implementează SCD Type 2, păstrând fiecare versiune a unui rând.
Modul Greșit
-- Backup manual — nescalabil, neautomat
CREATE TABLE users_backup_20240101 AS SELECT * FROM users;
-- Trebuie să rulezi manual, nume greu de gestionat
Modul Corect
-- snapshots/users_snapshot.sql
{% snapshot users_snapshot %}
{{
config(
target_schema='snapshots',
unique_key='id',
strategy='timestamp',
updated_at='updated_at',
invalidate_hard_deletes=True
)
}}
SELECT * FROM {{ source('raw', 'users') }}
{% endsnapshot %}
dbt snapshot
Output:
17:23:45 1 of 1 START snapshot snapshots.users_snapshot
17:23:47 1 of 1 OK created snapshot snapshots.users_snapshot
Tabela rezultată:
| id | name | email | dbt_valid_from | dbt_valid_to |
|----|-------|---------------|----------------|----------------|
| 1 | Alice | alice@old.com | 2024-01-01 | 2024-06-01 |
| 1 | Alice | alice@new.com | 2024-06-01 | NULL |
Pas cu Pas
1. Creează directorul snapshots/
snapshots/
users_snapshot.sql
orders_snapshot.sql
2. Scrie snapshot-ul
{% snapshot orders_snapshot %}
{{ config(
target_schema='snapshots',
unique_key='order_id',
strategy='check',
check_cols=['status', 'total']
) }}
SELECT * FROM {{ source('raw', 'orders') }}
{% endsnapshot %}
3. Rulează snapshot-ul
dbt snapshot # Toate snapshot-urile
dbt snapshot --select users_snapshot # Unul specific
Sfaturi de Prevenție
- Folosește
<a href="/design-patterns/strategy/">strategy</a>='timestamp'când ai un câmpupdated_at - Folosește
<a href="/design-patterns/strategy/">strategy</a>='check'când nu ai un timestamp de încredere - Setează
invalidate_hard_deletes=Truepentru a marca ștergerile - Plasează snapshot-urile în director
snapshots/, numodels/
Greșeli Comune
- Snapshot în directorul
models/— dbt nu le recunoaște; trebuie să fie însnapshots/ - Fără
unique_key— dbt nu poate track-ui modificările fără o cheie unică - Strategie greșită —
timestampcând câmpulupdated_atnu se actualizează corect - Coloane neselectate —
check_colstrebuie să includă toate coloanele care se pot schimba
Întrebări Frecvente
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru snapshot-uri istorice.
← Previous
Cum să referențiezi alte modele în dbt cu funcția ref()
Next →
Cum să definești surse de date în dbt cu source()
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro