Diseño de Contratos de Datos

Define y haz cumplir contratos de datos entre productores y consumidores — esquema explícito, semántica, propiedad, SLA y versionado — para evitar que cambios silenciosos en productores rompan pipelines posteriores. Úsalo cuando un cambio en el esquema del productor pueda afectar a los consumidores, al definir una interfaz entre equipos/servicios y el almacén de datos, o al agregar validación de esquema en la ingesta.

¿Qué es Diseño de Contratos de Datos?

Esta habilidad para agentes de IA automatiza el diseño y cumplimiento de contratos de datos entre equipos productores y consumidores. Es útil en ecosistemas de datos complejos donde los cambios no coordinados en esquemas (por ejemplo, en servicios, eventos, APIs o archivos) pueden romper silenciosamente pipelines posteriores. La habilidad soporta plataformas como Kafka y sistemas de archivos, y se integra con herramientas como JSON Schema, Avro y Protocol Buffers. El agente puede generar contratos versionados, configurar puntos de validación en la ingesta, clasificar cambios como aditivos o disruptivos, y definir políticas de alerta y cuarentena. Su flujo de trabajo típico incluye escribir el contrato como código, validar los datos entrantes contra el contrato, rechazar o poner en cuarentena violaciones, y notificar al equipo productor de inmediato. Esto transforma un posible fallo silencioso en una señal clara y accionable en la fuente de datos, mejorando la fiabilidad y la colaboración entre equipos.

Compatible con~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 Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Diseño de Contratos de Datos?

Cuándo usarlo

  • Un upstream (servicio, evento, API, archivo) alimenta pipelines posteriores y un cambio podría romperlos silenciosamente.
  • Definir la interfaz entre un equipo/sistema productor y el almacén de datos.
  • Agregar validación de esquema/calidad en el límite de ingesta.
  • NO lo uses para cambios internos de modelo a modelo dentro de un proyecto dbt (usa tests + handling-schema-evolution).

Lo que especifica un contrato

  • Esquema: campos, tipos, nulabilidad y valores permitidos.
  • Semántica: qué significa cada campo y su unidad/grano.
  • Garantías: frescura/SLA, expectativas de volumen, unicidad de claves.
  • Propiedad: quién lo produce y a quién contactar.
  • Versionado + política de cambios: cómo se comunican los cambios disruptivos.

Flujo de trabajo

- [ ] Escribe el contrato como un esquema versionado y verificado en el repositorio (no conocimiento tribal)
- [ ] Hazlo cumplir en el límite de ingesta (validar al llegar)
- [ ] Clasifica los cambios: aditivos (seguros) vs disruptivos (necesitan nueva versión)
- [ ] Ante una violación, rechaza/pon en cuarentena y alerta al productor
- [ ] Versiona y comunica los cambios disruptivos con antelación
  1. Hazlo explícito y versionado. Almacena el contrato como código (JSON Schema, esquema Avro/Protobuf o una especificación YAML) junto al pipeline, revisado como cualquier API.
  2. Hazlo cumplir en el límite. Valida los datos entrantes contra el contrato al llegar; rechaza o pon en cuarentena las violaciones en lugar de cargarlos.
  3. Clasifica los cambios. Campos aditivos/opcionales = compatibles hacia atrás. Eliminar campos, renombrar, endurecer tipos/nulabilidad = disruptivo → nueva versión.
  4. Falla ruidosamente hacia el productor, no silenciosamente río abajo.

Patrones

Contrato como JSON Schema (validado en la ingesta):

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

Punto de validación — valida cada registro al ingerir; redirige los fallos a una ubicación de cuarentena con el motivo y alerta al equipo productor. Esto convierte una rotura silenciosa río abajo en una señal inmediata y con responsable en el origen.

Registro de esquemas (Kafka/Avro) — haz cumplir la compatibilidad (BACKWARD) en el momento de publicación para que los productores no puedan enviar un esquema incompatible.

Errores comunes

  • Contrato solo como documentación — si no se aplica en código, se desvía y rompe silenciosamente.
  • Aplicarlo en lo profundo del almacén de datos — detecta las violaciones en el límite, antes de que los datos malos se propaguen.
  • Sin versionado — cada cambio se convierte en una emergencia; versiona y depreca con gracia.
  • additionalProperties sin restricción cuando se necesita rigurosidad — campos inesperados se cuelan; establécela en false donde corresponda.
  • Sin propietario — un lote rechazado sin a quién llamar detiene el pipeline.
  • Cambios disruptivos sin tiempo de aviso — coordina productor/consumidor mediante esquemas versionados y una ventana de desaprobación.

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 relacionados