Ein­lei­tung und Systembeschreibung

Es war ein­mal eine Behörde, die hatte ein Data Warehouse(DWH) in der Statistikabteilung … 

Das DWH wird ein­mal täg­lich von meh­re­ren ver­schie­de­nen Quell­sys­te­men belie­fert. Die Daten eini­ger Quell­sys­teme haben Abhän­gig­kei­ten unter­ein­an­der (z.B. zei­gen die Zah­lun­gen aus einem Sys­tem auf die Stamm­da­ten aus einem ande­ren Sys­tem) sodass der täg­li­che ETL-Pro­zess nur abge­schlos­sen wer­den kann, wenn die Daten aus allen wich­ti­gen Quell­sys­te­men gelie­fert wurden.

Aus his­to­ri­schen Grün­den erfolgt die Belie­fe­rung des DWH von jedem Quell­sys­tem mit­hilfe von „Flat Files“. Die Voll­stän­dig­keit der Dateien wird über von den Quell­sys­te­men erzeugte „end of delivery“-Dateien, oder über die für die Lie­fe­rung ver­wen­de­ten Pro­gramme tech­nisch sicher­ge­stellt. Es besteht keine zusätz­li­che Mög­lich­keit aus dem DWH Anfra­gen an die Quell­sys­teme zu stel­len um dort Daten manu­ell abfra­gen zu kön­nen. Um die Lie­fe­rung so per­for­mant wie mög­lich zu gestal­ten, wird von allen Quell­sys­te­men stets nur die Dif­fe­renz zum Vor­tag geliefert.

Das DWH ist in zwei Teile geglie­dert auf, wel­che in sepa­ra­ten Lade­pro­zes­sen bewirt­schaf­tet werden:

Zum einen gibt es einen Bereich, in wel­chem die Infor­ma­tio­nen aus allen Quell­sys­te­men ver­ar­bei­tet wer­den. Die­ser Bereich besteht aus einem aus Ver­si­ons- Anker- und Bewe­gungs­da­ten-Tabel­len auf­ge­bau­tem CDW und einem aus Dimen­si­ons- und Fak­ten­ta­bel­len auf­ge­bau­ten DM. Der täg­li­che Lade­pro­zess für die­sen Bereich dau­ert ca. 8 Stun­den (im Fol­gen­den wird die­ser Bereich als Bereich der Gesamt­da­ten bezeichnet).

Der andere Bereich stellt einen Ope­ra­tio­nal Data Store (ODS) des Haupt­quell­sys­tems da. Die­ser Bereich spie­gelt die Quell­in­for­ma­tio­nen 1 zu 1 wie­der und wurde erstellt um die Infor­ma­tio­nen mit den Report­ing Pro­gram­men der Sta­tis­tik­ab­tei­lung dar­stel­len zu kön­nen. Der täg­li­che Lade­pro­zess für die­sen Bereich dau­ert ca. 15 Minu­ten. (im Fol­gen­den wird die­ser Bereich als ODS-Bereich bezeichnet)

Eine Beson­der­heit des DWH der Sta­tis­tik­ab­tei­lung ist, dass der täg­li­che Lade­pro­zess auf­grund von fach­li­chen Anfor­de­run­gen indi­rekt als Qua­li­täts­si­che­rung für die Quell­sys­teme fungiert:

Von den Experten aus den Fach­ab­tei­lun­gen wur­den Regeln fest­ge­legt, wel­che zum Bei­spiel die mini­mal auf einem Daten­satz erhal­te­nen Infor­ma­tio­nen, oder die Ein­zig­ar­tig­keit von Schlüs­sel­fel­dern bestim­men. Da für die Sta­tis­tik­ab­tei­lung die Inte­gri­tät der Daten von höchs­ter Wich­tig­keit ist und der Daten­stand nicht tages­ak­tu­ell sein muss, wird der Lade­pro­zess bei einem Ver­stoß gegen diese Regeln unter­bro­chen. Erst, nach­dem die Daten in den Quell­sys­te­men kor­ri­giert wor­den sind und dar­auf­hin ein aktua­li­sier­ter Daten­satz gelie­fert wor­den ist, kann der betrof­fene Lade­pro­zess been­det werden.

Ent­de­ckung der feh­ler­haf­ten Daten­lie­fe­rung und Problembeschreibung

