Conception de contrats de données

Définissez et appliquez des contrats de données entre producteurs et consommateurs — schéma explicite, sémantique, responsabilité, SLA et versioning — pour empêcher les modifications silencieuses en amont de casser les pipelines en aval. À utiliser lorsqu'un changement de schéma du producteur peut casser les consommateurs, pour définir une interface entre équipes/services et l'entrepôt, ou pour ajouter une validation du schéma à l'ingestion.

Qu'est-ce que Conception de contrats de données ?

Ce skill permet de concevoir et gérer des contrats de données formels entre équipes productrices et consommatrices dans une architecture de données. Il s'applique lorsqu'un changement de schéma en amont (service, événement, API, fichier) pourrait casser silencieusement des pipelines en aval, par exemple à la frontière d'ingestion dans un entrepôt de données ou pour définir une interface entre services. Le skill détaille comment spécifier un contrat : schéma (champs, types, nullabilité, valeurs autorisées), sémantique (signification des champs, unité/granularité), garanties (fraîcheur/SLA, volume, unicité des clés), responsabilité (producteur et contact) et politique de versionnement. Il recommande de stocker le contrat comme code versionné (JSON Schema, Avro/Protobuf, YAML) et de l'appliquer à l'ingestion (valider à l'arrivée, rejeter/quarantaine en cas de violation avec alerte au producteur). Il classifie les changements : additifs (rétrocompatibles) vs cassants (nouveau version) et préconise un signalement immédiat au producteur en cas de violation, plutôt qu'un échec silencieux en aval. Le skill inclut des patterns concrets (JSON Schema, registre de schémas Kafka/Avro) et met en garde contre les pièges courants : contrat non appliqué, validation trop tardive, absence de versionnement, champs non contrôlés, absence de propriétaire, changements cassants sans préavis.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Unknown-333/awesome-data-engineering-skills/tree/main/skills/designing-data-contracts

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Conception de contrats de données ?

Quand l'utiliser

  • Un flux amont (service, événement, API, fichier) alimente des pipelines en aval et un changement pourrait les casser silencieusement.
  • Définir l'interface entre une équipe/système producteur et l'entrepôt.
  • Ajouter une validation du schéma/qualité à la frontière d'ingestion.
  • À NE PAS utiliser pour des changements internes modèle-à-modèle au sein d'un projet dbt (utiliser des tests + handling-schema-evolution).

Ce que spécifie un contrat

  • Schéma : champs, types, nullabilité et valeurs autorisées.
  • Sémantique : ce que signifie chaque champ et son unité/granularité.
  • Garanties : fraîcheur/SLA, attentes de volume, unicité des clés.
  • Responsabilité : qui le produit et qui contacter.
  • Versionnement + politique de changement : comment les changements cassants sont communiqués.

Flux de travail

