Dimensionsdaten, die sich langsam oder unvorhersehbar ändern, werden in SCD-Analysen (Slowly Changing Dimensions) erfasst. In einer Data-Warehouse-Umgebung hat eine Dimensionstabelle einen Primärschlüssel, der jeden Datensatz und andere Informationen, die als Dimensionsdaten bezeichnet werden, eindeutig identifiziert.
Alle Aktualisierungsmethoden für die verschiedenen SCD-Typen können mit dem SortCL-Programm in IRI CoSort durchgeführt werden. In IRI Voracity gibt es einen Assistenten, der beim Erstellen der SCD-Job-Skripte hilft, die beim Ausführen des SortCL-Programms verwendet werden. Die meisten Typen verwenden eine vollständige äußere Verknüpfung, um Datensätze aus der ursprünglichen Datenquelle mit Datensätzen in der Aktualisierungsquelle abzugleichen, basierend auf der Gleichsetzung eines Schlüssels von beiden. Datensätze mit Übereinstimmungen müssen aktualisiert werden. Datensätze in der Aktualisierungsquelle, die keine Übereinstimmung aufweisen, müssen dem Master hinzugefügt werden.
Dieser Artikel behandelt das SCD-Typ-1-Modell, bei dem neue Informationen aus den Aktualisierungsdaten die ursprünglichen Informationen in der Masterquelle überschreiben. Datensätze in der Aktualisierungsquelle ohne Übereinstimmungen werden dem neuen Master hinzugefügt. Da bei diesem Modell alte Werte mit den aktuellen Werten überschrieben werden und kein Verlauf beibehalten wird, wird es nicht oft verwendet.
Die Aktualisierung erfolgt durch Verknüpfung bezüglich des Feldes ProductCode. In diesem Beispiel sind die aktuellen Daten die Quelldatei master1.dat und update.dat wird verwendet, um Werte zu ändern oder Datensätze in der aktuellen Master-Quelle hinzuzufügen.
Die Quelle master1.dat enthält:
ProductCode | Kosten | Startdatum |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365,00 | 20120101 |
G101 | 19.25 | 20110930 |
J245 | 450,50 | 20110430 |
S022 | 98,75 | 20110515 |
In diesem Fall haben die Aktualisierungsdaten alle das gleiche Startdatum. Die Quelle update.dat enthält Datensätze mit den folgenden Werten:
ProductCode | Kosten | Startdatum |
---|---|---|
F112 | 2425,00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
Die neue Maßtabelle wird nach dem Update diese Werte haben:
ProductCode | Kosten | Startdatum |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2425,00 | 20120701 |
G101 | 19.25 | 20110930 |
J245 | 550,50 | 20120701 |
M447 | 139,25 | 20120701 |
S022 | 101,75 | 20120701 |
In IRI Workbench gibt es einen Assistenten, der Sie bei der Erstellung von Skripten zum Aktualisieren von Dimensional-Dateien und -Tabellen unterstützt. Dieser Assistent befindet sich im Dropdown-Menü „Voracity“ in der Navigationsleiste. Wählen Sie zuerst den SCD-Typ aus. Anschließend wird das Fenster angezeigt, in dem Sie die Dateien auswählen, die für die Verarbeitung des Updates verwendet werden.
Der nächste Bildschirm dient zum Definieren des Joins, der mit den Master- und Update-Quellen durchgeführt wird
Unten sehen Sie das sortcl-Jobskript, das bei der Verarbeitung der beiden Dateien master1.dat und update.dat erzeugt wird:
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD1/master1.dat /PROCESS=DELIMITED /ALIAS=master1 /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/update.dat /PROCESS=DELIMITED /ALIAS=update /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /JOIN FULL_OUTER NOT_SORTED master1 NOT_SORTED update WHERE MASTER1.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=/master1.dat # This processes all except the new records /PROCESS=DELIMITED /FIELD=(MASTER1.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST_NEW, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.COST ELSE MASTER1.COST) /FIELD=(STARTDATE_NEW, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.STARTDATE ELSE MASTER1.STARTDATE) /INCLUDE WHERE MASTER1.PRODUCTCODE NE "" /OUTFILE=master1.dat # This processes the new records to be added /PROCESS=DELIMITED /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') I /INCLUDE WHERE MASTER1.PRODUCTCODE EQ ""