Skip to content

Cum să configurezi strategii de snapshot în dbt

DodaTech Updated 2025-01-15 2 min read

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 timestamp când sursa are un câmp updated_at fiabil
  • Folosește check câ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=True pentru a detecta ștergerile

Greșeli Comune

  1. Timestamp pe câmp greșitcreated_at în loc de updated_at — modificările nu sunt detectate
  2. Check pe prea multe coloanecheck_cols='all' pe tabele cu 50+ coloane e lent
  3. Check pe coloane volatile — coloane care se schimbă des cauzează multe versiuni inutile
  4. Amestecul strategiilor — nu poți combina timestamp și check în același snapshot

Întrebări Frecvente

### Pot schimba strategia după ce snapshot-ul a fost creat?

Nu direct. Trebuie să creezi un nou snapshot cu alt nume și strategie nouă. Datele vechi rămân în snapshot-ul original.

Cum știu ce strategie să aleg?

Dacă sursa are updated_at fiabil → timestamp. Dacă nu → check pe coloanele care se pot modifica.

Strategia check detectează ștergerile?

Da, dacă activezi invalidate_hard_deletes=True. Altfel, rândurile șterse nu sunt marcate ca invalide.

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