144
Oracle Data Warehouse Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Embed Size (px)

Citation preview

Page 1: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Oracle Data Warehouse – Datenbank basierte ETL-Prozesse

DATA WAREHOUSE

Page 2: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 1/2

• Anforderungen an den ETL-Prozess im Data Warehouse

• Speichermanagement und Grundlagentechniken• Blöcke, Extents, Segmente, Tablespace• Direct Path Load, Mengenbasiertes Laden• Logging / NoLogging• Partition Exchange and Load (PEL)

• Zugriff auf Quellsystemen• Umgang mit Deltadaten• Kopiertechniken / SQL Loader / Data Pump / External Tables

/ Transportable Tablespace

Datenbank-basierte ETL-Prozesse

2

Page 3: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 2/2

• Planung und Organisation des ETL Prozesses• Schichten als Planungsgrundlage• Umgang mit separaten ETL-Tools und Lade-Engines• Prüftechniken mit SQL• Szenario zum Prüfen von Daten

• Weitere Datenbank-Techniken• Ersatz von Aggregat-Tabellen durch MAVs• Table Functions• Pivoting• Multiple Inserts / Merge

• Zusammenfassung

Datenbank-basierte ETL-Prozesse

3

Page 4: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 1/2

• Anforderungen an den ETL-Prozess im Data Warehouse

• Speichermanagement und Grundlagentechniken• Blöcke, Extents, Segmente, Tablespace• Direct Path Load, Mengenbasiertes Laden• Logging / NoLogging• Partition Exchange and Load (PEL)

• Zugriff auf Quellsystemen• Umgang mit Deltadaten• Kopiertechniken / SQL Loader / Data Pump / External Tables

/ Transportable Tablespace

Datenbank-basierte ETL-Prozesse

4

Page 5: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Das große Klagen

• Lieferzeiten der Daten zu lange (Latenzen)• Zu schwerfällig bei Änderungen • Informationen mehrfach vorhanden• Fehlende unternehmensweite Sichten• Nicht die richtigen Informationen für die Anwender• Anwender haben zu wenig unmittelbaren

Einfluss auf die Daten

• Immer teuerer • Maintenance-Aufwand zu hoch / Personal• Explodierende Datenmengen -> Storage- / Ladezeitenthematik

System-Nutzen

Maintenance Technik

Page 6: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

R R

BS S

S

D

D

DD

Enterprise Information Layer User View LayerData Integration Layer

T

T

T

T: Transfertabellen

R: Referenztabellen

S: Stammdaten

B: Bewgungsdaten

D: Dimensionen

F: Fakten

B

F

F

F

D

D

D

DB

B

B

B

Zu

samm

enh

äng

end

er A

bfrag

ebe

reich

Flexibilität und schnelles Bereitsstellen

6

Strategische Daten

TaktischeDaten

inte

gri

eren

aufb

ereiten

OperativeDaten

Page 7: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Lade-Aktivitäten an Schichtübergängen

Integration Enterprise User ViewFlüchtige Daten Persistent Kopien / teilpersistent

dynamisch

KopierenSelektieren

Generische Datenstrukturen(isolierte Tabellen,teil-ausgeprägte Datentypen)

Keine Constraints

3 NF Datenstrukturen(ER-Tabellen,ausgeprägte Datentypen)

Aktivierte Constraints

Multidimensionale Modelle(ER-Tabellen,ausgeprägte Datentypen)

MengenbasiertesPrüfen ohne Constraints

UmschlüsselungLookups -> Referenz-/StammdatenJoinsAufbauen von Distinct-Strukturen(Normalisieren)

UmschlüsselungLookups -> DimensionsdatenJoins - Denormalisieren

Normalisieren(Granularisieren)

7

DenormalisierenHistorisieren

z.T. Aggregieren

Clearing-Verfahren,technisches, logisches,semantisches Prüfen

Page 8: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Hilfsmittel in der Datenbank (Auflistung)

• Parallelisierung• Partitioning / Partition Exchange Load (PEL)• Direct Path Load• Set-Based SQL• Pipelined Table Functions• Materialized Views• External Tables / Loader• Transportable Tablespace• Data Pump• Database Link• Direkt FTP-Load

Page 9: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

1. Integrieren

• Identifizieren von identischen oder zusammenhängenden Informationen• Synonymen-/Homonymen-Thematik

• Aggregationslevel angleichen• Identifizieren und Angleichen

• Formate, Zustände, Sichtweisen etc...

1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln

Betrag / SummeArtikel / Produkt

Artikel / Artikelgruppe

Meter / KilometerLose Stücke / Gebinde

10

Page 10: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

2. Informations-Mehrwerte

• Qualitativ gute Informationen schaffen• Datenqualitäts-Checks

• Vollständigkeit• Datentypen• Referentielle Integrität• Eindeutigkeit• Korrekte Werte

• Fachliche Regeln überprüfen

• Berechnungen / Aggregationen / Zusammenfassungen• Anreichern und Vermengen mit Referenzdaten

• Lookups• Marktdaten• Vergleichszahlen

1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln

11

Page 11: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

3. Kopieren

• 1:1-Datenbewegung• Einfachste Aufgabe

• Mengen-Operationen• Ohne zusätzliche Logik

• Überwindung von Systemgrenzen• Vorschriften zum Mapping• Schnittstellen-Konventionen

• Aspekt der Performance

1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln

12

Page 12: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

4. Sammeln

• Einlagern von Daten• Zeitliche Rahmenvorgaben• Historisierung

• Versionieren von Daten• Kategorisieren / Inventarisieren von Daten

• Dokumentieren der eingelagerten Informationen

• Referenzen aufbauen • Alterungs-Eigenschaften berücksichtigen • Dokumentieren• Mehr als nur eine Momentaufnahme

1. Integrieren2. Informations-Mehrwerte 3. Kopieren4. Sammeln

13

Page 13: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Daten-nahe Transformation im DWHDen richtigen Platz finden

n-tier

Application Server

n-tier

Application Server

Quellsystem DWH-System

ETL?

ETL?

14

Page 14: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 1/2

• Anforderungen an den ETL-Prozess im Data Warehouse

• Speichermanagement und Grundlagentechniken• Blöcke, Extents, Segmente, Tablespace• Direct Path Load, Mengenbasiertes Laden• Logging / NoLogging• Partition Exchange and Load (PEL)

• Zugriff auf Quellsystemen• Umgang mit Deltadaten• Kopiertechniken / SQL Loader / Data Pump / External Tables

/ Transportable Tablespace

Datenbank-basierte ETL-Prozesse

15

Page 15: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Zuordnung Datenobjekten und Speicher

Table

Index

Mview

Partition

DB-Objekte

Page 16: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Speicherobjekte

Page 17: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Die automatische Extent-Vergrößerung

• Automatische Allokierung von weiteren Segmenten• Exponentielles Vergrößerungs-Mass

TABLE_NAME BLOCKS EMPTY_BLOCKS AVG_ROW_LEN NUM_ROWS PCT_FREE COMPRESS EXTENTS SEG_BYTES EXT_BLKS EXT_BYTES----------------- ------------ ----------- -------- -------- -------- ------- ---------- -------- ---------F_UMSATZ 277772 0 34 51200000 10 DISABLED 217 2281701376 8 65536F_UMSATZ 277772 0 34 51200000 10 DISABLED 217 2281701376 128 1048576F_UMSATZ 277772 0 34 51200000 10 DISABLED 217 2281701376 1024 8388608F_UMSATZ 277772 0 34 51200000 10 DISABLED 217 2281701376 8192 67108864

select t.TABLE_NAME, t.blocks,t.EMPTY_BLOCKS,t.AVG_SPACE,t.AVG_ROW_LEN,t.NUM_ROWS,t.pct_free, t.compression,s.EXTENTS,s.bytes seg_bytes,e.blocks ext_blks,e.bytes ext_bytes

from user_segments s, user_tables t, user_extents e

where t.TABLE_NAME = s.segment_nameand e.SEGMENT_NAME = s.SEGMENT_NAMEand t.TABLE_NAME = 'F_UMSATZ';

Page 18: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Block- und Satzstruktur

Datenbank Block

Row header

Column length

Column value

Page 19: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

High Water Mark

Free spaceafter delete

Unused block

Extent ID 0 1 2 3 4

Extent ID 0 1 2 3 4

Used block

Nach INSERTS:

High-water mark

Seg

men

tS

egm

ent

Nach DELETES:

Page 20: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Seg

men

t

Wie wird die „High Water Mark“ bestimmt

Extent ID 0 1 2 3 4

High-water markLAST_USED_EXTENT_FILE_ID, LAST_USED_EXTENT_BLOCK_ID

TOTAL_BLOCKS

UNUSED_BLOCKS

Page 21: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Seg

men

t

Seg

men

tDeallocate Space

Free spaceafter delete

Unused block

Beforedeallocation

Used block

Afterdeallocation

High-water mark

Extent ID 43210

43210Extent ID

ALTER TABLE tablename

DEALLOCATE UNUSED;

Page 22: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Seg

men

t

Truncate Table

High-water mark Free space

Extent ID 0 1

TRUNCATE TABLE tablename

Page 23: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 1/2

• Anforderungen an den ETL-Prozess im Data Warehouse

• Speichermanagement und Grundlagentechniken• Blöcke, Extents, Segmente, Tablespace• Direct Path Load, Mengenbasiertes Laden• Logging / NoLogging• Partition Exchange and Load (PEL)

• Zugriff auf Quellsystemen• Umgang mit Deltadaten• Kopiertechniken / SQL Loader / Data Pump / External Tables

/ Transportable Tablespace

Datenbank-basierte ETL-Prozesse

24

Page 24: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Seg

men

t

Direct Path Load

Free space after delete Blocks used by inserted rows

High-water markUsed block

F_UMSATZ

INSERT /*+APPEND */ INTO DWH.F_UMSATZ

NOLOGGING

SELECT * FROM OLTP.BESTELLUNGEN;

Serverprocess

Page 25: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Seg

men

t

Paralleler Direct Path Load

Free space after delete Temporary segments

