🧠 Qu’est-ce que le “column-level lineage” dans dbt ?

C’est la capacitĂ© de dbt Ă  savoir quelle colonne source alimente quelle colonne cible, dans un modĂšle donnĂ©.

Cela permet :

  • de documenter les colonnes,
  • de voir l’impact d’un changement en amont,
  • d’avoir une vue claire dans dbt docs du flux de donnĂ©es colonne par colonne (et pas juste table Ă  table).

⚠ ProblĂšme avec SELECT *

Quand tu fais un :

select * from {{ ref('stg_ventes') }}

dbt ne peut pas deviner quelles colonnes tu as sélectionnées, ni comment elles sont transformées.

Le * est un alias : il signifie “toutes les colonnes”, mais dbt ne voit pas la liste rĂ©elle tant que ce n’est pas exĂ©cutĂ© dans la base.
Et dbt ne devine pas dynamiquement les schémas des tables pendant la compilation.


📉 ConsĂ©quence

  • dbt ne peut pas gĂ©nĂ©rer la lineage par colonne
  • dans dbt docs, tu verras la relation entre les modĂšles, mais pas entre les colonnes
  • tu perds la possibilitĂ© de documenter et tracer les dĂ©pendances prĂ©cises

✅ Bonne pratique : toujours lister explicitement les colonnes

select
    id_vente,
    produit,
    date_vente,
    montant
from {{ ref('stg_ventes') }}

Grùce à ça, dbt :

  • sait que id_vente du modĂšle vient de stg_ventes.id_vente
  • peut documenter chaque colonne
  • peut propager des descriptions avec le +copy_metadata: true

đŸ§Ș Exemple visuel dans dbt docs

Avec SELECT *Avec SELECT col1, col2...
fact_ventes dĂ©pend de stg_ventes✅ fact_ventes.date_vente ← stg_ventes.date_vente
❌ Pas de trace colonne par colonne✅ TraçabilitĂ© prĂ©cise ligne Ă  ligne

đŸ§Œ RĂšgle Ă  retenir

❌ Évite SELECT * dans les modùles dbt,
✅ PrĂ©fĂšre SELECT col1, col2, 
 mĂȘme si c’est plus verbeux.

Leave a Reply

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