> ## Content Index
> Fetch the complete content index at: https://www.idriss-benbassou.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Installer dbt (Fusion) et connecter Snowflake
- URL: https://www.idriss-benbassou.com/installer-dbt-core-et-connecter-snowflake-ton-premier-projet-dbt/
- Published: 2026-05-30T19:27:39.000Z
- Updated: 2026-06-11T13:20:54.000Z
- Author: Idriss BENBASSOU
- Tags: dbt, #rating-1

[Dans l'article précédent](https://www.idriss-benbassou.com/dbt-data-build-tool-a-quoi-ca-sert-exemples-sql/), on a vu ce qu'est dbt et pourquoi il est partout dans les offres data. C'était la théorie avec le pourquoi, les modèles, les couches, les tests. Maintenant on passe au clavier.

À la fin de cet article, tu auras dbt installé sur ta machine, connecté à Snowflake, et ton premier modèle qui tourne.

On part de zéro. La seule chose que je suppose, c'est que tu as déjà lu [le premier article de la série](https://www.idriss-benbassou.com/dbt-data-build-tool-a-quoi-ca-sert-exemples-sql/).

💡

On installe ****Fusion**, pas dbt Core v1 "classique" car Fusion, c'est le nouveau moteur de dbt réécrit en Rust. La bonne nouvelle ce qu'on a plus besoin de Python ni d'environnement virtuel, c'est un simple binaire. Par contre, le SQL, et les syntaxes tout reste presque pareil que la v1.

## Ce dont tu as besoin avant de commencer

Trois choses :

- **Un compte Snowflake.** Si tu n'en as pas, prends l'essai gratuit de 30 jours avec 400 € de crédits sur [snowflake.com](https://signup.snowflake.com/?ref=idriss-benbassou.com). Largement suffisant pour toute la série.
- **VS Code installé.** [Télécharge-le ici](https://code.visualstudio.com/?ref=idriss-benbassou.com) si ce n'est pas déjà fait. C'est dans VS Code que toute la magie de Fusion se passe.
- **Cinq minutes** pour préparer le terrain côté Snowflake.

## Préparer Snowflake pour dbt

dbt va écrire des tables et des vues dans ton warehouse. Pour ça, il lui faut un endroit où travailler et un rôle qui a le droit de le faire. On ne va pas lui filer `ACCOUNTADMIN`, ce serait une mauvaise habitude. On crée un rôle dédié.

Ouvre une feuille SQL dans Snowsight et lance ça :

```sql
USE ROLE ACCOUNTADMIN;

-- Un warehouse dédié à dbt, en XSMALL pour ne pas cramer tes crédits
CREATE WAREHOUSE IF NOT EXISTS dbt_wh
    WAREHOUSE_SIZE = 'XSMALL'
    AUTO_SUSPEND = 60          -- s'éteint après 60s d'inactivité
    AUTO_RESUME = TRUE
    INITIALLY_SUSPENDED = TRUE;

-- La base où dbt va construire tes tables
CREATE DATABASE IF NOT EXISTS analytics;

-- Un rôle dédié à dbt
CREATE ROLE IF NOT EXISTS dbt_role;

-- On donne au rôle ce qu'il faut pour travailler
GRANT USAGE ON WAREHOUSE dbt_wh TO ROLE dbt_role;
GRANT ALL ON DATABASE analytics TO ROLE dbt_role;
GRANT ALL ON ALL SCHEMAS IN DATABASE analytics TO ROLE dbt_role;
GRANT ALL ON FUTURE SCHEMAS IN DATABASE analytics TO ROLE dbt_role;

-- On attribue le rôle à ton utilisateur
GRANT ROLE dbt_role TO USER ton_utilisateur ;

```

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/05/image-4.png)

Remplace `ton_utilisateur` par ton login Snowflake. Si tu veux retrouver les concepts de warehouse et de rôles, tout est détaillé dans [Virtual Warehouse Snowflake](https://www.idriss-benbassou.com/virtual-warehouse-snowflake-sizing-multi-cluster-scaling-scale-up-scale-out/) et [Rôles système Snowflake](https://www.idriss-benbassou.com/roles-systeme-snowflake-accountadmin-sysadmin-securityadmin-useradmin-public/).

On passe à dbt.

## Installer le moteur Fusion

C'est là que ça change par rapport à l'ancienne méthode. Avant, on installait dbt avec pip dans un environnement Python. Avec Fusion, on installe un binaire en une seule commande. Pas de Python, pas de venv.

**Sur Windows (PowerShell) :**

```powershell
irm https://public.cdn.getdbt.com/fs/install/install.ps1 | iex
```

Ensuite, on vérifie que c'est bon :

```bash
dbt --version
```

(Si tu as une erreur lors de la saisie de dbt, ferme et rouvre PowerShell. Sur certaines machines, un redémarrage de powershell est nécessaire.)

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/06/image-31.png)

## Installer l'extension VS Code

1. Ouvre VS Code, va dans l'onglet Extensions.
2. Cherche `dbt` et prends celle de l'éditeur **dbt Labs**.
3. Clique sur **Install**.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/06/image-32.png)

Une fois l'installation est terminée, il faut s'enregistrer dans dbt labs pour avoir un full acces de l'extension.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/06/image-33.png)

Aprés avoir cliquer sur "Register Now" une redirection vers votre navigateur va s'effetuer pour créer votre compte. (l'enregistrement est gratuit)

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/06/image-34.png)

