Wissen

Was ist ein Data Contract?

Data-Contract-Diagramm mit Data Provider, Data Contract und Data Consumer

Ein Data Contract ist ein Dokument, das die Ownership, Struktur, Semantik, Qualität und Nutzungsbedingungen für den Austausch von Daten zwischen einem Data Producer und seinen Consumern definiert. Wie eine API, nur für Daten.

Warum Data Contracts?

Organisationen kämpfen mit unzureichenden Metadaten und fragilen Datenpipelines, die durch Änderungen in vorgelagerten Systemen brechen, mit schlechter Kommunikation zwischen Data Producern und Data Consumern und mit Data Engineers, die von konkurrierenden Anforderungen überfordert sind. Data Contracts lösen diese Probleme, indem sie explizite Erwartungen an Daten entlang folgender Dimensionen festlegen:

  • Ownership: Verantwortung für die Bereitstellung korrekter Daten
  • Schema: Spaltennamen, Datentypen, Struktur
  • Semantik: Beschreibungen und fachliche Bedeutung
  • Qualität: Validierungsregeln, Aktualität, Vollständigkeit
  • Nutzungsbedingungen: Nutzungsrechte, SLAs, Zugriffsrichtlinien

Data Contracts sind ein Kommunikationswerkzeug, um ein gemeinsames Verständnis darüber auszudrücken, wie Daten strukturiert und interpretiert werden sollen. Data Producers und Data Consumers können sie gemeinsam erarbeiten, sogar bevor das Datenprodukt implementiert ist (Contract-First-Ansatz). In Entwicklung und Produktion dienen sie als Grundlage für Codegenerierung, Tests, Schema-Validierungen, Qualitätsprüfungen, Monitoring und Computational Governance, um sicherzustellen, dass Datenprodukte die vereinbarten Erwartungen erfüllen.

Open Data Contract Standard (ODCS)

Der Open Data Contract Standard (ODCS) ist der offene Standard für die Definition von Data Contracts in einem maschinenlesbaren YAML-Format. Ursprünglich als Data Contract Template bei PayPal entwickelt, wird er heute von Bitol, einem Projekt der Linux Foundation AI & Data, gepflegt.

Hier ein vereinfachtes Beispiel eines ODCS-Data-Contracts:

apiVersion: v3.1.0
kind: DataContract
id: orders
name: Orders
version: 1.0.0
status: active
description:
  purpose: "Provides order and line item data for analytics and reporting"
  usage: "Used by analytics team for sales analysis and business intelligence"
  limitations: "Contains only the last 2 years of data"
  customProperties:
    - property: "sensitivity"
      value: "secret"
      description: "Data contains personally identifiable information"
  authoritativeDefinitions:
    - url: "https://entropy-data.com/policies/gdpr-compliance"
      type: "businessDefinition"
      description: "GDPR compliance policy for handling customer data"
