🧱 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 :
id | nom | pays |
---|
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
Avantage | Détail |
---|---|
🔁 Évolution fluide | Tu peux faire évoluer ton modèle dbt sans erreur bloquante |
🕓 Historique intact | Les anciennes données restent lisibles, pas de perte |
🔒 Transactions sûres | Delta Lake garde ses garanties ACID |
🔎 Moins de maintenance | Pas besoin de recréer la table pour ajouter une colonne |
⚠️ Précautions
mergeSchema
ne supprime pas les colonnes retirées duSELECT
(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é.