AccueilBlogTest technique dbt modèles incrémentaux : stratégies et optimisation
Guide recrutement data

Test technique dbt modèles incrémentaux : stratégies et optimisation

Les modèles incrémentaux dbt sont le levier le plus puissant pour réduire les coûts et le temps de traitement. Mal configurés, ils produisent des données incorrectes. En entretien, on évalue la maîtrise des stratégies.

Data Builder·Juin 2025·7 min de lecture·Analytics Engineer
Sommaire
  1. Pourquoi les modèles incrémentaux
  2. Les 4 stratégies
  3. Strategy merge en détail
  4. Late-arriving data
  5. Full refresh et pièges
  6. Incrémental sur Snowflake
  7. Grille

1Pourquoi les modèles incrémentaux

Question discriminante

Quel problème les modèles incrémentaux dbt résolvent-ils ?

2Les 4 stratégies incrémentales

Question discriminante

Quelles sont les différentes stratégies dbt pour les modèles incrémentaux ?

-- Strategy 1 : append (par défaut) -- Ajoute les nouvelles lignes, ne modifie pas les existantes {{ config(materialized='incremental') }} SELECT * FROM {{ ref('stg_events') }} {% if is_incremental() %} WHERE event_date > (SELECT MAX(event_date) FROM {{ this }}) {% endif %} -- Strategy 2 : merge (upsert) -- INSERT de nouvelles lignes + UPDATE des existantes {{ config( materialized='incremental', unique_key='order_id', incremental_strategy='merge' ) }} SELECT * FROM {{ ref('stg_orders') }} {% if is_incremental() %} WHERE updated_at > (SELECT MAX(updated_at) FROM {{ this }}) {% endif %} -- Strategy 3 : delete+insert -- Supprime les lignes de la fenetre et reinsere {{ config( materialized='incremental', unique_key=['order_id', 'date'], incremental_strategy='delete+insert' ) }}

3Strategy merge : quand et comment

Question discriminante

Quand utilisez-vous merge plutôt qu append ? Quel est le risque si unique_key est mal défini ?

4Gérer les late-arriving data

Question discriminante

Qu est-ce que le late-arriving data ? Comment le gérez-vous dans un modèle incrémental ?

-- Problème : des événements du passé arrivent en retard -- Ex : un mobile en mode offline synchronise des events datant de 3 jours -- Solution : reprocesser une fenetre glissante de N jours {{ config( materialized='incremental', unique_key='event_id' ) }} SELECT * FROM {{ ref('stg_events') }} {% if is_incremental() %} -- Reprocesser les 3 derniers jours pour capturer les retardataires WHERE event_date >= ( SELECT DATEADD('day', -3, MAX(event_date)) FROM {{ this }} ) {% endif %}

5Full refresh : quand l utiliser

Question discriminante

Dans quels cas forcez-vous un full refresh sur un modèle incrémental ?

# Forcer un full refresh manuellement dbt run --full-refresh --select fct_orders # Cas où le full refresh est nécessaire : # 1. Changement de logique qui affecte l historique # 2. Ajout d une nouvelle colonne calculée # 3. Bug découvert sur les données passées # 4. Migration de stratégie (append -> merge) # Configuration : interdire le full refresh en production {{ config( materialized='incremental', full_refresh=false # bloque dbt run --full-refresh sur cette table ) }}

6Optimisation incrémentale sur Snowflake

Question discriminante

Comment optimisez-vous les performances d un modèle dbt incrémental sur Snowflake ?

{{ config( materialized='incremental', unique_key='order_id', incremental_strategy='merge', cluster_by=['order_date', 'region'], # clustering sur Snowflake on_schema_change='append_new_columns', snowflake_warehouse='TRANSFORM_WH_S', merge_exclude_columns=['created_at'] # ne pas updater created_at ) }}

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirméStratégie append et merge, is_incremental(), unique_keyA configuré un modèle merge avec unique_key, comprend is_incremental()Ne sait pas ce qu est un modèle incrémental dbt
SeniorLate-arriving data, full refresh strategy, optimisation warehouseGère les late-arriving data avec fenêtre glissante, bloque le full refresh sur les grandes tablesNe sait pas ce qu est le late-arriving data

Vous recrutez un Analytics Engineer dbt ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.