Im Rah­men eines täg­li­chen Lade­pro­zes­ses im ODS-Bereich kam es eines Tages zu einer Unter­bre­chung, da für bestimmte Schlüs­sel­fel­der Dupli­kate vor­han­den waren, wel­che die glei­che fach­li­che Gül­tig­keit hat­ten. Der Lade­pro­zess im Bereich der Gesamt­da­ten lief par­al­lel ohne Abbruch durch, da hier andere fach­li­che Regeln fest­ge­legt sind. Um den abge­bro­che­nen Lade­pro­zess fort­set­zen zu kön­nen, wur­den die feh­ler­haf­ten Daten­sätze nach einer Anfrage an das Quell­sys­tem aus den gelie­fer­ten Dateien ent­fernt. Durch diese Anpas­sun­gen konnte schließ­lich auch der Lade­pro­zess im ODS-Bereich fer­tig­ge­stellt werden.

Nach einer Ana­lyse des Quell­sys­tems stellte sich her­aus, dass die feh­ler­hafte Lie­fe­rung durch ein auto­ma­ti­sches Ein­spie­len von Back­ups auf­ge­tre­ten war. Nach einer tie­fer­ge­hen­den Ana­lyse wurde fest­ge­stellt, dass es auch Monate vor dem Zwi­schen­fall schon zu die­sem Pro­blem gekom­men war. Die vor­he­ri­gen Fälle hat­ten aber kei­nen direk­ten Abbruch des Lade­pro­zes­ses zur Folge. Zudem konnte der Feh­ler durch die Ana­lyse des Quell­sys­tems auf 4 Dateien ein­ge­grenzt wer­den. Die expli­zit betrof­fe­nen Daten­sätze konn­ten vom Quell­sys­tem aber nicht iden­ti­fi­ziert werden.

Für das DWH der Sta­tis­tik­ab­tei­lung hat­ten diese feh­ler­haf­ten Lie­fe­run­gen 2 Auswirkungen:

  1. Akut konnte es immer wie­der zu Abbrü­chen des täg­li­chen Loads kom­men, da eine Dis­kre­panz zwi­schen dem Quell­sys­tem und den DWH bestand. Diese Abbrü­che erfor­der­ten manu­elle Ein­griffe auf Sei­ten des für die Bewirt­schaf­tung des DWH zustän­di­gen Teams und manu­elle Über­prü­fun­gen auf Sei­ten des Quellsystems.
  2. Die Dis­kre­panz zwi­schen Quell­sys­tem und dem DWH ist aus fach­li­cher Sicht nicht gewünscht. Neben den tech­ni­schen Pro­ble­men durch die Abbrü­che konn­ten auch fach­li­che Pro­bleme durch feh­ler­hafte Sta­tis­ti­ken nicht aus­ge­schlos­sen werden.

Ana­lyse des Pro­blems und Problemlösung

Um das Pro­blem behe­ben zu kön­nen und das Aus­maß abschät­zen zu kön­nen, musste der Daten­stand des Quell­sys­tems mit dem Daten­stand des DWH ver­gli­chen wer­den. Mit rela­tiv gerin­gem Arbeits­auf­wand konn­ten für die 4 betrof­fe­nen Dateien Voll­ab­züge aus dem Quell­sys­tem erstellt und an das DWH gelie­fert werden.

Um den pro­duk­ti­ven Betrieb nicht ein­zu­schrän­ken, wurde im DWH eine tem­po­räre Umge­bung auf­ge­setzt, wel­che mit dem Daten­stand zum Zeit­punkt des Voll­ab­zugs ein­ge­fro­ren wurde. Die­ser Daten­stand wurde dann auf der DB in neuen Sche­mas gespei­chert, sodass die Daten als Refe­renz ver­füg­bar waren. Danach wur­den die 4 betrof­fe­nen Dateien mit den vor­han­de­nen Bewirt­schaf­tungs­pro­zes­sen im ODS-Bereich in die ein­ge­fro­rene DB gela­den. Somit konnte nun der ein­ge­fro­rene Daten­stand des DWH mit dem Daten­stand des DWH nach dem Laden des Voll­ab­zugs ver­gli­chen wer­den. Zudem wurde hier­durch sicher­ge­stellt, dass es durch das Laden eines Voll­ab­zugs im ODS-Bereich nicht zu uner­wünsch­ten Neben­wir­kun­gen kommt, da die­ser eigent­lich nur für das Laden von Dif­fe­renz-Dateien aus­ge­legt ist.

Das Ein­spie­len und Laden der 4 Dateien ver­lief ohne grö­ßere Pro­bleme und die Nach­fol­gende Ana­lyse lie­ferte fol­gende Ergebnisse:

  • Die betrof­fe­nen 4 Tabel­len im ODS-Bereich kön­nen ohne wei­tere Anpas­sun­gen mit einem Voll­ab­zug bela­den werden.
  • Die Abwei­chun­gen waren selbst auf Monats­ebene so gering, dass keine signi­fi­kan­ten Aus­wir­kun­gen für die Sta­tis­tik zu erwar­ten sind.