> ⚠️ l'extension fonctionne uniquement avec Fusion, pas avec dbt Core v1.

## Créer le projet avec `dbt init`

Un projet dbt, c'est un dossier avec une structure précise. Plutôt que de la créer à la main, dbt te la génère :

```bash
dbt init dbt_projet

```

dbt te pose quelques questions. Il te demande quel adapter utiliser (choisis `snowflake`), puis les infos de connexion. 

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/05/image-8.png)

Une fois lancé, tu obtiens cette arborescence :

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/05/image-9.png)

Chaque dossier a son rôle. Pour l'instant, le seul qui nous intéresse c'est `models/`.

## Configurer la connexion : le `profiles.yml`

C'est le fichier qui dit à dbt comment se connecter à Snowflake. Il ne vit pas dans le projet (pour ne pas pousser tes identifiants sur Git), mais dans le dossier : `C:\Users\<ton_nom>\.dbt\profiles.yml` 

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/05/image-10.png)

Ouvre-le et mets ça :

```yaml
dbt_projet:
  target: dev
  outputs:
    dev:
      type: snowflake
      account: "{{ env_var('SNOWFLAKE_ACCOUNT') }}"   # ton account identifier
      user: ton_utilisateur
      password: "{{ env_var('SNOWFLAKE_PASSWORD') }}"
      role: dbt_role
      warehouse: dbt_wh
      database: analytics
      schema: dev
      threads: 4

```

Quelques points à comprendre :

- **`account`** : c'est l'identifiant de ton compte Snowflake, pas son URL complète. C'est le piège numéro un (voir le callout plus bas).
- **`role`, `warehouse`, `database`** : exactement ceux qu'on a créés tout à l'heure.
- `**schema**` : le schéma où dbt écrira en dev. Ici `dev`.
- **`threads`** : utile surtout avec dbt Core classique car avec Fusion sur Snowflake, le moteur optimise lui-même le parallélisme.

On utilise `env_var()` pour ne pas écrire le mot de passe en dur dans le fichier. Tu définis tes variables avant de lancer dbt, il faut lancer sur powershell ces commandes pour mettre à jour les infos

```bash
# Dev
$env:SNOWFLAKE_ACCOUNT="BWLTXTP-PQ43272"
$env:SNOWFLAKE_PASSWORD="ton_mot_de_passe"

```

💡

Le champ `account` ne prend pas l'URL `https://app.snowflake.com/...`. Il prend ton identifiant au format `orgname-account_name`. Pour le trouver ==> dans Snowsight, clique sur ton profil en bas à gauche, puis sur le nom de ton compte, et copie l'Account Identifier.

