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.

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

  1. Extraktion: Extrahieren Sie die Daten aus der Quelle.
  2. 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 als GueltigVon und einem leeren GueltigBis ein.
  3. 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

  1. Extraktion: Extrahieren Sie die Daten aus der Quelle.
  2. 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.
  3. 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.