CommunityRecherche & Datenanalysegithub.com

Designing Data Contracts / Datenverträge entwerfen

Datenverträge zwischen Produzenten und Konsumenten definieren und durchsetzen – explizites Schema, Semantik, Verantwortlichkeiten, SLAs und Versionierung – um zu verhindern, dass stille Änderungen vorgelagerter Systeme nachgelagerte Pipelines zerstören. Einsetzbar, wenn eine Schemaänderung des Produzenten Konsumenten beeinträchtigen könnte, die Schnittstelle zwischen Teams/Diensten und dem Data Warehouse definiert wird oder eine Schema-Durchsetzung beim Datenimport erfolgen soll.

Was ist Datenverträge entwerfen?

Diese Anleitung beschreibt, wie Datenverträge (Data Contracts) zwischen Produzenten und Konsumenten konzipiert und durchgesetzt werden. Ein Datenvertrag spezifiziert Schema, Semantik, Garantien (z. B. Frische, Volumen), Verantwortlichkeiten und Versionierungsregeln. Der Workflow umfasst das Schreiben des Vertrags als versioniertes Artefakt (z. B. JSON Schema, Avro/Protobuf), die Durchsetzung an der Importgrenze durch Validierung beim Eintreffen, die Klassifizierung von Änderungen in additive (rückwärtskompatibel) vs. breaking (neue Version erforderlich) und das laute Scheitern beim Produzenten statt stillem Scheitern downstream. Typische Fallstricke wie reine Dokumentation ohne Code-Durchsetzung, fehlende Versionierung und fehlende Verantwortliche werden adressiert. Das Skill unterstützt JSON Schema, Avro/Protobuf mit Schema Registry und YAML-Spezifikationen und kann bei Tools wie dbt, Kafka oder Data Warehouses eingesetzt werden.

Funktioniert mit~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 & Datenanalyse skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Datenverträge entwerfen

Wann einsetzen

  • Ein vorgelagertes System (Service, Ereignis, API, Datei) speist nachgelagerte Pipelines und eine Änderung könnte diese still brechen.
  • Definieren der Schnittstelle zwischen einem produzierenden Team/System und dem Data Warehouse.
  • Hinzufügen von Schema-/Qualitätsdurchsetzung an der Importgrenze.
  • NICHT verwenden für interne Modell-zu-Modell-Änderungen innerhalb eines einzelnen dbt-Projekts (verwende Tests + handling-schema-evolution).

Was ein Vertrag spezifiziert

  • Schema: Felder, Typen, Nullability und zulässige Werte.
  • Semantik: Was jedes Feld bedeutet, seine Einheit und Körnung.
  • Garantien: Frische/SLA, Volumenerwartungen, Eindeutigkeit von Schlüsseln.
  • Verantwortlichkeiten: Wer produziert und wen man kontaktieren kann.
  • Versionierung + Änderungsrichtlinie: Wie breaking changes kommuniziert werden.

Workflow

- [ ] Vertrag als versioniertes, eingechecktes Schema schreiben (kein implizites Wissen)
- [ ] An der Importgrenze durchsetzen (bei Ankunft validieren)
- [ ] Änderungen klassifizieren: additiv (sicher) vs. breaking (erfordert neue Version)
- [ ] Bei Verstoß ablehnen/quarantänisieren und den Produzenten alarmieren
- [ ] Breaking changes rechtzeitig versionieren und kommunizieren
  1. Explizit und versioniert machen. Den Vertrag als Code speichern (JSON Schema, Avro/Protobuf-Schema oder eine YAML-Spezifikation) neben der Pipeline, wie jede API reviewed.
  2. An der Grenze durchsetzen. Eingehende Daten bei Ankunft gegen den Vertrag validieren; Verstöße ablehnen oder quarantänisieren statt sie zu laden.
  3. Änderungen klassifizieren. Additive/optionale Felder = rückwärtskompatibel. Felder entfernen, umbenennen, Typen/Nullability verschärfen = breaking → neue Version.
  4. Laut beim Produzenten scheitern, nicht still downstream.

Muster

Vertrag als JSON Schema (bei Import durchgesetzt):

{
  "$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
}

Durchsetzungspunkt – jeden Datensatz beim Import validieren; Fehler in einen Quarantänebereich leiten, mit Grund versehen und das produzierende Team alarmieren. Dies verwandelt ein stilles nachgelagertes Scheitern in ein sofortiges, owned Signal an der Quelle.

Schema Registry (Kafka/Avro) – Kompatibilität (BACKWARD) zum Zeitpunkt der Veröffentlichung durchsetzen, sodass Produzenten kein inkompatibles Schema ausliefern können.

Häufige Fallstricke

  • Vertrag nur als Dokumentation – wenn er nicht im Code durchgesetzt wird, driftet er ab und bricht still.
  • Durchsetzung tief im Warehouse – Verstöße an der Grenze abfangen, bevor sich schlechte Daten ausbreiten.
  • Keine Versionierung – jede Änderung wird zum Notfall; versioniere und deaktiviere elegant.
  • additionalProperties uneingeschränkt wenn Strenge benötigt wird – unerwartete Felder schlüpfen durch; setze es auf false, wo angemessen.
  • Kein Besitzer – ein abgelehnter Batch ohne Ansprechpartner blockiert die Pipeline.
  • Breaking changes ohne Vorlaufzeit – Produzent/Konsument über versionierte Schemas und ein Deprecation-Fenster koordinieren.

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.

Verwandte Skills