- [ ] Rédiger le contrat comme un schéma versionné et versionné (pas de connaissance tribale)
- [ ] L'appliquer à la frontière d'ingestion (valider à l'arrivée)
- [ ] Classifier les changements : additifs (sûrs) vs cassants (nécessitent une nouvelle version)
- [ ] En cas de violation, rejeter/mettre en quarantaine et alerter le producteur
- [ ] Versionner et communiquer les changements cassants à l'avance
  1. Rendez-le explicite et versionné. Stockez le contrat comme code (JSON Schema, schéma Avro/Protobuf, ou une spécification YAML) à côté du pipeline, examiné comme toute API.
  2. Appliquez à la frontière. Validez les données entrantes par rapport au contrat à l'arrivée ; rejetez ou mettez en quarantaine les violations au lieu de les charger.
  3. Classifiez les changements. Les champs additifs/optionnels = rétrocompatibles. Supprimer des champs, renommer, resserrer les types/nullabilité = cassant → nouvelle version.
  4. Échouez bruyamment vers le producteur, pas silencieusement en aval.

Modèles

Contrat en JSON Schema (appliqué à l'ingestion) :

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["order_id", "amount", "ordered_at"],
  "properties": {
    "order_id": { "type": "string" },
    "amount": { "type": "number", "minimum": 0 },
    "ordered_at": { "type": "string", "format": "date-time" },
    "coupon": { "type": ["string", "null"] }
  },
  "additionalProperties": false
}

Point d'application — validez chaque enregistrement à l'ingestion ; acheminez les échecs vers un emplacement quarantine avec la raison, et alertez l'équipe productrice. Cela transforme une panne silencieuse en aval en un signal immédiat et attribué à la source.

Registre de schémas (Kafka/Avro) — appliquez la compatibilité (BACKWARD) au moment de la publication afin que les producteurs ne puissent pas publier un schéma incompatible.

Pièges courants

  • Contrat comme documentation uniquement — s'il n'est pas appliqué dans le code, il dérive et casse silencieusement.
  • Application en profondeur dans l'entrepôt — capturez les violations à la frontière, avant que les mauvaises données ne se propagent.
  • Absence de versionnement — chaque changement devient une urgence ; versionnez et dépréciez gracieusement.
  • additionalProperties sans restriction quand vous avez besoin de rigueur — des champs inattendus passent ; mettez-le à false là où c'est approprié.
  • Absence de propriétaire — un lot rejeté sans personne à contacter bloque le pipeline.
  • Changements cassants sans délai de prévenance — coordonnez producteur/consommateur via des schémas versionnés et une fenêtre de dépréciation.

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

Unknown-333/authoring-airflow-dags

Write production-grade Apache Airflow DAGs using the TaskFlow API — idempotent tasks, correct scheduling and catchup, retries/SLAs, connections/variables, and avoiding top-level code. Use when creating or reviewing Airflow DAGs, scheduling pipelines, wiring task dependencies, configuring retries/backfills, or fixing non-idempotent tasks.

Unknown-333/building-dagster-assets

Build Dagster pipelines using software-defined assets — asset dependencies, partitions, resources and IO managers, asset checks, and schedules/sensors. Use when creating Dagster assets or jobs, modeling data as assets, adding partitions or backfills, wiring resources/IO managers, or migrating from task-based orchestration to assets.

Unknown-333/building-dbt-models

Build well-structured dbt models — staging/intermediate/marts layers, ref() and source(), materializations, and incremental models with the right strategy. Use when creating or refactoring dbt models, choosing table vs view vs incremental, structuring a dbt project, or writing incremental logic.

Unknown-333/building-feature-pipelines

Build ML feature pipelines and feature stores — point-in-time-correct joins to avoid label leakage, offline/online parity, feature freshness and backfills, and materialization with tools like Feast. Use when engineering features for ML, preventing train/serve skew or data leakage, building a feature store, or backfilling historical features for training.

Unknown-333/building-iceberg-tables

Design and operate Apache Iceberg tables — partitioning and hidden partitioning, partition/schema evolution, snapshots and time travel, compaction and small-file cleanup, and MERGE/upsert for lakehouse tables on Spark, Flink, Trino, or Snowflake. Use when creating or maintaining Iceberg tables, choosing partitioning, evolving schema/partitions, or fixing small-file and metadata bloat.

Unknown-333/building-ingestion-pipelines

Build batch and incremental data ingestion (extract-load) pipelines — full vs incremental extraction, change data capture (CDC), watermarks and high-water marks, API pagination and rate limits, and choosing managed EL tools (Fivetran, Airbyte) vs custom code. Use when ingesting data from databases, APIs, files, or SaaS into a warehouse/lake, or designing incremental extraction and CDC.

Unknown-333/building-kafka-consumers

Build reliable Apache Kafka consumers and producers — consumer groups and partition assignment, offset commit strategy, at-least-once vs exactly-once, idempotent/transactional producers, rebalancing, and dead-letter handling. Use when writing Kafka consumers/producers, configuring offset commits or consumer groups, tuning throughput, or handling rebalances and poison messages.

Unknown-333/debugging-data-pipelines

Systematically root-cause data pipeline failures and data incidents — job errors, wrong or missing data, duplicates, and freshness misses — by tracing lineage upstream, isolating the failing stage, reconciling against source, and planning a safe fix and backfill. Use when a pipeline fails, numbers look wrong, data is missing or duplicated, a dashboard is stale, or a stakeholder reports a data discrepancy.

Unknown-333/designing-backfills-and-replays

Plan and run safe data backfills and replays — idempotent reprocessing of historical windows, partition-by-partition execution, isolating backfill compute from production, verifying results, and avoiding double-counting or changed history. Use when backfilling a new or fixed model, reprocessing after a bug, replaying events, or loading history for a new pipeline without corrupting existing data.

Skills associés