ETL

Extraktion, Transformation und Laden sind die drei großen Schritte die von Daten auf dem Weg von ihrer Quelle in das DWH durchlaufen.
Dazu gehören die Überwachung von Datenquellen und das Entdecken von Änderungen, sowie auch das Anpassen von Einheiten und Codierungen und das Laden ins DWH.

Dieser Prozess läuft typischerweise nicht komplett im Hauptspeicher ab, es werden einer oder mehrere Zwischenspeicher (Data Staging Area) verwendet.

Extraktion

Lieferzeitpunkt der Daten kann Periodisch sein, auch synchron (In Echtzeit mit Änderung der Daten in der Quelle) oder Ereignisgesteuert.

Beim Nachladen können Snapshots oder nur Änderungen geliefert werden. Hier wird Datenmenge gegen Aufwand aufgewogen.

Transformation

Selektion

Es können Daten gefiltert werden, sodass nur die Datensätze gespeichert werden, bei denen eine bestimmte Bedingung erfüllt ist.

Projektion

Auch Projektionen sind häufig, wenn nicht alle Attribute der Quelldaten relevant sind.

Pivotisierung

Bei einer Pivotisierung werden Zeilen in Spalten verwandelt. So können neue Erkenntnisse visualisiert werden, die eventuell nicht Ziel der Analyse in der Datenquelle waren.

Korrektur

Automatisches Erkennen und Korrigieren ist möglich, wenn gewisse Eigenschaften festen bekannten Mustern folgen. Die Korrektheit der Daten kann überprüft werden, bevor diese blind kopiert werden.

Formatieren

Felder des selben Datentyps können in unterschiedlichen Quellen in verschiedenen Formaten existieren. Es ist sinnvoll beispielsweise Namen einheitlich in Vor- Nach- und Namenszusätze zu teilen.

Aggregation


Wenn die Daten detaillierter vorliegen als sie im Ziel benötigt werden können sie zusammengefasst und vereinfacht werden.

Disaggregation

Bei großen Objekten kann es sinnvoll sein einige Attribute in eine separate Detailtabelle auszulagern. So werden alle Informationen beibehalten, ohne Benutzer zu stören während diese Daten nicht genutzt werden.

Konvertieren

Konvertieren von Einheiten ist wichtig, insbesondere wenn verschiedene Formate oder Einheiten in den Quellen üblich sind.
Besonders bei Uhrzeiten kann diese Umwandlung Probleme bereiten, aufgrund von verschiedener Zeitzonen und Winter- Sommerzeitverschiebung ist die Erkennung einer eindeutigen Reihenfolge schwierig.
Währungen sind ebenfalls problematisch, da hier die Umrechnungskurse teilweise minütlich schwanken können.
Typischerweise werden solche Umrechnungen vom Nutzen der konkreten Anwendung abhängig gemacht, häufig wird der Wert in der ursprünglichen Währung und einer umgewandelten Form als Referenz gespeichert.

Matching

Daten können in unterschiedlichen Daten doppelt vorliegen. Um mehrfache Speicherung von z.B. Kundendaten zu vermeiden können diese anhand bestimmter Kriterien als identisch erkannt und zusammengefasst werden.

Konsistenzprüfung

Manche Daten dürfen nur bestimmte Werte enthalten. Solche Einträge bei denen die Bedingung verletzt sind, können zur manuellen Überprüfung zurückgehalten werden oder automatisiert behandelt / verworfen werden.

Codierung vereinheitlichen

Z.B. könnte der Eintrag für Geschlecht in einer Quelle als M/F und in einer anderen als 1 und 0 gespeichert sein.

Berechnung abgeleiteter Werte


Falls für den Anwendungsfall abgeleitete Werte relevant sind können diese direkt berechnet werden.

Abgleich

Vergleich von Quelle und Ziel (z.B. Anzahl aktiver Kunden) um Vollständigkeit der Datensätze zu überprüfen.
Dieser Schritt kann in belieber Granularität ausgeführt werden um auch feinere Fehler zu erkennen.

Laden

Bringt Daten ins Warehouse, mit verschiedenen Strategien abhängig von den Anforderungen und dem Zeitfenster.
Die Aktualisierung kann auch in verschiedenen Intervallen erfolgen und an den Erfolg der vorherigen Transformationen gekoppelt sein.

ETL Architekturen

Können in zwei Teilkomponenten unterteilt werden.

  • Datenquelle zu Staging Area
  • Staging Area zu DWH


Beide Teilkomponenten existieren in verschiedenen Realisierungsformen.

  • Individuallösungen
  • Teil einer Suite (Oracle / Microsoft)
  • Werkzeuge für spezielle Operationen
    • DataCleanser von EDD: Speziell zur Duplikateliminierung

Dabei ist das ETL-Tool im Idealfall die einzige Komponente die mit dem DWH kommuniziert, so kann zentral gearbeitet und überwacht werden. Es sind verschiedene Arten des Monitoring und Loggin möglich, auch Fehler können sauber erkannt und behandelt werden.

Individuallösungen

Können mit verschiedensten Tools implementiert sein, von Shell- und Skriptsprachen, höherer Programmiersprachen wie C/C++ oder im DBS integrierte Sprachen wie PL/SQL.

Die Prozesse sind nicht unbedingt gut dokumentiert und somit schlecht nachvollziehbar. Der Einsatz verschiedenster Technologien und Tools macht die Systeme unübersichtlich und somit schlecht wart-oder erweiterbar.

Datenbankerweiterungen

Externe Tabellen

Außerhalb der eigentlichen Datenbank können weitere Tabellen angelegt werden. So kann auch mit Dateien gearbeitet werden, die nicht vom DBMS verwaltet werden.

