dbt: Hierarchical tags avec héritage dans dbt


🧠 Concept : Hierarchical tags avec héritage dans dbt

Quand on dit :

“Implementing hierarchical tags with inheritance through config blocks”

on parle de :

  1. 🌲 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.
  2. 🧬 Héritage : Les tags définis dans un dbt_project.yml (ou via des config: parents comme les dossiers ou dbt_utils.get_config) peuvent être complétés ou enrichis par les tags au niveau du modèle, sans écrasement.
  3. 🧩 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 ?

BesoinTag hiérarchique
Exécuter tous les modèles finance d’un seul couptag:finance (au niveau dossier)
Traquer les modèles incrémentaux sensiblestag:incremental
Lancer uniquement les modèles de prodtag:env:prod
Appliquer des règles de qualité différentes selon l’équipetag: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 sont materialized=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

NiveauDéclarationExemple de tag
Global (par dossier)dbt_project.yml"domain:finance"
Local (modèle)config(tags=[...])"sensitive", "team:marketing"
HéritageAutomatiqueTags globaux + locaux fusionnés
Utilisationselectors.yml, politiques, CI/CDFiltrage, 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

Leave a Reply

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