Écrire une requête avec des CTE est à la portée d'un junior. Structurer un projet dbt en couches réutilisables est une compétence senior. Cet exercice donne un modèle monolithique et demande de le découper proprement — un excellent révélateur de maturité.
Le principe attendu : isoler le nettoyage de chaque source dans des modèles de staging, puis composer la logique métier dans un modèle de mart. Cela rend le projet lisible, testable et réutilisable.
« Ce modèle empile 4 CTE. Découpe-le en une architecture propre. »
Un seul fichier fait tout : nettoyer les commandes, nettoyer les clients, joindre, agréger. Ça marche, mais rien n'est réutilisable ni testable isolément.
-- models/ca_par_pays.sql (monolithe)
WITH commandes AS (SELECT ... FROM raw.commandes WHERE ...),
clients AS (SELECT ... FROM raw.clients WHERE ...),
jointure AS (SELECT ... FROM commandes JOIN clients ...),
final AS (SELECT pays, SUM(montant) FROM jointure GROUP BY pays)
SELECT * FROM finalChaque source nettoyée dans son staging, la logique métier dans le mart.
Le candidat crée un modèle de staging par source (nettoyage isolé, testable) puis un modèle de mart qui les compose avec ref(). C'est la structure standard d'un projet dbt mûr.
-- models/staging/stg_commandes.sql
SELECT id, client_id, montant FROM {{ source('raw','commandes') }} WHERE statut = 'payee'
-- models/staging/stg_clients.sql
SELECT id, pays FROM {{ source('raw','clients') }}
-- models/marts/ca_par_pays.sql
SELECT c.pays, SUM(o.montant) AS ca
FROM {{ ref('stg_commandes') }} o
JOIN {{ ref('stg_clients') }} c ON c.id = o.client_id
GROUP BY c.paysSignal d'alerte : le marqueur senior : le candidat isole le nettoyage de chaque source dans un staging réutilisable, au lieu de tout empiler. Un junior « fait marcher » ; un senior « rend maintenable et réutilisable ».
| Niveau | Maîtrise attendue | Signal GO | NO-GO |
|---|---|---|---|
| Junior | Écrit des CTE qui fonctionnent | Obtient le bon résultat | Empile tout dans un seul modèle |
| Confirmé | Découpe en staging et mart | Isole le nettoyage par source | Duplique la logique de nettoyage |
| Senior | Rend chaque couche réutilisable | Compose proprement avec ref() | Ne pense pas à la réutilisation |
| Lead | Définit des conventions de couches | Structure un projet dbt mûr | Confond 'ça marche' et 'c'est maintenable' |
Data Builder mène l'entretien technique et vous livre un rapport clair et détaillé sous 24h. Premier entretien offert.