> Pour démarrer, le mot de passe suffit. Mais en production, on n'utilise jamais ça. On passe par une authentification par clé (key pair), bien plus sûre. Je l'explique en détail dans [MFA et Key Pair Snowflake](https://www.idriss-benbassou.com/mfa-key-pair-snowflake-securiser-authentification/).

## Authentification avec la key-pair au lieu du password

Dans la section précédente, on s'est connecté au mot de passe. Sur un compte de démo, ça passe encore. Mais en entreprise, c'est fini car Snowflake impose le MFA à tous les utilisateurs, et les comptes de service (CI/CD, orchestration) n'ont plus le choix, c'est key-pair ou OAuth.

Autant prendre la bonne habitude tout de suite. On génère une paire de clés :

```bash
# Clé privée chiffrée au format PKCS#8 moderne (AES-256)
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -v2 aes-256-cbc -out rsa_key.p8

# Clé publique correspondante
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
```

> ⚠️ Attention Fusion n'accepte que les clés PKCS8 modernes. La vieille commande avec `-v2 des3` (3DES), qu'on peut voir sur certain anciens tutos, produit une clé que Fusion refuse. Utilise bien `aes-256-cbc` comme ci-dessus.

Tu attaches ensuite la clé publique à ton utilisateur Snowflake (colle le contenu de `rsa_key.pub` sans les lignes `BEGIN/END`) :

```sql
ALTER USER ton_utilisateur SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...';
```

Et tu adaptes le `profiles.yml` en remplacent le bloc `password` par le chemin de ta clé.

```yaml
      user: ton_utilisateur
      private_key_path: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PATH') }}"
      private_key_passphrase: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PASSPHRASE') }}"
```

Le détail complet (génération, rotation, MFA) est dans mon article dédié [MFA et Key Pair Snowflake](https://www.idriss-benbassou.com/mfa-key-pair-snowflake-securiser-authentification/). Pour la suite de la série, le mot de passe sur ton compte d'essai suffit.

## Vérifier que tout est branché : `dbt debug`

Avant d'aller plus loin, on teste la connexion. Place-toi dans le dossier du projet et lance :

```bash
dbt debug

```

Si tout est bon, tu vois une série de coches vertes et le message :

```
All checks passed!

```

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/06/image-35.png)

Si ça échoue c'est probablement l'un de ces trois trucs :

| Symptôme                               | Ce qu'il faut vérifier                                |
| -------------------------------------- | ----------------------------------------------------- |
| Could not connect ou timeout           | L'account est mal formaté                             |
| Role 'DBT\_ROLE' does not exist        | Le GRANT du rôle à ton user n'est pas passé           |
| Object does not exist sur le warehouse | Le nom du warehouse ne correspond pas au profiles.yml |

## Ton premier modèle qui tourne

dbt a généré des modèles d'exemple dans `models/example/`. On va les supprimer et écrire le nôtre, plus propre.

Supprime le dossier `models/example/`, puis crée un fichier `models/mon_premier_modele.sql` :

```sql
SELECT 1 AS id, 'Marc'   AS nom, 'Paris' AS ville
UNION ALL
SELECT 2 AS id, 'Sophie' AS nom, 'Lyon'  AS ville
UNION ALL
SELECT 3 AS id, 'Karim'  AS nom, 'Marseille' AS ville

```

C'est volontairement basique. Pas de source, pas de jointure, juste un `SELECT` qui tourne partout. L'idée ici c'est de voir le mécanisme dbt fonctionner, pas d'écrire une transformation compliquée. On branchera des vraies sources dans le prochain article.

Maintenant, le moment qu'on attendait :

```bash
dbt run

```

dbt prend ton `SELECT`, l'exécute dans Snowflake et matérialise le résultat. Tu vois ça dans le terminal :

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/05/image-12.png)

```
1 of 1 OK created sql view model dev.mon_premier_modele ... [SUCCESS 1 in 0.8s]
Completed successfully

```

Retourne dans Snowsight, déplie `ANALYTICS` \> `DEV`, et tu vois ta vue `mon_premier_modele`. Lance un `SELECT * FROM analytics.dev.mon_premier_modele` : tes trois lignes sont là.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/05/image-13.png)

C'est tout. dbt vient de transformer ton fichier SQL en objet dans Snowflake. C'est exactement ce qu'il fera avec 5 modèles ou avec 200, dans le bon ordre, tout seul.

## Deux commandes bonus

