đ§ 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 leconfig
) - Tu nâas pas touchĂ© Ă
fct_clients.sql
directement - Pourtant,
fct_clients
dépend indirectement destg_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 hash | Exemple |
---|---|
SQL compilé | Le SELECT final |
config() | Matérialisation, tags, etc. |
meta , docs , etc. | Documentation liée |
Macros utilisées | si 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éfice | Détail |
---|---|
â FiabilitĂ© | Aucune modification (mĂȘme indirecte) nâest ignorĂ©e |
đŻ SĂ©lectivitĂ© | Seuls les modĂšles rĂ©ellement affectĂ©s sont reconstruits |
⥠Performance | Tu évites les rebuilds inutiles |
đ CohĂ©rence | Tu 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
.