2016-07-19 3 views
0

Ich bin ein ETL-Entwickler, der derzeit mit der Entwicklung a type 2 SCD aus vorhandenen historischen Daten in einer relationalen Datenbank beauftragt wird. Ich bin durchaus in der Lage, eine Typ-2-SCD zu erstellen, die für die Verfolgung zukünftiger Änderungen an den Daten zuständig ist, aber für die vorliegende Aufgabe bin ich völlig nutzlos.Oracle 11g - Erstellen eines Typ 2 SCD basierend auf vorhandenen historischen Daten in einem relationalen Modell

Das relationale Modell ist in unserem ODS. Basierend auf diesem relationalen Modell soll ich flache Datensätze in unserer DW-Dimension erstellen. Es gibt mehrere Attribute, die auf Änderungen überwacht werden müssen, jeweils in spezifischen verwandten Tabellen im relationalen Modell. Historische Änderungen müssen täglich beibehalten werden, und wenn mehrere Änderungen desselben Attributs am selben Tag vorgenommen werden, wird nur die letzte beibehalten.

Wie kann ich das angehen? Ich bin verloren. Danke im Voraus.

P.S. Wir sprechen über Tabellen mit 20 bis 30 Millionen Zeilen und mehreren Attributen, die sich zu einem bestimmten Zeitpunkt ändern können und daher zu einem neuen Datensatz in der SCD führen müssen.

+0

ETL SCD ODS DW WTF TLA? – MT0

+0

ETL - Extrahieren/Transformieren/Laden SCD - Langsames Ändern der Dimension ODS - Betriebsdatenspeicher DW - Data Warehouse –

+0

Oft ist ein SCD 2 erforderlich, um Änderungen an einer Quellentabelle zu verfolgen, die Änderungen nicht selbst verfolgt - sie überschreibt . Sagen Sie, dass Sie eine Quelle haben, in der Änderungen verfolgt werden (in gewisser Weise), aber Sie müssen diese nun in einem SCD2 modellieren? Um irgendeine Art von Algorithmus darzustellen, benötigen wir eine Vorstellung davon, wie Ihre Quelldaten aussehen. –

Antwort

1

Dies wird in der Tat schmerzhaft sein. Ich gehe von Ihrer Frage aus, dass die Tabellen, die die Attributwerte enthalten, derzeit unabhängig voneinander variieren (oder Sie die Frage nicht stellen müssen).

Wenn Sie eine Tabelle 'Table1' mit den Spalten 'Schlüssel', 'Attribut1' und 'Effektiv von', 'Gültig bis' haben, können Sie diese Tabelle in eine virtuelle Tabelle 'Schlüssel' auflösen. , 'Attribut1', 'Datum', projiziert eine Zeile für jedes Datum, an dem dieses Attribut aktuell war.

(Beachten Sie, dass Sie wahrscheinlich nicht will, dies als tun Dimension reichte verbinden gegen Ihr Datum, weil dies eine seiner Triangular Join (dh führt wirklich schlecht), haben Sie wahrscheinlich die Zeilen in einem ETL explodieren müssen tool/programmatically)

Wenn Sie diesen Prozess über mehrere Tabellen hinweg durchführen, verfügen Sie über eine Reihe von Tabellen, die Ihnen den vollständigen Tag-für-Tag-Snapshot jedes Attributs für jeden Tag zur Verfügung stellen, der Ihnen wichtig ist. Es ist dann relativ einfach, diesen Tabellen basierend auf "FK" und "Date" beizutreten, um Ihnen den vollständigen täglichen Snapshot über alle Attributwerte zu geben.

Dann müssen Sie dies natürlich durch einen anderen Prozess ausführen, um Zeilen mit demselben Schlüssel, zusammenhängenden Daten und denselben Attributwerten zu reduzieren, dh die Zeilen "nicht explodieren", zurück in "effektiv von", "effektiv" Formen. Beachten Sie noch einmal, dass dies grundsätzlich eine zeilenweise Operation (oder zumindest eine Fensterfunktion) ist, und eine mengenbasierte Methode wird sehr schlecht funktionieren. Persönlich würde ich es nur durch irgendeinen .net/Java-Code streamen, um dies zu erreichen.

Angesichts der Datenvolumen wird dies eine Weile dauern, sollte aber erreichbar sein.

Verwandte Themen