Incremental strategies help update data efficiently by adding or changing only new or changed parts instead of reloading everything.
Incremental strategies (append, merge, delete+insert) in dbt
incremental_strategy: append | merge | delete+insert
append adds only new rows to the existing table.
merge updates existing rows and inserts new rows based on a key.
delete+insert deletes matching rows and inserts fresh data.
incremental_strategy: append
id matches and inserts new rows if id is new.incremental_strategy: merge unique_key: id
id in the new data, then inserts all new rows.incremental_strategy: delete+insert unique_key: id
This dbt model uses the merge strategy to update existing customers and add new ones based on customer_id. It selects only customers updated after the last run.
version: 2 models: - name: customers_incremental config: materialized: incremental incremental_strategy: merge unique_key: customer_id -- SQL to update or insert customers select customer_id, customer_name, updated_at from source.customers where updated_at > (select coalesce(max(updated_at), '1900-01-01') from {{ this }})
Use append when you only add new data and never update old rows.
merge requires a unique key to match rows for update or insert.
delete+insert can be slower but is useful when updates are complex.
Incremental strategies help update data efficiently without full reloads.
append adds new rows, merge updates and adds rows, delete+insert replaces matching rows.
Choose the strategy based on your data update needs and performance.
Practice
Solution
Step 1: Understand the append strategy
The append strategy adds only new rows to the existing table without changing any existing data.Step 2: Compare with other strategies
Merge updates existing rows and adds new ones; delete+insert replaces matching rows; truncate removes all data first.Final Answer:
append -> Option CQuick Check:
append = add new rows only [OK]
- Confusing merge with append
- Thinking delete+insert only adds rows
- Assuming truncate is an incremental strategy
Solution
Step 1: Identify correct config keys for incremental merge
dbt requires materialized='incremental' and incremental_strategy='merge' to use merge strategy.Step 2: Check each option for correctness
config(materialized='incremental', incremental_strategy='append') uses 'append' strategy, not merge; config(materialized='table', incremental_strategy='merge') uses materialized='table' which is not incremental; config(materialized='incremental', strategy='merge') uses wrong key 'strategy'.Final Answer:
config(materialized='incremental', incremental_strategy='merge') -> Option DQuick Check:
incremental_strategy='merge' with materialized='incremental' [OK]
- Using wrong materialized type
- Misspelling incremental_strategy key
- Confusing strategy key name
select id, value from source_table where updated_at > (select max(updated_at) from {{ this }})What will happen when this model runs?
Solution
Step 1: Understand the filter condition
The query selects rows from source_table where updated_at is greater than the max updated_at in the target table ({{ this }}).Step 2: Understand merge behavior
Merge updates existing rows with matching keys and inserts new rows. The filter ensures only changed rows are processed.Final Answer:
Rows with matching id are updated or inserted based on updated_at filter -> Option BQuick Check:
merge updates/inserts filtered rows [OK]
- Thinking it replaces entire table
- Assuming only new rows are appended
- Ignoring the filter condition effect
config(materialized='incremental', incremental_strategy='delete+insert') select * from source_table
But the model fails with an error about missing unique key. What is the likely cause?
Solution
Step 1: Recall delete+insert requirements
Delete+insert requires a unique_key config to identify rows to delete before insert.Step 2: Analyze error cause
Missing unique_key causes dbt to error because it cannot identify which rows to delete.Final Answer:
You did not specify the unique_key config required for delete+insert -> Option AQuick Check:
delete+insert needs unique_key [OK]
- Ignoring unique_key requirement
- Assuming delete+insert works without keys
- Confusing append with delete+insert
Solution
Step 1: Analyze data update needs
The table has new sales and corrections, so existing rows need updates and new rows need inserts.Step 2: Match strategy to needs
Append only adds new rows, so it won't update corrections. Delete+insert replaces matching rows but can be costly. Merge efficiently updates and inserts rows incrementally.Final Answer:
merge, because it updates existing rows and adds new ones -> Option AQuick Check:
merge = update + insert for corrections and new data [OK]
- Choosing append and missing updates
- Thinking delete+insert always best
- Ignoring performance of full refresh
Ready to prove it?
Pass the test and this pattern moves unknown
