Datatransformasjon

**Datatransformasjon**, eller bare **transformasjon**, er en prosess innen databehandling hvor man konverterer data fra en struktur eller format til en annen struktur eller format. Det er en grunnleggende del i det meste av dataintegrasjon, og er vanlig i databehandlingsoppgaver som dataavstemming, dataintegrasjon, applikasjonsintegrasjon og operasjoner i datavarehus.

## Kompleksitet
Datatransformasjon kan være enkel eller kompleks basert på hvilke endringene som kreves for dataene mellom den går fra kildesystemet og målsystemet. Transformasjon utføres vanligvis via en blanding av manuelle og automatiserte steg. Verktøy og teknologier brukt til datatransformasjon kan variere mye basert på format, struktur, kompleksitet og volum på dataene som transformeres.

## Transformasjoner ved grunndata-omarbeiding
En grunndata-omarbeiding er en spesiell form for datatransformasjon hvor hele databasen med dataverdier transformeres eller omarbeides uten å trekke ut dataene fra databasen. Alle data i en velutformet database er direkte eller indirekte relatert til en begrenset mengde med grunn-databasetabeller ved hjelp av et nettverk av begrensninger for fremmednøkler. Hver fremmednøkkelbegrensning er avhengig av en unik databaseindeks fra den overordnede databasetabellen. Når den riktige hoved-databasetabellen omarbeides med en annen unik indeks, så skal dette medføre at de direkte og indirekte relaterte dataene også omarbeides. De direkte og indirekte relaterte dataene kan også fremdeles vises i den opprinnelige formen siden den opprinnelige unike indeksen fremdeles eksisterer med grunndataene. Omarbeiding av database må også gjøres på en slik måte at det ikke påvirker applikasjonsarkitektur-programvare.

Når dataavbildningen er gjøres indirekte via en formidlende datamodell kalles prosessen kalles også **dataformidling**.

## Transformasjonsprosessen
Datatransformasjon kan deles inn i følgende steg, hvor nødvendigheten av de enkelte stegene avhenger av kompleksiteten som kreves i transformasjonen:

* Dataoppdagelse
* Dataavbildning
* Kodegenerering
* Kodekjøring
* Datagjennomgang

Disse stegne er ofte i fokus for utviklere eller tekniske dataanalytikere som kan bruke flere spesialiserte verktøy for å utføre oppgavene sine.

Stegene kan beskrives som følger:

**Dataoppdagelse** er det første steget i transformasjonsprosessen. Vanligvis profileres dataene ved hjelp av profileringsverktøy eller noen ganger ved hjelp av manuelt skrevne profileringsskript for bedre å forstå strukturen og egenskapene til dataene og finne ut hvordan de må transformeres.

**Dataavbildning** er prosessen med å definere hvordan individuelle felter avbildes, modifiseres, skjøtes, filtreres, aggregeres, og så videre, for å gi det ønskede sluttresultatet. Utviklere eller tekniske dataanalytikere utfører tradisjonelt dataavbildning siden de jobber med de spesifikke teknologiene for å definere transformasjonsreglene (for eksempel ETL-vektøy eller transformasjonsspråk).

**Kodegenerering** er prosessen med å generere kjørbar kode (for eksempel SQL, Python, R eller andre kjørbare instruksjoner) som kan transformere dataene basert på de ønskede og definerte dataavbildnings-reglene. Vanligvis genererer transformasjonsteknologiene denne koden basert på definisjonene eller metadataene definert av utviklerne.

**Kodekjøring** er steget der den genererte koden utføres mot dataene for å gi det ønskede resultatet. Koden som kjøres kan være tett integrert med transformasjonsverktøyet, eller kan kreve separate steg av utvikleren for å kjøre den genererte koden manuelt.

**Datagjennomgang** er det siste steget i prosessen, og fokuserer på å sikre at utdataene oppfyller transformasjonskravene. Det er vanligvis forretningsbrukeren eller den endelige sluttbrukeren av dataene som utfører dette steget. Eventuelle avvik eller feil i dataene som blir funnet og kommuniseres tilbake til utvikleren eller dataanalytikeren som endringsforespørsler eller nye krav som skal implementeres i transformasjonsprosessen.

## Typer transformasjoner

