Manuprāt, analītiķim līdz darbam pie datu noliktavas ir jāizaug, jānobriest, jānogatavinās OLTP druvā. Datu noliktava – tas ir nopietni. Tie ir lēmumi, tās ir ekspektācijas (mārketinga saukļus gan jau kādu zināt), tas ir izdarīt varen sarežģītu darbu, lai cik gudru grāmatu un visādu blogu :) būtu sarakstīts ar padomiem. Tāpat noliktavas strādnieka dienišķais būt vai nebūt: labot datus noliktavā vai gulties uz ambrazūras cīņā par labākiem avotiem?
Programmētāji zina – lai atrastu bagu, ir jāmāk domāt kā bags domā. Tā nu es te pārfrāzējot saku, ka DN analītiķiem pirms DN jāapēd puds sāls avota sistēmās. Jāsaprot, ko, kā un kāpēc dara avotu cilvēki, kādi grābekļi, kāds viņu domu gājiens. Ko tur liegties, pašai kā bumerangs ir situsi OLTP sistēmu izstrādātāju nepadomāšana tālāk par savu pagalmu. Neizdarāmu lietu jau parasti nav. Tikai vairāk laiku un izdomu prasa.
Jo vairāk runās, jo lielākā iespēja, ka noliktavas strādniekus sadzirdēs. Pielikšu atrunu, ka, protams, ir uzņēmumi, kur par šo jau tagad tiek nopietni domāts. Šeit rakstītais kompilēts no dažādu analītiķu pieredzes, nozares mītiem un leģendām. Visi piemēri anonimizēti.
Ideālajā pasaulē DN vs OLTP problēma ir identificēta un OLTP cilvēki ar DN cilvēkiem sadodas rokās un smaidīdami dodas uz kopīgu mērķi – vēl ideālāku pasauli. Visi zina, kādus datus un kā ņem uz DN, nosacījumi abās pusēs sakrīt, allaž savlaicīgi vienojas par izmaiņām, avota datu labošanas skripti vai nu nav nepieciešami, vai nu sakopj aiz sevis astes priekš DN, kā arī ir daudz jauku testa datu pēc pirmā pieprasījuma vai pat bez prasīšanas. Ļoti ceru, ka akurāt tā, kā pie jums.
Ne-ideālā pasaulē datu noliktavu cilvēkiem tik gludi neiet. Kāpēc eksistē arī neideāla paralēlā pasaule? Tāpēc, ka gadās:
*) avotiem un DN ir dažādi izstrādātāji (ar visām izrietošām birokrātijām),
*) nav cilvēka, kurš ir ar vienu kāju avotā, ar otru noliktavā (ja būšana ir formāla, jēgas maz, bet parasti beidzas ar to, ka šo cilvēku viena no pusēm sāk arvien vairāk nodarbināt, līdz paņem pie sevis),
*) sistēmu izstrādei dažādi budžeti (un tad, kā saprotat, pingpongs),
*) avotu cilvēki ir līdz ausīm savos darbos (un, ja godīgi, nealkst rakņāties pa veciem sqliem, jo VIŅIEM viss strādā),
*) noliktava ieviesta ķeksīša pēc. Gala lietotāji tāpat turpina savus pirmsplūdu ekseļus, bet sākotnējais izstrādātājs piesedzās ar papīriem,
*) DN cilvēki izlutina lietotājus ar to, ka gan jau tiks galā, ko nu taisīt problēmu, kopš pasaulē ir izgudrota update komanda.
Daži gadījumi, kuros DN analītiķiem sirms mats klāt:
1) ja avots kādā brīdī nomaina lauka nozīmi – senāk rekins.nosutits “jā” bija ‘0’, bet kopš eiro ieviešanas “jā” kļuvis “1”. Dažreiz pat kurioza iemesla dēļ – jaunajam avota analītiķim sajuka, bet tad, kad atklāja, ka jau uztaisīts, tā arī palika.
2) ja lauka satura nozīme atšķiras dažādas situācijās. Ja līzinga gadījumā laukā “klients.adrese” ir pircēja adrese, bet kredīta gadījumā – galvotāja adrese. Papildus kādā specifiskā gadījumā, piemēram, ja nokavēti vairāk 3 maksājumi, tajā glabājas adrese, uz kuru sūtīts pirmais atgādinājums, bet ja nokavēti vairāk nekā 3, tad tā, uz kuru sūtīts jaunākais atgādinājums. Avota sistēmā cilvēki saliek ifus, notestē, kaut kādu daļu ieraksta izmaiņu projektējumā (kurš līdz ar citiem 376 maziem dokumentiņiem kaut kur glabājas), kaut ko koda komentāros, nodod un laimīgi aizmirst, avota formās adreses smuki salec pa laukiem. Pēc kāda laika datu noliktavu cilvēki mēģina saprast loģiku.
Žanra klasika ir avota sistēmu projektējumos šajā vietā frāze “tiks precizēts vēlāk” vai komentārs “Inokentijs ierakstīs”. Spoiler alert: Inokentijs tālēs zilajās.
DN tad rodas kaut kas līdzīgs šiem:
A) paņem uz DN kā “adrese” un ieraksta aprakstā a la “Kredīta gadījumā galvotāja adrese, citos gadījumos tas, kas aprakstīts avota dokumentācijā”. Lauks pārņemts, sirdsapziņa tīra, lai nu lietotāji paši tiek galā.
B) tiem, kuriem var atšķirt, izveido DN objektus a la “Līzinga ņēmēja adrese”, “Galvotāja adrese”, “Pārējās adreses”, un tad vai nu transformācijā vai pēcapstrādē, vai pārskatos sadala ar case ifiem.
C) DN cilvēki mistiskā veidā panāk, ka avots sakārto datus un ievieš pie sevis dažādus laukus. Vai vismaz iedod precīzus where nosacījumus.
D) variācija – DN cilvēki pēc labākās sirdsapziņas uztaisa. Tikmēr avota sistēmā atnāk jauns, strādīgs analītiķis un piekopj. Vienā brīdī kādam lietotājam rodas aizdomas, kāpēc kredītņēmēji tik bieži dzīvo turpat, kur galvotāji, un tad futbola sezonu var uzskatīt par atklātu.
3) izmaiņu atšķiršanas mehānisms. Jāpiekrīt, ka avota sistēmai ne vienmēr vajadzīgs. Uztaisa update vai fiziski padzēš. Bet DN pēc tam raķešzinātne jātaisa. Man personīgi tagad simpatizē, ja katrā avota tabulā katrai rindai ir pieejami ierakstīšanas un pēdējās koriģēšanas datumi, savukārt dzēstie ir atzīmēti kā loģiski dzēsti vai vismaz to atslēgas kaut kur uzskaitītas kā fiziski dzēstas.
4) avotu sistēmu datubāzes pusdokumentētas, pusaizmirstas īpatnības. Ir jauki, ja ir smuki, godīgi lauciņi un tabulas a la “darijums” ar klasificētu pazīmi, kredīts vai līzings. Vai atsevišķas tabulas “kredits”, “lizings”. Nav tik jauki, kad ir tabula “na_kustiba” ar laukiem paz1, paz2, paz3, paz4. Lien nu ārā no ādas, lai uzzinātu, ka kredīts ir tad, ja paz1=Z un paz3=9, bet līzings ja paz2=Y, paz3=4Q un nav aizpildīts paz4. Nu, ideju, cerams, sapratāt. Šis raksturīgs vecām sistēmām. Diemžēl gadās arī jaunākām, kuru izstrādātāji sapinušies meistarībā.
Šeit tomēr lūdzu paturēt prātā: mēs visi esam tikai cilvēki. Zinu reālu gadījumu, kur jaunpieņemtai augstas klases PLSQL programmētājai projekta cilvēki palūdza rakstīt vienkāršāku kodu. Jo viņa pabeigs darbu un aizies uz citu projektu, bet palicējiem būs jāsadzīvo ar tiem dinamiskajiem masīviem un citām grūti lasāmām konstrukcijām. Šī atziņa mani izmācīja, piemēram, likt nenorādīta datuma lookupam aizbāzni nevis … else ‘25000101’, bet kaut ko no sērijas … else to_char(to_date(’01-JAN-2500′,’DD-MON-YYYY),’YYYYMMDD’), jo otrajā gadījumā manuprāt ātrāk skaidrs, ka tas ir no aizbāžņa datuma izveidots identifikators.
Daži no jautājumiem, kurus labā pasaulē risina arhitekti un kvalitātes pārvaldnieki, bet, ja tas tā nav, tad DN analītiķiem galvas kūp:
1) Avota sistēmā dati, teiksim statusi (iesniegts, apstiprināts…) pēc idiem pielasās no dažādiem klasifikatoriem atkarībā no dokumenta tipa (ar nebūtiskām (?) niansēm – piemēram, kādam “apstiprināts” varētu saukties “pieņemts”. Bet var būt papildnianses, ka citam savukārt “apstiprināts” nozīmē pēc biznesa to pašu, ko vēl citam “iesniegts”)) – vai DN salikt vienā statusu dimensijas tabulā ar papildatribūtiem, vai pārņemt kā katram savu?
2) Ko darīt, ja avotā ir kļūdains risinājums, kurš netraucē avota sistēmai (lietotāji pieraduši vai nelieto to lauku)? Vai ja avota funkcionalitāte atšķiras no avota projektējuma? Kas tas ir? Bugs? Fīča? Todo? (šajā vietā atgādināšu, ka Inokentijs ir prom, bet Maija Saprātiņa, kurai to gabalu piešķīra, ir noslogota ar cita bloka iešanu produkcijā).
3) Ko darīt, ja, taisot ko citu, atrod kļūdu sen jau strādājošā DN gabalā? Teiksim, rakņājoties pa ETL, pamana, ka, pārņemot no rēķina preču aprakstus, sasien preces numuru ar apraksta numuru, rezultātā pirmajai precei ir piesaistīti visu rēķina preču pirmie apraksti, otrajai precei – visu preču otrie u.t.t. Kokteilis. Bet vai celt paniku, ja neviens nav sūdzējies? Ej nu zini, cik vietās un pārskatos šis jau iegājis un kā tur nokopts. Kurš metīs ar akmeni, ja DN analītiķis noklusēs, sak, pašam vēl nāksies labot, bet pietiek savā darāmā. Variācija – to taisīja Pēcis, negribas kašķēties. Apakšvariācija: par to atrašanu testētājiem algu maksā, lai viņi ziņo. Apakšapakšvariācija: negribas traucēt, jo varbūt kaut kādu nezināmu iemeslu dēļ tāda bija prasība.
4) Kurā vietā taisīt NVL, TRIM u.tml.? Avota datu atlases selektā? Transformācijas gabalā? Pēcapstrādē? Pirms iekļaušanas pārskatā? Vai tos likt visiem laukiem kā standartapstrādi pat tad, ja it kā nevajag?
5) Vai dublēt avota biznesa constraintus, teiksim, ka ievadē atļauti ‘1’, ‘2’, ‘3’, vai ņemt neanalizējot. Ir projekti, kuros taisa, lai transformācija izkrīt, ja ir ārpus diapazona. Ir, kur tādus samet speciālā tabulā izskatīšanai. Ir, kur pārņem un neliekas ne zinis. Ir tādi, kur notiek datu kvalitātes kontroles, piemēram, reizi nedēļā laiž kontrolselektu, vai DN nav parādījušies dati ārpus ‘1’, ‘2’, ‘3’. Bet – šādi kontrolselekti ir jāizdomā, jāievieš, jāuztur (!!!!!!!). Un jāzina, kā rīkoties, ja atradīsies ieraksti ar citām vērtībām. Kā saka viens mans draugs, pieredzējis analītiķis, – “nevajag meklēt kļūdu, ja nav zināms, ko ar to iesākt”.
Kā ietaupīt uz sirmo matu krāsošanu?
Datu noliktavu darba sludinājumos goda vietā ir KOMUNIKABILITĀTE un analītiskās prasmes. Pamatoti. Lai gan ceru, ka pārskatāmā nākotnē arvien vairāk uzņēmumos tiks šīs lietas sakārtotas, lai DN cilvēku komunikabilitātei (lasiet: ja pats mācēs sarunāt, tad (un tikai tad) dabūs korektus avota datus) tomēr nebūtu izšķirošā nozīme, bet avota sistēmu cilvēkiem informācijas sniegšana priekš DN projekta cilvēkiem būs parasts, plānots un kontrolēts darba uzdevums.
Tur, kur vēl ir ceļā uz to, manuprāt DN cilvēkiem ir vērts pārzināt, saprast avota sistēmas datu struktūras un funkcionalitāti. Jo realitāte mēdz būt tāda, ka dokumentācija vairāk nebūs, nekā būs, izstrādātājiem nebūs ne laika, ne vēlēšanās iedziļināties, savukārt iespēja tikt pie pilnīgākās dokumentācijas pasaulē – avota IS izejas koda ir 1) reti kad iespējams luksuss, 2) ne jau vienmēr to kodu DN cilvēks prot brīvi lasīt.
Mana pieeja – ja iespējams, atrast veidu, kā padarbināt avota sistēmu, redzēt un pastrādāt, kā dati rodas, kā notiek viss process. Piemēram, ja uz datu noliktavu pārņemami izrakstīto rēķinu dati, tad kā tie rodas, kāds ir to dzīves cikls. Pie reizes jēdzieni kļūs saprotamāki. Ideāli, ja ir pieeja visai dokumentācijai, t.sk. vēsturiskajai. Lasot, kā laikā gaitā sistēmas evolucionējušas, var labāk saprast fonu, problēmas, vājās vietas. Ja ir iespēja ar SQL pie avota bāzes tikt – ņamma!
Papildu tai fantastiskajai brīvības sajūtai (kura DN cilvēkam ir, ja māk un tiek klāt rakstīt visādus biznesa selektus avota IS) būs arī priekšstats par DN testēšanu, jo viens no veidiem ir, ka lietotāji atver vienu dokumentu vai sarakstu abās sistēmās un salīdzina. Man ir pieredze, kā lietotājiem patika dokumenti, kurā detaļās, ar attēliem un bultiņām aprakstīts, kuri lauciņi no avota sistēmas formām un sarakstiem atbilst kuriem datu noliktavā. Piemēram, nosaukumi atšķiras (objektīvu iemeslu dēļ, jo var gadīties, ka sen jau jaunas veidlapas, bet vecajā sistēmā nemaina un visi pieraduši, ka laukā “adrese” ir personas kods), taču jaunajos projektos, t.sk. DN lieto jaunos nosaukumus.
Nobeigumā vispārināts ieteikums: pirms nosodīt (ja vispār ko tādu darīt), pacensties izprast domu gājienu. Ir bijis, ka sarunu sāc ar “kurš idiots ko tādu izdomāja”, bet pabeidz jau ar “kāds interesants un attapīgs risinājums”! :)