Cum să creezi modele incrementale în dbt
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_keypentru strategiilemergeșidelete+insert - Folosește
is_incremental()pentru a filtra doar datele noi - Rulează
dbt run --full-refreshcând schimbi definiția modelului - Testează incremental pe un subset de date înainte de producție
Greșeli Comune
- Fără
unique_key— duce la duplicate înmergeșidelete+insert - Fără
is_incremental()— procesează toate datele la fiecare rulare, anulând beneficiul incremental - Strategie greșită —
appendpentru date care se actualizează; foloseștemergeîn schimb - Filtru ineficient —
WHERE date > '2020-01-01'în loc deWHERE date > (SELECT MAX(date) FROM {{ this }})
Întrebări Frecvente
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