Um eine solche Tabelle anzulegen wird analog zur Erstellung von internen Tabellen gearbeitet.

CREATE TABLE <Externer Tabellenname>(
<Attribut 1> <Datentyp 1>,
<Attribut 2> <Datentyp 2>,
...)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
DEFAULT DIRECTORY <Verzeichnis>
ACCESS PARAMETERS
(<Zugriffsparameter>)
LOCATION (<Name der Datei>)
REJECT LIMIT (<Parameter>);

Dabei ist die Arbeit mit Constraints nicht möglich.

Das angegebene Format wird erst beim Stellen einer Anfrage überprüft. Falls es korrekt ist, kann nun wie auf eine interne Tabelle zugegriffen werden.
Dabei ist der Zugriff allerdings nur lesend möglich.

Im Allgemeinen ist der Zugriff auf CSV Dateien größer als der auf Dateien fester Größe, Grund dafür ist der zusätzliche Aufwand beim Parsen.

Beispiel

Sei folgende CSVDatei mit Kundendaten gegeben

0000000001#Rupp#Talke# 1500,11
0000000002#Hamann#Judith# 2540,81
0000000003#Novincak#Ute# 2313,92
0000000004#Riemann#Bettina# 1208,06
0000000005#Meier#Ottilie# 2886,08
...

oder mit festen Feldgrößen:

0000000001 Rupp     Talke   1500,11
0000000002 Hamann   Judith  2540,81
0000000003 Novincak Ute     2313,92
0000000004 Riemann  Bettina 1208,06
0000000005 Meier    Ottilie 2886,08
...

Um ihren Inhalt auszulesen würde folgender Code verwendet werden

CREATE OR REPLACE DIRECTORY Quellverzeichnis AS 'C:/DWH/';
 
CREATE TABLE Kunden_Extern( -- Definition der Attribute
	ID      NUMBER(10),
	NAME    VARCHAR2(50),
	VORNAME VARCHAR2(50),
	UMSATZ  NUMBER(10,2))
	
	ORGANIZATION EXTERNAL -- Externe Tabelle
		(TYPE oracle_loader -- Ladewerkzeug
		DEFAULT DIRECTORY Quellverzeichnis --Verzeichnis
		ACCESS PARAMETERS -- Beschreibung der Datei
			(RECORDS DELIMITED BY NEWLINE
			FIELDS TERMINATED BY '#'
			OPTIONALLY ENLCOSED BY '"'
			)
		LOCATION ('KUNDEN.txt') -- Quelldatei
	)
REJECT LIMIT UNLIMITED;

Um die Datei fester Größe zu verwenden muss nur die Beschreibung der Quelldatei angepasst werden.

ACCESS PARAMETERS
	(RECORDS DELIMITED BY NEWLINE
	FIELDS(
		ID      CHAR(10),
		NAME    CHAR(20),
		VORNAME CHAR(20),
		UMSATZ  CHAR(10)
	)

Multiple Insert

Standard SQL erlaubt mit einer INSERT Anweisung nur das Einfügen in eine Tabelle.
Mit INSERT ALL und INSERT FIRST kann auch in mehrere Tabellen eingefügt werden.

Dabei wird mit WHEN <Bedingung> THENgearbeitet.

INSERT FIRST
	WHEN Umsatz>4000 THEN INTO Kunde_Kat_I
	WHEN Umsatz>3500 THEN INTO Kunde_Kat_II
	WHEN Umsatz>3000 THEN INTO Kunde_Kat_III
	SELECT * FROM Kunden_Extern_Fest;

Das FIRST sorgt für Einfügen in der ersten passenden Tabelle, somit ist die Reihenfolge der Abfragen relevant.

Der selbe Effekt mit Standard SQL bedarf mehrerer einzelner Anfragen.

INSERT
INTO Kunde_Kat_I
SELECT *
FROM Kunden_Extern
WHERE Umsatz > 4000;
 
INSERT
INTO Kunde_Kat_II
SELECT *
FROM Kunden_Extern
WHERE Umsatz BETWEEN 3499 AND 4000;
 
INSERT
INTO Kunde_Kat_III
SELECT *
FROM Kunden_Extern
WHERE Umsatz BETWEEN 3000 AND 3499;

Die Erweiterung bietet entsprechend signifikante Zeitersparnisse bei der Berechnung.

Merge Into

Standard SQL erlaubt nur Aktualisierungs- oder Einfügeoperationen. Mit MERGE INTO ist eine kombinierte Anweisung möglich.
Falls ein Datensatz nicht existiert, so soll er erstellt werden. Alle bereits existierenden Werte sollen angepasst werden.

MERGE INTO F
	USING NeueDaten N
	ON (F.ID1=N.ID1
		AND F.ID2=N.ID2 
		AND F.ID3=N.ID3)
	WHEN MATCHED THEN
		UPDATE SET F.VALUE = F.VALUE + N.VALUE
	WHEN NOT MATCHED THEN
		INSERT VALUES (N.ID1,N.ID2,N.ID3,N.VALUE);

Bulk Loader

Um bei großen Einfügeoperationen Performance zu gewinnen, wird der klassische Weg durch das DBMS umgangen.
Die Konsistenz und Korrektheit wird extern geprüft und direkt in die Datenbankdatei geschrieben. So wird die Verwaltung von mehreren Benutzern oder das Sichern von Rückrollbaren Transaktionszuständen vermieden um kürzere Ladezeiten zu erreichen.

Dieser Weg ist bei Datenbankmigrationen sinnvoll, wenn extreme Mengen von Informationen verarbeitet werden sollen, die im Allgemeinen bereits Korrekt und Vollständig sind.