On synkkä ja myrskyinen perjantai-iltapäivä. Käyn läpi toisen konsultin tekemää tietovarastoa ja ETL-latauksia. Otsasuoni pullistuu. Yritän oikean käden tiiviillä hiirityöskentelyllä epätoivon vimmalla löytää edes yhden parhaiden käytäntöjen mukaisen toteutuksen spagetin joukosta. Vasen käsi hapuilee farkkujen taskun pohjalta verenpainelääkitystä, siinä kuitenkaan onnistumatta. Päässä pyörii epätoivoisia ajatuksia:
- Jos tehdään jotain uutta (= ei ole ennen tehty tietovarastoja), olisiko syytä edes hieman opiskella asiaa? Olisikohan joku jo maailmalla miettinyt, miten homma kannattaisi tehdä?
- Löytyykö tekijöiltä minkäänlaista kunnianhimoa työn jäljen suhteen?
- Eikö osaamista jaeta lainkaan edes yhden yrityksen sisällä? Eivätkö konsulttiyritykset edes halua luoda omia parhaita käytäntöjä? Onko busineksen ainut arvo laskutetut eurot, työn laadulla ei ole niin väliä? Kolikon kääntöpuolella on tietysti se, että puolivillaisesti tehty toteutus generoi enemmän laskutustunteja.
Normipäivä siis.
Ei hitto. Olisipa peruskoulussa opetettu googlauksen alkeet. Olisi edes joku perusasia kunnossa. Jos vaikka olisi väistetty edes yksi pahimmista munauksista ao. vartissa kirjoitetulta syntilistalta…
- SQL Server Integration Services-DW:n paras oppikirja tehtiin jo vuonna 2005! Huikeaa. Lue tämä ennen kuin teet ensimmäistäkään työliikettä. Moni alla olevista vinkeistäkin löytyy tästä kirjasta http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/books/microsoft-data-warehouse-dw-toolkit/
- Mallinnus. Oli se sitten tähtimalli tai DataVault. Dimensiodata dimensioon, faktat faktoihin jne. Määrittelyvaiheessa on tehtävä tietokannan mallinnus. Mallinnus on koko homman A ja O. Eräässä casessa oli päädytty tälläämään kaikki erityyppiset faktat yhteen ja samaan faktatauluun. No, tässä tapauksessa ei sitten voinut oikein puhuakaan agilesta kehityksestä, joustavuudesta tai kannan suorituskyvystä, ainakaan samassa lauseessa.
- Ensimmäiset johtopäätökset tekemisen laadusta voi melkein vetää jo siitä, onko SSIS:ssä käytetty mitään template-pakettia vai ei. 90%:ssa tapauksista ei. Omalla template-paketilla saat esim. lokitukset ja virheenkäsittelyt kuntoon. Ja yhtenevät muuttujat, dataflowt jne eri pakettien välillä – ja tekemisen edes jollain tasolla yhteneväiseksi eri kehittäjien kesken. Peukalosääntö: 1 taulu per 1 paketti. Jossain Microsoftin omassa esimerkeissäkin on tehty koko DW parilla paketilla. Mutta miten hoidat useamman kehittäjän työskentelyn tai suorituskyvyn optimoinnin, jos koko DW on yhdessä paketissa? Näitä virityksiä on nähty monessa projektissa.
- Mieti ETL:ää tehdessäsi kahta asiaa: ylläpidettävyys ja suorituskyky. Väärin käytettynä SSIS tappaa suorituskyvyn. SSIS perustuu muistin käyttöön, osa valmiskomponenteista vaatii koko datan lukemisen kerralla palvelimen muistiin. Kaksi karmeaa käytännön esimerkkiä kotimaisista tietovarastototeutuksista:
- Tietovarastoon kirjoitettiin kaikki data prosareilla, joita komennettiin Oledb Command-komponentilla. So what? No, jokainen tietovaraston läpi mennyt uusi rivi kutsui yksitellen prosaria. Eli miljooonan rivin kirjoittaminen kantaan generoi miljoona yksittäistä kyselyä. Loppuasiakas ihmetteli, kun ei meinannut latauksissa yö riittää. No ei ihme.
- Toisessa casessa tietovaraston rakentamisessa oli käytetty SSIS-paketteja – mutta kaikki oli tehty SQL:llä MERGE-kyselyitä käyttäen. Ylläpito oli “hieman” hidasta ja kankeaa… ja olisihan sitä voinut myös googlettaa, suositteleeko MERGE:n käyttöä maailmalla kukaan muu… Tässä projektissa oli onnistuneesti jätetty käyttämättä kaikki SSIS:n hyvät puolet ja yhdistetty siihen päälle suorituskyvytön ja hankalasti ylläpidettävä SQL-koodi.
- Tietokannan perusasiat kuntoon. Ovatko indeksit, Foreign Keyt, Primary Keyt tuntemattomia käsitteitä? Ei uskoisi, ellei omin silmin näkisi kantoja, joista kaikki mainitut pikkudetaljit ovat päässeet jotenkin unhottumaan. Tai relaatiot eri taulujen välillä hoidetaan SUBSTRING-funktioilla. Tämäkin on nähty, usko tai älä.
- Kannattaa perehtyä uusien työkaluversioiden tuomiin mahdollisuuksiin huolella ja ajatuksella. Äkkinäinen voisi kuvitella, että esimerkiksi kymmenessä vuodessa ETL-työkaluun saattaisi tulla joitain sellaisia ominaisuuksia, jotka kannattaisi jopa ehdottomasti ottaa käyttöön. Ehkä version 2005 kaikkia ominaisuuksia ei enää kannata käyttää vuonna 2016?