🧠 Concept : Hierarchical tags avec héritage dans dbt
Quand on dit :
“Implementing hierarchical tags with inheritance through config blocks”
on parle de :
- 🌲 Hiérarchie logique : Tu veux définir des tags globaux à haut niveau (ex : par domaine métier, équipe, environnement), et les affiner localement au niveau de chaque modèle.
- 🧬 Héritage : Les
tags
définis dans undbt_project.yml
(ou via desconfig:
parents comme les dossiers oudbt_utils.get_config
) peuvent être complétés ou enrichis par lestags
au niveau du modèle, sans écrasement. - 🧩 Utilisation des tags pour gouvernance, sécurité, accès, traçabilité, exécution conditionnelle (
selectors
,on-run-end
, etc.)
✅ Pourquoi utiliser des tags
hiérarchiques en entreprise ?
Besoin | Tag hiérarchique |
---|---|
Exécuter tous les modèles finance d’un seul coup | tag:finance (au niveau dossier) |
Traquer les modèles incrémentaux sensibles | tag:incremental |
Lancer uniquement les modèles de prod | tag:env:prod |
Appliquer des règles de qualité différentes selon l’équipe | tag:team:marketing vs tag:team:data-engineering |
🧱 Exemple de mise en place correcte
1. dbt_project.yml
— Tag global par dossier
name: my_dbt_project
version: '1.0'
models:
my_dbt_project:
finance:
+tags: ["domain:finance"]
marketing:
+tags: ["domain:marketing"]
staging:
+tags: ["layer:staging"]
marts:
+tags: ["layer:mart"]
👉 Ici, tous les modèles dans models/finance/
hériteront du tag "domain:finance"
, sans avoir besoin de le redéfinir localement.
2. Un modèle spécifique — avec tags additionnels
-- models/finance/stg_transactions.sql
{{ config(
materialized='incremental',
tags=['sensitive', 'team:finance']
) }}
SELECT ...
👉 Ce modèle aura au final ces tags cumulés :
['domain:finance', 'sensitive', 'team:finance']
✔️ dbt les fusionne automatiquement.
❌ dbt ne remplace pas les tags du dossier par ceux du modèle : c’est un héritage cumulé.
⚙️ Exploiter les tags dans un workflow dbt
1. selectors.yml
selectors:
- name: run_all_finance
definition:
method: tag
value: domain:finance
- name: sensitive_models
definition:
method: tag
value: sensitive
Et dans ton pipeline CI/CD :
dbt run --selector run_all_finance
2. Gouvernance : appliquer des règles par tag
Tu peux configurer un hook ou un script de validation pour :
- s’assurer que tous les modèles
tag:layer:mart
sontmaterialized=table
- auditer les modèles
sensitive
pour les tests obligatoires (not_null
,unique
) - limiter les droits de lecture dans Snowflake à
tag:env:prod
✅ Résumé visuel
Niveau | Déclaration | Exemple de tag |
---|---|---|
Global (par dossier) | dbt_project.yml | "domain:finance" |
Local (modèle) | config(tags=[...]) | "sensitive", "team:marketing" |
Héritage | Automatique | Tags globaux + locaux fusionnés |
Utilisation | selectors.yml , politiques, CI/CD | Filtrage, audit, exécution conditionnelle |
🧠 À retenir
- ✅ Les
tags
sont hiérarchiques et cumulatifs dans dbt - ✅ Le bon usage consiste à les structurer par domaine, niveau, environnement, équipe
- ✅ Ils facilitent l’exécution ciblée, la documentation, et la gouvernance