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 destg_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ĂšreSELECT col1, col2, âŠ
mĂȘme si câest plus verbeux.