dbt: Full DAG hash comparison


🧠 Contexte : state:modified dans dbt

Quand tu fais :

dbt run --select state:modified --state path/to/previous_run

👉 dbt compare le “state” du projet actuel avec celui d’un run prĂ©cĂ©dent (dans un manifest.json)
Cela permet de ne recompiler/recalculer que les modÚles impactés par un changement.

Mais… comment dbt dĂ©tecte qu’un modĂšle est impactĂ© ? đŸ€”


✅ Solution : DAG hash comparison

dbt utilise un mĂ©canisme de “hash de graphe” pour dĂ©tecter les modĂšles affectĂ©s directement ou indirectement par une modification.


🔗 Qu’est-ce qu’un DAG dans dbt ?

DAG = Directed Acyclic Graph
C’est le graphe de dĂ©pendances de ton projet dbt.

Exemple :

source → stg_clients → int_clients_enriched → fct_clients

🎯 Exemple de changement indirect

  • Tu modifies stg_clients.sql (changement de logique, de colonnes, ou mĂȘme juste un commentaire dans le config)
  • Tu n’as pas touchĂ© Ă  fct_clients.sql directement
  • Pourtant, fct_clients dĂ©pend indirectement de stg_clients

👉 GrĂące au full DAG hash comparison, dbt dĂ©tecte que fct_clients est indirectement impactĂ© et doit ĂȘtre reconstruit.


⚙ Comment ça fonctionne ?

Chaque modĂšle dans dbt a un hash (empreinte) qui inclut :

ÉlĂ©ment inclus dans le hashExemple
SQL compiléLe SELECT final
config()Matérialisation, tags, etc.
meta, docs, etc.Documentation liée
Macros utiliséessi le modÚle appelle un macro
DĂ©pendances (ref(), source())Toute la chaĂźne ascendante ! ✅

👉 dbt calcule un hash total Ă  partir du modĂšle et de ses dĂ©pendances : c’est le full DAG hash.


🔍 Avantages

BénéficeDétail
✅ FiabilitĂ©Aucune modification (mĂȘme indirecte) n’est ignorĂ©e
🎯 SĂ©lectivitĂ©Seuls les modĂšles rĂ©ellement affectĂ©s sont reconstruits
⚡ PerformanceTu Ă©vites les rebuilds inutiles
🔐 CohĂ©renceTu assures que tous les rĂ©sultats sont synchronisĂ©s avec la logique mĂ©tier actuelle

✅ RĂ©sumĂ©

La DAG hash comparison permet Ă  dbt de dĂ©tecter tous les modĂšles affectĂ©s par une modification, mĂȘme si elle est indirecte.
Cela garantit une exécution fiable, ciblée et cohérente en production avec --select state:modified.


Leave a Reply

Your email address will not be published. Required fields are marked *