Formation dbt : de l’installation au premier modèle
De l’installation à l’exécution de votre premier modèle — avec des commandes prêtes à copier-coller tout du long.
- Installer dbt-core et un adaptateur d’entrepôt dans un environnement virtuel
- Initialiser un projet dbt et confirmer la connexion à l’entrepôt avec dbt debug
- Écrire un modèle, le référencer avec ref(), et l’exécuter avec dbt run
- Définir et exécuter des tests de schéma, puis générer et servir le site de documentation
- Utiliser les commandes dbt du quotidien : seed, run, test, docs, build, clean
- Python 3.8+ installé, avec
pipdisponible dans lePATH - Un éditeur de code (VS Code recommandé)
- Un accès à un entrepôt — Snowflake, BigQuery, Postgres, Redshift ou DuckDB (idéal pour les démos en direct, aucun compte cloud nécessaire)
- Git installé (optionnel, recommandé pour le contrôle de version)
1. Introduction
(data build tool) permet aux analystes et aux ingénieurs de transformer des
données déjà chargées dans un entrepôt, avec de simples requêtes SQL SELECT. dbt prend
en charge la tuyauterie — transformer le SQL en tables ou en vues, gérer les dépendances,
les tests et la documentation.
Ce que vous allez apprendre : installer dbt, se connecter à un entrepôt, la structure d’un projet, écrire et exécuter un modèle, tester et documenter, et les commandes du quotidien.
2. Prérequis
- Python 3.8+ installé
- Un éditeur de code (VS Code recommandé)
- Un accès à un entrepôt — Snowflake, BigQuery, Postgres, Redshift ou DuckDB (idéal pour les démos en direct, aucun compte cloud nécessaire)
- Git installé (optionnel, recommandé pour le contrôle de version)
# check your python version
python --version3. Installer dbt
dbt se compose de deux parties : dbt-core (le framework) et un paquet dbt-<adapter>
(un connecteur pour votre entrepôt spécifique).
3.1 Créer un environnement virtuel
python -m venv dbt-env
source dbt-env/bin/activate # Mac/Linux
dbt-env\Scripts\activate # Windows3.2 Installer dbt-core et un adaptateur
# Postgres
pip install dbt-core dbt-postgres
# Snowflake
pip install dbt-core dbt-snowflake
# DuckDB — best for local, zero-setup demos
pip install dbt-core dbt-duckdb3.3 Vérifier l’installation
dbt --versionVous devriez voir la version de dbt-core ainsi que l’adaptateur installé.
Core:
- installed: 1.8.0
- latest: 1.8.0 - Up to date!
Plugins:
- postgres: 1.8.0 - Up to date!Vous ne voyez pas cela ?
dbt: command not found— l’environnement virtuel n’est pas activé. Relancezsource dbt-env/bin/activate.- La ligne de l’adaptateur est absente — le paquet
dbt-<adapter>ne s’est pas installé ; relancez la commandepip install dbt-core dbt-<adapter>correspondant à votre entrepôt.
4. Mettre en place votre premier projet
4.1 Initialiser un nouveau projet
dbt init my_dbt_projectCette commande vous demande de nommer le projet, de choisir votre adaptateur et de saisir
les identifiants de connexion — stockés dans profiles.yml (généralement dans
~/.dbt/profiles.yml).
4.2 Se placer dans le projet
cd my_dbt_project4.3 Tester la connexion
dbt debugConnection:
...
Connection test: [OK connection ok]
All checks passed!Vous ne voyez pas cela ?
Connection test: [ERROR]— les identifiants ou l’hôte dansprofiles.ymlsont incorrects ; revérifiez les valeurs saisies lors dedbt init.Could not find profile named 'my_dbt_project'— le nom du profil dansdbt_project.ymlne correspond pas à celui deprofiles.yml.
5. Structure du projet
- dbt_project.yml
- profiles.yml
| Chemin | Rôle |
|---|---|
dbt_project.yml | Configuration principale du projet |
models/ | Vos modèles .sql vivent ici |
seeds/ | Fichiers CSV chargés comme tables |
snapshots/ | Suivi des dimensions à évolution lente (SCD) |
macros/ | SQL réutilisable (macros Jinja) |
tests/ | Tests de données personnalisés |
analyses/ | SQL ad hoc, non matérialisé |
profiles.yml | Identifiants de connexion — vit dans ~/.dbt/, hors du projet |
6. Créer votre premier modèle
Un modèle est simplement un fichier .sql contenant une requête SELECT. dbt le
compile et l’exécute sur votre entrepôt.
6.1 Un modèle simple
models/customers.sql
-- models/customers.sql
select
id as customer_id,
first_name,
last_name,
email,
created_at
from raw.customers
where email is not null6.2 Charger des données d’exemple comme seed (optionnel)
Ajoutez un CSV dans seeds/ (p. ex. seeds/raw_customers.csv), puis :
dbt seed6.3 Référencer le seed depuis un modèle
-- models/stg_customers.sql
select
id as customer_id,
first_name,
last_name
from {{ ref('raw_customers') }}Concept clé : {{ ref(...) }} est au cœur de dbt — il construit automatiquement le
graphe de dépendances et indique à dbt dans quel ordre exécuter les modèles.
7. Exécuter votre modèle
# run all models
dbt run
# run one specific model
dbt run --select stg_customers
# run a model + everything downstream of it
dbt run --select stg_customers+
# run a model + everything upstream of it
dbt run --select +stg_customers
# full refresh (rebuild incremental models from scratch)
dbt run --full-refresh1 of 1 START sql view model public.stg_customers .................. [RUN]
1 of 1 OK created sql view model public.stg_customers .............. [OK in 0.15s]
Completed successfully
Done. PASS=1 WARN=0 ERROR=0 SKIP=0 TOTAL=1Vous ne voyez pas cela ?
ERROR creating sql view model— vérifiez la syntaxe SQL par rapport au dialecte de votre entrepôt (p. ex.raw.customersn’existe pas encore).Database Errormentionnant une relation manquante — la table source n’a pas été chargée ; lancez d’aborddbt seedsi le modèle dépend de données seed.
8. Tester vos modèles
Tests génériques intégrés : unique, not_null, accepted_values, relationships.
8.1 Définir les tests
models/schema.yml
version: 2
models:
- name: stg_customers
columns:
- name: customer_id
tests:
- unique
- not_null8.2 Lancer les tests
dbt test
# or scoped to one model
dbt test --select stg_customers1 of 2 START test not_null_stg_customers_customer_id .......... [RUN]
1 of 2 PASS not_null_stg_customers_customer_id ................. [PASS in 0.10s]
2 of 2 START test unique_stg_customers_customer_id ............. [RUN]
2 of 2 PASS unique_stg_customers_customer_id ................... [PASS in 0.09s]
Completed successfully
Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2Vous ne voyez pas cela ?
FAILsurunique_stg_customers_customer_id— descustomer_iden double existent en amont ; vérifiez les données seed/source ou un fan-out de jointure dans le modèle.FAILsurnot_null_stg_customers_customer_id— des valeurs nulles sont passées ; ajoutez un filtrewhereou corrigez les données source.
9. Documentation
dbt génère automatiquement un site de documentation à partir de vos modèles et de vos descriptions YAML.
# build the docs
dbt docs generate
# serve them locally in your browser
dbt docs serve10. Aide-mémoire des commandes
| Commande | Rôle |
|---|---|
dbt init | Créer un nouveau projet |
dbt debug | Tester la connexion à l’entrepôt |
dbt run | Construire/exécuter tous les modèles |
dbt run --select model_name | Exécuter un modèle spécifique |
dbt test | Lancer les tests de données |
dbt seed | Charger les fichiers CSV seed comme tables |
dbt snapshot | Exécuter la logique de snapshot (suivi SCD) |
dbt docs generate | Construire la documentation |
dbt docs serve | Consulter la documentation en local |
dbt build | Exécuter seeds, modèles, snapshots et tests ensemble |
dbt clean | Supprimer les fichiers compilés/artefacts |
dbt compile | Compiler le SQL sans l’exécuter |
11. Déroulé de la démo en direct
pip install dbt-core dbt-duckdb— installerdbt init demo_project— initialiserdbt debug— confirmer la connexion- Créer
models/customers.sql— écrire le premier modèle dbt run— l’exécuter- Ajouter un test dans
schema.yml dbt test— le lancerdbt docs generate && dbt docs serve— montrer la documentation- Modifier le modèle et relancer
dbt run --select customers— montrer la vitesse d’itération
12. Pièges courants
| Piège | Correctif |
|---|---|
Oublier d’activer l’environnement virtuel avant de lancer les commandes dbt | L’activer d’abord (source dbt-env/bin/activate) — un exécutable dbt introuvable en est le symptôme habituel |
Confondre profiles.yml et dbt_project.yml | profiles.yml contient les informations de connexion et vit hors du projet (~/.dbt/) ; dbt_project.yml contient la configuration du projet et vit à l’intérieur |
Ne pas utiliser {{ ref() }} entre les modèles, ce qui casse le suivi des dépendances | Toujours référencer les autres modèles via {{ ref() }} afin que dbt puisse construire le graphe de dépendances et exécuter les modèles dans l’ordre |
Lancer dbt run avant dbt seed quand des modèles dépendent des données seed | Lancer dbt seed d’abord, ou utiliser dbt build, qui ordonne seeds, modèles et tests pour vous |
Suite
Poursuivez avec Lab 3 : Modélisation dbt Medallion — cas DHIS2, qui applique ces fondamentaux à l’entrepôt — en modélisant les données agrégées et tracker de DHIS2 à travers les couches Bronze, Silver et Gold.