Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy



Samankaltaiset tiedostot
Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

T Testiraportti TR-3. ETL-työkalu

T Testiraportti TR-2. ETL-työkalu

T Testitapaukset TC-1

Valppaan asennus- ja käyttöohje

ETL-DEMO. Esimerkki ETL-kuvauskielen käyttöstä

Tekninen määrittely. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Tekninen määrittely. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Tekninen määrittely. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Simulaattorin asennus- ja käyttöohje

8. Näppäimistöltä lukeminen 8.1

CVS. Kätevä väline usein päivitettävien tiedostojen, kuten lähdekoodin, hallitsemiseen

8. Näppäimistöltä lukeminen 8.1

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

5. HelloWorld-ohjelma 5.1

LINUX-HARJOITUS, MYSQL

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

4. Luokan testaus ja käyttö olion kautta 4.1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Taulukot. Jukka Harju, Jukka Juslin

Tietokannat II -kurssin harjoitustyö

Ohje kehitysympäristöstä. Dokumentti: Ohje kehitysympäristöstä.doc Päiväys: Projekti : AgileElephant

Rajapinta (interface)

Ohjelmoinnin perusteet Y Python

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

12. Näppäimistöltä lukeminen 12.1

5. HelloWorld-ohjelma 5.1

Sisältö. 2. Taulukot. Yleistä. Yleistä

T Vaatimusmäärittelydokumentti. ETL-työkalu

Luento 4. Timo Savola. 21. huhtikuuta 2006

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

P e d a c o d e ohjelmointikoulutus verkossa

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

SQLite selvitysraportti. Juha Veijonen, Ari Laukkanen, Matti Eronen. Maaliskuu 2010

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

18 LIITTYMÄT MUIHIN JÄRJESTELMIIN

Hakemistojen sisällöt säilötään linkitetyille listalle.

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Joonas Ruotsalainen GIT PIKAOPAS. Tutkielma 2011

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Amazon Web Services (AWS) on varmaankin maailman suosituin IaaS-tarjoaja. Lisäksi se tarjoaa erilaisia PaaS-kategoriaan kuuluvia palveluita.

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ASENNUS- JA KÄYTTÖOHJE

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Olio-ohjelmointi Javalla

JUnit ja EasyMock (TilaustenKäsittely)

Sisältö. 22. Taulukot. Yleistä. Yleistä

1. Omat operaatiot 1.1

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Pedacode Pikaopas. Web-sovelluksen luominen

Harjoitustyö: virtuaalikone

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Eclipse 3.1 Pikaopas versio 1.0

Lohtu-projekti. Ylläpitäjän dokumentti. Versiohistoria: Ensimmäinen versio Andreas Asuja

DOORSin Spreadsheet export/import

Jypelin käyttöohjeet» Ruutukentän luominen

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Haka-palveluiden valvonta ja tilastointi AAIEye -työkalun avulla. Mika Suvanto, CSC

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Ohjelmoinnin perusteet Y Python

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3

15. Ohjelmoinnin tekniikkaa 15.1

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Maiju Mykkänen Susanna Sällinen

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Ohjelmoinnin perusteet Y Python

14. Hyvä ohjelmointitapa 14.1

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

TESTIRAPORTTI - XMLREADER LUOKKA Virtuaaliyhteisöjen muodostaminen Versio 1.0

20. Javan omat luokat 20.1

Ohjelmoinnin perusteet, syksy 2006

15. Ohjelmoinnin tekniikkaa 15.1

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Transkriptio:

Sivu 1 (15) Kehitysohje ETL-työkalu Versio Pvm Tekijä Kuvaus 0.1 15.1.2005 Timo Sallinen Ensimmäinen versio 0.2 26.1.2005 Timo Sallinen Täydenetty pohjaa 0.3 06.02.2005 Mika Suvanto Pieniä täydennyksiä ja oikolukua 0.4 07.02.2005 Timo Sallinen Pieniä lisäyksiä 0.5 07.02.2005 Mikko Ruokojoki Ulkoasun korjauksia ja otsikoinnin muokkausta 0.6 17.02.2005 Mika Suvanto Ohjeet asennus + kääntäminen 0.7 21.02.2005 Mika Suvanto Ohjeet asennuksesta Ecliseen ja prosessikuvausten kirjoittamisesta 0.8 28.02.2005 Risto Kunnas Ohjeita testaukseen Teemun testauskäytöntöohjeiden pohjalta 0.9 7.3.2005 Mika Suvanto Lisäyksiä mm. prosessin tarkistamiseen ja tietokantatukeen 0.91 13.3.2005 Timo Sallinen Useita muutoksia, jatkokehitysideat 0.92 13.3.2005 Risto Kunnas Jatkokehitysidoita

