Skip to content

Cum să creezi modele incrementale în dbt

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să creezi modele incrementale în dbt. We cover key concepts, practical examples, and best practices.

Vei învăța cum să creezi și să configurezi modele incrementale în dbt pentru a procesa doar datele noi sau modificate, optimizând timpul de execuție.

Problema

Tabelele mari (milioane de rânduri) recreate complet la fiecare dbt run consumă timp și resurse excesive. Modelele incrementale procesează doar delta — datele noi sau modificate.

Modul Greșit

-- models/daily_sales.sql — recreate complet, încet pentru tabele mari
{{ config(materialized='table') }}
SELECT * FROM {{ ref('stg_orders') }}
WHERE order_date >= '2020-01-01';
-- Dacă ai 10M comenzi, recreate complet durează ore

Modul Corect

-- models/daily_sales.sql — model incremental
{{ config(
    materialized='incremental',
    unique_key='order_id',
    incremental_strategy='delete+insert'
) }}

SELECT
    order_id,
    user_id,
    total,
    status,
    order_date
FROM {{ ref('stg_orders') }}

{% if is_incremental() %}
    -- Processează doar datele noi sau modificate
    WHERE order_date > (SELECT MAX(order_date) FROM {{ this }})
{% endif %}
dbt run --model daily_sales

Prima rulare:

17:23:45  1 of 1 START sql incremental model daily_sales
17:23:50  1 of 1 OK created sql incremental model daily_sales

Rulări ulterioare (doar delta):

17:23:45  1 of 1 START sql incremental model daily_sales
17:23:46  1 of 1 OK created sql incremental model daily_sales

Pas cu Pas

1. Configurează materializarea incrementală

{{ config(
    materialized='incremental',
    unique_key='id',
    incremental_strategy='merge'
) }}

2. Adaugă filtrul is_incremental()

{% if is_incremental() %}
    WHERE updated_at > (SELECT MAX(updated_at) FROM {{ this }})
{% endif %}

3. Alege strategia

{{ config(incremental_strategy='merge') }}    -- Upsert
{{ config(incremental_strategy='delete+insert') }}  -- Șterge + inserează
{{ config(incremental_strategy='append') }}   -- Doar adaugă

Sfaturi de Prevenție

  • Definește unique_key pentru strategiile merge și delete+insert
  • Folosește is_incremental() pentru a filtra doar datele noi
  • Rulează dbt run --full-refresh când schimbi definiția modelului
  • Testează incremental pe un subset de date înainte de producție

Greșeli Comune

  1. Fără unique_key — duce la duplicate în merge și delete+insert
  2. Fără is_incremental() — procesează toate datele la fiecare rulare, anulând beneficiul incremental
  3. Strategie greșităappend pentru date care se actualizează; folosește merge în schimb
  4. Filtru ineficientWHERE date > '2020-01-01' în loc de WHERE date > (SELECT MAX(date) FROM {{ this }})

Întrebări Frecvente

### Cum fac full refresh la un model incremental?

Rulează dbt run --full-refresh --model nume_model. dbt recrează complet tabelul din sursă.

Cum detectează dbt rândurile modificate?

Prin filtrul is_incremental(). Tu definești logica — de obicei pe baza unui câmp updated_at sau a unui id incrementat.

Pot avea chei compuse pentru unique_key?

Da — unique_key=['id', 'date'] pentru chei compuse din mai multe coloane.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru procesare incrementală eficientă.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro