dbt: Evolution du schéma dans Delta Lake avec dbt

🧱 Contexte : l’évolution de schéma dans Delta Lake

Delta Lake permet de modifier dynamiquement la structure (le schéma) d’une table :

  • ajout de nouvelles colonnes
  • modification de types de colonnes
  • renommage, etc.

Mais par défaut, ces changements peuvent provoquer une erreur si le schéma cible ne correspond pas à la structure de la table existante.

👉 C’est là qu’intervient mergeSchema = true.


✅ Objectif : gérer les changements de schéma automatiquement dans dbt avec Delta Lake

En activant l’option mergeSchema = true, tu permets à Delta Lake de fusionner automatiquement le nouveau schéma avec l’ancien, sans casser les anciennes données ni bloquer les requêtes.


📌 Exemple de scénario

Tu as une table Delta Lake delta_clients avec ce schéma initial :

idnompays

Et un jour, ton modèle dbt émet ce SELECT :

SELECT
  id,
  nom,
  pays,
  date_naissance  -- 🆕 nouvelle colonne
FROM {{ ref('stg_clients') }}

👉 Sans mergeSchema, Delta Lake lèvera une erreur de schéma incompatible si tu fais un MERGE, INSERT, OVERWRITE, etc.


✅ Solution : activer mergeSchema dans dbt

Tu peux l’activer dans la config du modèle :

{{ config(
    materialized = 'incremental',
    incremental_strategy = 'merge',
    unique_key = 'id',
    options = {
      "mergeSchema": "true"
    }
) }}

SELECT *
FROM {{ ref('stg_clients') }}

🧠 Que fait exactement mergeSchema: true ?

  • Delta va détecter les colonnes absentes dans la table cible
  • Il va ajouter automatiquement ces colonnes au schéma existant
  • Il préserve les anciennes données (les lignes anciennes auront NULL dans les nouvelles colonnes)
  • Les fichiers Delta et le transaction log restent ACID & compatibles

📦 Avantages

AvantageDétail
🔁 Évolution fluideTu peux faire évoluer ton modèle dbt sans erreur bloquante
🕓 Historique intactLes anciennes données restent lisibles, pas de perte
🔒 Transactions sûresDelta Lake garde ses garanties ACID
🔎 Moins de maintenancePas besoin de recréer la table pour ajouter une colonne

⚠️ Précautions

  • mergeSchema ne supprime pas les colonnes retirées du SELECT (il ajoute seulement)
  • Il peut masquer certaines erreurs de compatibilité si mal utilisé (par ex. changement de type implicite)
  • À combiner avec des tests de schéma si tu veux garder le contrôle

✅ Résumé

Activer mergeSchema: true dans dbt pour une table Delta Lake permet une évolution de schéma automatique.
Cela permet d’ajouter des colonnes sans casser les requêtes existantes, tout en conservant les données historiques et la compatibilité.


Leave a Reply

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