Sivu 2 (15) Sisällysluettelo Johdanto...3 Yleiskuvaus pakettihierarkiasta...3 Tarvittavat JDK:n ulkopuoliset luokkakirjastot... 3 ETL-työkalun standalone - asennus...3 ETL-työkalun Eclipse - asennus jatkokehitystä varten...5 Uuden tietokantatyypin lisäys työkaluun...6 Uuden toimenpiteen luominen... 7 Kuvauskielen muokkauksen tarkistuslista...8 Uuden prosessin luonti... 9 Prosessin toimivuuden testaus...9 Ideoita SCD-toteutukseen...10 Virheidenhallinta... 10 Ohjeita lokien tulkintaan... 10 Dokumentaatiogeneraattori... 11 Testaus...12 Testien luonti... 12 Testien ajaminen...13 Hakemistorakenne... 13 Ongelmatilanteiden selvittely... 13 Ohjelman suorituksen ongelmatilanteet...13 Jatkokehitysideoita... 14 Moottori... 14 Toimenpiteet... 14

Sivu 3 (15) Johdanto Dokumentin tarkoituksena on toimia jatkokehitysohjeena Tietojenkäsittelyopin ohjelmatyökurssin puitteissa luodulle ETL-työkalulle. Dokumentti on FAQ-tyyppinen. Tarkemmat tekniset määrittelyt löydät teknisestä spesifikaatio -dokumentista. Yleiskuvaus pakettihierarkiasta com.aureolis.etltool -Kaikki paketit sijoitetaan tähän nimiavaruuteen com.aureolis.etltool.database - Tietokantaluokat com.aureolis.etltool.operations Toimenpiteiden yhteiset luokat, jokainen toimenpide omaan alipakettiinsa com.aureolis.etltool.engine Moottorin implementaatio com.aureolis.etltool.parameters Prosessin parametrit com.aureolis.etltool.transfer Tiedonsiirtoluokat (mm. SqlTable) (Data Transfer Objects) com.aureolis.etltool.docgen - Dokumentaatiogeneraattori com.aureolis.etltool.test Järjestelmätason testausluokat Tarvittavat JDK:n ulkopuoliset luokkakirjastot Työkalu tarvitsee toimiakseen seuraavat kirjastot Apache Xerces 2.6.2+ (xercesimpl.jar) (http://xml.apache.org/xerces2-j/) Kuvauskielen parseri käyttää (validoiva DOM-parseri) JGraph (jgraph.jar) (http://www.jgraph.org) JGraphAddons (jgraphaddons.jar) http://www.jgraph.com/addons.html Dokumentaatiogeneraattori käyttää näitä visuaaliseen esitykseen JDBC-ajurit mysql-connector-java-3.0.15.jar (MySQL) postgresql-x.y.z-jdbc3.jar (PostgreSQL) ojdbc14.jar (Oracle) Nämä ovat yleensä ladattavissa tietokannan valmistajan www-sivuilta. Näistä tarpeellisia ovat ainoastaan kulloisessakin prosessissa käytettävien tietokantojen ajurit. ETL-työkalun standalone - asennus Tarvittavat ohjelmat Tarvitset seuraavat ohjelmat työkalun käyttöön: (suluissa testatut versiot) MySQL 4.0.13 Java SDK 1.4.2 Apache Ant 1.6.2 (kääntämiseen) Jokin CVS-client (mm. cvs, WinCVS)

Sivu 4 (15) Ohjelmaa on testattu Windows 2000, Windows XP ja Linux -käyttöjärjestelmillä. 1. Tietokannan asennus Sovellus tukee tällä hetkellä kaikilta osin ainoastaan MySQL-kantaa. Sovelluksen käyttämiseksi tarvitaan vähintään 1 kanta, mutta useampia voidaan käyttää. Tietokannat pitää luoda ennen sovelluksen ajoa sovelluksen konfiguraatiotiedoston mukaisesti. Testidata voidaan generoida komentoriviparametrina annettavalla sql-komentotiedostolla. 2. Sovellustiedostojen checkout CVS:stä Checkout luo uuden hakemiston nimeltään ETL.Tämä on työkalun juurihakemisto. Hakemisto sisältää mm. seuraavat alihakemistot: language Kuvauskielen schema löytyy täältä lib Tarvittavat ulkoiset Java -kirjastot (mm. Xerces) löytyvät täältä. Tämän hakemiston jar-tiedostot pitää olla CLASSPATH-muuttujassa työkalua ajettaessa. source proc Lähdekoodi ja testiskriptit hakemisto prosessikuvauksille 3. Kääntäminen Tehtyäsi checkout:in, työkalun juurihakemistossa pitäisi olla tiedosto build.xml, joka on Ant:in konfiguraatiotiedosto. Käännös tapahtuu automaattisesti komennolla ant. Kääntämisen jälkeen juurihakemistoon ilmestyy työkalun jar- pakattu versio etltool.jar,sekä uusi hakemisto build, jossa on käännetyt luokat. Ant-skripti tukee parametrejä dist (oletus) init compile clean rakentaa työkalusta jar-paketin tekee tarvittavat työhakemistot kääntämiseen suorittaa kääntämisen poistaa kääntämisen työhakemistot sekä jar- tiedoston 4. Käynnistys Ennen käynnistystä tarkista, että projektitiedostossa viitataan oikeisiin konfiguraatio- ja prosessitiedostoihin. Tarkista, että konfiguraatio vastaa järjestelmääsi (mm. tietokannat) ja että kaikkien XML-tiedostojen schema-polku (xsi:nonamespaceschemalocation) viittaa language -hakemistossa määriteltyyn schemaan. Huomaa, että jos käytät suhteellisia polkuja, ne lasketaan siitä hakemistosta jossa käynnistät työkalun (työkalun juurihakemisto). Tämän jälkeen työkalu käynnistyy komennolla java -jar etltool.jar alustus.sql projekti.xml olettaen, että alustus.sql ja projekti.xml sijaitsevat työkalun juurihakemistossa.

Sivu 5 (15) Käynnistysparametrit: alustus.sql projekti.xml alustus.sql alustaa kannan testidatalla ja luo tarvittaessa n kpl tauluja projekti.xml-tiedostossa määritellään viittaus konfiguraatiotiedostoon (tietokantayhteydet) ja prosessikuvaustiedostoon. ETL-työkalun Eclipse - asennus jatkokehitystä varten Tarvittavat ohjelmat Tarvitset seuraavat ohjelmat työkalun käyttöön: (suluissa testatut versiot) MySQL 4.0.13 Java SDK 1.4.2 Eclipse 3.01 Ohjelmaa on testattu Windows 2000, Windows XP ja Linux -käyttöjärjestelmillä. Tietokannan asennus Asenna MySQL tietokanta ohjeiden mukaan. Varmista, että tietokannan konfiguraatio ja palomuuri sallii TCP/IP -yhteydet ja konfiguroi käytettävät tietokannat ja käyttäjätunnukset vastaamaan prosessikuvauksien konfiguraatiotiedostoa. Sovellustiedostojen checkout CVS:stä Luo uusi projekti työkalua varten, valitse 'Checkout projects from CVS' ja syötä yhteysparametrit. Tämän jälkeen projektin koodi haetaan Eclipsen työympäristöön. Valmistelu Työkalun testaamisessa tarvittavat tiedostot ovat test -paketissa. EtlToolTest1 on työkalun testauksen pääluokka, jota testiajot kutsuvat. Test -paketin alapaketit sisältävät eri prosessiajojen määrittelyt, ja nämä määrittelyt viittaavat skema strom.xsd -tiedostoon, jossa on kuvattu työkalun kuvauskielen XML-schema. Viittaukset ovat tyyppiä../skema strom.xsd, joten ne odottavat skeematiedoston löytyvän test-paketista. Kopioi siis skeema language -hakemistosta test -hakemistoon. Käynnistys Konfiguroi Eclipseen uusi Run-konfiguraatio kuvien 1 ja 2 mukaisesti. Tämän jälkeen työkalu käynnistyy tällä konfiguraatiolla. DocGenTest1 generoi prosessista dokumentaation. Sen run -konfiguraatio laaditaan samalla periaatteella joten ainoa muutos on kuvan 1 Main Class -kenttä.

Sivu 6 (15) Uuden tietokantatyypin lisäys työkaluun ETL-työkalua voidaan käyttää useassa eri tietokantatyypissä ja tämä ohje auttaa lisäämään uusia tietokantatyyppejä ETL-työkaluun. Database-luokassa on määritelty staattiset vakiot, joiden perusteella voidaan testata, mitä tietokantatyyppiä tietty yhteys tai taulu edustaa. Mikäli uusi tietokantatyyppi vaatii muutoksia Kuva 1: Eclipsen run-konfiguraatio (1/2)

Sivu 7 (15) Kuva 2: Eclipsen run-konfiguraatio (2/2) Database- luokan metodeihin, kannattaa Database-luokka periä. Esimerkkinä tästä on toteutettu PostgreSqlDatabase- luokka, jossa voidaan toteuttaa tarvittavat metodit PostgreSQL- tietokannan vaatimalla sql:llä.databasemanager instantioi oiken luokan konfiguraatiotiedostossa annetun tietokannan tyypin avulla. Implementaatiossa on varauduttu myös alityyppeihin, kuten tiettyihin tietokantaversioihin. Räätälöidyt SQL-lausekkeet toimenpiteissä voidaan tehdä kahdella tavalla: Periytetään vastaava toimenpideluokka jokaiselle tietokannalle erikseen, siten, että ko. toimenpiteen factory-luokka luo ko. Instanssin Jos erot ovat pieniä tehdään if / else if -rakenne edellä mainitun database-type attribuutin perusteella. Export-toimenpideluokassa on esimerkki viimeksi mainitusta, jossa SQL-generoidaan tietokantatyypin mukaan. Toteutuksessa ei ole tällä hetkellä otettu huomioon eri tietotyyppien eroja. Ongelma ilmenee silloin, jos toimenpiteen pitää siirtää tietoa kahden erilaisen tietokannan välillä. Käytännössä tämä pitäisi ratkaista siten, että SqlTableFormat-luokassa määritettäisiin, jonkinlainen looginen tietomalli, joka mapattaisiin fyysisiin attribuuttityyppeihiin toimenpiteissä. Uuden toimenpiteen luominen Toimenpidekomponentin luominen tehdään seuraavasti: Suunnittele komponentti (parametrit, syötteet, tulokset, toiminta, virhetilanteet jne.) ja kirjoita siitä samanlainen kuvaus kuin alla olevissa toimenpidekomponenttien kuvauksissa. Suunnittele samalla, miten toimenpidekomponentti kuvataan kuvauskielessä. Räätälöityjä komponentteja

Sivu 8 (15) varten ei yleensä kannata tehdä muutoksia kuvauskieleen. Tee komponentille Java-pakkaus. Jos kyseessä on työkaluun liitettävä yleiskäyttöinen komponentti, pakkaus tulee luoda com.aureolis.etltool.operation-pakkauksen alle. Jos kyseessä on asiakasprojektiin tehty räätälöity komponentti, voidaan käyttää jotain projektikohtaista pakkausnimeä (tai laittaa samaan pakkaukseen muiden toimenpiteiden kanssa). Tee EtlOperationFactory:n toteuttava luokka. Tähän luokkaan ei yleensä pidä laittaa mitään muuttuvia attribuutteja, vaan ainoastaan konfiguraatiotietoa, joka pysyy vakiona olion olemassaolon ajan. Samaa EtlOperationFactory-oliota voidaan käyttää useiden prosessiajojen ajan. Tee EtlOperation:n toteuttava luokka, jonka instanssin EtlOperationFactory.create()-metodi luo. Tätä EtlOperation:n toteuttamaa oliota käytetään vain yhden prosessiajon ajan ja sen jälkeen se hylätään, eikä moottori käytä samaa oliota enää seuraavassa prosessiajossa (vaan luo uuden create()-metodilla). Luokan toteutuksessa kannattaa ottaa mallia olemassaolevista toimenpidekomponenteista ja hyödyntää moottorin palveluita mahdollisimman tehokkaasti. Toimenpiteen liittääminen sovellukseen Toimenpidekomponenttien dynaaminen lataus toteutettiin viimeistelyvaiheen aikana. Koska tätä ei ehditty testata niin kattavasti kuin alkuperäistä toteutusta, haarautettiin CVS-siten, että molemmat versiot ovat käytössä. Molemmissa versioissa ensimmäinen vaihe on lisätä toimenpiteen määrittely kuvauskielen skeemaan. Oletusarvoisesti (luovutetussa versiossa) kuvauskielen validointi skeemaa vastaan on päällä. Tämä voidaan haluttaessa muuttaa XmlProcessParser-luokasta, jolloin muutoksia skeemaan ei enää tarvita. Päähaaran (ETL) alkuperäinen versio Jotta parseri osaa ladata toimenpidekomponentin, täytyy tämä määrittää com.aureolis.etltool.processlanguage.xml.xmlprocessbuilder buildoperation()-metodiin. Dynaaminen versio CVS-haara 'DYNAMIC' Vaihtoehdossa toimenpidefactoryjen toteutusta on muutettu siten, että nämä voivat periä EtlOperationFactory-rajapinnan toteuttamisen sijaan com.aureolis.etltool.operations.abstactoperationfactory-luokan, johon on määritetty kaikille toimenpiteille yhteisiä attribuutteja, kuten viittaus tietokantamanageriin. Prosessiparseria on muutettu siten, että se osaa parseroida mielivaltaisen prosessikuvaustiedoston ja ladata toimenpideluokat konfiguraation perusteella. Ladattavat toimenpiteet määritellään konfiguraatiotiedostossa seuraavasti: <configuration> <operations> <operation name= importsql class= com.aureolis.etltool.operations.importsql.importsqlfactory />.. </operations> </configuration>

Sivu 9 (15) Tässä siis name-attribuutti kertoo prosessikuvauksessa käytettävän operaation nimen (XML-tagi) ja class on com.aureolis.etltool.operations.etloperationfactory-rajapinnan toteuttava luokka. Parseri luo prosessikuvauksesta määritellystä konfiguraatiosta com.aureolis.etltool.processlanguage.configuration instanssin, joka sisältää kuvauskielessä määritellyt parametrit puumaisena rakenteena. Ratkaisu on periaatteessa kuvaskieleriippumaton, mutta kopioi kuitenkin XML:n puurakenteen sellaisenaan, mikä on otettava huomioon parametreja käsiteltäessä. Parseri kutsuu toimenpidefactoryn metodiavoid configure(configuration conf) throws ConfigurationException, jossa toimenpide hakee tarvitsemansa parametrit välitetystä Configurationinstanssista. Parametreja ei voinut suoraan asettaa JavaBean/Reflection-tekniikoilla, koska osa toimenpiteistä vaatii yksinkertaisia attribuutteja monimutkaisempia rakenteita määrittelyssään (Esim. ImportCSV:n taulumääritykset). Jatkokehitystä ajatellen tätä voisi kehittää siten, että pyrittäisiin eroon kuvauskielen ja toimenpidekomponenttien välisesti kytkennästä. Yksi mahdollisuus olisi generoida XML-määrityksen perusteella automaattisesti JavaBean-luokka, joka välitetään toimenpiteelle. Sovellukseen on kovakoodattu toteutetut toimenpitekomponentit. Haluttaessa nämä voidaan korvata uusilla em. määrittelyllä. Vähintään copy ja importsql-toimenpiteet on oltava olemassa, koska parseri korvaa importin automaattisesti copy:lla aliprosessin alussa. Kuvauskielen muokkauksen tarkistuslista XML-parseriluokka on toteutettu siten, että kuvauskielen implementaatio voidaan vaihtaa ilman muutostarpeita moottoriin. Suuri osa prosessin rakentamisen toiminnallisuutta on kuitenkin parserin tehtävänä. Parserointiin käytetään validoivaa Apache Xerces DOM-parseria. Parseriluokka vastaa myös toimenpidekomponenttien lataamisesta ja alustamisesta. On tärkeää testata, että kaikki parametrit välittyvät toimenpiteille oikein. Mahdollisesti ongelmat näissä ilmenevät todennäköisesti vasta ajon aikana. 1. Määrittele muutokset kuvauskielen XML-schemaan (language/skema strom.xsd) 2. Lisää muutosten luku/rakentaminen sopiviin processlanguage.xml -paketin luokkiin. 3. Lisää processlanguage.xml.tag -luokkaan elementin/attribuutin määrittely vastaamaan skeemaa. 4. Kopioi muokattu skeema test- pakettiin testien ajamiseksi. Skeeman muokkaukseen on hyvin suositeltavaa käyttää jotain työkalua, jossa skeemaa pystyy muokkaamaan graafisesti, esim. AltovanXMLSpy. Uuden prosessin luonti ETL-prosessi vaatii vähintään kolme XML-tiedostoa jotta se voidaan suorittaa: projektitiedosto, joka kertoo muut käytettävät tiedostot, prosessikuvaus, jossa on määritelty suoritettava ETLprosessi sekä konfiguraatiotiedosto, jossa on ajon tietokanta- ja ajastuskonfiguraatio. Näistä tiedostoista löytyy useita esimerkkejä test- paketin alta. XML-tiedostojen muokkaus sujuu varsin kätevästi, mikäli käytetään sellaista XML-editoria, joka osaa validoida tiedostot skeemaa vasten. Testattuja on mm. XMLSpy sekä Eclipseen integroituva plugin XMLBuddy. Projektitiedostossa voidaan tällä hetkellä määritellä kolme asiaa: konfiguraatiotiedoston polku, prosessikuvauksen polku sekä lokiasetusten polku.

Sivu 10 (15) Konfiguraatiotiedostossa määritellään työkalun prosessissa käyttäjämät tietokannat sekä mahdollinen projektin ajastus parametreineen. Projektikuvauksessa määritellään toimenpiteet ja niiden riippuvuudet. Usein toistuvia attribuutteja ovat mm. name source sourcedatabaseid Toimenpiteen nimi. Oltava yksikäsitteinen. Lähdetoimenpiteen nimi Viittaus konfiguraatiotiedostossa määriteltyyn tietokantaan Validoiva XML-editori osaa yleensä myös näyttää skeemaan lisätyt kommentit, jotka kertovat attribuuttien merkityksen. Kun prosessikuvaus on valmis ja XML-editorin mukaan validi, se voidaan ajaa joko EtlToolTest1 -luokalla, joka suorittaa prosessin, tai DocGenTest1 -luokalla, joka laatii prosessista graafisen kuvauksen. Prosessin toimivuuden testaus Valmiista prosessikuvauksesta kannattaa luoda dokumentaatio DocGenTest1 -luokalla. Tästä on hyvä tarkistaa prosessin loogisesti oikea toiminta. Dokumentaatiogeneraattori myös parsii prosessikuvauksen, joten se tarkistaa samalla kuvauksen syntaksin suorittamatta itse prosessia. EtlToolTest2 -luokan avulla voidaan varmistua, että prosessin tulos on halutun kaltainen. Ks. Testien ajaminen. Ideoita SCD-toteutukseen Slowly Changing Dimensions on yksinkertaisinta toteuttaa siten, että Import toimenpiteelle annettavalla parametrillä määritellään taulun SCD-taso. Import toimenpiteet pitävät kopiota tällaisesta SCD:tä sisältävästä taulusta tietovarastoalueella ja lisäävät siihen aikadimension, mikäli lähdekannassa oleva aineisto on muuttunut. Itse ETL-prosessiin import toisi sitten joko snapshotin nykyisestä tilanteesta tai koko aikahistorian sisältävän taulun tietovarastoalueelta. Yksittäisten toimenpiteiden ei tarvitse huolehtia tällöin SCD:n olemassa olosta, mutta prosessin suunnittelijan on huomioitava aikadimension olemassa olo. Virheidenhallinta Virheelliset parametrit toimenpidekomponenteille Jos prosessin ajon aikaisissa argumenteissa on virhe, heittävät toimenpiteet moottorille java.lang.illegalargumentexception. Toistaiseksi moottoriin ei ole toteutettu toiminnallisuutta tämän tilanteen hallintaan. Prosessin ajo jatkuu siltä osin kun se on mahdollista, eli poikkeuksen heittäneestä toimenpiteestä riippuvia toimenpiteitä ei enää voida suorittaa. Virhetaulut Osaan toimenpiteistä on toteutettu tuki virhetauluille. Virhetauluihin tallennetaan data, joka Esimerkkinä on liitos-toimenpiteen erikoistapaukset, eli rivit, joita ei voi liittää annetun ehdon perusteella. Toimenpiteet palauttavat virhetaulut moottorille OperationResult-oliossa (errortablename -> SqlTable). Virhetaulun nimi (errortablename) konfiguroidaan prosessikuvaukseen. Virhetauluja ei

Sivu 11 (15) nykyisessä toteutuksessa käsitellä, mutta ne jäävät tietokantaan ajon jälkeen. Ohjeita lokien tulkintaan Järjestelmä käyttää lokien kirjoittamiseen JDK Logging -standardikirjastoa, joka on versiosta 1.4 alkaen osa J2SE:tä. Loki voidaan konfiguroida properties-tyylisellä tekstitiedostolla, tässä määritellään haluttava taso ja tulosteen muoto. Menettely mahdollistaa lokkauskäytännön ajonaikaisen vaihtamisen. Logi alustetaan seuraavasti: LogManager lm = LogManager.getLogManager(); try { // luetaan Properties-tyylinen konfiguraatio tiedostosta InputStream is = new FileInputStream("./build/com/aureolis/etltool/test/logging.properties"); lm.readconfiguration(is); is.close(); } catch (Exception e) { } Lokin käyttäminen Java-luokasta: import java.util.logging.*; public class Toimempide { // haetaan luokkakohtainen Logger-instanssi private static final Logger logger = Logger.getLogger(Toimenpide.class.getName()); // käyttö logger.log(level.severe, fataali virhe ); Käytetyt lokitasot ja selitteet

Taso FINER FINE INFO WARNING SEVERE Käyttötarkoitus Debug-tasoinen viesti Debug-tasoinen viesti Informatiivinen, tällä tasolla esimerkiksi SQL-lauseet Varoitus, esim. virhe syötedatassa Vakava virhe, järjestelmän toiminta estyy Sivu 12 (15) Dokumentaatiogeneraattori Dokumentaatiogeneraattori on toteutettu melko erillisenä komponenttina, mutta se käyttää prosessiparserin luomaa tietorakennetta dokumentaation rakentamiseen. Rajapinta on suunniteltu siten, että dokumentaation tuottava toiminnallisuus on vaihdettavissa. Tässä vaiheessa on toteutettu XML-muotoinen tekstitulostus (XMLComposer) lähinnä esimerkin omainen) ja graafinen Javan Swingillä ja JGraph-kirjastolla tehty esitys (JgraphComposer). Dokumentaatiogeneraattoriin on mahdollista liittää kuvaus taulurakenteista, mutta tämä vaatii (luonnollisesti) prosessin ajamisen. Importille ja Exportille kuvauskielessä määritellyt tauluformaatit liitetään mukaan automaattisesti, jos nämä on määritelty. Toteuttamiseen JGraph-kirjasto tuntuu varsin toimivalta, elementteihin voi helposti lisätä mm. eventtejä, jolloin kirjasto voisi olla hyvä lähtökohta graafisen käyttöliittymän tekemiseen prosessin määrittelyyn. Jatkokehitys ideana prosessikuvaukseen ulkoasu pitäisi saada toimimaan, Jgraphiin liittyy JgraphAddons-paketti, jossa on valmiita layoyt-algoritmeja. Näitä ei kuitenkaan ole saatu toimivaan, vaan koko prosessiverkko tulee päällekäin. Testaus Testien luonti Jokaista yksittäistä toimenpidekomponenttia sekä jokaista tiettyä toiminnallisuutta kohden on luotu / luodaan prosessikuvaus, joka kattaa toimenpiteen toimintavaihtoehdot, lähdeaineiston ja odotetun lopputuloksen. Hyväksytysti suoritetut prosessikuvaukset kootaan yhteen prosessikuvaukseen. Kun muutoksia ETL-työkaluun tehdään, tulee tämä koottu prosessikuvaus ajaa hyväksytysti ennen muutoksien viemistä versionhallintaan. Prosessikuvausten teko tapahtuu normaalisti ohjeen mukaan. Tietokantoihin luotava aineisto tehdään seuraavasti: Testausympäristöön luodaan setup-skripti, jossa määritellään kantaan luotavat taulut ja niihin sisällytettävä testidata. Setup-skriptissä määritellään myös kannan nimi, johon taulut ja data luodaan. Yhdellä skriptillä voidaan alustaa useita tietokantoja. Skriptin alussa on rivi :kannannimi, joka kertoo missä kannassa seuraavat SQL-lauseet suoritetaan. Kukin SQL-lause on oltava omalla rivillään, ts. esim. CREATE TABLE-lausetta ei saa jakaa useammalle riville. Esimerkki: :lahdekanta

Sivu 13 (15) CREATE TABLE Tyontekija (sotu CHAR(11), sukunimi VARCHAR(15), etunimi VARCHAR(10), palkka INTEGER, PRIMARY KEY (sotu)); CREATE TABLE Osasto (ot INTEGER, nimi VARCHAR(20), PRIMARY KEY (ot)); CREATE TABLE Tyossa (ot INTEGER, sotu CHAR(11), PRIMARY KEY (ot, sotu)); INSERT INTO Tyontekija VALUES ('301162-132G', 'Silakka', 'Seppo', 2630); INSERT INTO Tyontekija VALUES ('210380-321R', 'Kankkunen', 'Kalle', 1800); INSERT INTO Tyontekija VALUES ('240685-1234', 'Kesà mies', 'Keijo', 2370); INSERT INTO Tyontekija VALUES ('251083-1234', 'Vilkas', 'Ville', 2030); INSERT INTO Osasto VALUES (1, 'Hallinto'); INSERT INTO Osasto VALUES (2, 'Tuotanto'); INSERT INTO Osasto VALUES (3, 'Myynti'); INSERT INTO Osasto VALUES (4, 'Markkinointi'); INSERT INTO Osasto VALUES (5, 'Foobar'); INSERT INTO Tyossa VALUES (1, '301162-132G'); INSERT INTO Tyossa VALUES (1, '240685-1234'); INSERT INTO Tyossa VALUES (2, '210380-321R'); INSERT INTO Tyossa VALUES (3, '251083-1234'); INSERT INTO Tyossa VALUES (2, '251083-1234'); INSERT INTO Tyossa VALUES (8, '123456-1234'); Tietokantoihin luotava aineisto tehdään seuraavasti: Jokainen taulu tarkastetaan omalla taulu-sektiollaan. DATABASE-komento määrittää käytettävän tietokannan testiaineistonluontitiedoston tavoin. TABLE-sektio sisältää seuraavat komennot: - NAME määrittää taulun nimen - FIELDS määrittää, minkä tyyppisiä taulujen sarakkeet pitää olla - PRIMARY_KEY määrittää, mitkä sarakkeet kuuluvat primääriavaimeen - ROW määrittää minkälainen rivi taulustä täytyy löytyä Kaikki komennot ovat vapaaehtoisia, paitisi NAME tarvitaan, mikäli muita komentoja aiotaan käyttää. Komentojen parametrit erotellaan välilyönneillä tai sarkaimilla. Jos parametri sisältää välilyönnin, on käytettävä lainausmerkkejä. Lainausmerkit eivät sisälly parametrin arvoon. Esimerkki: DATABASE tietovarasto TABLE BEGIN NAME TyontekijoidenOsastot FIELDS sotu:varchar(11) sukunimi:varchar(15) etunimi:varchar(10) palkka:int ot:int nimi:varchar(20) # PRIMARY_KEY ot sot ROW 210380-321R Kankkunen Kalle 1800 2 Tuotanto ROW 251083-1234 Vilkas Ville 2030 3 Myynti ROW 251083-1234 Vilkas Ville 2030 2 Tuotanto TABLE END ------------------------------------------------ Testien ajaminen Testit ajetaan EtlToolTest1 ja EtlToolTest2 työkalulla. EtlToolTest1 ottaa parametrikseen prosessikuvauksen nimen(esim. Testprocess.xml) ja lähdeaineiston luovan setupskriptin (esim. setup1.sql). EtlToolTest2 ottaa parametrikseen prosessikuvauksen nime( esim. Testprocess.xml), lähdeaineiston luovan setupskriptin (esim. setup1.sql) ja tarkistustiedoston nimen (esim. check.sql).

Sivu 14 (15) Hakemistorakenne Jokaiselle toimenpiteelle luodaan versionhallintajärjestelmään alihakemisto, kuten test/join, ja koottu testiprosessi hakemistoon test/all Hakemistot sisältävät esim. seuraavat tiedostot: configuration.xml Paikalinen, ei versionhallinnassa join1.xml Prosessikuvaus logging.properties Paikallinen, ei versionhallinnassa project.xml Projektikuvaus, jossa viittaukset prosessikuvaukseen ja konfiguraatioon setup1.sql Testausympäristön pysytykseen käytettävä tiedosto Xml-tiedostoissa olevat viittaukset skeemaan ovat../skema storm.xsd. Em. tiedostojen luonti on kuvattu aikaisemmin tässä dokumentissa. Ongelmatilanteiden selvittely Ohjelman suorituksen ongelmatilanteet Feb 21, 2005 4:49:03 PM com.aureolis.etltool.processlanguage.xml.xmlprocessparser parsefile SEVERE: Unexpected parsing error: [2, 108] error while parsing <etl xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="skema strom.xsd"> Virhe johtuu siitä, ettei XML-parseri löydä prosessikuvaustiedostossa määriteltyä skeemaa. Tarkista, että skema strom.xsd löytyy odotetusta paikasta, tässä esimerkissä samasta hakemistosta mistä työkalu on käynnistetty. Huomaa myös, että hakemistojen erotinmerkkinä on käytettävä Unixtyyliin / -merkkiä eikä Windows -tyylistä \ -merkkiä. Kannattaa myös harkita skeeman laittamista www-palvelimelle, jolloin siihen voi viitata joka paikasta samalla tavalla. Jatkokehitysideoita Moottori Rinnakkainen suoritus Moottori toimii tällä hetkellä siten, että se käynnistää kullakin hetkellä niin monta toimenpidettä yhtäaikaiseen ajoon, kun mahdollista. Tämä voi muodostua ongelmaksi monimutkaisessa prosessissa ja olisi mahdollisesti hyvä luoda jonkinlainen Thread-pool, joka hallinnoi yhtäaikaisesti ajossa olevia toimenpiteitä. Toimenpiteiden ajon seuranta Toimenpiderajapinnoissa on määritelty metodit (esim. getprogress()), joilla voidaan seurata

Sivu 15 (15) prosessin suorituksen edistymistä. Näitä ei kuitenkaan ole toistaiseksi toteutettu. Prosessin tilan seurata on ajateltu toteutettavan siten, että soveltuvilta osin toimenpide ylläpitää jonkinlaista laskuria välillä [0,1], jonka arvo pyydettäessä palautetaan moottorille. Jonkinlainen timeout-arvo toimenpiteille olisi varmasti myös hyvä mahdollisen jumiutumisen varalta. Toimenpiteet Indeksien käyttö Toimnepiteiden tukea indekseille pitäisi kehittää suorituskyvyn lisäämiseksi. Import-toimenpiteet osaavat lukea ja luoda indeksiejä. Mutta toimenpiteiden pitäisi osata käsitellä näitä järjevästi, mm. appendin osalta. Virhdeidenhallinta Virheidenhallintaa pitää parantaa, erityisesti virhetaulujen osalta, joita ei ole toteutettu toistaiseksi kuin Join ja Append-toimenpiteisiin. Convert/TypeCheck Toimenpide tarvitaan eri tietokantatyyppien tukemiseen samassa prosessissa, koska tietotyypit eroavat merkittävästi eri tietokannoissa. Sarakkeiden tyypit hallitaan siten, että jokaisella SqlTableinstanssilla on SqlTableFormat-attribuutti, joka kuvaa taulun sarakkeiden nimet, niiden tietotyypit ja mahdolliset indeksit. Sarakkeen tyyppi tallennetaan suoraan String-tyyppisenä joko sen mukaan mitä prosessikuvauksessa on määritelty tai mitä JDBC-ajuri palauttaa. Arkkitehtuurin perusteella tuntuisi, että tämä olisi parempi toteuttaa esim. moottorin palveluna, jota toimenpiteet kutsuvat, kuin erillisenä toimenpiteenä. Syynä tähän on se, että toimintoa tarvitaan silloin, kun kopioidaan dataa kahden tietokannan välillä. SqlTable-instanssi viittaa suoraan kantaan, eikä siihen voida tehdä muutoksia, ennen kuin se syöteään datan lukevalle toimenpiteelle. Toiminto pitää siis suorittaa suoraan esim. export tai copy-toimenpiteestä Toteutus Luodaan jonkinlainen konfiguroitava taulukko, joka määrittelee tietokannnoittain sarakkaiden vastaavuudet. Esim (mysql) tinyint = oracle num(2). Toiminto lisätään moottorin palveluksi siten, että EngineServies-rajapintaan lisätään metodi taulun formaatin konvertoimiseksi. Metodi SqlTableFormat-instanssin, joka sisältää muunnetut saraketyypit. Toimenpide tietää ajonaikana käsittelemiensä tietokantojen tyypit (voidaan kysyä SqlTable.getDatabase()-luokalta) ja osaa välittää tarvittavat parametrit Convert/TypeCheckille. Toimenpiteen vastuulle jää tämän jälkeen mahdollisten epäyhteensopivuuksien tunnistaminen syötedatassa.