Ce hub relie les notes pour construire une stratégie de test dbt complète — taxonomie, placement par couche, sélection des tests unitaires, routage des alertes et l’écosystème de packages. Un test dbt efficace dépend du placement stratégique, d’une sévérité appropriée et d’une propriété claire, pas du nombre de tests. Une suite de 500 tests avec 20 qui échouent perpétuellement est pire qu’une suite de 100 tests où les échecs sont toujours résolus.
Prérequis
- Familiarité avec les modèles dbt et la configuration YAML
- Un projet dbt avec au moins quelques modèles déployés
- Architecture trois couches dbt — le cadre de couches référencé tout au long
Ordre de lecture
1. Taxonomie des tests dbt Les cinq mécanismes que dbt fournit pour la validation : tests génériques, tests singuliers, tests unitaires, contrats de modèle et tests basés sur des packages. Chacun répond à une question différente. C’est le fondement conceptuel sur lequel tout le reste s’appuie.
2. Tests unitaires vs tests de données dans dbt Le modèle à deux points de contrôle : les tests unitaires bloquent les déploiements en vérifiant la logique de transformation, les tests de données bloquent la production en vérifiant la santé des données. Pourquoi vous avez besoin des deux et ce que chaque catégorie détecte que l’autre manque.
3. Stratégie de test dbt par couche Quoi tester à chaque couche — sources, base, intermediate, mart — et pourquoi l’intensité des tests doit augmenter vers les bords. Inclut le principe « ne testez pas votre nettoyage » pour les modèles base et le focus sur les vérifications de clé primaire post-jointure à la couche intermediate.
4. dbt Unit Tests When to Write Them
Critères de décision spécifiques pour le 1% des colonnes qui méritent des tests unitaires : parsing de chaînes complexe, cas limites de date, CASE WHEN multi-branches, fonctions fenêtre et logique de merge incrémentiel. Inclut le pattern de surcharge is_incremental().
5. Sévérité et optimisation des performances des tests dbt
Configuration de la sévérité warn vs. error par catégorie de test, le pattern « erreur en CI, avertissement en production », et l’optimisation des coûts spécifique à BigQuery avec le filtrage de partition et la planification basée sur les tags.
6. Routage des alertes de tests dbt et propriété
Routing des échecs vers les bonnes personnes via les tags meta.owner et meta.criticality, sévérité des alertes par palier (page → Slack → digest → hebdomadaire), le principe de la vitre brisée et le système auto-améliorant qui convertit les incidents en tests permanents.
Cadres stratégiques
- Cadre de décision pour les tests dbt — Un cadre à trois questions et un arbre de décision pour choisir la bonne approche de test. Répond à « cela devrait-il être un test unitaire ou un test de données ? » avec des conseils concrets par scénario.
- Pyramide de test dbt — La pyramide en couches pour les projets dbt : large couverture de tests de données à la base, tests unitaires ciblés au milieu, détection d’anomalies et diffs de données au sommet. Distribution recommandée entre les couches.
- Anti-patterns de test dbt — Quatre erreurs courantes : over-testing avec des tests unitaires, couverture happy-path uniquement, seuils codés en dur qui dérivent et test des fonctions de l’entrepôt. Chacune avec un correctif spécifique.
Écosystème de packages
- Hub dbt-expectations — Tests statistiques et basés sur des patterns (50+ issus de Great Expectations). Le paramètre
row_conditionpour les tests conditionnels. Essentiel pour l’application des règles métier sur les modèles mart. - Elementary pour dbt — Détection d’anomalies plutôt que seuils statiques. Détecte les inconnues inconnues : chutes de volume, décalages de distribution, dégradation de la fraîcheur.
- Hub dbt-audit-helper — Validation de migration et de refactoring. Comparaison ligne par ligne entre deux relations pour prouver l’équivalence.
Implémentation des tests unitaires
- dbt Unit Testing Implementation — Le compagnon pratique aux notes 2 et 4 ci-dessus. Couvre la syntaxe YAML, le mocking des dépendances, les contournements BigQuery, l’organisation des fichiers, les commandes CLI et les workflows CI/CD. Commencez ici quand vous avez décidé d’avoir besoin de tests unitaires et souhaitez les implémenter.
- dbt Unit Test Patterns Hub — Patterns prêts à copier-coller pour les modèles incrémentiels, les snapshots, les fonctions fenêtre, la logique CASE WHEN, le parsing de chaînes, la sessionisation GA4, l’attribution, les entonnoirs et les cas limites. La bibliothèque de patterns pour les tests unitaires dans le monde réel.
Garanties au niveau du schéma
- Mécanique des contrats de modèle dbt — Application au moment du build qui empêche la matérialisation d’un modèle quand le schéma de sortie ne correspond pas à la déclaration YAML. Pour les modèles mart exposés publiquement avec des consommateurs en aval.
Le chemin de maturité
0-50 modèles : unique + not_null sur chaque clé primaire. relationships sur les clés étrangères critiques. Fraîcheur source sur toutes les sources d’ingestion. Toute la sévérité définie sur error.
50-200 modèles : Stratégie de test spécifique par couche. CI slim avec --select state:modified+. Sévérité conditionnelle. Établir les tags meta.owner.
200+ modèles : Tests unitaires natifs pour la logique métier complexe (~1% des colonnes). Elementary pour la détection d’anomalies. Contrats de modèle sur tous les marts exposés publiquement. Alertes par palier.