dbt: Seed

đŸŒ± 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 → INTEGER
  • nom → STRING
  • date_inscription → TIMESTAMP
  • revenu → NUMERIC(10,2)

💡 Pourquoi c’est important ?

ProblÚme sans column_typesRésolu par

date_inscription lue comme STRINGcolumn_types: timestamp
revenu arrondi ou mal typécolumn_types: numeric(10,2)
id traité comme FLOAT si une valeur contient .0column_types: integer
Incohérences entre dev/prodTypage 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Ă©mentExplication
column_typesPermet 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é avecdbt seed pour charger des fichiers CSV comme tables
BonusCompatible avec tous les adapters (Snowflake, BigQuery, etc.)

Leave a Reply

Your email address will not be published. Required fields are marked *