Les data contracts formalisent les engagements entre producteurs et consommateurs de données. En 2025, c est un sujet d entretien Senior qui différencie les profils avec une vraie culture de gouvernance.
Qu est-ce qu un data contract ? Quel problème concret résout-il ?
Quels éléments doit contenir un data contract complet ?
# data-contract.yaml (format standard emergent)
apiVersion: v2.0.0
kind: DataContract
id: orders-v2
info:
title: Orders Dataset
version: 2.1.0
owner: equipe-commerce
contact: data-commerce@entreprise.com
schema:
type: dbt
path: models/marts/commerce/fct_orders.sql
fields:
- name: order_id
type: string
required: true
unique: true
- name: amount
type: float
minimum: 0
- name: status
type: string
enum: [completed, pending, cancelled]
quality:
freshness: 1h # données fraîches dans l heure
completeness: 99.9% # moins de 0.1% de nulls sur order_id
terms:
usage: Données internes uniquement
noticePeriod: 30 jours avant breaking changeComment utilisez-vous dbt pour enforcer un data contract ?
sources:
- name: commerce
freshness:
warn_after: {count: 12, period: hour}
error_after: {count: 24, period: hour}
tables:
- name: orders
loaded_at_field: updated_at
columns:
- name: order_id
tests: [not_null, unique]
- name: status
tests:
- accepted_values:
values: [completed, pending, cancelled]Comment gérez-vous une breaking change sur un dataset qui a des consommateurs ?
Comment convainquez-vous une équipe de mettre en place des data contracts ?
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Confirmé | Comprend le concept, sait qu un test dbt est une forme de contract | Peut expliquer pourquoi les data contracts existent, a mis des tests dbt en place | N a jamais entendu parler de data contracts |
| Senior | A formalisé des contracts YAML, gère le versioning, communique les breaking changes | A mis en place des contracts sur des datasets critiques, gère la dépréciation | Ne sait pas comment gérer une breaking change sans casser les consommateurs |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.