Dans [l'article 1](https://www.idriss-benbassou.com/dbt-data-build-tool-a-quoi-ca-sert-exemples-sql/), j'ai parlé des tests et de la documentation. Tu as déjà tout sous la main pour les essayer. On verra le détail dans les prochains articles, mais teste juste pour voir la puissance :

```bash
dbt test    # lance les tests (aucun défini pour l'instant, donc ça passe)
dbt docs generate # génère la doc
dbt docs serve   # ouvre la doc dans ton navigateur

```

Le `dbt docs serve` t'ouvre un site web avec le graphe de tes modèles. Pour l'instant il n'y en a qu'un, mais tu vois déjà l'idée.

![](https://storage.ghost.io/c/60/f1/60f18be4-df79-4956-8e4a-c2fa80212e93/content/images/2026/05/image-14.png)

## Ce qu'on a fait, et la suite

Récap. de cet article

- Préparer un warehouse, une base et un rôle dédiés dans Snowflake,
- Installer dbt (Fusion) avec la connexion à Snowflake,
- Créer un projet avec `dbt init`,
- Configurer la connexion dans `profiles.yml`,
- Valider avec `dbt debug`,
- Faire tourner le premier modèle avec `dbt run`.

Tu as un projet dbt fonctionnel connecté à Snowflake. C'est la base de tout le reste de la série.

Dans le prochain article, on arrête les `SELECT` demo. On branche de vraies données brutes avec les sources, et on construit la première couche de staging proprement, dans la logique Bronze vers Silver de [l'architecture Médaillon](https://www.idriss-benbassou.com/architecture-medaillon-bronze-silver-gold-erreurs-a-eviter/).

---

## Aller plus loin

Si tu veux consolider la partie Snowflake en parallèle (warehouses, rôles, sécurité, stockage), tout est regroupé dans le parcours complet.

👉 [Accéder à la Formation Snowflake](https://www.idriss-benbassou.com/formation-snowflake/)

Et pour t'entraîner sur dbt en conditions d'examen, la certification dbt Analytics Engineering teste exactement ces concepts. J'ai préparé des questions dédiées sur DataCertification.fr.

👉 [Préparer la certification dbt sur DataCertification.fr](https://datacertification.fr/certifications/dbt?ref=idriss-benbassou.com)

Tu veux que je t'accompagne sur ton projet data (Snowflake, dbt, modélisation, industrialisation) ?

👉 [Réserver un appel de 30 minutes](https://calendly.com/idriss-benbassou-datavio/30min?ref=idriss-benbassou.com)

---

## Questions fréquentes

#### 

#### Faut-il un compte Snowflake payant pour suivre ?

Non. L'essai gratuit de 30 jours avec 400 € de crédits suffit largement pour toute la série dbt. Un warehouse XSMALL avec auto-suspend à 60 secondes consomme très peu, tu ne risques pas d'épuiser tes crédits en apprenant.

#### Où se trouve le fichier profiles.yml ?

Dans un dossier caché de ton répertoire utilisateur : `C:\Users\ton_nom\.dbt\profiles.yml` sur Windows. Il est volontairement en dehors du projet pour ne pas pousser tes identifiants sur Git.

#### dbt debug échoue, par où commencer ?

Dans neuf cas sur dix, c'est l'account identifier mal formaté. Il prend le format `orgname-account_name`, pas l'URL Snowflake. Vérifie ensuite que le rôle a bien été attribué à ton utilisateur et que les noms de warehouse et de base correspondent exactement à ceux du profiles.yml.

#### Comment trouver mon account identifier Snowflake ?

Dans Snowsight, clique sur ton profil en bas à gauche, survole le nom de ton compte, puis copie l'Account Identifier. C'est lui qui va dans le champ `account` du profiles.yml.

#### Faut-il installer Python pour utiliser dbt Fusion ?

Non. Fusion est un binaire autonome écrit en Rust, qu'on installe en une commande (`irm ... install.ps1 | iex` sur Windows, `curl ... install.sh` sur Mac/Linux). Plus besoin de Python ni d'environnement virtuel, contrairement à l'ancienne installation de dbt Core via pip. 

#### dbt Core ou le moteur Fusion pour apprendre ?

Fusion, avec l'extension VS Code. C'est gratuit, moderne, beaucoup plus rapide, et on profite du lineage et de l'aperçu des données en direct. Le SQL et la syntaxe des projets dbt restent presque identiques à dbt Core v1.

#### L'autocomplétion et le lineage ne s'affichent pas dans VS Code, pourquoi ?

C'est presque toujours parce que le projet n'a pas été ouvert comme workspace. Fais File → Add Folder to Workspace, sélectionne le dossier racine du projet, puis Save Workspace As.