In einem Data Warehouse (DWH) ist die Versionierung von Daten ein wichtiger Aspekt, um die Historie der Daten zu verfolgen und Änderungen im Laufe der Zeit nachzuvollziehen. Eine gängige Methode zur Versionierung von Daten ist die Verwendung von gültigen Von- und Bis-Datumsfeldern, um den Zeitraum anzugeben, in dem ein bestimmter Datensatz gültig ist. Dieses Konzept wird auch als Slowly Changing Dimension (SCD) Typ 2 bezeichnet.
Unten finden Sie ein Beispiel für eine Tabelle in einem MSSQL Server DWH, die für die Versionierung von Daten im ETL-Prozess konfiguriert ist.
Inhalt dieser Seite
Beispiel: Kunden-Tabelle mit Versionierung
-- Erstellen der Kunden-Tabelle mit Versionierung
CREATE TABLE DWH_Kunden (
KundenID INT NOT NULL,
Version INT NOT NULL,
Name NVARCHAR(100),
Adresse NVARCHAR(255),
GueltigVon DATETIME NOT NULL,
GueltigBis DATETIME,
PRIMARY KEY (KundenID, Version)
);
In diesem Beispiel:
KundenID
ist die eindeutige Identifikation eines Kunden.Version
ist ein Zähler, der für jeden Kunden inkrementiert wird, wenn eine Änderung vorgenommen wird.GueltigVon
ist das Datum, an dem der Datensatz gültig wird.GueltigBis
ist das Datum, an dem der Datensatz seine Gültigkeit verliert.
ETL-Prozess für die Versionierung
- Extraktion: Extrahieren Sie die Daten aus der Quelle.
- Transformation:
- Überprüfen Sie, ob es Änderungen bei den extrahierten Daten im Vergleich zu den bereits im DWH vorhandenen Daten gibt.
- Wenn eine Änderung festgestellt wird:
- Setzen Sie das
GueltigBis
-Datum des alten Datensatzes auf das aktuelle Datum. - Fügen Sie einen neuen Datensatz mit der inkrementierten
Version
, dem aktuellen Datum alsGueltigVon
und einem leerenGueltigBis
ein.
- Setzen Sie das
- Laden: Laden Sie die transformierten Daten in die
DWH_Kunden
-Tabelle.
Beispiel: Einfügen oder Aktualisieren eines Kunden im ETL-Prozess
DECLARE @KundenID INT = 1;
DECLARE @Name NVARCHAR(100) = 'Neuer Name';
DECLARE @Adresse NVARCHAR(255) = 'Neue Adresse';
DECLARE @Heute DATETIME = GETDATE();
-- Setzen des GueltigBis-Datums für die alte Version
UPDATE DWH_Kunden
SET GueltigBis = @Heute
WHERE KundenID = @KundenID AND GueltigBis IS NULL;
-- Einfügen der neuen Version
INSERT INTO DWH_Kunden (KundenID, Version, Name, Adresse, GueltigVon)
SELECT @KundenID, COALESCE(MAX(Version), 0) + 1, @Name, @Adresse, @Heute
FROM DWH_Kunden
WHERE KundenID = @KundenID;
In diesem Beispiel wird ein neuer Datensatz mit einer höheren Version und dem aktuellen Datum als GueltigVon
eingefügt, und der GueltigBis
-Wert des alten Datensatzes wird auf das aktuelle Datum gesetzt, wenn eine Änderung festgestellt wird.
Historisierung von Daten
Die Historisierung von Daten in einem Data Warehouse (DWH) ermöglicht es, den Verlauf von Datensatzänderungen über die Zeit zu verfolgen. Eine gängige Methode zur Historisierung ist die Verwendung von Zeitstempeln oder Datums-/Zeitfeldern, um den genauen Zeitpunkt der Änderung eines Datensatzes festzuhalten. Unten finden Sie ein Beispiel für eine Tabelle in einem MSSQL Server DWH, die für die Historisierung von Daten im ETL-Prozess konfiguriert ist.
Beispiel: Historisierte Kunden-Tabelle
-- Erstellen der historisierten Kunden-Tabelle
CREATE TABLE DWH_Kunden_Historie (
HistorieID INT IDENTITY(1,1) PRIMARY KEY,
KundenID INT NOT NULL,
Name NVARCHAR(100),
Adresse NVARCHAR(255),
AenderungsDatum DATETIME NOT NULL DEFAULT GETDATE()
);
In diesem Beispiel:
HistorieID
ist ein automatisch inkrementierter Primärschlüssel.KundenID
ist die eindeutige Identifikation eines Kunden.AenderungsDatum
ist das Datum und die Uhrzeit der Änderung.
ETL-Prozess für die Historisierung
- Extraktion: Extrahieren Sie die Daten aus der Quelle.
- Transformation:
- Überprüfen Sie, ob es Änderungen bei den extrahierten Daten im Vergleich zu den bereits im DWH vorhandenen Daten gibt.
- Wenn eine Änderung festgestellt wird, bereiten Sie die Daten für die Historisierung vor, indem Sie das aktuelle Datum und die Uhrzeit als
AenderungsDatum
festlegen.
- Laden: Laden Sie die transformierten Daten in die
DWH_Kunden_Historie
-Tabelle.
Beispiel: Historisierung eines Kunden im ETL-Prozess
DECLARE @KundenID INT = 1;
DECLARE @Name NVARCHAR(100) = 'Neuer Name';
DECLARE @Adresse NVARCHAR(255) = 'Neue Adresse';
-- Einfügen der historisierten Daten
INSERT INTO DWH_Kunden_Historie (KundenID, Name, Adresse)
VALUES (@KundenID, @Name, @Adresse);
In diesem Beispiel wird bei jeder Änderung eines Kundendatensatzes ein neuer Eintrag in der DWH_Kunden_Historie-Tabelle hinzugefügt, wobei das AenderungsDatum automatisch auf das aktuelle Datum und die aktuelle Uhrzeit gesetzt wird. Diese Methode ermöglicht es, den vollständigen Verlauf der Änderungen an den Kundendaten im Laufe der Zeit nachzuvollziehen.