talend_52Tid er en av de vanligste dimensjonene i et datavarehus. En godt strukturert kalender kan brukes som dimensjon i alle relevante stjerne-skjemaer og knyttes til de fleste faktatabeller. Ved å bruke Talend Open Studio for Data Integration (TOS/DI) til dette har man en generator som kan gjenbrukes og kobles mot de fleste databaser. TOS/DI er fri og åpen programvare, og kan lastes ned fra denne lenken: http://www.talend.com/download.php

Velkomstbildet som dukker opp når man starter opp TOS, gir et enkelt overblikk over prosessen:

welcome

Selve IDE-grensesnittet vil se gjenkjennelig ut for alle som har vært borte i Eclipse. Komponentene vi skal bruke drar vi fra høyrekolonnen over til midtfeltet. Nedre felt inneholder komponent-parametre, logger, kontekst-variabler osv.

ide

Klikk på bildet for full størrelse

 

Og slik kan vi enkelt lage en tids-dimensjonen med TOS/DI:

 (En del av skjermbildene i innlegget er forminsket for å passe inn på siden – klikk på bildet for å få en større versjon).

create_note

Først oppretter vi en ny jobb, og kanskje setter inn et notat på siden som sier litt om hva jobben gjør:  «Lager en Mysql-tabell med data for tids-dimensjonen».  Notater finnes under Misc -> noteDet dras og slippes i midtfeltet, klikkes på og skrives til.

 

 

trowgenerator

Det første steget i selve jobbdefinisjonen er å dra en tRowGenerator over fra høyre-feltet til midt-feltet. Denne bruker vi til å generere rader i tabellen, og den ligger også under Misc. Ved å klikke på navnefeltet under ikonet, endrer vi navnet til Lag Datorekke. Hver rad inneholder kun et enkelt felt – en dato.  Jeg skal vise nedenfor hvordan vi setter den opp slik at resultatet blir slik.


tmapVi trenger også en tMap, som vi finner under Processing -> tMap, så vi drar en slik over i midtfeltet også. Vi endrer navnet på denne til Lag tabellstruktur og fyll med data. tMap er en meget anvendelig komponent, som gjør at vi kan «mappe» f.eks. datoene vi har generert til ulike felter i en mySql-database, hvor en dato mappes til flere felt med ulik informasjon, f.eks. ukenummer, ukedag, månedsnavn osv.

mysql_ouputDen siste komponenten er en tMysqlOutput, som ligger under Databases -> tMysqlOutput. Denne brukes til å lagre dataene i en spesifisert database. Databasen oppretter vi utenfor TOS, men tMysqlOutput kan opprette nye tabeller i en gitt database.

 

 

Midtfeltet i Talend Open Studio ser nå slik ut:

Det vil si etter at jeg har koblet komponentene sammen ved å høyreklikke på de to første  velge henholdsvis Row -> Main og Row -> New Output.

oppsett

Som oppsettet viser, vil denne jobben 1) lage en rekke med datoer, 2) konvertere («mappe») disse til en MySql tabellstruktur og 3) Lagre dataene i en MySql-database. For å få dette til må hver komponent konfigureres til å gjøre dette slik vi vil ha det. La oss begynne med å lage en rekke med datoer. Et dobbeltklikk på «Lag Datorekke» gir dette skjermbildet:

rowparameters

Her har jeg lagt til en kolonne jeg har kalt Dato, som har type: Date. Jeg har lagt til en funksjon: addDate, og satt at funksjonen skal kjøres med disse parameterne:

date: context.minStartDato
nb: Numeric.sequence(«s1»,1,1)-1
dateType: «dd»

Først – variablen minStartDato  er en kontekst-variabel jeg skal lage senere, som gjør at jeg kan sette en startdato for datorekken når jeg kjører jobben.  Jeg refererer til variablen med context.minStartDato. For noen datavarehus holder det med en startdato som er 1 år gammel, mens for andre må vi 10 år tilbake i tid. Som vist på skjermbildet, har jeg satt generatoren til å lage 100 000 datoer fra startdatoen. Det burde holde en stund… Det er en innebygd sequence-builder som kan brukes til å sette opp den numeriske sekvensen vi skal bygge.  -1 til slutt angir at vi vil beholde den opprinnelige datoen, dvs. at sekvensen starter på den datoen vi angir, og ikke dagen etter. dateType = «dd» betyr at det skal legges til en dag for hver rad. Du kan klikke Preview for å se at det lages en rekke datoer, og så OK. Det lønner seg å lagre alle skjemainnstillinger i Talend, og spesielt her, for instillingene bevares ikke til senere. Klikk ikonet med mappe og pil nedover for å lagre skemaet i xml-format. Du kan så laste det inn senere ved å klikke ikonet med mappe og pil oppover.