High-water markUsed block

F_UMSATZ

ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+APPEND PARALLEL(F_UMSATZ,2)

*/ INTO DWH.F_UMSATZ NOLOGGING

SELECT * FROM OLTP.BESTELLUNGEN;

Slaveprocess

Slaveprocess

Page 26: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

„Convential“ und „Direct Path“ - Load

Conventional

Directpath

Arrayinsert Extent

management

Datasave

Table

High-water mark

Space used only by conventional load

Instance

SGA Shared pool

Page 27: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Testfall

F_Umsatz

51.100.000Sätze

ARTIKEL_IDKUNDEN_IDZEIT_IDREGION_IDKANAL_IDUMSATZMENGEUMSATZ_GESAMT

F_Umsatz_DP

51.100.000Sätze

ARTIKEL_IDKUNDEN_IDZEIT_IDREGION_IDKANAL_IDUMSATZMENGEUMSATZ_GESAMT

SQL> insert into f_umsatz_DP select * from f_umsatz;51200000 Zeilen erstellt.Abgelaufen: 00:07:57.73

SQL> insert /*+ APPEND */ into f_umsatz_DP select * from f_umsatz;51200000 Zeilen erstellt.Abgelaufen: 00:00:27.24

SQL> insert /*+ APPEND PARALLEL(F_UMSATZ_DP,2) */ into f_umsatz_DP select * from f_umsatz;51200000 Zeilen erstellt.Abgelaufen: 00:00:20.68

Page 28: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Direct Path / Convential Path

Convential Path• Commits• Reuse Free Space in Blöcken• Constraint Checks• Immer Undo Data / Logging• Daten zunächst immer in SGA Buffer• Tabelle für andere Benutzer offen

Direct Path• Data Save• Schreiben oberhalb der High Water Marks • Keine Constraint Checks

• Nur PK, Not Null, Unique Key• Kein Logging• Daten nicht in SGA Buffer• Tabelle gesperrt für andere Benutzer

Convential Path

SQL LoaderExternal TableInsert AppendCTAS

Benutzer

SQL Command Processing

Space Management

Get new extentsAdjust High Water Mark

Find partial blocksFill partial blocks

Buffer Cache

Buffer Cache Management- Manage queues- Manage contention

Read DatabaseBlocks

Write DatabaseBlocks

Direct Path

Database

Or

ac

le

S

er

ve

r

Page 29: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Space Management

• Empfehlung: Locally Managed Tablespace mit ASSM• Prüfung ob MSSM bei Massen-Inserts schneller ist

ASSM

MSSM

Freelists werden gepflegt

Automatische Verwaltung des freien Platzes

Page 30: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Bitmap managed StorageLocally managed Tablespace ohne Freelists

Page 31: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Empfehlungen bzgl. Spacemanagement

• PCTFREE auf 0 setzen• In der Regel sind keine späteren UPDATES nötig• Spart gegenüber dem Default von 10% auch 10% IO und jede

Verarbeitung ist um 10% schneller• Sollten dennoch UPDATES gemacht werden müssen:

• Partitionieren der Tabelle• Die jüngsten Partitionen mit separatem Tablespace definieren und

PCTFREE auf gewünschten Wert setzen• Wenn keine UPDATES mehr zu erwarten sind -> umkopieren auf

eine Partition mit einem Tablespace mit PCTFREE=0

• Blocksize hochsetzen 16K, 32K• Wirkt sich bei Massen-Inserts bei einer gößeren Datenmenge

positiv auf die Performance aus

Page 32: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Klassische PL/SQL Cursor – Verarbeitung(Negativ – Beispiel)

t_Ref_1 (z. B. 10000)

t_ref_2 (z. B. 5000)

t_ref_3 (z. B. 50)

t_ref_4 (z. B. 6000)

t_Quelle_Stage_1 (z. B. 100000)

t_Quelle_Stage_2 (z. B. 5000)

t_ref_5 (z. B. 8000)

t_ref_6 (z. B. 400)

t_ref_7 (z. B. 80)

t_ref_8 (z. B. 12000)

t_ref_9 (z. B. 15000)

select

select

cursor

cursor

select

select

select

select

select

FaktentabelleInsert

select

select

+Diverse Updates und

Inserts auf Protokolltabellen

Für alle Bewegeungs-sätze z. B. 300.000)

Loop(0,1 Sec /Lauf)

8,3 Std*

* Wert aus einer Bank (2003), wäre heute wesentlich weniger

Page 33: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Mengenbasierte Alternative(Performance – Optimierung bis zu Faktor 20 und mehr)

300.000

t_Ref_1

t_Ref_2

t_Ref_3

t_Ref_4

t_Ref_5

Outer Join Temp Table

t_Ref_6

t_Ref_7

t_Ref_8

t_Ref_9

Cursorloop

SatzweisePrüfung

Protokoll

Fakt Table

Page 34: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Das Simulations-Szenario

F0 F1 F2 F3 F4 F5 F6 F7----- --- ---------- ----------------------------------------- --------- ----------------------------------------- --------------------------------- ---28839 74 3 IamPFnAz6qnhWZlqao1AHgaR9gQczm4SSvtJn9lU 27-JAN-11 upOLaDSvWuxmv4pFlZsgtEPqgi43uRgI1uQjF7kV x2AFYV3W2QIcxf5mPzl39MpErCZI7rc1eQMXuMs8 4228840 10 89 ESh7uiu6Hqo6cwqqk9B7D1w9biFR3QjCVDyNWjaq 01-MAY-08 Mcj4QZEVmiG5Qof4eoPwqARLFhlc1xpLmgrAzL5i jvuabLwH44YODTusRR3Huyz7sECCTrLFGZA5QJdD 1228841 4 59 PA2OpnqxTISxHoHsJ5BZrIJArDGhcKCIi1lAzJyj 17-DEC-10 ebU5ogfehM87oO1f8e1VVrFOjJBsZJEUQLcyOls7 GP5zpIb5EzAsPrT9EuL6tdcJ2BVGbFXtch3F4rkO 5828842 79 74 P4q95WqLs9yWOdx6yryAt7zNgO8YeGzqmXTLdHJe 26-NOV-09 eTsS6sZdjeZbRWSnjq2m3ivoACc29dQENlVYjtkK DTTfROusF1hU1LLGHNRXWWGwpFlO47zedJWgEdX5 55........................................................................................................................................................

Name Type-------------------F0 NUMBERF1 NUMBERF2 NUMBERF3 VARCHAR2(50)F4 DATEF5 VARCHAR2(50)F6 VARCHAR2(50)F7 NUMBER

Tabelle T10

Name Type-------------------F0 NUMBERF1 NUMBERF2 NUMBERF3 VARCHAR2(50)F4 DATEF5 VARCHAR2(50)F6 VARCHAR2(50)F7 NUMBER

Tabelle T20

~ 10 Millionen Sätze

Page 35: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Der ungünstigste FallEinzelinserts – Simuliert über Cursor-Prozedur

CREATE OR REPLACE PROCEDURE PR_x ASCURSOR crs_T10 IS SELECT * FROM T10;bstnr number; V_F0 NUMBER; V_F1 NUMBER; V_F2 NUMBER; V_F3 VARCHAR2(50); V_F4 DATE; V_F5 VARCHAR2(50); V_F6 VARCHAR2(50); V_F7 NUMBER; BEGINopen crs_T10;loop FETCH crs_T10 into V_F0 ,V_F1,V_F2,V_F3,V_F4,V_F5,V_F6,V_F7; insert /*+ NOLOGGING */ into T20 values(V_F0,V_F1,V_F2,V_F3,V_F4,V_F5,V_F6,V_F7);

EXIT WHEN crs_T10%NOTFOUND; END loop;END;

Laufzeit: 08:31 (Minuten : Sekunden)

Lese-Operation T10 Tabelle

Datenbewegung über Variablen

Schreibvorgang

Page 36: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Der einfache INSERT

• INSERT in leere Tabelle

• INSERT in gefüllte Tabelle

• INSERT in gefüllte Tabelle (Wiederholung)

Laufzeit: 01:46 (Minuten : Sekunden)

Laufzeit: 01:58 (Minuten : Sekunden)

Laufzeit: 01:58 (Minuten : Sekunden)

insert into t20 select * from t10;

Page 37: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Logging / Nologging

• INSERT im Archivelog-Modus

• INSERT mit NOLOGGING im ARCHIVE-Modus

Laufzeit: 02:56 (Minuten : Sekunden)

Laufzeit: 01:48 (Minuten : Sekunden)

insert into t20 select * from t10;

insert /*+ NOLOGGING */ into t20 select * from t10;

Page 38: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Logging / Nologging

• Wird der Archivelog-Modus benötigt oder nicht?• Relevant für

• Backup• DataGuard / Golden Gate• Flashback

• Wichtigster Punkt ist: BACKUP• Abhängig vom Backup-Konzept

Page 39: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Auswirkungen auf das Backup-Konzept

• Plattensicherung • Oft einfach, weil eingespielte Verfahren• Grosser Ressourcenverbrauch

• Alle (DWH-Bereiche) werden gesichtert -> großer Platzbedarf• Teure Backup-Software

• Nicht immer sicher, weil korrupte Datenbank-Blöcke nicht erkannt werden können

• Man kann ohne Archivlog fahren -> ETL schneller und einfacher

• Sicherung mit RMAN• Ressourcen-günstigstes Verfahren• Man muss mit Archivlog fahren

• ETL etwas langsamer• Massenloads müssen mit NOLOGGING gefahren werden ->

separate Sicherung

Page 40: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

R R

B

S S S D

D

DD

Enterprise Information Layer User View LayerData Integration Layer

T

T

T

T: Transfertabellen

R: Referenztabellen

S: Stammdaten

B: Bewgungsdaten

D: Dimensionen

F: Fakten

B

F

Keine SicherungInkremental Backup nur für Referenz- und Stammdaten

Keine Sicherung,wenn Data Martskomplett neu aufgebautWerden

große Bewegungsdatentabellenam besten nach Abschluss desETL-Laufes sichern

RMAN- Backup-Verfahren: Was wird gesichert?

41

RMAN(Incremental)

RMAN (Incremental)

Page 41: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Direct Path Load

• Create Table As Select (CTAS

• INSERT mit APPEND - Hint

Laufzeit: 01:00 (Minuten : Sekunden)

Laufzeit: 01:00 (Minuten : Sekunden)

Create Table t20 as select * from t10;

insert /*+ APPEND */ into t20 select * from t10;

Page 42: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Arbeiten mit Buffer-Caches

• Wiederholtes Laden ohne zuvor die Buffer-Caches zu leeren• Der SELECT-Teil läuft schneller

Laufzeit: 01:00 (Minuten : Sekunden)

insert /*+ APPEND */ into t20 select * from t10;

Laufzeit: 00:25 (Minuten : Sekunden)

insert /*+ APPEND */ into t20 select * from t10;

1. Verarbeitung

2. Verarbeitung

Page 43: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Verlagern des Ladeprozesses auf SSD-Platten

• Bestimmte Arbeitstabellen des ETL-Prozesses liegen auf gesonderten SSD-Platten• Die aktiven Partitionen großer Tabellen• Temporäre Tabellen

R R

B

S S S

D

D

DD

Enterprise Information Layer

User View Layer

Data Integration Layer

T

T

T

T: Transfertabellen

R: Referenztabellen

S: Stammdaten

B: Bewgungsdaten

D: Dimensionen

F: Fakten

B

F

80%

20%

PEL

A

A: Aggregate

PELT

CTAS

CTAS

PELPartitionierteTabellen

PrüfungenSSD

SSD

SSD

SSD

SSDSSD

SSD

SSDSSDSSD

Page 44: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Verlagern des Ladeprozesses auf SSD-Platten

• Test mit Direct Path Load

Laufzeit: 00:10 (Minuten : Sekunden)

insert /*+ APPEND */ into t20 select * from t10;

Laufzeit: 00:10 (Minuten : Sekunden)

Create Table T10 as select * from t10;

CTAS mit SSD

APPEND mit SSD

Page 45: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Alle Messdaten in der Übersicht

Page 46: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Monat 10

Monat 11

Monat 12

Monat 13

Faktentabelle

Zeit

Region

Financial

Production

Human Res.

Store

Supplier

Marketing

Service

Neuer Monat

P1P2P3P4

4 4

89

Z1Z2Z3Z4

Temporäre Tabelle

Parallel Direct Path INSERT(Set Based) CREATE TABLE AS SELECT(CTAS)CREATE Indizes / Statistiken anlegenEXCHANGE Tabelle

Partition Exchange Loading (PEL)

DROPPARTITION

• Unvergleichbar schnell!

47

Page 47: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Partition Exchange Loading (PEL)-- Leere Partition an Zieltabelle hinzufügenALTER TABLE Bestellung ADD PARTITION "Nov08" VALUES LESS THAN (to_date('30-Nov-2008','dd-mon-yyyy'));

-- Neue leere temporäre Tabelle erstellenCREATE TABLE Bestellung_temp AS SELECT * FROM Bestellung WHERE ROWNUM < 1;

-- Inhalte laden INSERT INTO "PART"."BESTELLUNG_TEMP" (BESTELLNR, KUNDENCODE, BESTELLDATUM, LIEFERDATUM, BESTELL_TOTAL, AUFTRAGSART, VERTRIEBSKANAL) VALUES ('2', '3', TO_DATE('23.Nov.2008', 'DD-MON-RR'), to_date('23.Nov.2008', 'DD-MON-RR'), '44', 'Service', '6');Commit;

-- Erstellen Index auf temporäre TabelleCREATE INDEX Ind_Best_Dat_Nov ON Bestellung_temp ("BESTELLNR") NOLOGGING PARALLEL;

-- Temporäre Tabelle an die Zieltabelle anhängen ALTER TABLE Bestellung EXCHANGE PARTITION "Nov08" WITH TABLE Bestellung_temp INCLUDING INDEXES WITHOUT VALIDATION;

2

3

4

5

1

48

Page 48: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

PEL – Auswirkungen auf die DWH-Verwaltung und Konzepte • Angleichung des Partition-Kriteriums auf den Lade-

Rythmus und damit die „Zeit“• Meist täglicher Load -> Tagespartitionen• Späteres Merge auf Monatsebene möglich / nötig

• Zwang zum späteren Monats-Merge nutzen für • Komprimierung • Reorganisation • ILM-Konzept

• Eine Partitionierungs-Ebene ist durch das PEL-Verfahren meist schon belegt

• Local-Indizierung (wenn überhaupt gebraucht) entstehen automatisch

Page 49: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 1/2

• Anforderungen an den ETL-Prozess im Data Warehouse

• Speichermanagement und Grundlagentechniken• Blöcke, Extents, Segmente, Tablespace• Direct Path Load, Mengenbasiertes Laden• Logging / NoLogging• Partition Exchange and Load (PEL)

• Zugriff auf Quellsystemen• Umgang mit Deltadaten• Kopiertechniken / SQL Loader / Data Pump / External Tables

/ Transportable Tablespace

Datenbank-basierte ETL-Prozesse

50

Page 50: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Deltadaten Extrahieren

1

3

2

4

5

6

Änderungsdatum

Trigger

Deltabildungüber MINUS

Logminer

Streams

Golden Gate

LogFile

LogFile

LogFile

Table

Table

Table Table

Table

TableQueue

OLTP DWH

TableQueue

QueueTable

Queue Table

Page 51: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Herausforderungen beim Extrahieren

• Unterschiedliche Namen in Quell- und Zielsystemen

• Bewahrung der Konsistenz

• Zeitpunkt des Ladens kann kritisch sein

• Vollständigkeit der Daten

• Unterschiedliche GRANTs der User

• Zusätzlicher Netzwerkverkehr

• Meist ist nur das Delta der geänderten Daten gewünscht • Formate (Datum, Zeichensätze)

52

Page 52: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Einlesetechniken Vorsysteme

Oracle

NonOracle

EBCDICASCII

Applikationz. B.

SAP R/3

SQL-Loader

External Table

Database Link

Transportable TS

Datapump

ODBC

JDBC

Gateway

AP

I

API CALL

OracleDWH

SQL

SQL

SQL

SQL

SQL

SQL

BS CopyBS Copy

Direct Save

Page 53: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Datenbank-Trigger?

• Werden nur im Quellsystem angelegt• Beeinflusst Performance des Quellsystems• Eher als Notlösung anzusehen

• Wenn es kein Änderungsdatum in der Quelltabelle gibt• Zum Triggern Message-basierter oder Event-gesteuerter

LadeläufeCREATE OR REPLACE TRIGGER Bestellung BEFORE DELETE OR INSERT OR UPDATE ON Bestellung FOR EACH ROWWHEN (new.Bestellnr > 0)DECLARE sal_diff number;BEGIN INSERT INTO log_Bestellung (Alte_Bestell_Nr,Neue_Bstell_Nr) VALUES(old.Bestellnr,new.Bestellnr); END;/

54

Page 54: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

SQL*Loader

• Loader Modes• Convential Path

• INSERT von Daten / UPDATE von Indizes / Auslösen von Triggern

• Auswertung von Constraints

• Direct Path • Formatieren der Daten in Blöcken und direktes Einfügen in die

Datafiles• Keine SGA-Operationen / kein INSERT auf SQL-Level

• Parallel Direct Path• Parallele SQL*Loader-Aufrufe

55

Page 55: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

SQL*Loader – Empfehlungen

• Direct Path Load nutzen• Alle Integrity Constraints ausschalten

• NOT NULL, Unique und Primary Key Constraints

• Verhindern von Index-Aktualisierungen• UNRECOVERABLE Option wählen• Partitionen nach und nach laden

• Andere Partitionen bleiben für andere Benutzer im Zugriff

• Parallel laden, wenn es möglich ist • Nutzung paralleler Schreib-Threads• Alternativ parallele Jobs starten

56

Page 56: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Beispiel - Control File

OPTIONS (SKIP=1, BINDSIZE=50000, ERRORS=50, ROWS=200, DIRECT=TRUE, PARALLEL=TRUE, READSIZE=65536, RESUMABLE=TRUE,RESUMABLE_TIMEOUT=7200)UNRECOVERABLE LOAD DATACHARACTERSET WE8MSWIN1252INFILE 'C:\orte.csv' BADFILE 'orte.bad' DISCARDFILE 'orte.dis‚INTO TABLE dwh.tb_orte WHEN ort_id != BLANKS APPEND REENABLE DISABLED_CONSTRAINTS FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'" (orte_nr POSITION(1) INTEGER EXTERNAL , ort CHAR , plz CHAR , bundesland CHAR , region CHAR , nummernfeld INTEGER EXTERNAL )

57

Page 57: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Aufruf des SQL*Loaders

sqlldr userid=DWH/DWH control=c:\orte.ctl log=C:\orte.log

orte.csvorte.ctl

TB_ORTEDatenControlFile

58

Page 58: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Data Pump Architektur

Quelle: http://www.dbazine.com/blogs/blog-cf/chrisfoot/blogentry.2006-05-26.3042156388

59

Page 59: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Vereinfachte Verfahrensdarstellung

OLTP DWH

Schema OLTP

Besondere GRANTs

Schema DWH

Delta-Load

FTP

Export mit Data Pump (expdp)

Import mit Data Pump (impdp)

60

Page 60: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Oracle Data Pump

• Höhere Performance als bei IMP / EXP oder anderen Entlade-Verfahren

• Daten und / oder Metainformationen von DB Objekten• Größere Steuerungsmöglichkeit, d.h. mehr Parameter und

Kontrolle der Datenextraktion

• Leichtere Einbindung der Datenflüsse über Rechnergrenzen hinweg

• Parallelisierung in RAC-Umgebungen Instanz-übergreifend

• Kompression u. Verschlüsselung nach Bedarf• Legacy Mode zur Weiterverwendung von Ex-/Import Controls • Wiederanlauffähig

Release 2

61

Page 61: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Export der Daten

• Optional Flashback zum Absichern des Entlade-Zeitpunktes nutzen

• Remote-Export möglich (per NETWORK_LINK)• Wegfall von separatem FTP-Aufruf

• Einschränkung durch Query-Bedingung• Damit Zugriff z. B. auf „Last Update-Sätze“

• Default Export Location• D:\o11\admin\o11\dpdump\EXPDAT.DMP

62

Page 62: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Ablauf des Exports

• Export über Parameter-Datei• Export auch mit Remote-

Zugriff• Einschränkung der

Datenmenge durch QUERY

• Bei dem Import: REMAP auf das Schema

expdp dwh/dwh@o11 parfile=Para_EX.txt

impdp dwh2/dwh2@o11 DIRECTORY=DP_OUTDUMPFILE=EXP1.DMP LOGFILE=DP_OUT:imp_log REMAP_SCHEMA=DWH:DWH2

63

Page 63: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Parameterauswahl

SCHEMAS=HR DUMPFILE=expinclude.dmp DIRECTORY=dpump_dir1 LOGFILE=expinclude.log INCLUDE=TABLE:"IN ('EMPLOYEES', 'DEPARTMENTS')" INCLUDE=PROCEDURE INCLUDE=INDEX:"LIKE 'EMP%'“NETWORK_LINK=source_database_linkNOLOGFILE={y | n}PARALLEL=integerPARFILE=[directory_path]file_nameQUERY = [schema.][table_name:] query_clauseQUERY=employees:"WHERE department_id > 10 AND salary > 10000“REMAP_DATA=[schema.]tablename.column_name:[schema.]pkg.function

Page 64: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Interaktiver Modus von Data Pump

• CTRL-C zum Starten des interaktiven Modus• ADD_FILE

• Das Hinzufügen eines neuen Dump-Files ist möglich

• KILL_JOB• Prozess kann abgebrochen werden

• STOP_JOB• Aktueller Job wird beendet

• PARALLEL• Einstellung des Parallelisierungsgrads

• Eingabe von „continue_client“ führt zur normalen Monitor-Ausgabe zurück• FILESIZE• HELP• PARALLEL• START_JOB• STATUS• STOP_JOB

67

Page 65: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Laufzeitenbeispiel C:\Users\aschlauc>expdp dwh/dwh "DWH"."SYS_EXPORT_SCHEMA_01": dwh/******** wird gestartetSchStzung erfolgt mit Methode BLOCKS...Objekttyp SCHEMA_EXPORT/TABLE/TABLE_DATA wird verarbeitetGesamte SchStzung mit BLOCKS Methode: 4.570 GBObjekttyp SCHEMA_EXPORT/USER wird verarbeitetObjekttyp SCHEMA_EXPORT/SYSTEM_GRANT wird verarbeitetObjekttyp SCHEMA_EXPORT/ROLE_GRANT wird verarbeitetObjekttyp SCHEMA_EXPORT/DEFAULT_ROLE wird verarbeitetObjekttyp SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA wird verarbeitetObjekttyp SCHEMA_EXPORT/TABLE/TABLE wird verarbeitetObjekttyp SCHEMA_EXPORT/TABLE/COMMENT wird verarbeitetObjekttyp SCHEMA_EXPORT/PROCEDURE/PROCEDURE wird verarbeitetObjekttyp SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE wird verarbeitetObjekttyp SCHEMA_EXPORT/TABLE/INDEX/INDEX wird verarbeitetObjekttyp SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT wird verarbeitetObjekttyp SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS wird verarbeitet

Objekttyp SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS wird verarbeitet. . "DWH"."F_UMSATZ" 1.807 GB 51200000 Zeilen exportiert. . "DWH"."T10" 1.256 GB 8999991 Zeilen exportiert. . "DWH"."LIEFERUNG" 421.5 MB 1999999 Zeilen exportiert. . "DWH"."LIEFERUNG_COMP" 421.5 MB 1999999 Zeilen exportiert. . "DWH"."LIEFERUNG_MITTEL_COMP" 70.45 MB 1999999 Zeilen exportiert. . "DWH"."LIEFERUNG_MITTEL" 70.45 MB 1999999 Zeilen exportiert. . "DWH"."D_REGION" 469.8 KB 7202 Zeilen exportiert. . "DWH"."D_KUNDE" 209.9 KB 1029 Zeilen exportiert. . "DWH"."BESTELLUNGEN" 5.859 KB 4 Zeilen exportiert. . "DWH"."D_ARTIKEL" 16.40 KB 129 Zeilen exportiert. . "DWH"."D_VERTRIEBSKANAL" 6.859 KB 7 Zeilen exportiert. . "DWH"."KUNDE" 5.015 KB 2 Zeilen exportiert. . "DWH"."LIEFERUNGEN" 5.859 KB 4 Zeilen exportiert. . "DWH"."PRODUKT" 5.031 KB 3 Zeilen exportiert. . "DWH"."D_ZEIT" 0 KB 0 Zeilen exportiertMaster-Tabelle "DWH"."SYS_EXPORT_SCHEMA_01" erfolgreich geladen/entladen******************************************************************************

Page 66: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Testlaufzeiten

Gesamtlaufzeit für 4,5 GB Schreiben auf SSD 4 Cores Dumpfile 4,5 GB

Parallel 0 1: 42 MinutenParallel 2 0: 56 MinutenParallel 4 0: 52 Minuten

Alternative mit klassischem EXP: exp 3,5 Minuten

Page 67: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

External Tables

• Tabelle, die eine Datei referenziert• Datei wird als normale Tabelle behandelt• Nur lesend zugreifbar• RMAN sichert nicht die Daten• Bulk-Loading Operationen, wie insert... select• Mehr Transformationsoptionen

als im SQL* Loader• Parallelisierbares Lesen• Alternative zum SQL*Loader

70

Page 68: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

CREATE DIRECTORY Exttab AS 'D:\Szenario\Exttab';

DROP TABLE Gemeinde_EX;CREATE TABLE Gemeinde_EX ( Gemeinde_Nr VARCHAR2(8), Gemeinde VARCHAR2(50) )

ORGANIZATION EXTERNAL

(TYPE oracle_loaderDEFAULT DIRECTORY ExttabACCESS PARAMETERS (RECORDS DELIMITED BY newline BADFILE 'Gemeinde.bad‚ DISCARDFILE 'Gemeinde.dis‚ LOGFILE 'Gemeinde.log‚ SKIP 20 FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"‚ )LOCATION ('Gemeinde_CSV.TXT'))

GemeindeID;Gemeinde;KundenID;KreisID01001000;Flensburg;;0;100101002000;Kiel;;0;100201003000;Luebeck;;0;100301004000;Neumuenster;;0;100401051001;Albersdorf;;0;105101051002;Arkebek;;0;105101051003;Averlak;;0;105101051004;Bargenstedt;;0;105101051005;Barkenholm;;0;105101051006;Barlt;;0;105101051008;Bergewoehrden;;0;105101051010;Brickeln;;0;105101051011;Brunsbuettel;;0;1051

...........................

...........................

External Tables – Beispiel 1

71

Page 69: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Modifikationsmöglichkeiten

alter table ex_orte location ('ORTE_Y.CSV');

alter table ex_orte default directory LC_Texte_2;

create or replace directory LC_TEXTE_2 AS 'D:\Szenario\Testdaten';

72

Page 70: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Konzept zum einspielen von Dateien

1. Änderungsprozedur zum• Kopieren der Dateien• Umbenennen von Dateinamen

2. Änderungsprozedur zum• Ändern der Einträge in der

External Table• Ändern des Pfades im

Directory-Objekt

ABC120109ABC130109

ABC140109ABC150109

Sich täglich ändernde DateinamenDatum im DateinamenLieferantenname im Dateinamen

73

Page 71: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Preprocessing für External Tables

CREATE TABLE sales_transactions_ext (PROD_ID NUMBER, CUST_ID NUMBER ...)ORGANIZATION external (TYPE oracle_loader DEFAULT DIRECTORY data_file_dir ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII PREPROCESSOR exec_file_dir:'gunzip' OPTIONS '-C' BADFILE log_file_dir:'sh_sales.bad_xt' LOGFILE log_file_dir:'sh_sales.log_xt' FIELDS TERMINATED BY "|" LDRTRIM ( PROD_ID, CUST_ID, TIME_ID DATE(10) "YYYY-MM-DD", CHANNEL_ID, PROMO_ID, QUANTITY_SOLD, AMOUNT_SOLD, UNIT_COST, UNIT_PRICE)) location ('sh_sales.dat.gz')) REJECT LIMIT UNLIMITED;

Release 2

74

Page 72: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

External Tables mit Data Pump

• Erstellen External Table in Quell-DB• Verwendung von CREATE AS SELECT * FROM <source_table>

• Das Ausführen des CREATE startet den Data Pump-Export

• Kopieren der Dump-Datei auf die Zielumgebung

• In der Zielumgebung neue External Table-Definition erstellen und aktivieren

• Durch Zugriff mit SELECT auf die External Table die Daten lesen

75

Page 73: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

External Tables mit Data Pump

OLTP DWH

FTP

EX_T EX_T

76

Page 74: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

External Tables mit Data Pump

OLTP DWH

select * from EX_Bestellung_2

77

Page 75: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Testzenario

OLTP DWH

Impliziter

FTP-Lauf

EX_T EX_T

OLTP DWH

DB_Link

CTAS

Bestellung

Bestellung

Bestellung Bestellung

Page 76: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Vorteile der Kombination

• Leichte Handhabung• Syntax der beiden Typen sehr ähnlich

• Hohe Performance• Data Pump-eigenes Format ist für schnellen Ex-/Import

ausgelegt• Parameter von Data Pump zusätzlich nutzen, um die zu

extrahierende Datenmenge auf das Wesentliche zu reduzieren

• Verbleiben innerhalb der SQL-Sprache• Durch CREATE TABLE AS SELECT lassen sich sowohl WHERE-Filter als auch Joins während des Extrahierens verarbeiten

79

Page 77: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Transportable Tablespaces

• Höchste Performance beim Austausch von Oracle zu Oracle• Daten werden als komplettes File oder File Set bewegt

• Austausch zwischen unterschiedlichen Betriebssystemen möglich • Konvertierung kann mit RMAN erfolgen, z.B. von

BigEndian nach LittleEndian

• Nützlich beim Bewegen der Daten zwischen Quellsystem und Staging Area sowie zwischen den anderen Schichten im Warehouse

80

Page 78: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Vorgehensweise

1. Anlegen des Tablespaces im Quellsystem

2. Zuweisung der zu kopierenden Daten zum Tablespace• Alle Daten sind dem Tablespace zugeordnet (Indizes etc.)

3. Ändern des Tablespaces auf Read-Only

4. Export der Metadaten mit Data Pump (EXPDP)

5. Eventuell Konvertierung des Tablespace Datafiles• Über die RMAN CONVERT Function

6. Kopieren des Tablespace Datafiles und der Metadaten

7. Import der Metadaten in der Zielumgebung

8. Ändern des Tablespaces auf Read-Write

81

Page 79: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Transportable Tablespaces

P1P2P3P4

4 4

89

Z1Z2Z3Z4

CREATE TABLE temp_jan_umsatzNOLOGGINGTABLESPACE ts_temp_umsatzASSELECT * FROM ?????????WHERE time_id BETWEEN '31-DEC-1999' AND '01-FEB-2000';

Index/Constraint freeParallel Direct Path InsertSet Based

1

2

3

4

ALTER TABLESPACE ts_temp_umsatz READ ONLY;

EXP TRANSPORT_TABLESPACE=yTABLESPACES=ts_temp_umsatzFILE=jan_umsatz.dmp

Kopieren des Tablespace zur Zielplattform

BS-CopyDaten

Metadaten

Buchhaltung

Produktion

Personal

Lager

Lieferanten

Marketing

Service

83

Page 80: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Transportable Tablespaces

IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f'TABLESPACES=ts_temp_umsatzFILE=jan_umsatz.dmp

5

6

7

ALTER TABLESPACE ts_temp_umsatz READ WRITE;

ALTER TABLE umsatz ADD PARTITION umsatz_00jan VALUESLESS THAN (TO_DATE('01-feb-2000','dd-mon-yyyy'));ALTER TABLE umsatz EXCHANGE PARTITION umsatz_00janWITH TABLE temp_umsatz_janINCLUDING INDEXES WITH VALIDATION;

Metadaten

091999

101999

111999

121999

Fakttable Umsatz

Neuer Monat012000

84

Page 81: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 2/2

• Planung und Organisation des ETL Prozesses• Schichten als Planungsgrundlage• Umgang mit separaten ETL-Tools und Lade-Engines• Prüftechniken mit SQL• Szenario zum Prüfen von Daten

• Weitere Datenbank-Techniken• Ersatz von Aggregat-Tabellen durch MAVs• Table Functions• Pivoting• Multiple Inserts / Merge

• Zusammenfassung

Datenbank-basierte ETL-Prozesse

85

Page 82: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

R R

BS S

S

D

D

DD

Enterprise Information Layer User View LayerData Integration Layer

T

T

T

T: Transfertabellen

R: Referenztabellen

S: Stammdaten

B: Bewgungsdaten

D: Dimensionen

F: Fakten

B

F

ETL: Kosten pro Kunde

F

F

D

D

D

D

ETL: Kosten pro Kunde

ETL: Kosten pro Kunde

B

B

ETL: Kosten pro Kunde

B

B

Transformation

Frühzeitige ETL-Aktivitäten schaffen SynergienDas Schichtenmodell hilft bei der Positionsfindung für Transformationen und Aggregationen

86

Die frühest mögliche Stelle für Transformationen und Prüfungen finden

Prüfungen

Page 83: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

T: Transfertabellen

R: Referenztabellen

S: Stammdaten

B: Bewgungsdaten

D: Dimensionen

F: Fakten

Enterprise Information Layer User View LayerData Integration Layer

R R

BS S

S

DD

DD

T

T

TB

F

F

F

D

D

D

DB

B

B

B

Frühzeitige ETL-Aktivitäten schaffen SynergienDas Schichtenmodell hilft bei der Positionsfindung für Transformationen und Aggregationen

87

Die frühest mögliche Stelle für Transformationen und Prüfungen finden

Prüfungen JoinsDistincts

Page 84: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Effizientes Laden beginnt so früh wie möglich

88

Data Integration Layer

T

T

T

T

T

Data Integration Layer

T

Logik so früh wie möglichWarum?

1:1

1:1

1:1

1:1

CTAS

Page 85: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Verteilte Server zwingen oft zu unproduktiven 1:1 LadevorgängenViele unnötige und versteckte Aufwände

Enterprise Information Layer

User View Layer

Data Integration Layer

Process neutral / 3 NF

User View Layer

User View Layer

1:1

1:1

1:1

Vorsystem mitVorrechner

Vorsystem

1:1

1:1

Page 86: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Eine Hardware (bzw. Cluster) / ein Ort ermöglicht flexibles Handeln durch kurze Wege

Enterprise Information Layer User View LayerData Integration Layer

Process neutral / 3 NF

Freie Wahlmöglichkeit

für Ort und Art des ETL

Page 87: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Zu viele teuere Ladestrecken

• Redundante Wege• Gefahr von 1:1 Kopien• Schwache Netze

Enterprise Information Layer User View LayerData Integration Layerc

Process neutral / 3 NFOLTP

Separater ETL Server

DWH Server

Page 88: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Balance zwischen den beteiligten Komponenten finden

DWH-Datenbank

DWH-ServerETL-Server

ETL-Engine

Page 89: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Balance zwischen den beteiligten Komponenten finden

DWH-Datenbank

DWH-ServerETL-Server

ETL-Engine

Page 90: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Balance zwischen den beteiligten Komponenten finden

DWH-Datenbank

DWH-ServerETL-Server

ETL-Engine

DokumentationSteuerungBenutzerfühung

Rechen-PowerAusnutzen von bestehenden Ressource

Page 91: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Aufwendige Extraktionsverfahren

OracleDWH

OracleOLTP

ETLTool

Server

1. Ladeschritt

2. Ladeschritt

Nur ein Ladeschritt !

Page 92: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Varianten von Regeln / Prüfungen

Attribut-bezogene Regeln 1. Not Null / Pflichtfelder

2. Formatangabena) numeric

b) Alphanumerisch

c) Date

d) Masken

3. Div. Check Constraint

4. Wertbereiche• Ober-/Untergrenzen / Wertelisten

Satz-bezogene Regeln5. Abhängigkeiten von Werten in anderen Attributen

desselben Satzes

Satz-übergreifende Regeln6. Primary Key / Eindeutigkeit

7. Aggregat – Bedingungena) Ober- Untergrenzen von Summen

b) Anzahl Sätze pro Intervall usw.

8. Rekursive Zusammenhänge• Verweise auf andere Sätze derselben Tabelle

(Relation)

Tabellen-übergreifende Regeln9. Foreign Key

a) Child-Parent (Orphan)b) Parent-Child

10. Aggregat – Bedingungena) Ober- Untergrenzen von Summenb) Anzahl Sätze pro Intervall usw.

11. Referenz-Zusammenhänge• Verweise auf Sätze einer anderen Tabelle (Relation)

Zeit-/ Zusammenhang-bezogene Regeln12. Zeitinvariante Inhalte

Anz. Bundesländer

13. Zeitabhängige Veränderungen 14. Über die Zeit mit anderen Daten korrelierende

Feldinhalte

Verteilungs-/Mengen-bezogene Regeln15. Verteilung

a) Arithmetische Mittelb) Varianz / Standardabweichungen

16. Qualitätsmerkmale und Mengen

96

Page 93: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Prüfen mit oder Ohne Datenbank-Constraints

• Constraints verlangsamen den Massen-Insert des ETL-Prozesses

• => Ohne Constraints arbeiten• => Prüfen mit SQL-Mitteln• => Prüfen mit DML-Errorlogging

• Nur bei wenigen Daten sinnvoll

Page 94: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Prüfkonzepte

• Einfach implementierbar• Bessere Performance• Nur bei aktivierten Constraints

Stage-Tabelle+ Geprüfte Daten

Kopieren

Statistiken

Date

Number

Varchar2()

BadFile

FehlerhafteSätze

CheckConstraints

StatistikRoutine

DMLError Log

• Fachliche Prüfungen kaum möglich• Eventuell zusätzliche Prüfungen

nötig

98

Page 95: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Error Logging

• Constraints• Unique Key / Primary Key• Foreign Key• NOT NULL• Check Constraint

Kunde

Kunde_err

KUNDENNRVORNAME NACHNAME ORTNR STRASSE TELEFON

KUNDENNRVORNAME NACHNAME ORTNR STRASSE TELEFON ORA_ERR_NUMBER$ORA_ERR_MESG$ ORA_ERR_ROWID$ORA_ERR_OPTYP$ ORA_ERR_TAG$

INSERT INTO Kunde

VALUES (......)

LOG ERRORS INTO kunde_err('load_20040802')

99

Page 96: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Testfall

Bestellung

1.100.000Sätze

100.000doppelt

Bestellung_CheckBESTELLNRORTNRKUNDENNRDATUMANZAHLPOS

BESTELLNRORTNRKUNDENNRDATUMANZAHLPOS

UNIQUE-CONSTRAINT

Bestellung_Check_Errors

BESTELLNRORTNRKUNDENNRDATUMANZAHLPOSORA_ERR_NUMBER$ORA_ERR_MESG$ORA_ERR_ROWID$ORA_ERR_OPTYP$ORA_ERR_TAG$

Page 97: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Testfall

begin dbms_errlog.create_error_log( dml_table_name => 'BESTELLUNG_CHECK', err_log_table_name => 'BESTELLUNG_CHECK_ERRORS' );end;

SQL> insert into bestellung_check select * from bestellung 2 LOG ERRORS INTO bestellung_check_errors ('daily_load') REJECT LIMIT 200000 3 ;

1000000 Zeilen erstellt.

Abgelaufen: 00:00:50.63

Page 98: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Die Alternative

create table Bestellung_non_unique as select bestellnr from (select count(BESTELLNR) n, bestellnr from bestellung group by bestellnr) where n > 1;

Tabelle wurde erstellt.

Abgelaufen: 00:00:00.49

insert /*+ APPEND */ into bestellung_check select B.BESTELLNR,B.ORTNR,B.KUNDENNR,B.DATUM , B.ANZAHLPOS from bestellung B where B.BESTELLNR not in (select bestellnr from Bestellung_non_unique);

900000 Zeilen erstellt.

Abgelaufen: 00:00:02.26Zusammen 00:00:03.15

1.

2.

Page 99: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Check Constraint mit Regular Expressions

CREATE TABLE Check_KUNDE (KUNDENNR NUMBER,GESCHLECHT NUMBER,VORNAME VARCHAR2(50),NACHNAME VARCHAR2(50),ANREDE VARCHAR2(10),GEBDAT DATE,ORTNR NUMBER,STRASSE VARCHAR2(50),TELEFON VARCHAR2(30));

ALTER TABLE check_kunde ADD CONSTRAINT Ch_KD_Name CHECK(REGEXP_LIKE(NACHNAME, '[^[:digit:]]'));

Regel: Im Kundennamen müssen Buchstaben vorkommen und keine reine Zahlenkolonne

INSERT INTO check_kunde (Kundennr, Geschlecht, Vorname, Nachname, Anrede, Gebdat, Ortnr, Strasse, Telefon) VALUES (9,1,'Klaus','123','Herr','01.01.60',2,'Haupstr.',08923456);

FEHLER in Zeile 1: ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt

104

• Verwendung von Regular Expressions steigert die Performance bei Prüfungen

Page 100: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Beispiele* Match 0 or more times

? Match 0 or 1 time

+ Match 1 or more times

{m} Match exactly m times

{m,} Match at least m times

{m, n} Match at least m times but no more than n times

\n Cause the previous expression to be repeated n times

[:alnum:] Alphanumeric characters

[:alpha:] Alphabetic characters

[:blank:] Blank Space Characters

[:cntrl:] Control characters (nonprinting)

[:digit:] Numeric digits

[:graph:] Any [:punct:], [:upper:], [:lower:], and [:digit:] chars

[:lower:] Lowercase alphabetic characters

[:print:] Printable characters

[:punct:] Punctuation characters

[:space:] Space characters (nonprinting), such as carriage return, newline, vertical tab, and form feed

[:upper:] Uppercase alphabetic characters

[:xdigit:] Hexidecimal characters

Modus

Zeichenklassen

105

Page 101: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Wichtiges Hilfsmittel für Einzelfeldprüfungen: CASE-Anweisung

SELECT CASE WHEN isnumeric('999') = 1 THEN 'numerisch' ‚ ELSE 'nicht numerisch'‚ END ErgebnisFROM dual;

CREATE OR REPLACE FUNCTION isnumeric ( p_string in varchar2) return boolean AS l_number number; BEGIN l_number := p_string; RETURN 1; EXCEPTION WHEN others THEN RETURN 0; END;

106

Page 102: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Hilfsfunktion:Date_Check

• In Verbindung mit der CASE-Anweisung

create or replace function IsDate (str varchar2) return varchar2 is inDate varchar2(40);

FUNCTION dateCheck (inputDate varchar2, inputMask varchar2) RETURN varchar2

IS dateVar date;BEGIN dateVar:= to_date(inputDate,inputMask); return 'true'; exception when others then return 'false';END;

BEGIN inDate:= trim(str); if dateCheck(inDate, 'mm-dd-yyyy') = 'false' AND dateCheck(inDate, 'mm-dd-yy') = 'false' AND dateCheck(inDate, 'yyyy-mm-dd') = 'false' AND dateCheck(inDate, 'yy-mm-dd') = 'false' AND dateCheck(inDate, 'yyyy-mon-dd') = 'false‚ AND dateCheck(inDate, 'yy-mon-dd') = 'false‚ AND dateCheck(inDate, 'dd-mon-yyyy') = 'false‚ AND dateCheck(inDate, 'dd-mon-yy') = 'false‚ AND dateCheck(inDate, 'mmddyy') = 'false‚ AND dateCheck(inDate, 'mmddyyyy') = 'false‚ AND dateCheck(inDate, 'yyyymmdd') = 'false' AND dateCheck(inDate, 'yymmdd') = 'false‚ AND dateCheck(inDate, 'yymmdd') = 'false' AND dateCheck(inDate, 'yymondd') = 'false‚ AND dateCheck(inDate, 'yyyymondd') = 'false‚ AND dateCheck(inDate, 'mm/dd/yyyy') = 'false' AND dateCheck(inDate, 'yyyy/mm/dd') = 'false‚ AND dateCheck(inDate, 'mm/dd/yy') = 'false' AND dateCheck(inDate, 'yy/mm/dd') = 'false‚ AND dateCheck(inDate, 'mm.dd.yyyy') = 'false' AND dateCheck(inDate, 'mm.dd.yy') = 'false' AND dateCheck(inDate, 'yyyy.mm.dd') = 'false' AND dateCheck(inDate, 'yy.mm.dd') = 'false' then return 'false'; else return 'true'; end if; --exception --when others then return 'false';

END;

107

Page 103: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Abarbeitungslogik für Einzelfeldprüfung mit CASE

• Temporäre Tabelle ist optional• Ist wesentlich übersichtlicher • Erlaubt Kombination von unterschiedlichen Prüfkriterien

Stage-Tabelle

Varchar2()

Kopieren

Gepruefte_Daten

Date

Number

Varchar2()Feld1Feld2Feld3

Temp-Tabelle

Varchar2()

Feld1Feld2Feld3

Feld1_is_nullFeld1_is_numericFeld2_is_numeric

INSERT INTO

temp_table

SELECT CASE ....FROMStage_Table

Error_Daten

Date

Number

Varchar2()

INSERT ALL WHEN Feld_1_is_null =1 into Error_Daten

WHEN Feld_1_is_null=0 into Gepruefte_Daten

108

Page 104: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Bestellnr

Menge

Summe

Name

Ort

BestDatum

Abarbeitungslogik mit CASE

Bestellnr

Menge

Summe

Name

Ort

BestDatum

Bestellnr_isNull

Menge_isNumeric

Summe_isNumeric

Summe_isNull

BestDatum_isDate

...

OLTP_Kunden

OLTP_Kunden_tmp

INSERT INTO OLTP_Kunden_tmpSELECT Bestellnr,Menge,Summe,Name,Ort,BestDatum,CASE WHEN (Bestellnr is NULL) then 1 ELSE 0 END Bestellnr_isNull,CASE WHEN (isNumeric(Menge) = 1) then 1 ELSE 0 END Menge_isNumeric,CASE WHEN (isNumeric(Summe) = 1) then 1 ELSE 0 END Summe_isNumeric,CASE WHEN (Summe is NULL) then 1 ELSE 0 END Summe_isNull,CASE WHEN (isDate(BestDatum) = 1) then 1 ELSE 0 END BestDatum_isDateFROM OLTP_Kunden;

Page 105: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Beispiel mit graphischer Modellierung:Einsatz von CASE und Zwischentabelle

110

Page 106: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Prüfung auf Eindeutigkeit:Beispiel graphisch und manuell

INSERT INTO el_kunde (kundennr,vorname,nachname,ortnr,strasse,telefon) SELECT src2.nummer,src2.name,src2.name,src2.nummer,src2.name,src2.nummer FROM SRC2,

(SELECT nummer FROM (SELECT count(nummer) n, nummer FROM src2 group by nummer) WHERE n = 1) doppelte

WHERE src2.nummer = doppelte.nummer;

111

Page 107: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Herausfiltern und Protokollieren von Feldern mit dem Wert „NOT NULL“

CASE WHEN F2 IS NULL THEN 1 ELSE 0 END

112

Page 108: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

SELECT F1 FROM (SELECT count(F1) n,F1 FROM s GROUP BY F1) WHERE n > 1;

Prüfen auf Eindeutigkeit der Eingabesätze

Es dürfen nur Sätze geladen werden, die einmal im Quell-Bestand vorkommen

113

Page 109: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Inhaltliche Abhängigkeit von zwei Feldern

Die satzübergreifende Reihenfolge von den Werten einer Spalte muss mit der Reihenfolge in einer anderen Spalte übereinstimmen

114

Page 110: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Summenvergleich graphisch

Bestellung

Bestellposition

Bestellnummer (PK)Gesamtsumme

Bestellnummer (FK)Positionssumme

=

115

Page 111: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Szenario

• Regel bzgl. der Bestellungen• Es darf keine Bestellung ohne Positionen geben.• Bestellnummern müssen eindeutig sein.• Es kann nur Bestellungen mit gültigen Kundennummern geben.• Bestellungen müssen immer in einem Zeitraum +/- 10 Tage von dem

Tagestadum liegen.

•Regeln bzgl. der Bestellpositionen• Der durchschnittliche Wert einer Position muss > 5 sein. • Positionsnummern müssen pro Bestellung lückenlos von 1 beginnend aufsteigen sein.• Es darf nur Bestellpositionen mit einer gültigen Bestellnummer geben.• Es darf nur Bestellpositionen mit einer gültigen Artikelnummer geben.• Rabatt darf nur für Firmenkunden gegeben werden.• Formatprüfungen:

• Feld Depostelle 3-stellig alphanumerisch und 3-stellig numerisch • Feld Rabatt mus numerisch sein und mindestens den Wert 0 haben • Feld Menge muss gefüllt sein (NotNull) und muss > 0 sein

•Qualitative Prüfungen• Wenn der Gesamtwert pro Bestellung muss < 1000 beträgt, dann muss , wenn groesser,

dann markieren.• Der Gesamtumsatz ist i. d. R. in dem 4ten Quartal am höchsten.• Bestellungen haben einen bestimmte Anzahl Positionen.

Page 112: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Die Beispiel - Quellumgebung

117

ARTIKEL_SPARTENSPARTE_NAME SPARTE_NR

BESTELLPOSITION

BESTELLNRPOSITIONSNRMENGEARTIKELNRDEPOTSTELLERABATT

PK

ARTIKELARTIKEL_NAMEARTIKEL_IDGRUPPE_NRPREIS

ARTIKEL_GRUPPENGRUPPE_NR GRUPPE_NAMESPARTE_NR

BESTELLUNG

BESTELLNRORTNR KUNDENNR BESTELLDATUMANZAHLPOS

KUNDE

KUNDENNRKUNDENNAME BERUFSGRUPPE SEGMENTKUNDENTYP

PKPK

PKPK

PK

FK

FK

FK

FK

FK

Page 113: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Beispielprüfungen

Page 114: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Beispielprüfungen

Page 115: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

1. Schritt: Prüfungen von Tabellen-übergreifenden Beziehungen

120

ARTIKEL_SPARTENSPARTE_NAME SPARTE_NR

BESTELLPOSITION

BESTELLNRPOSITIONSNRMENGEARTIKELNRDEPOTSTELLERABATT

PK

ARTIKELARTIKEL_NAMEARTIKEL_IDGRUPPE_NRPREIS

ARTIKEL_GRUPPENGRUPPE_NR GRUPPE_NAMESPARTE_NR

BESTELLUNG

BESTELLNRORTNR KUNDENNR BESTELLDATUMANZAHLPOS

KUNDE

KUNDENNRKUNDENNAME BERUFSGRUPPE SEGMENTKUNDENTYP

PKPK

PKPK

PK

FK

FK

FK

FK

FK

26

13

18

21

Page 116: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

2. Schritt: Prüfungen und Berechnungen von Satz-übergreifenden Abhängigkeiten

121

ARTIKEL_SPARTENSPARTE_NAME SPARTE_NR

BESTELLPOSITION

BESTELLNRPOSITIONSNRMENGEARTIKELNRDEPOTSTELLERABATT

PK

ARTIKELARTIKEL_NAMEARTIKEL_IDGRUPPE_NRPREIS

ARTIKEL_GRUPPENGRUPPE_NR GRUPPE_NAMESPARTE_NR

BESTELLUNG

BESTELLNRORTNR KUNDENNR BESTELLDATUMANZAHLPOS

KUNDE

KUNDENNRKUNDENNAME BERUFSGRUPPE SEGMENTKUNDENTYP

PKPK

PKPK

PK

FK

FK

FK

FK

FK

26

13

18

21

113

4 9

14

10

Page 117: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

3. Schritt: Feldprüfungen

122

ARTIKEL_SPARTENSPARTE_NAME SPARTE_NR

BESTELLPOSITION

BESTELLNRPOSITIONSNRMENGEARTIKELNRDEPOTSTELLERABATT

PK

ARTIKELARTIKEL_NAMEARTIKEL_IDGRUPPE_NRPREIS

ARTIKEL_GRUPPENGRUPPE_NR GRUPPE_NAMESPARTE_NR

BESTELLUNG

BESTELLNRORTNR KUNDENNR BESTELLDATUMANZAHLPOS

KUNDE

KUNDENNRKUNDENNAME BERUFSGRUPPE SEGMENTKUNDENTYP

PKPK

PKPK

PK

FK

FK

FK

FK

FK

26

13

18

21

113

4 9

14

10

5

6

8

11 12

15 16 1718

1920

Page 118: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Regeln bei der Ablauf-Planung

• Alles was mengenbasiert prüfbar ist, kommt zuerst• Feldbezogene Prüfungen sind nachgelagert• Bei aufwendigen Joins abklären, ob diese mehrfach

benötigt werden, wenn ja, dann • Prüfen einer Join-Tabelle• Nach Möglichkeit diese Prüfungen in eine zeitlich enge Abfolge

bringen

• Aufwendige feldbezogene Prüfungen, Prüfungen mit Funktionen usw. werden in einer einzigen Transformation zusamengefasst

• Bei Datenübernahme aus Datenbanken ist zu prüfen, ob innerhalb der Zielumgebung noch geprüft werden muss

• Bei Text-Eingabe-Daten die External Table bzw. Loader – Prüfmittel nutzen

Page 119: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Anordnung und Gruppierung der Ladeschritte des Beispiel-Szenarios

err_non_unique_bestellung

err_orphan_Bestellung

err_childless_Bestellung

err_orphan_Position

err_orphan_PositionArtikel

err_seq_pos_Bestellposition

err_anz_pos_Bestellposition

err_AVG_Pos_Wert

err_maske_depotstelle

err_Wert_Menge

err_not_null_Menge

err_not_Rabatt_Wert

err_kd_Rabatt_ok

BESTELLUNG

BESTELLPOSITION

KUNDE

ARTIKEL

BEST_POS

Tmp_ BEST_POS Tmp2_ BEST_POS

HauptdatenflussBeziehungsprüfungenHauptdatenflussHauptdatenfluss

Page 120: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Umsetzung der Prüfungen

Siehe separaten Ausdruck

Page 121: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Umsetzung der Prüfungen

Siehe separaten Ausdruck

Page 122: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Umsetzung der Prüfungen

Siehe separaten Ausdruck

Page 123: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Umsetzung der Prüfungen

Siehe separaten Ausdruck

Page 124: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Auflistung der Laufzeiten für die einzelnen Prüfungen (unterschiedliche Massnamen)

Page 125: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 2/2

• Planung und Organisation des ETL Prozesses• Schichten als Planungsgrundlage• Umgang mit separaten ETL-Tools und Lade-Engines• Prüftechniken mit SQL• Szenario zum Prüfen von Daten

• Weitere Datenbank-Techniken• Ersatz von Aggregat-Tabellen durch MAVs• Table Functions • Pivoting• Multiple Inserts / Merge

• Zusammenfassung

Datenbank-basierte ETL-Prozesse

130

Page 126: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Aggregattabellen

• Die meisten Kennzahlen sind bekannt• In der Datenbank als Aggregattabellen vorbereiten • Nicht über das BI-Tool umsetzen (meist langsamer)

• Keine eigenständigen Aggregat-Tabellen• Haben separate Namen -> Zwang zu Änderungen in BI-Tools

• Fehlende Transparenz• Aktualität wird nicht automatisch festgestellt• Aggregate-Tabellen liefern nur genau die Daten, die tatsächlich

enthalten sind. Ableitungen, z. B. zusätzliche Aggregationen sind nicht möglich (Rewrite-Technik)

Page 127: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Umsätze

Orte

Regionen

Länder

Level 1 DefinitionenAttribute

Level 2DefinitionenAttribute

Level 3DefinitionenAttribute

DimensionOrt

Zeit

Produkt

FK_OrtFK_ZeitFK_Produkt

Kunde

QueryRewrite

MaterializedViewPartitions

Parallel+Cluster

Bitmap-Index

Star-Transformation

Analytical-Functions

Materialized Views entlasten denETL-Prozess

Page 128: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Top/Alle_Artikel

Segement

Artikelsparte

Artikelgruppe

Artikel

Artikelcharge

Materialized Views sparen Plattenplatz und minimieren die Objektanzahl

MengeUmsatz

Summe pro Charge

Summe pro Artikel

Summe pro Gruppe

Summe pro Sparte

Summe pro Segement

Summe pro Charge

Qu

er

y

Re

vi

ew

Page 129: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Nested Materialized Views nutzen bereits ausgeführte IO-Leistung

Aufwendige Join-Operation

DIM_Zeit FAKT_Umsatz DIM_Produkte

Umsatz Prod.Gr A

Umsatz Prod. Gr B relativ zum Gesamtjahresumsatz

Summierung/Monat

Summierung/Jahr

Umsatz Prod.Gr B

Basistabellen

Materialized ViewLevel 1

Materialized ViewLevel 2

Materialized ViewLevel 3

Materialized ViewLevel 4

134

IO

Page 130: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

tf1 tf2

tf3

Stage_tabelle

Quelle Ziel

INSERT INTO Ziel SELECT * FROM (tf2(SELECT * FROM (tf1(SELECT * FROM Quelle))))

INSERT INTO Ziel SELECT * FROM tf( SELECT * FROM (Stage_tabelle))

Table Functions – Pipeline-VerfahrenParallelisierung trotz aufwendiger Programmierlogik

135

Page 131: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Begriffe im Bereich Table Functions

• Table Function• Funktionen, die eine Gruppe von Sätzen (SET) gleichzeitig bearbeitet.

Table Functions wirken wie physische Tabellen. Entsprechend werden sie auch in der FROM Klausel verwendet.

• Record Type • Ein komplexer, aus mehreren Feldern zusammengesetzter Datentyp.

• Nested Table• Eine Art virtuelle Tabelle (temporäre Tabelle im Speicher). Eine Table

Function kann eine solche Tabelle komplett an das aufrufende Kommando zurückgeben.

• Ref Cursor • Eine Art Pointer auf ein Result – Set einer Abfrage. Man übergibt einen Ref

Cursor einer Table Function, damit diese die Sätze des Result – Sets innerhalb der Function abarbeitet.

• Parallel• Table Functions können eingehende Sätze parallel bearbeiten, wenn diese

als Ref Cursor übergeben werden.• Pipelined

• Eine Table Function reicht bereits fertige Sätze an das aufrufende Kommando zur weiteren Verarbeitung weiter, während sie noch weitere Sätze bearbeitet.

136

Page 132: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

If a = b...Update...Case...

CursorFetchLoop

Funktion

Table_Function( )

INSERT INTO Table SELECT Feld1, Feld2 FROM

Mengenbasierte VerarbeitungTrotz Programmierung

• Schnelle Verarbeitung (Pipelined)

• Objekttechnik • Parallelisierung

• Mehrere Rückgabewerte und Einzelrückgaben

• Cursor als Input• Schachtelbar

Return Table

pipe row(record Type)Variante 1

Variante 2

137

Page 133: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

drop type Bestellung_X_t;create type Bestellung_X_t as object (BESTELLNR NUMBER(10),KUNDENCODE NUMBER(10),BESTELLDATUM DATE,LIEFERDATUM DATE,BESTELL_TOTAL NUMBER(12,2),Fehler_Datum DATE);

drop type Bestellung_X_t_table;create type Bestellung_X_t_table as TABLE of Bestellung_X_t;

create or replace package cursor_pkg as type Bestellung_t_rec IS RECORD ( BESTELLNR NUMBER(10), KUNDENCODE NUMBER(10), BESTELLDATUM DATE, LIEFERDATUM DATE, BESTELL_TOTAL NUMBER(12,2));END;

DefinitionRecord-Type

DefinitionNested-Table aufder Basis des Rekord-Types

DefinitionCursor als Typdes Übergabeparameters

Die Hilfstypen für Daten und Cursor

138

Page 134: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

create or replace function f_Bestellung_X(cur cursor_pkg.refcur_t) RETURN Bestellung_X_t_table IS BESTELLNR NUMBER(10); KUNDENCODE NUMBER(10); BESTELLDATUM DATE; LIEFERDATUM DATE; BESTELL_TOTAL NUMBER(12,2); Fehler_Datum DATE; ORDER_ID NUMBER(10);

objset Bestellung_X_t_table := Bestellung_X_t_table();i number := 0;beginLOOP -- read from cursor variable FETCH cur into BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,ORDER_ID; -- ext when last row EXIT WHEN cur%NOTFOUND; i := i+1; if substr(to_char(LIEFERDATUM,'YYYY.MM.YY'),1,4) >2002 then Fehler_Datum := to_date('9999.12.12','YYYY.MM.DD'); else Fehler_Datum := LIEFERDATUM; End if; objset.extend; objset(i) := Bestellung_X_t(BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,Fehler_Datum);END LOOP; CLOSE cur; Return objset;END;

Übernahme von Ausgangssätzenals Cursor

Definieren einer Nested-Table-Strukturfür die spätere Rückgabe.

Lesen aus Cursor

Erweitern Nested-Table um einenSatz und Überführen eines Satzes indie Nested-Table

Rückgabe der kompletten Tabelle an das aufrufende Statement(Alternative zu PIPE).

Die Table Function

139

Page 135: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

insert into bestellung_X select * from TABLE(f_Bestellung_X(CURSOR(SELECT * from Bestellung)))

select * from TABLE(f_bestellung(CURSOR(SELECT * from Bestellung)))

select count(*) from TABLE(f_bestellung(CURSOR(SELECT * from Bestellung))

Beispielaufrufe

140

Page 136: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Verhindern des mehrfachen Ladens

Bestellposition

Bestellung Insert into Ergebnisselect * from bestellung b, bestellposition pwhere b.PK = p.FK

Prüfung 1

Insert into Ergebnisselect * from bestellung b, bestellposition pwhere b.PK = p.FK

Prüfung 2

Insert into Ergebnisselect * from bestellung b, bestellposition pwhere b.PK = p.FK

Prüfung 3

Insert into Ergebnisselect * from bestellung b, bestellposition pwhere b.PK = p.FK

Prüfung 4

Der Join wird4 mal ausgeführt

Page 137: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Verhindern des mehrfachen Ladens

Bestellposition

Bestellung

Einlesen Cursor

Der Join wird1 mal ausgeführt

select * from TABLE(f_bestellung(CURSOR(select * from bestellung b, bestellposition p

where b.PK = p.FK)))

f_bestellung

Prüfung 1

Prüfung 2

Prüfung 3

Prüfung 4

Pipe

Page 138: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Native Support für Pivot und Unpivot

SALESREP Q1 Q2 Q3 Q4---------- ----- ----- ----- ----- 100 230 240 260 300 101 200 220 250 260 102 260 280 265 310

SALESREP QU REVENUE---------- -- ---------- 100 Q1 230 100 Q2 240 100 Q3 260 100 Q4 300 101 Q1 200 101 Q2 220 101 Q3 250 101 Q4 260 102 Q1 260 102 Q2 280 102 Q3 265 102 Q4 310

Sinnvoller Einsatz im Rahmendes ETL-Prozesses

143

Page 139: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Native Support für Pivot und Unpivot

select * from quarterly_salesunpivot include nulls(revenue for quarter in (q1,q2,q3,q4))order by salesrep, quarter ;

QUARTERLY_SALES

SALESREP Q1 Q2 Q3 Q4---------- ----- ----- ----- ----- 100 230 240 260 300 101 200 220 250 260 102 260 280 265 310

SALESREP QU REVENUE---------- -- ---------- 100 Q1 230 100 Q2 240 100 Q3 260 100 Q4 300 101 Q1 200 101 Q2 220 101 Q3 250 101 Q4 260 102 Q1 260 102 Q2 280 102 Q3 265 102 Q4 310

Sinnvoller Einsatz im Rahmendes ETL-Prozesses

144

Page 140: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Native Support für Pivot und Unpivot

SALESREP 'Q1' 'Q2' 'Q3' 'Q4'---------- ----- ----- ----- ----- 100 230 240 260 300 101 200 220 250 260 102 260 280 265 310

SALES_BY_QUARTER

SALESREP QU REVENUE---------- -- ---------- 100 Q1 230 100 Q2 240 100 Q3 160 100 Q4 90 100 Q3 100 100 Q4 140 100 Q4 70 101 Q1 200 101 Q2 220 101 Q3 250 101 Q4 260 102 Q1 260

select * from sales_by_quarterpivot (sum(revenue)for quarter in ('Q1','Q2','Q3','Q4'))order by salesrep ;

Sinnvoller Einsatz im Rahmendes ETL-Prozesses

145

Page 141: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Multiple Inserts verarbeiten

INSERT ALL WHEN STATUS = 'P'‚ THEN INTO WH_TRANS_PRIVAT (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) VALUES (BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS) WHEN STATUS = 'F'‚ THEN INTO WH_TRANS_FIRMA (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) VALUES (BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS) SELECT WH_TRANSAKTIONEN.BESTELLMENGE BESTELLMENGE$1, WH_TRANSAKTIONEN.KUNDENCODE KUNDENCODE$1, WH_TRANSAKTIONEN.BESTELL_TOTAL BESTELL_TOTAL$1, WH_TRANSAKTIONEN.STATUS STATUS FROM WH_TRANSAKTIONEN WH_TRANSAKTIONEN WHERE (WH_TRANSAKTIONEN.STATUS = 'P‚ /*SPLITTER.PRIVATKUNDEN*/) OR (WH_TRANSAKTIONEN.STATUS = 'F‚ /*SPLITTER.FIRMENKUNDEN*/);

146

Page 142: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

MERGE INTO "Kunde_TGT" USING (SELECT "KUNDEN_STAMM"."KUNDENNR" "KUNDENNR", "KUNDEN_STAMM"."VORNAME" "VORNAME", "KUNDEN_STAMM"."NACHNAME" "NACHNAME", "KUNDEN_STAMM"."STATUS" "STATUS", "KUNDEN_STAMM"."STRASSE" "STRASSE", "KUNDEN_STAMM"."TELEFON" "TELEFON", "KUNDEN_STAMM"."TELEFAX" "TELEFAX„FROM "KUNDEN_STAMM" "KUNDEN_STAMM") MERGE_SUBQUERYON ( "Kunde_TGT"."KUNDENNR" = "MERGE_SUBQUERY"."KUNDENNR") WHEN NOT MATCHED THEN INSERT ("Kunde_TGT"."KUNDENNR", "Kunde_TGT"."VORNAME", "Kunde_TGT"."NACHNAME", "Kunde_TGT"."STATUS", "Kunde_TGT"."STRASSE", "Kunde_TGT"."TELEFON", "Kunde_TGT"."TELEFAX") VALUES ("MERGE_SUBQUERY"."KUNDENNR", "MERGE_SUBQUERY"."VORNAME", "MERGE_SUBQUERY"."NACHNAME", "MERGE_SUBQUERY"."STATUS", "MERGE_SUBQUERY"."STRASSE", "MERGE_SUBQUERY"."TELEFON", "MERGE_SUBQUERY"."TELEFAX") WHEN MATCHED THEN UPDATE SET "VORNAME" = "MERGE_SUBQUERY"."VORNAME", "NACHNAME" = "MERGE_SUBQUERY"."NACHNAME", "STATUS" = "MERGE_SUBQUERY"."STATUS", "STRASSE" = "MERGE_SUBQUERY"."STRASSE", "TELEFON" = "MERGE_SUBQUERY"."TELEFON", "TELEFAX" = "MERGE_SUBQUERY"."TELEFAX";

MERGE-Funktion

• Funktion MERGE dient dem gleichzeitigen INSERT und UPDATE

• Basierend auf dem Matching des definierten Schlüssels (ON-Klausel)

• Auch DELETE-Operationen möglich

147

Page 143: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

Themenübersicht 2/2

• Planung und Organisation des ETL Prozesses• Schichten als Planungsgrundlage• Umgang mit separaten ETL-Tools und Lade-Engines• Szenario zum Prüfen von Daten• Szenario zum Prüfen von Daten

• Weitere Datenbank-Techniken• Ersatz von Aggregat-Tabellen durch MAVs• Table Functions• Pivoting• Multiple Inserts / Merge

• Zusammenfassung

Datenbank-basierte ETL-Prozesse

148

Page 144: Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE

R R

B

S S S

D

D

DD

Enterprise Information Layer

User View Layer

Data Integration Layer

T

T

T

T: Transfertabellen

R: Referenztabellen

S: Stammdaten

B: Bewgungsdaten

D: Dimensionen

F: Fakten

B

F

80%

20%

PEL

Zusammenfassung der bevorzugten Lade-Varianten

149

A

A: Aggregate

PELT

CTAS

CTAS

PEL

Vorgelagerte Prüfungen

Mengen-basierte

Prüfungen

Vorbereitetetemporäre

Tabellen

Aggregatbildungdurch Materialized

Views

Partition Exchange

Partition Exchange

Konzentration aller Prüfungen Denormalisierung (Joins)und Aggregate

PartitionierteTabellen

Prüfungen

CTAS : Create Table As Select PEL : Partition Exchange and Load