Skip to content

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âmp updated_at
  • Folosește <a href="/design-patterns/strategy/">strategy</a>='check' când nu ai un timestamp de încredere
  • Setează invalidate_hard_deletes=True pentru a marca ștergerile
  • Plasează snapshot-urile în director snapshots/, nu models/

Greșeli Comune

  1. Snapshot în directorul models/ — dbt nu le recunoaște; trebuie să fie în snapshots/
  2. Fără unique_key — dbt nu poate track-ui modificările fără o cheie unică
  3. Strategie greșitătimestamp când câmpul updated_at nu se actualizează corect
  4. Coloane neselectatecheck_cols trebuie să includă toate coloanele care se pot schimba

Întrebări Frecvente

### Care e diferența între strategiile `timestamp` și `check`?

timestamp compară doar câmpul updated_at. check compară toate coloanele specificate în check_cols pentru a detecta modificări.

Cât spațiu ocupă snapshot-urile?

Depinde de câte modificări apar. Pentru un tabel cu 1M rânduri care se modifică de 10 ori pe an, vei avea ~10M rânduri în snapshot.

Cum interoghez starea curentă dintr-un snapshot?

Filtrează WHERE dbt_valid_to IS NULL — acestea sunt înregistrările curente.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru snapshot-uri istorice.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro