ETL-DEMO Esimerkki ETL-kuvauskielen käyttöstä
Lähtötilanne Organisaation operatiivisessa kannassa dataa, jota halutaan varastoida ja jalostaa Päätetään mihin muotoon jalostettu data halutaan tietovarastossa Luodaan tältä pohjalta ETL-prosessi, joka tuottaa tietovarastoon halutunlaista informaatiota
Esimerkki Myymäläketjulla on seuraavanlainen operatiivinen kanta: Tuote(tkoodi, kuvaus, hinta) ; Jokaisesta tuotteesta kuvaus ja hinta Myymala(mtunnus, osoite) ; Jokaisen myymälän tunnus ja osoite Myynti(tkoodi, mtunnus, ajankohta) ; Jokaista myytyä tuotetta kohden yksi rivi Myymäläketjun johto haluaa päivittäiset myyntitiedot myymälöittäin ja tuotteittain Laskenta tulee tapahtua joka yö kello 24:00 Ohjelmistoarkkitehti suunnittelee ETL-prosessin (Skeema SD-1)
Esimerkki: Extract Haetaan prosessoitavat tiedot operationaalisesta tietokannasta työskentelykantaan <etl xmlns:xsi="http://wwww3org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="skema stromxsd"> <etlprocess name="myynnit1" workingdatabaseid="tyokanta"> <operations> <!-- Haetaan aluksi kopiot tauluista "snapshotmaisesti" operationaalisesta kannasta --> <importsql name="tuotteet" sourcetable="tuote" sourcedatabaseid="kirjanpito"/> <importsql name="myymalat" sourcetable="myymala" sourcedatabaseid="kirjanpito"/> <importsql name="myynnit" sourcetable="myynti" sourcedatabaseid="kirjanpito"/>
Esimerkki: Transform <!-- Suodatetaan viimeisimmän vuorokauden aikana myydyt tuotteet --> <filter name="viimeisimmat" source="myynnit" where="ajankohta >= (now() - INTERVAL 1 DAY)"/> <!-- Tehdään liitos, jossa tuotteet --> <join name="liitos"> <table source="tuotteet"/> <table source="myymalat"/> <table source="viimeisimmat"/> </join> <!-- Lasketaan myynnit tuotteittain ja myymälöittäin --> <aggregate source="liitos" name="myyntituotteittain" groupby="tkoodi"> <column expression="kuvaus" name="kuvaus"/> <column expression="sum(hinta)" name="summa"/> </aggregate> <aggregate source="liitos" name="myyntimyymaloittain" groupby="mkoodi"> <column expression="mtunnus" name="mtunnus"/> <column expression="sum(hinta)" name="summa"/> </aggregate>
Esimerkki: Load Lopuksi muodostunut taulu viedään työtilasta tietovarastoon <!-- Viedään lasketut taulut tietovarastoon --> <export source="myyntituotteittain" destinationdatabaseid="tietovarasto" destinationtable="paivanmyyntituotteittain"/> <export source="myyntimyymaloittain" destinationdatabaseid="tietovarasto" destinationtable="paivanmyyntimyymaloittain"/> </operations> </etlprocess>
Asennus Asentaja luo konfiguraatiotiedoston (Skeema SA-1) Määritetään ETLprosessissa käytettävät tietokannat Käytettäville kannoille määritetään tunnus, johon prosessikuvauksesta viitataan <?xml version="10" encoding="utf-8"?> <etl xmlns:xsi="http://wwww3org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="skema stromxsd"> <!-- Määritellään ETL-prosessissa käytettävät tietokannat --> <configuration> <database id="kirjanpito"> <url>jdbc:mysql://databasefirmacom/kirjanpito</url> <type>mysql</type> <username>teemu</username> <password>d3f0lrpbmq</password> </database> </configuration> </etl>
Ajastus Asentaja ajastaa prosessit käynnistymään haluttuina ajankohtina (Skeema SA-2) Ajastus UNIXin cronin tyyliin Viittaus prosessikuvaustiedostossa käytettävään prosessin nimeen <?xml version="10" encoding="utf-8"?> <etl xmlns:xsi="http://wwww3org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="skema stromxsd"> <configuration> <!-- Määritellään prosessien ajastus - tämä voisi olla käytännössä eri tiedostossa --> <timing> <timedprocess processname="myynnit1"> <parameters/> <!-- Arkipäivien päätteeksi --> <weekday range="1-5"/> <!-- Keskiyöllä --> <hour range="0"/> </timedprocess> </timing> <configuration> </etl>
Aliprosessit Prosessikuvauksessa on mahdollista kutsua toisia prosesseita Kutsuttaville prosesseille voidaan antaa tauluja parametreina Prosessiin voidaan myös määritellä aliprosesseja Aliprosessille voidaan määrittää eri työskentelykanta kuin emoprosessille <call name="myynnit" file="esimerkki3_subxml"> <!-- source taas viittaa tässä tiedostossa olevaan toimenpiteen nimeen, argumentin nimeä taas käytetään aliprosessitiedostossa --> <argument name="tuot" source="tuotteet"/> <argument name="myym" source="myymalat"/> <argument name="myyn" source="myynnit"/> </call>