# Atelier dbt v2 : compilation et test métier

Projet pédagogique Nymphar.ai, vérifié le 30 septembre 2026 avec dbt 2.0.6 sur macOS arm64. Données entièrement fictives. Aucun compte cloud, aucun dbt State, aucun benchmark fournisseur.

## Démarrer

Décompresser l'archive dans un nouveau dossier puis ouvrir un terminal dans ce dossier. Python 3.12 et un accès réseau pour installer dbt sont requis. Sur macOS/Linux :

```sh
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
dbt --version
dbt build --profiles-dir . --no-manage-state
dbt show --select ca_encaisse --profiles-dir . --no-manage-state
```

Sur Windows, activer l'environnement avec `.venv\Scripts\Activate.ps1` dans PowerShell. Cette variante d'activation n'a pas été rejouée ici.

Résultat attendu : deux modèles construits, un test réussi, `ca_eur = 200`. Les trois commandes payée 120, payée 80 et annulée 40 sont définies dans `models/commandes.sql`. Le modèle `ca_encaisse` exclut la commande annulée.

Le fichier `profiles.yml` est local à cet atelier : `--profiles-dir .` évite d'utiliser un profil existant. DuckDB écrit dans `atelier.duckdb`. Le projet désactive dbt State et l'envoi de statistiques anonymes. Ne pas ajouter de connexion de production.

## Détecter une erreur de colonne

Dans `models/ca_encaisse.sql`, remplacer `sum(montant_eur)` par `sum(montant_inexistant)`, puis lancer :

```sh
dbt compile --profiles-dir . --no-manage-state
```

La commande doit sortir avec un code non nul. Notre contrôle a obtenu `dbt0209`, signalant la colonne absente. Rétablir `sum(montant_eur)`.

## Détecter une erreur métier

Remplacer cette fois `sum(montant_eur)` par `sum(montant_eur) * 100`, puis :

```sh
dbt compile --profiles-dir . --no-manage-state
dbt build --profiles-dir . --no-manage-state
```

La compilation réussit, mais `ca_attendu` échoue avec une ligne fautive. La requête est légale et le résultat faux pour notre définition en euros. `dbt build` a bien créé les tables avant cet échec : un test échoué ne signifie pas annulation de toutes les écritures. En production, la promotion des résultats doit être conditionnée à la validation.

Restaurer `sum(montant_eur)` puis relancer le build : trois succès attendus. Ce test utilise un total de référence sur trois lignes, pas une assertion universelle pour une vraie base commerciale.

## Nettoyage et portée

Quitter l'environnement avec `deactivate`. Supprimer uniquement ce dossier d'atelier si vous n'en avez plus besoin, y compris `.venv`, `target`, `logs` et `atelier.duckdb` qui y ont été générés.

Cette démonstration valide deux comportements sur ce petit projet. Elle ne valide pas les performances d'un entrepôt, les économies de dbt State ou la compatibilité de vos packages, macros et adaptateurs. Pour une migration, conserver votre environnement v1 et comparer les résultats dans un schéma de test.

Documentation : [installation](https://docs.getdbt.com/docs/local/install-dbt?version=2), [DuckDB](https://docs.getdbt.com/docs/local/connect-data-platform/duckdb-setup?version=2), [analyse statique](https://docs.getdbt.com/reference/resource-configs/static-analysis).