Die Pro­bleme ODS-Bereich konn­ten also ohne grö­ßere Her­aus­for­de­run­gen berei­nigt wer­den. Somit blieb (nur) noch die Berei­ni­gung im Bereich der Gesamt­da­ten als Auf­gabe übrig.

In die­sem Bereich ist die Bewirt­schaf­tungs­lo­gik so stark auf Dif­fe­renz­lie­fe­run­gen aus­ge­legt, dass es nicht mög­lich ist einen Voll­ab­zug zu laden. Aus die­sem Grund wurde für die 4 ver­schie­de­nen Dateien mit deren Inhalt jeweils eine Anker- und eine Ver­si­ons-Tabelle befüllt wird, die Logik in SQL nach­ge­baut. Die Logik wurde danach so ange­passt, dass die Ver­ar­bei­tung eines Voll­ab­zugs mög­lich ist. Dafür muss­ten unter ande­rem Logi­ken zur Ver­si­ons­gül­tig­keit und zum Löschen von Ein­trä­gen (was im nor­ma­len Betrieb nicht vor­kom­men kann) ent­wi­ckelt wer­den. Nach eini­gen hun­dert Zei­len SQL-Code war somit auch die Berei­ni­gung im Bereich der Gesamt­da­ten erle­digt. Par­al­lel dazu konnte manu­ell sicher­ge­stellt wer­den, dass alle Tabel­len im CDW und im DM, wel­che mit den Daten aus den 4 Dateien bewirt­schaf­tet wer­den, täg­lich ein Update erhal­ten, oder sogar kom­plett neu erstellt wer­den. Dadurch wurde bestä­tigt, dass die Kor­rek­tu­ren an den Anker- und Ver­si­ons-Tabel­len beim nächs­ten Lade­pro­zess auto­ma­tisch an alle betrof­fe­nen Fol­ge­ta­bel­len ver­teilt werden.

Die­ses an der tem­po­rä­ren Umge­bung getes­tete Vor­ge­hen konnte zunächst an der Test­um­ge­bung und im wei­te­ren Ver­lauf an der Pro­duk­ti­ons­um­ge­bung ange­wandt wer­den. Dazwi­schen lag natür­lich der Durch­lauf der Qua­li­täts­si­che­rung und das Aus­füh­ren und Doku­men­tie­ren von Tests.

Fazit und Designempfehlungen

Obwohl es in die­sem Fall kein Pro­blem gewe­sen ist, sollte bei einer Schnitt­stelle, wel­che auf der Lie­fe­rung von Dateien basiert, zusätz­lich sicher­ge­stellt wer­den, dass alle gesen­de­ten Daten voll­stän­dig im Ziel­sys­tem ankom­men. Im vor­lie­gen­den Fall wurde diese Kon­trolle von der ver­wen­de­ten Soft­ware zur Daten­lie­fe­rung durch­ge­führt. Bei der zusätz­li­chen Ver­wen­dung einer Prüf­summe oder einer ande­ren Art der Vali­die­rung hätte das Ziel­sys­tem die Mög­lich­keit einen Daten­ver­lus­tes im Lie­fe­rungs­pro­zess auszuschließen.

Das Vor­han­den­sein von „Data-Lineage“ hätte den Auf­wand beim Suchen nach betrof­fe­nen Fak­ten- und Dimen­si­ons-Tabel­len deut­lich redu­ziert. „Data-Lineage“ hätte aber nicht nur in die­sem Fall den Auf­wand ver­rin­gert und die Gefahr von Feh­lern durch manu­elle Arbeit redu­ziert, son­dern würde auch im Betrieb zum Bei­spiel bei Anfra­gen von Nut­zern nach der Daten­her­kunft, oder bei Erwei­te­run­gen des DWH helfen.

Gene­rell ist es hilf­reich, wenn alle Bewirt­schaf­tungs­pro­zesse sowohl mit Dif­fe­renz­lie­fe­run­gen als auch mit Voll­ab­zü­gen umge­hen kön­nen. Dadurch wäre in dem vor­lie­gen­den Fall sowohl in der Umset­zung als auch beim Tes­ten viel Auf­wand gespart wor­den. Alles in Allem konnte das DWH der Sta­tis­tik­ab­tei­lung wie­der mit dem Quell­sys­tem syn­chro­ni­siert werden.

… und wenn sie nicht gestor­ben sind, dann laden sie [die täg­li­chen Daten] noch heute.