dbt est devenu le standard de la couche de transformation dans la stack data moderne. Mais « faire du dbt » va de lancer dbt run sur des modèles copiés-collés à concevoir un projet modulaire, testé, documenté et gouverné. L'écart de niveau est immense — voici comment le mesurer.
dbt (data build tool) a industrialisé la transformation de la donnée : versionnée, testée, documentée, exécutée dans un DAG. Sur le papier, tout le monde « connaît dbt ». En entretien, l'écart se creuse vite entre celui qui empile des modèles et celui qui conçoit une couche analytique maintenable. Voici les cinq dimensions que nous évaluons, et les signaux qui trient les profils.
Comment choisissez-vous entre une vue, une table et un modèle incrémental — et pourquoi ?
C'est la première ligne de partage. Un profil solide justifie chaque choix par le coût de reconstruction, la fréquence de lecture et la volumétrie, pas par habitude.
view — recalculée à chaque requête, zéro stockage : idéale pour la couche de staging.table — matérialisée, rapide à lire mais coûteuse à reconstruire : pour les marts souvent consommés.incremental — ne traite que les nouvelles lignes : indispensable dès que la reconstruction complète devient prohibitive.ephemeral — jamais matérialisée, inlinée en CTE dans les modèles qui l'utilisent.Bon réflexe : vue par défaut, table pour les marts très lus, incrémental seulement quand le coût le justifie. Matérialiser tout en table « pour aller vite » est un signal de méconnaissance des coûts.
Pourquoi ne faut-il jamais écrire un nom de table en dur dans un modèle ?
ref() — référence un autre modèle et construit automatiquement le graphe de dépendances (DAG).source() — déclare et documente les tables brutes en entrée du projet.source freshness — détecte une source qui n'est plus alimentée avant que le rapport ne soit faux.Signal d'alerte : un candidat qui code un nom de table en dur (from analytics.orders) casse le lineage et l'ordonnancement. C'est le premier réflexe qui distingue un utilisateur de dbt d'un simple exécutant de SQL.
Comment garantissez-vous la fiabilité de ce que consomment les analystes en aval ?
unique, not_null, accepted_values, relationships — déclaratifs, dans le YAML.dbt-utils, dbt-expectations pour des assertions avancées (unicité composite, distribution, fraîcheur).Signal d'alerte : un projet sans tests est un projet dont personne ne connaît la fiabilité. En production, c'est un drapeau rouge — surtout si le candidat n'a pas de réponse à « comment sauriez-vous qu'une clé est dupliquée ? ».
Comment gérez-vous une table de faits volumineuse, et l'historisation d'une dimension qui change ?
{{ config(materialized='incremental', unique_key='order_id') }}
select * from {{ ref('stg_orders') }}
{% if is_incremental() %}
where updated_at > (select max(updated_at) from {{ this }})
{% endif %}is_incremental() + unique_key — ne traiter que le delta, en re-fusionnant proprement les lignes modifiées.append, merge, delete+insert, insert_overwrite — le bon choix dépend du moteur et de la donnée.max().snapshots — capturer l'historique d'une dimension (SCD type 2) sans réécrire la logique à la main.Comment organisez-vous un projet dbt destiné à durer et à être repris par une équipe ?
stg_, int_, fct_, dim_ — la cohérence prime sur le goût personnel.exposures — un projet qui se documente lui-même et déclare ses usages en aval.state:modified pour ne (re)construire et tester que ce qui change.Bon réflexe : un senior parle de conventions d'équipe et de CI avant de parler de syntaxe. La maintenabilité, pas la virtuosité, fait la différence à l'échelle.
| Niveau | Maîtrise attendue | Signal GO | NO-GO |
|---|---|---|---|
| Junior | Matérialisations de base, ref/source, tests génériques | Écrit un modèle propre, ajoute unique/not_null | Code un nom de table en dur |
| Confirmé | Incrémental, macros, packages, structure en couches | A construit une couche marts testée et documentée | Ne sait pas quand utiliser incremental |
| Senior | Snapshots (SCD2), contrats, CI slim, performance et coûts | A mis en place l'historisation et la CI state:modified | Ne teste pas ses modèles |
| Lead | Gouvernance, mesh / multi-projets, standards d'équipe | A défini les conventions et le lineage cross-équipes | Ne peut pas expliquer view vs table vs incremental |
Data Builder mène l'entretien technique et vous livre un rapport clair et détaillé sous 24h. Premier entretien offert.