Cum să configurezi strategii de snapshot în dbt
In this tutorial, you'll learn about Cum să configurezi strategii de snapshot în dbt. We cover key concepts, practical examples, and best practices.
Vei învăța cum să configurezi strategiile de snapshot în dbt — timestamp și check — și când să folosești fiecare pentru detectarea corectă a modificărilor.
Problema
Alegerea greșită a strategiei de snapshot duce la date istorice incorecte — fie prea multe înregistrări (fals pozitive), fie prea puține (modificări pierdute).
Modul Greșit
-- Strategie timestamp pe un câmp care nu se actualizează
{% snapshot users_snapshot %}
{{ config(
strategy='timestamp',
unique_key='id',
updated_at='created_at' -- created_at nu se modifică niciodată!
) }}
SELECT * FROM {{ source('raw', 'users') }}
{% endsnapshot %}
-- Modificările nu sunt detectate — snapshot-ul nu se actualizează
Modul Corect
Strategia timestamp (când ai un câmp updated_at)
{% snapshot users_timestamp %}
{{ config(
target_schema='snapshots',
unique_key='id',
strategy='timestamp',
updated_at='updated_at',
invalidate_hard_deletes=True
) }}
SELECT * FROM {{ source('raw', 'users') }}
{% endsnapshot %}
Detectare: Compară updated_at cu dbt_valid_to. Dacă diferă, creează o nouă versiune.
Strategia check (când nu ai un timestamp de încredere)
{% snapshot orders_check %}
{{ config(
target_schema='snapshots',
unique_key='order_id',
strategy='check',
check_cols=['status', 'total', 'shipping_address']
) }}
SELECT * FROM {{ source('raw', 'orders') }}
{% endsnapshot %}
Detectare: Compară toate coloanele din check_cols. Dacă oricare diferă, creează o nouă versiune.
dbt snapshot
Output (strategie check):
17:23:45 1 of 1 START snapshot snapshots.orders_check
17:23:47 1 of 1 OK created snapshot snapshots.orders_check
Pas cu Pas
1. Alege strategia
-- Timestamp: exact, eficient, necesită câmp updated_at de încredere
strategy='timestamp', updated_at='updated_at'
-- Check: sigur, mai lent, nu necesită timestamp
strategy='check', check_cols=['col1', 'col2']
-- SAU
strategy='check', check_cols='all' -- Toate coloanele
2. Creează snapshot-ul
{% snapshot product_snapshot %}
{{ config(strategy='check', unique_key='id', check_cols='all') }}
SELECT * FROM {{ source('raw', 'products') }}
{% endsnapshot %}
3. Rulează
dbt snapshot
Sfaturi de Prevenție
- Folosește
timestampcând sursa are un câmpupdated_atfiabil - Folosește
checkcând nu ai încredere în timestamp sau când vrei să track-uiești doar coloane specifice - Pentru
check_cols='all', fii atent la performanță pe tabele cu multe coloane - Activează
invalidate_hard_deletes=Truepentru a detecta ștergerile
Greșeli Comune
- Timestamp pe câmp greșit —
created_atîn loc deupdated_at— modificările nu sunt detectate - Check pe prea multe coloane —
check_cols='all'pe tabele cu 50+ coloane e lent - Check pe coloane volatile — coloane care se schimbă des cauzează multe versiuni inutile
- Amestecul strategiilor — nu poți combina timestamp și check în același snapshot
Întrebări Frecvente
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru strategii corecte de snapshot.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro