Kapitel 24
ETL in der Praxis
590
4. Transportieren Sie das Tablespace Set zur neuen Datenbank.
5. Integrieren Sie das Tablespace Set in die Zieldatenbank.
6. Setzen Sie die transportierte Tablespace online.
24.5 Weitere ETL-Features
Beim Laden ist es erforderlich, Daten aus einer externen Quelle auf mehrere
Tabellen im Data Warehouse zu verteilen. Bisher musste das mithilfe von mehre-
ren INSERT-Befehlen erfolgen. Seit Oracle9i gibt es den INSERT-Befehl für meh-
input datafile fno=00005 name=D:\ORACLE\ORADATA\DEMO\TRANSPORT01.DBF
converted datafile=C:\TEMP\DATA_D-DEMO_I-3275678797_TS-TRANSPORT_FNO-
5_01FQVFAO
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:04
Finished backup at 31.07.08
impdp system/manager DUMPFILE=TS.DMP DIRECTORY=tsimp
TRANSPORT_DATAFILES=transport01.dbf
Import: Release 12.1.0.1.0 - Production on Donnerstag, 31 Juli, 2014
15:12
Copyright (c) 2007, Oracle. All rights reserved.
With the Partitioning, Oracle Label Security, OLAP and Data Mining
options
Master-Tabelle "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" erfolgreich ge
laden/entladen
"SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** DUMPFILE=TS.DMP
DIRECTORY=tsimp
TRANSPORT_DATAFILES=/u01/oracle/product/10.1.0/db_1/oradata/dwhkomp2/
transport01.dbf wird gestartet
Objekttyp TRANSPORTABLE_EXPORT/PLUGTS_BLK wird verarbeitet
Objekttyp TRANSPORTABLE_EXPORT/TTE_POSTINST/PLUGTS_BLK wird verarbeitet
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" erfolgreich um 15:14
abgeschlossen
SQL> SELECT tablespace_name, status
2 FROM dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
TRANSPORT READ ONLY
SQL> ALTER TABLESPACE transport READ WRITE;
Tablespace wurde geändert.
24.5
Weitere ETL-Features
591
rere Tabellen. Damit können Sie eine Logik bereits im Ladeprozess unterbringen
und Staging-Tabellen vermeiden.
Der INSERT-Befehl erlaubt das Laden mit und ohne Bedingung. Wird keine
Bedingung angegeben, dann werden alle Sätze geladen. In Befehlen mit Bedin-
gungen kann für jede Zieltabelle eine WHEN-Klausel benutzt werden. Listing
24.8 zeigt ein Beispiel für einen INSERT-Befehl in zwei Tabellen ohne Bedingung.
Der INSERT-Befehl für mehrere Tabellen kann auch auf dieselbe Tabelle ange-
wandt werden. Dazu werden einfach mehrere INTO-Klauseln verwendet, die sich
auf dieselbe Tabelle beziehen. Das ist eine effektive Methode, um Daten von
einem denormalisierten Format in ein normalisiertes Format zu überführen. Im
Beispiel in Listing 24.9 werden Sätze mehrfach mit verschiedenem time_key in
die Tabelle household_facts geladen.
Für jede einzelne INTO-Klausel kann eine separate Bedingung unter Benutzung
des Schlüsselwortes WHEN angegeben werden. Der Befehl INSERT ALL prüft die
Bedingung für jeden selektierten Satz, wogegen INSERT FIRST die Prüfung
abbricht, sobald eine der Bedingungen erfüllt ist. Folgerichtig gibt es für INSERT
FIRST einen ELSE-Zweig, der für alle Sätze gilt, für die keine der WHEN-Bedin-
gungen erfüllt ist.
SQL> INSERT ALL
2 INTO account_dim
3 (account_key, zip, opened)
4 VALUES (account_key, zip, opened)
5 INTO account_dim_history
6 (account_key, primary_name, opened)
7 VALUES (account_key, primary_name, opened)
8 SELECT account_key, primary_name,
9 zip, opened
10 FROM ext_account_dim;
6 Zeilen wurden erstellt.
Listing 24.8: INSERT-Befehl in zwei Tabellen ohne Bedingung
SQL> INSERT ALL
2 INTO household_facts VALUES (
3 account_key, household_key,branch_key, product_key,
4 status_key,1,primary_balance,transaction_count)
5 INTO household_facts VALUES (
6 account_key, household_key,branch_key, product_key,
7 status_key,2,primary_balance,transaction_count)
8 SELECT * FROM ext_household_facts;
6 Zeilen wurden erstellt.
Listing 24.9: Daten mehrfach in dieselbe Tabelle einfügen
Kapitel 24
ETL in der Praxis
592
Ein weiteres Feature zum Einbinden von Logik in den Ladeprozess ist die
MERGE-Anweisung. Vor Einführung der MERGE-Anweisung konnte eine
adäquate Funktionalität nur mit einem PL/SQL-Programm unter Verwendung
von Cursor erreicht werden. PL/SQL-Programme sind zwar sehr flexibel, aber
auch langsam im Vergleich zu SQL-Befehlen. Mit der MERGE-Anweisung kann
unterschieden werden, ob der zu ladende Satz bereits in der Zieltabelle vorhanden
ist. Im Beispiel in Listing 24.11 wird eine externe Tabelle direkt in die Fact Table
geladen. Ist der Satz bereits vorhanden, dann wird ein UPDATE-Befehl durchge-
führt, ansonsten wird der Satz eingefügt.
SQL> INSERT FIRST
2 WHEN time_key > 2 THEN
3 INTO household_facts
4 WHEN time_key > 1 THEN
5 INTO household_facts_hist1
6 ELSE
7 INTO household_facts_hist2
8 SELECT * FROM ext_household_facts;
3 Zeilen wurden erstellt.
Listing 24.10: Der INSERT FIRST-Befehl für mehrere Tabellen
Tipp
Mit diesen SQL-Befehlen kann der Umweg über Staging-Tabellen zumindest
teilweise umgangen werden. Damit kann eine Beschleunigung des ETL-Prozes-
ses erreicht werden. Vermeiden Sie Staging-Tabellen, wo immer es möglich ist.
SQL> MERGE INTO household_facts a
2 USING ext_household_facts b
3 ON (a.account_key = b.account_key)
4 WHEN MATCHED THEN
5 UPDATE SET a.primary_balance = b.primary_balance
6 WHEN NOT MATCHED THEN
7 INSERT
8 (account_key, primary_balance)
9 VALUES
10* (b.account_key, b.primary_balance);
1000090 Zeilen integriert.
Listing 24.11: Die MERGE-Anweisung

Get Oracle 12c - Das umfassende Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.