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
Sisällysluettelo Johdanto... 3 Yleiskuvaus pakettihierarkiasta... 3 ETL-työkalun asennus...3 Uuden tietokantatyypin lisäys työkaluun... 3 Uuden toimenpiteen luominen... 4 Kuvauskielen muokkauksen tarkistuslista... 4 Uuden prosessin luonti...5 Prosessin toimivuuden testaus... 5 Ideoita SCD-toteutukseen... 5 Virheidenhallinta...5 Ohjeita lokien tulkintaan...5 Ongelmatilanteiden selvittely...6 Ohjelman suorituksen ongelmatilanteet... 6
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.docgen - Dokumentaatiogeneraattori com.aureolis.etltool.test Järjestelmätason testausluokat ETL-työkalun asennus [Kesken: kääntämiselle luodaan ant-skripti, jonka kautta käännös saadaan suoritettua helposti.] 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ä 3. Kääntäminen Käynnistysparametrit: alustus.sql prosessi.xml alustus.sql alustaa kannan testidatalla ja luo tarvittaessa n kpl tauluja prosessi.xml-tiedostossa määritellään viittaus konfiguraatiotiedostoon (tietokantayhteydet) ja prosessikuvaustiedostoon. 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 vakioit, joiden perusteella voidaan testata, mitä tietokantatyyppiä tietty yhteys tai taulu edustaa. Implementaatiossa on varauduttu myös alityyppeihin. 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 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. Jos kyseessä on ETL-työkaluun kuuluva yleiskäyttöinen toimenpidekomponentti, tee tarvittavat muutokset kuvauskieleen ja lataajakomponenttiin. 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. Uuden prosessin luonti Prosessin toimivuuden testaus Ideoita SCD-toteutukseen Virheidenhallinta 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 { 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: log = Logger.getLogger(Luokka.class.getName());
Lokkaustasot 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. Vakava virhe, järjestelmän toiminta estyy Testien ajaminen Toimenpidekomponenttien testaaminen Järjestelmätestaus Ongelmatilanteiden selvittely Ohjelman suorituksen ongelmatilanteet On käynyt ilmi, että xml-konfiguraatiotiedostoissa viittaus skeeman pitää olla tietyssä muodossa. Viittauksen pitää olla absoluuttinen, muuten sovelluksen käynnistys kuolee ko. tiedoston validointiin, koska Xerces-parseri ei löydä skeemaa. Esimerkki Windows-ympäristössä: <etl xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="c:\etl\etlschema.xsd"/> Unix-ympäristö: <etl xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="/home/etl/etlschema.xsd"/>