Neste trinn er å «mappe» rekken av datoer til meningsfylte felter i en MySql-database.  Disse feltene kan jeg definere ved å dobbeltklikke på komponenten tMap (som nå heter: Lag tabellstruktur og fyll med data). Dette skjermbildet kommer opp:

mapwindow

Det vil si uten feltene, som jeg nå skal legge inn. Det gjør jeg ved å klikke det grønne + tegnet nederst på høyresiden av bildet. Et nytt felt legges til som jeg så kan definere. F.eks. har jeg her lagt til et felt date3EN, som er et tekstfelt på 255 tegn som skal inneholde dagens navn med 3 bokstaver på engelsk (mon, tue, wed,  etc):

felter

Formatet på det som skal settes inn i feltet angir jeg ovenfor, med en formateringsstreng: TalendDate.formatDate(«EEE»,row1.Dato). Dette betyr enkelt at feltet skal inneholde datoen formatert med EEE, dvs. 3 bokstaver.  Man kan bruke en Expression Builder  til å sette opp datoformateringene, som på bildet under. Bare husk å bytte ut myDate med vår variabel, som heter row1.Dato.

Her er en liste over Java Data-formater: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

Det er også her smart å lagre skjemaet som en xml-fil med ikonet som har mappe og pil nedover (over og til venstre for OK-knappen)

datoformatering

Neste trinn er å bestemme hvilken database datoene skal lagres til. Ved å dobbeltklikke på den siste komponenten i oppsettet vårt – Lagre MySql-tabellen –  vises komponent-bildet nederst på skjermen:

mysql_parameters

Her er det bare å sette inn parameterne til den databasen du vil lagre tabellen i. Du kan velge Drop table if exists and create som handling for tabellen, slik at du kan kjøre jobben flere ganger, hvis du ikke er fornøyd med resultatet den første gangen.

Det eneste vi mangler nå, er en kontekst-variabel som heter minStartDato. Den lager vi her:

context_variables

Ved å huke av boksene, popper det opp en vindu hvor vi kan angi startdatoen hver gang vi kjører jobben. Hvis ikke, brukes default-verdien vi har satt inn.  Ved å klikke fanekortet Variables kommer det et + tegn til syne nederst i bildet, som vi klikker på for å legge til en variabel. Kontekst-variabler er nyttige og kan også f.eks. lages for database-parametrene, så vi kan bruke dem omigjen.

Til sist kjøres jobben – enten ved å taste F6 eller ved å klikke Run fra feltet nederst på siden. Datapop3

Jobben oppdateres med resultatene fra kjøringen, slik:

resultatet

Som vi ser, tok det 22,5 sekunder å lage de 100 000 radene og 23,01 sekunder å lagre dem i databasen. Resultatet kan vi se, f.eks. i phpMyAdmin:

mysql_tabellen

Her er det felter for engelsk, fransk og nynorsk, for å illustrere mulighetene.

Avsluttende kommentarer
Dette var en kort introduksjon til  TOS (Talend Open Studio), og som vi har sett er det både fleksibelt og brukervennlig – og ikke minst inneholder det en utrolig mengde komponenter.  Vi kunne lagret resultatet i en Excel-fil, sendt det som et vedlegg til en epost eller gjort diverse andre ting med det. Alle komponentene er detaljert beskrevet i en dokumentasjon på nesten 2000 sider. Talend har også lagt ut noen nyttige «kom-igang»-artikler på åpningssiden sin (se lenken nedenfor).

Nyttige lenker:

http://www.talend.com
http://www.talendforge.com  (community-sider med bl.a. tilleggs-komponenter)

Big Data Business Intelligence
Axenna kan Hadoop, Talend, MongoDB, Cassandra og SpagoBI - og hjelper gjerne til for at din satsning på Big Data skal bli en suksess. Les mer
Profesjonell konsulenthjelp
Våre eksperter omdanner dine data til tilgjengelig kunnskap med effektiv og åpen teknologi. Les mer
Kurs og opplæring
Axenna tilbyr opplæring gjennom ITFakultetet.no med sentrale lokaler i Oslo sentrum og online e-læringsportal. Gå til ITFakultetet.no