🌱 1. Rappel : c’est quoi un Seed dans dbt ?
Un Seed est simplement un fichier CSV que tu places dans le dossier data/ de ton projet dbt.
Quand tu exécutes la commande dbt seed, dbt va le charger dans ton data warehouse comme une table.
👉 Par défaut, dbt devine (infère) le type des colonnes : STRING, FLOAT, BOOLEAN, etc.
Mais ce n’est pas toujours fiable, surtout pour les dates, les decimal, ou les id.
🎯 2. À quoi sert column_types ?
L’option column_types te permet de forcer le type des colonnes manuellement, pour éviter les erreurs ou incohérences.
🛠 3. Exemple simple de configuration dans dbt_project.yml
seeds:
my_project:
clients_seed:
column_types:
id: integer
nom: string
date_inscription: timestamp
revenu: numeric(10,2)
📁 Fichier CSV : data/clients_seed.csv
id,nom,date_inscription,revenu
1,Ali,2024-01-01 10:00:00,1200.50
2,Walid,2024-01-05 14:30:00,1800.75
✅ Résultat dans Snowflake ou BigQuery :
dbt va créer une table clients_seed avec :
id→INTEGERnom→STRINGdate_inscription→TIMESTAMPrevenu→NUMERIC(10,2)
💡 Pourquoi c’est important ?
Problème sans column_types | Résolu par… |
|---|---|
date_inscription lue comme STRING | column_types: timestamp |
revenu arrondi ou mal typé | column_types: numeric(10,2) |
id traité comme FLOAT si une valeur contient .0 | column_types: integer |
| Incohérences entre dev/prod | Typage contrôlé et constant |
✅ Alternatives : définir dans le modèle (moins courant)
Tu peux aussi utiliser config() directement dans le .sql (rarement fait pour les seeds) :
{{ config(column_types = {
"id": "integer",
"revenu": "numeric(10,2)"
}) }}
Mais cela ne fonctionne que dans un modèle dbt, pas dans le CSV lui-même.
La meilleure pratique pour les seeds reste : définir les column_types dans le dbt_project.yml.
🧠 Résumé
| Élément | Explication |
|---|---|
column_types | Permet de forcer le type de chaque colonne d’un seed |
| Où ? | Dans dbt_project.yml sous la section seeds: |
| Pourquoi ? | Garantir la qualité, éviter l’inférence imprécise |
| Utilisé avec | dbt seed pour charger des fichiers CSV comme tables |
| Bonus | Compatible avec tous les adapters (Snowflake, BigQuery, etc.) |