tadata
Retour à l'accueil

Évolution de Schéma : Gérer le Changement sans Casser les Pipelines

#data-engineering#schema#databases#migration#governance

Les changements de schéma sont inévitables. Les exigences métier évoluent, de nouvelles sources apparaissent, les modèles sont refactorisés. La question n'est pas si les schémas vont changer, mais si ces changements vont casser les consommateurs en aval ou traverser le système en toute sécurité.

Matrice de Compatibilité de Schéma

Type de CompatibilitéChangementAnciens Lecteurs → Nouvelles DonnéesNouveaux Lecteurs → Anciennes DonnéesOpérations Sûres
BackwardLe nouveau schéma lit les anciennes donnéesPeut casserFonctionneSupprimer champs, ajouter optionnels
ForwardL'ancien schéma lit les nouvelles donnéesFonctionnePeut casserAjouter champs, supprimer optionnels
FullLes deux directions fonctionnentFonctionneFonctionneAjouter/supprimer champs optionnels uniquement
NoneAucune garantiePeut casserPeut casserTout changement (risqué)

En pratique, la compatibilité backward est le mode le plus couramment appliqué. Les schema registries (Confluent, AWS Glue, Karapace) l'appliquent automatiquement.

Comparaison des Stratégies de Migration

StratégieDowntimeRisqueComplexitéRollbackIdéal Pour
Big bangÉlevé — réécriture complèteÉlevéFaibleDifficilePetites tables, dev
Expand-contractZéroFaibleMoyenFacile — supprimer les nouvelles colonnesSystèmes de production, APIs
Blue-green schemaQuasi-zéroFaibleÉlevéBasculer le pointeurSystèmes critiques
Shadow writesZéroTrès faibleÉlevéArrêter le shadowChangements à haut risque
Schémas versionnésZéroFaibleMoyenGarder l'ancienne versionFlux d'événements, APIs

Pattern Expand-Contract

Le pattern expand-contract divise chaque changement cassant en trois phases non-cassantes.

Phase 1: EXPAND                    Phase 2: MIGRATE                  Phase 3: CONTRACT
┌──────────────────┐              ┌──────────────────┐              ┌──────────────────┐
│  Table: users    │              │  Table: users    │              │  Table: users    │
│  id         INT  │              │  id         INT  │              │  id         INT  │
│  name       VARCHAR ◄── ancien │  name       (déprécié)          │  full_name  VARCHAR ◄── nouveau
│  full_name  VARCHAR ◄── nouveau│  full_name  VARCHAR ◄── synchro│                  │
│  Double-écriture  │              │  Backfill ancien →│              │  Supprimer ancien│
│                  │              │  nouvelle colonne │              │                  │
└──────────────────┘              └──────────────────┘              └──────────────────┘

Évaluation des Risques par Type de Changement

Type de ChangementNiveau de RisqueImpact CompatibilitéMitigation
Ajouter colonne optionnelleFaibleForward + backward OKValeur par défaut requise
Ajouter colonne obligatoireMoyenCasse backwardExpand-contract
Renommer colonneÉlevéCasse les deux directionsExpand-contract avec alias
Changer type de donnéeÉlevéCasse les deux directionsNouvelle colonne + migration
Supprimer colonneMoyenCasse forwardDéprécier d'abord, contract ensuite
Changer clé primaireTrès élevéCasse jointures, CDC, lookupsBlue-green ou shadow writes
Fusionner/scinder tablesTrès élevéTous les avals cassentAbstraction par vue + expand-contract

Essentiels du Contrat de Données

ÉlémentObjectifExemple
Définition du schémaGarantie de structureSchéma Avro, JSON Schema, Protobuf
Type sémantiqueSignification métieremail, devise_eur, code_pays_iso
SLA de fraîcheurDélai de livraison"Mis à jour dans les 15 min du changement source"
Règles de qualitéValidité des données"taux de null < 1%", "valeurs dans [A, B, C]"
PropriétaireResponsabilitééquipe-paiements@entreprise.com

Ressources

:::

Nous utilisons des cookies analytiques pour améliorer votre expérience. Aucune donnée personnelle n'est collectée.