🎯 Definicja
Kontrakt Danych to umowa między producentem danych (np. zespołem backendowym wystawiającym mikroserwis) a konsumentem (np. zespołem Data Engineering). Umowa ta precyzuje schemat danych (kolumny, typy), SLA (terminowość) i semantykę. Każda zmiana w kontrakcie (np. usunięcie kolumny) wymaga renegocjacji lub ostrzeżenia.
🔑 Kluczowe punkty
- Problem: “Breaking Changes”. Programista zmienia nazwę kolumny w bazie, raporty CEO przestają działać.
- Rozwiązanie: Kontrakt blokuje taką zmianę (testy CI/CD) lub wymusza jej wersjonowanie.
- Implementacja: Często realizowane przez Schema Registry (np. w Kafka zapobieganie zmianom niekompatybilnym) lub pliki YAML/JSON Schema w repozytorium.
📚 Szczegółowe wyjaśnienie
Bez kontraktów: Inżynieria Danych jest “Sprzątaczem”, który musi naprawiać pipeliny po cichych zmianach w źródłach. Z kontraktami: Dane są traktowane jak Produkt (API). Tak jak nie zmienia się publicznego API bez ostrzeżenia, tak nie zmienia się struktury danych wylatujących z serwisu.
💡 Przykład zastosowania
Firma e-commerce.
Kontrakt Orders v1: { order_id: int, total: decimal }.
Programista chce zmienić total na total_amount.
System CI/CD (np. Data Mesh governance) odrzuca ten commit z błędem: “Naruszenie kontraktu danych Orders v1. Zmiana niekompatybilna wstecznie. Utwórz wersję v2 lub uzgodnij migrację.”
📌 Źródła
- “Data Contracts” - Chad Sanderson.
👽 Brudnopis
- To kluczowy element architektury Data Mesh.
- Przesuwa odpowiedzialność za jakość danych “w lewo” (Shift Left) - do źródła.