### Satsvis datatransformasjon
Tradisjonelt har datatransformasjon vært en satsvis prosess hvor utviklere skriver kode eller implementerer transformasjonsregler i et dataintegrasjonsverktøy og deretter kjører den koden eller disse reglene på store datamengder. Denne prosessen kan følge de lineære stegene som beskrevet om generelle transformasjonsprosesser ovenfor.

Satsvis transformasjon er hjørnesteinen i praktisk talt alle integrasjonsteknologier som datavarehus, datamigrering og applikasjonsintegrasjon.

Når data må transformeres og leveres med lav latens brukes ofte begrepet mikrosats (*microbatch*). Dette refererer til at det behandles små grupper med data (for eksempel et lite antall rader eller en liten mengde dataobjekter) som demed kan behandles veldig raskt og leveres til målsystemet når det trengs.

### Fordeler med satsvis datatransformasjon
Tradisjonelle transformasjonsprosesser har vært en arbeidshest for selskaper i flere tiår. De ulike verktøyene og teknologiene (dataprofilering, datavisualisering, datavask, dataintegrasjon, og så videre) har modnet, og de fleste (om ikke alle) virksomheter transformerer enorme datamengder som mater interne og eksterne applikasjoner, datavarehus og andre datalagre.

### Begrensninger av tradisjonell datatransformasjon
Den tradisjonelle transformasjonsprosessen har også begrensninger som hemmer den generelle effektiviteten og effekten.

Menneskene som trengs for å bruke dataene (for eksempel forretningsbrukere) spiller ikke en direkte rolle i transformasjonsprosessen. Vanligvis gir brukerne transformasjonsoppgaven til utviklere som har de nødvendige tekniske eller kodeferdighetene for å definere transformasjonene og utføre dem på dataene.

Denne prosessen gjør at mesteparten med å definere de nødvendige transformasjonene lempes over på utvikleren som ofte ikke har den samme domenekunnskapen som forretningsbrukeren. Utvikleren tolker kravene til forretningsbrukeren og implementerer den relaterte koden eller logikken. Dette steget har potensial til å introdusere feil i prosessen (gjennom feiltolkede krav), og øker også tiden for å komme frem til en løsning på forretningsproblemet.

Dette problemet har gitt opphav til behovet for smidighet og selvbetjening innen dataintegrasjon (altså styrke brukeren av dataene sine datakunnskaper og gjøre dem i stand til å transformere dataene selv interaktivt).

Det finnes selskaper som tilbyr verktøy for selvbetjening av datatransformasjon. De tar sikte på å effektivt analysere, kartlegge og transformere store datamengder uten å kreve den tekniske kunnskapen og prosesskompleksiteten som vanligvis kreves. Mens disse selskapene på underliggende nivå leverer tradisjonell satsvis transformasjon så muliggjør verktøyene deres en presentasjon som er mer interaktiv for brukerne gjennom å bruke visuelle plattformer og enkle skript som gjenbrukes.

Likevel kan det være noen kompatibilitetsproblemer (som for eksempel at nye datakilder som tingenes internett (IoT) ikke fungerer korrekt med eldre verktøy) og samsvarsbegrensninger på grunn av forskjeller i datastyring-, preparering- og revisjonspraksis.

### Interaktiv datatransformasjon
Interaktiv datatransformasjon (IDT) er en type datatransformasjon som gir et grafisk grensesnitt for datatransformasjoner, og dermed kan legge til rette for transformasjoner av analytikere og forretningsbrukere med begrenset teknisk kompetanse. Verktøyet kan tolke egenskapene til dataene (via automatisert dataprofilering eller visualisering), og brukes for å endre eller korrigere dataene gjennom enkle brukerinteraksjoner som ved å klikke eller velge bestemte elementer i dataene.

Selv om interaktiv datatransformasjon følger de samme integrasjonsstegene som satsvis integrasjon er det en hovedforskjell i at stegene ikke nødvendigvis følges på en lineær måte og vanligvis ikke krever betydelige tekniske ferdigheter for å utføres.

Det finnes en rekke selskaper som tilbyr interaktive verktøy for datatransformasjon, eksempelvis oppstartsselskaper som Trifacta, Alteryx og Paxata. De tar sikte på å gi effektiv analyse, avbildning og transformasjon av store datamengder samtidig som de abstraherer bort noe av den tekniske kompleksiteten og prosessene som foregår under panseret.