schema:
  - name: orders
    physicalType: TABLE
    description: All historic web shop orders since 2020-01-01. Includes successful and cancelled orders.
    properties:
      - name: order_id
        logicalType: string
        description: The internal order id for every orders. Do not show this to a customer.
        businessName: Internal Order ID
        physicalType: UUID
        examples:
          - 99e8bb10-3785-4634-9664-8dc79eb69d43
        primaryKey: true
        classification: internal
        required: true
        unique: true
      - name: customer_id
        logicalType: string
        description: A reference to the customer number
        businessName: Customer Number
        physicalType: TEXT
        examples:
          - c123456789
        required: true
        unique: false
        logicalTypeOptions:
          minLength: 10
          maxLength: 10
        authoritativeDefinitions:
          - type: definition
            url: https://example.com/definitions/sales/customer/customer_id
        tags:
          - pii:true
        classification: internal
        criticalDataElement: true
      - name: order_total
        logicalType: integer
        description: The order total amount in cents, including tax, after discounts.
          Includes shipping costs.
        physicalType: INTEGER
        examples:
          - "9999"
        quality:
          - type: text
            description: The order_total equals the sum of all related line items.
        required: true
        businessName: Order Amount
      - name: order_timestamp
        logicalType: timestamp
        description: The time including timezone when the order payment was successfully
          confirmed.
        physicalType: TIMESTAMPTZ
        businessName: Order Date
        examples:
          - "2025-03-01 14:30:00+01"
      - name: order_status
        businessName: Status
        description: The business status of the order
        logicalType: string
        physicalType: TEXT
        examples:
          - shipped
        quality:
          - type: library
            description: Ensure that there are no other status values.
            metric: invalidValues
            arguments:
              validValues:
                - pending
                - paid
                - processing
                - shipped
                - delivered
                - cancelled
                - refunded
            mustBe: 0
    quality:
      - type: library
        metric: rowCount
        mustBeGreaterThan: 100000
        description: If there are less than 100k rows, something is wrong.
  - name: line_items
    physicalType: table
    description: Details for each item in an order
    properties:
      - name: line_item_id
        logicalType: string
        description: Unique identifier for the line item
        physicalType: UUID
        examples:
          - 12c9ba21-0c44-4e29-ba72-b8fd01c1be30
        logicalTypeOptions:
          format: uuid
        required: true
        primaryKey: true
      - name: sku
        logicalType: string
        businessName: Stock Keeping Unit
        description: Identifier for the purchased product
        physicalType: TEXT
        examples:
          - 111222333
        required: true
      - name: price
        logicalType: integer
        description: Price in cents for this line item including tax
        physicalType: INTEGER
        examples:
          - 9999
        required: true
      - name: order_id
        required: false
        primaryKey: false
        logicalType: string
        physicalType: UUID
        relationships:
          - type: foreignKey
            to: orders.order_id
servers:
  - server: production
    environment: prod
    type: postgres
    host: aws-1-eu-central-2.pooler.supabase.com
    port: 6543
    database: postgres
    schema: dp_orders_v1
team:
  name: sales
  description: This data product is owned by the "Sales" team
  members:
    - username: john@example.com
      name: John Doe
      role: Owner
  authoritativeDefinitions:
    - type: slack
      url: https://slack.example.com/teams/sales
roles:
  - role: analyst_us
    description: Read access for analytics to US orders
  - role: analyst_eu
    description: Read access for analytics to EU orders
slaProperties:
  - property: availability
    value: 99.9%
    description: Data platform uptime guarantee
  - property: retention
    value: "1"
    unit: year
    description: Data will be deleted after 1 year
  - property: freshness
    value: "24"
    unit: hours
#    element: orders.order_timestamp # enable this to check freshness with Data Contract CLI
    description: Within 24 hours of order placement
  - property: support
    value: business hours
    description: Support only during business hours
price:
  priceAmount: 0
  priceCurrency: USD
  priceUnit: monthly
tags:
  - e-commerce
  - transactions
  - pii
customProperties:
  - property: dataPlatformRole
    value: role_orders_v1
contractCreatedTs: "2025-01-15T10:00:00Z"

Mehr zur vollständigen Spezifikation, zu Beispielen und Tooling findest du unter datacontract.com.

Tooling

Die Data Contract CLI ist ein Open-Source-Kommandozeilen-Tool für die Arbeit mit Data Contracts. Damit lassen sich Contracts linten und validieren, Datenquellen anbinden, um Schema- und Qualitätstests auszuführen, Breaking Changes in CI/CD-Pipelines erkennen und in verschiedene Formate exportieren.

Der Data Contract Editor von Entropy Data ist ein browserbasierter Editor zum Erstellen von Data Contracts mit Live-Vorschau und Validierung.

Data Contracts mit Entropy Data verwalten

Entropy Data bietet eine webbasierte Plattform, um Datenprodukte, Data Contracts und Datennutzungsvereinbarungen im Self-Service zu verwalten. Eine event-basierte API ermöglicht die nahtlose Integration in jede Datenplattform, und jede Änderung wird in einem Audit-Trail protokolliert.

Screenshot eines Data Contracts in Entropy Data

Zu den Funktionen zählen ein Datenprodukt-Katalog, Anfrage- und Freigabeworkflows für Datennutzungsvereinbarungen, automatisiertes Berechtigungsmanagement und die Visualisierung deines Data Mesh als interaktive Karte.

Kostenlos registrieren oder die interaktive Demo ausprobieren.