Datakontrakt

Innen dataforvaltning er en **datakontrakt** en avtale mellom dataprodusenter og dataforbrukere. Den inneholder et detaljert skjema som skaper en kobling mellom virksomhet (logisk representasjon av dataene) og teknologi (dens fysiske implementering). En datakontrakt beskriver også avanserte metadata, for eksempel regler for datakvalitet, tjenestenivåavtale og atferd. Datakontrakter kan ha flere former, men YAML-filer er svært vanlig.

Prosjektet Bitol fra Linux Foundation har publisert en standard for datakontrakter kalt *Open Data Contract Standard* (ODCS). Per april 2025 var nåværende versjon 3.0.2.

## Historie
I desember 2021 skrev Andrew Jones hos GoCardless om hvordan de brukte datakontrakter, og i oktober 2022 skrev han om implementeringen av dem.

I august 2022 publiserte Jean-Georges Perrin en populær referanseartikkel i PayPal Technology Blog der han beskriver bruken av datakontrakter i en datamaske-implementering. I mai 2023 lanserte PayPal sin datakontraktmal med åpen kildekode.

I juni 2023 publiserte Andrew Jones boken *Driving Data Quality with Data Contracts: A comprehensive guide to building reliable, trusted, and effective data platforms* som den første publiserte boken om emnet.

I november 2023 ga Bitol, et prosjekt av Linux Foundation, ut den første versjonen av *Open Data Contract Standard* (ODCS), en kompatibel forgrening (*fork*) fra PayPal-malen.

I september 2024 skrev Ronald Angel hos Miro om implementeringen av datakontrakter.

I oktober 2024 lanserte Bitol ODCS v3.0.0 med forbedret støtte for datakvalitet.

## Implementering
Det Apache 2.0-baserte Bitol-prosjektet deler datakontrakter inn i flere seksjoner:

* **Grunnleggende** (*fundamentals*): Inneholder generell informasjon om kontrakten, som navn, domene, versjon og mye plass til informasjon.
* **Skjema** (*schema*): Beskriver datasettet og skjemaet for datakontrakten. Skjemaet er et kritisk element i kontrakten, siden det er støtten for datakvalitet. En datakontrakt fokuserer på et enkelt datasett med flere tabeller (og selvsagt kolonner).
* **[[Datakvalitet]]** (*data quality*): Beskriver datakvalitetsregler og deres parametere. De er tett knyttet til skjemaet som er definert i datasett- og skjemadelen.
* **Prising** (*pricing*): Forklarer prissetting hvis/når det er behov for å fakturere kunder for bruk av dette dataproduktet, enten kunden er intern eller ekstern.
* **Lag** (*team*) : Viser interessenter og historien om deres forhold til denne datakontrakten. Forbrukere er vanligvis ikke inkludert.
* **Roller** (*roles*): Viser rollene en forbruker kan trenge for å få tilgang til datasettet, avhengig av hvilken type tilgang de trenger.
* **[[Tjenestenivåavtale]]** (*service-level agreement*): Beskriver tjenestenivåavtalene. Data, datakvalitet og SLA kombineres sammen som data-tjenestekvalitet.
* **Infrastruktur** (*infrastructure*): Beskriver tjenere og lagring i potensielt flere miljøer som produksjon, utvikling, testing og så videre.
* **Forretningsregler** (*business rules*): Beskriver reglene knyttet til organisasjonens forretningsregler.
* **Tilpassede egenskaper** (*custom properties*): Dekker spesialtilpasninger og andre egenskaper i en datakontrakt ved hjelp av en liste over nøkkel-verdipar. Denne strukturen gir fleksibilitet uten at det kreves opprettelse av en ny versjon av standarden når noen trenger flere egenskaper.

## Produktorientert datateknikk og forvaltning
Datakontrakter blir stadig mer populære ettersom dataprodukter får stadig større fotfeste.

## Mønsterpraksis
Vanligvis opprettes en datakontrakt av én dataprodusent for én eller mange dataforbrukere.

En datakontrakt er utformet for å forbedres interativt. Dataingeniører kan starte med de få elementene i overskriften og skjemaet. Over tid kan dataingeniører og eiere legge til mer informasjon, som datakvalitet og tjenestenivåavtale.

De fleste datakontrakter implementeres ved hjelp av en YAML-fil, som er både lesbar av mennesker og datamaskiner, og er språkagnostisk.

Symbolet for en datakontrakt er enten et filikon eller en likesidet trekant rotert 90 grader (som symboliserer skjema, forretningsmessig betydning og tjenestenivåavtaler)  eller et filikon.

## Referanser