Løsninger for interaktiv datatransformasjon tilbyr et integrert visuelt grensesnitt som kombinerer eller gjør det lettere å hoppe mellom de tidligere adskilte stegene i dataanalyse, dataavbildning og kodegenerering/-kjøring og datainspeksjon. Altså, hvis det gjøres endringer på ett steg (som for eksempel endring av navn på en variabel) vil programmet automatisk oppdatere de andre foregående og påfølgende stegene tilsvarende. Grensesnitt for interaktiv datatransformasjon inkluderer visualisering for å vise brukeren mønstre og avvik i dataene slik at de visuelt kan identifisere feilaktige eller ekstreme verdier.

Når brukeren er ferdig med å transformere dataene kan systemet generere kjørbar kode eller logikk som gjenbrukes på lignende datamengder.

Ved å fjerne utvikleren fra prosessen kan interaktiv transformasjon bidra til å forkorte tiden som trengs på forberedelse og transformasjon av dataene, eliminere kostbare feil i tolkning av brukerkrav og gi forretningsbrukere og analytikere muligheten til å kontrollere dataene sine og samhandle med dem etter behov.

## Transformasjonsspråk
Det finnes mange programmeringsspråk som er egnet for å utføre datatransformasjoner. Mange transformasjonsspråk krever en formell grammatikk. I mange tilfeller er grammatikken strukturert etter et mønster som ligner Backus-Naur-formen (BNF).

Noen eksempler på transformasjonsspråk inkluderer:

* Awk, et av de eldste og mest populære tekstdatatransformasjonsspråkene
* Perl, et språk på høyt nivå med både prosedyre- og objektorientert syntaks som er i stand til kraftfulle operasjoner på binære eller tekstdata
* Malsystem-språk, spesialisert for å transformere data til dokumenter (se også malprosessor)
* TXL, språkbaserte beskrivelser for prototyping, brukt til kildekode eller datatransformasjoner
* XSLT, standardspråket for XML-transformasjoner (egnet med XQuery i mange applikasjoner)

I tillegg har selskaper som Trifacta og Paxata utviklet domenespesifikke transformasjonsspråk (DSL-er) for vedlikehold og transformering av datamengder. Utviklingen av domenespesifikke språk har vært knyttet til økt produktivitet og tilgjengelighet for ikke-tekniske brukere. Trifacta sin "Wrangle" er et eksempel på et slikt domenespesifikt språk.

En annen fordel med trenden av domenespesifikke transformasjonsspråk er at de kan abstrahere den underliggende utførelsen av logikken som er definert av det domenespesifikke transformasjonsspråket. De kan også bruke den samme logikken med forskjellige prosesseringsmotorer som for eksempel SPARK, MapReduce og Dataflow. Altså, med domenespesifikke transformasjonsspråk er ikke transformasjonsspråket knyttet til den underliggende motoren.

Selv om transformasjonsspråk vanligvis er best egnet for transformasjon så kan noe så enkelt som vanlige regulære uttrykk brukes for å oppnå en nyttig transformasjon. Tekstredigeringsprogrammer som vim, emacs eller TextPad støtter bruk av regulære uttrykk med argumenter. Dette vil tillate at alle forekomster av et bestemt mønster erstattes med et annet mønster ved bruk av deler av det originale mønsteret. Eksempelvis kan uttrykkene:


```
foo ("some string", 42, gCommon);
bar (someObj, anotherObj);

foo ("another string", 24, gCommon);
bar (myObj, myOtherObj);
```


Gjøres om til en mer kompakt form som:
 foobar("some string", 42, someObj, anotherObj);
 foobar("another string", 24, myObj, myOtherObj);

Med andre ord vil alle forekomster av et funksjonskall av foo med tre argumenter etterfulgt av et funksjonskall med to argumenter bli erstattet med et enkelt funksjonskall ved hjelp av noen eller alle de opprinnelige argumentene.

En annen fordel med å bruke regulære uttrykk er at de ikke vil feile "nulltransformasjonstesten". Testen vil si at man bruker et valgt transformasjonsspråk og kjører et prøveprogram gjennom en transformasjon som ikke utfører noen transformasjoner. Mange transformasjonsspråk vil feile denne testen.

## Se også
* Dataavbildning
* Dataavstemming
* Dataintegrasjon
* Datapreparering
* Datavask
* Informasjonsintegrasjon
* Uttrekk, transformasjon og lasting (ETL)

## Referanser


## Eksterne lenker
* File Formats, Transformation, and Migration, en relatert Wikiversity-artikkel