Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Oracle Data Warehouse – Datenbank basierte ETL-Prozesse

Ähnliche Präsentationen


Präsentation zum Thema: "Oracle Data Warehouse – Datenbank basierte ETL-Prozesse"—  Präsentation transkript:

1 Oracle Data Warehouse – Datenbank basierte ETL-Prozesse

2 Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse
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 2

3 Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse
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 3

4 Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse
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 4

5 System-Nutzen Maintenance Technik 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 Maintenance Technik

6 Flexibilität und schnelles Bereitsstellen
Data Integration Layer Enterprise Information Layer User View Layer T R R D D S T S S F D B integrieren T Zusammenhängender Abfragebereich D aufbereiten B B B D F D B B D F D Operative Daten Strategische Daten Taktische Daten T: Transfertabellen R: Referenztabellen S: Stammdaten B: Bewgungsdaten D: Dimensionen F: Fakten 6

7 Lade-Aktivitäten an Schichtübergängen
Integration Enterprise User View Flüchtige Daten Persistent Kopien / teilpersistent dynamisch Clearing-Verfahren, technisches, logisches, semantisches Prüfen Denormalisieren Historisieren z.T. Aggregieren Normalisieren (Granularisieren) 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) Kopieren Selektieren Mengenbasiertes Prüfen ohne Constraints Umschlüsselung Lookups -> Referenz-/Stammdaten Joins Aufbauen von Distinct-Strukturen (Normalisieren) Umschlüsselung Lookups -> Dimensionsdaten Joins - Denormalisieren 7

8 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

9 Die vier Funktionsbereiche des ETL
Integrieren Informations-Mehrwerte Kopieren Sammeln 9

10 1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln 1. Integrieren Identifizieren von identischen oder zusammenhängenden Informationen Synonymen-/Homonymen-Thematik Aggregationslevel angleichen Identifizieren und Angleichen Formate, Zustände, Sichtweisen etc... Betrag / Summe Artikel / Produkt Artikel / Artikelgruppe Meter / Kilometer Lose Stücke / Gebinde 10

11 2. Informations-Mehrwerte
1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln 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 11

12 3. Kopieren 1:1-Datenbewegung Mengen-Operationen
1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln 3. Kopieren 1:1-Datenbewegung Einfachste Aufgabe Mengen-Operationen Ohne zusätzliche Logik Überwindung von Systemgrenzen Vorschriften zum Mapping Schnittstellen-Konventionen Aspekt der Performance 12

13 4. Sammeln Einlagern von Daten Versionieren von Daten
1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln 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 13

14 Daten-nahe Transformation im DWH Den richtigen Platz finden
Quellsystem DWH-System n-tier n-tier Application Server ETL? Application Server ETL? 14

15 Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse
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 15

16 Zuordnung Datenobjekten und Speicher
Table Index Mview Partition DB-Objekte

17 Speicherobjekte

18 Die automatische Extent-Vergrößerung
Automatische Allokierung von weiteren Segmenten Exponentielles Vergrößerungs-Mass 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_name and e.SEGMENT_NAME = s.SEGMENT_NAME and t.TABLE_NAME = 'F_UMSATZ'; TABLE_NAME BLOCKS EMPTY_BLOCKS AVG_ROW_LEN NUM_ROWS PCT_FREE COMPRESS EXTENTS SEG_BYTES EXT_BLKS EXT_BYTES F_UMSATZ DISABLED F_UMSATZ DISABLED F_UMSATZ DISABLED F_UMSATZ DISABLED

19 Block- und Satzstruktur
Row header Column length Datenbank Block Column value

20 High Water Mark Nach INSERTS: Extent ID 0 1 2 3 4 Segment
Nach DELETES: Extent ID Segment Used block Unused block Free space after delete

21 Wie wird die „High Water Mark“ bestimmt
TOTAL_BLOCKS UNUSED_BLOCKS Extent ID Segment High-water mark LAST_USED_EXTENT_FILE_ID, LAST_USED_EXTENT_BLOCK_ID

22 Deallocate Space ALTER TABLE tablename DEALLOCATE UNUSED; Extent ID 4
3 2 1 Before deallocation Segment ALTER TABLE tablename DEALLOCATE UNUSED; High-water mark Extent ID 4 3 2 1 Segment After deallocation Used block Unused block Free space after delete

23 Truncate Table TRUNCATE TABLE tablename Extent ID 0 1 Segment
Free space High-water mark

24 Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse
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 24

25 Direct Path Load INSERT /*+APPEND */ INTO DWH.F_UMSATZ NOLOGGING
SELECT * FROM OLTP.BESTELLUNGEN; Server process F_UMSATZ Segment High-water mark Used block Free space after delete Blocks used by inserted rows

26 Paralleler Direct Path Load
ALTER SESSION ENABLE PARALLEL DML; INSERT /*+APPEND PARALLEL(F_UMSATZ,2) */ INTO DWH.F_UMSATZ NOLOGGING SELECT * FROM OLTP.BESTELLUNGEN; Slave process Slave process F_UMSATZ Segment High-water mark Used block Free space after delete Temporary segments

27 „Convential“ und „Direct Path“ - Load
Instance SGA Shared pool Array insert Extent management Conventional Data save Direct path Table High-water mark Space used only by conventional load

28 Testfall F_Umsatz F_Umsatz_DP 51.100.000 51.100.000 Sätze Sätze
ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT Sätze Sätze SQL> insert into f_umsatz_DP select * from f_umsatz; Zeilen erstellt. Abgelaufen: 00:07:57.73 SQL> insert /*+ APPEND */ into f_umsatz_DP select * from f_umsatz; Abgelaufen: 00:00:27.24 SQL> insert /*+ APPEND PARALLEL(F_UMSATZ_DP,2) */ into f_umsatz_DP select * from f_umsatz; Abgelaufen: 00:00:20.68

29 Direct Path / Convential Path
SQL Loader External Table Insert Append CTAS Benutzer SQL Command Processing Space Management Get new extents Adjust High Water Mark Find partial blocks Fill partial blocks Buffer Cache Buffer Cache Management Manage queues - Manage contention Read Database Blocks Write Database Direct Path Database Oracle Server 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

30 Space Management Empfehlung: Locally Managed Tablespace mit ASSM
Automatische Verwaltung des freien Platzes ASSM MSSM Freelists werden gepflegt Empfehlung: Locally Managed Tablespace mit ASSM Prüfung ob MSSM bei Massen-Inserts schneller ist

31 Bitmap managed Storage Locally managed Tablespace ohne Freelists

32 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

33 Klassische PL/SQL Cursor – Verarbeitung (Negativ – Beispiel)
t_Ref_1 (z. B ) t_ref_2 (z. B. 5000) t_ref_3 (z. B. 50) t_ref_4 (z. B. 6000) t_Quelle_Stage_1 (z. B ) 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 ) t_ref_9 (z. B ) select cursor Faktentabelle Insert + Diverse Updates und Inserts auf Protokolltabellen Für alle Bewegeungs- sätze z. B. ) Loop (0,1 Sec / Lauf) 8,3 Std* Zur Verdeutlichung dieses Beispiel: In der klassischen prozeduralen Programmierung ( auch mit Oracle PL/SQL ) wurden Schleifen programmiert, um jeden Satz einzeln zu prüfen und zu laden. In dieses Schleifen sind fast immer zusätzliche SELECT – Befehle oder Referenzabgleiche abgesetzt worden. Selbst wenn ein Schleifendurchlauf nur 0,1 Sec an Zeit verbraucht, addiert sich diese Zeit bei einer entsprechenden Anzahl Sätzen auf Laufzeiten von Stunden. Das Beispiel ist typisch für satzweise, prozedurale Verarbeitung. * Wert aus einer Bank (2003), wäre heute wesentlich weniger

34 Mengenbasierte Alternative (Performance – Optimierung bis zu Faktor 20 und mehr)
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 Cursor loop Satzweise Prüfung Protokoll Fakt Table Das Gegenbeispiel der mengenbasierten Verarbeitung nutzt die Mengenlehre – Algorithmen, die das relationale Datenbanksystem mittels SQL anbietet. Über einen Outer – Join und eine temporäre Zwischentabelle werden Referenzwerte (Lookups) gelesen. Die temporäre Tabelle kann zusätzlich separat geprüft werden. Ein letzter Ladeschritt schreibt die bereits geprüften Sätze in die Zieltabelle. Das Verfahren läuft im Verhältnis 1 : 10 schneller.

35 Das Simulations-Szenario
Name Type F0 NUMBER F1 NUMBER F2 NUMBER F3 VARCHAR2(50) F4 DATE F5 VARCHAR2(50) F6 VARCHAR2(50) F7 NUMBER Tabelle T10 Name Type F0 NUMBER F1 NUMBER F2 NUMBER F3 VARCHAR2(50) F4 DATE F5 VARCHAR2(50) F6 VARCHAR2(50) F7 NUMBER Tabelle T20 ~ 10 Millionen Sätze F0 F1 F2 F F F F F7 IamPFnAz6qnhWZlqao1AHgaR9gQczm4SSvtJn9lU 27-JAN-11 upOLaDSvWuxmv4pFlZsgtEPqgi43uRgI1uQjF7kV x2AFYV3W2QIcxf5mPzl39MpErCZI7rc1eQMXuMs8 42 ESh7uiu6Hqo6cwqqk9B7D1w9biFR3QjCVDyNWjaq 01-MAY-08 Mcj4QZEVmiG5Qof4eoPwqARLFhlc1xpLmgrAzL5i jvuabLwH44YODTusRR3Huyz7sECCTrLFGZA5QJdD 12 PA2OpnqxTISxHoHsJ5BZrIJArDGhcKCIi1lAzJyj 17-DEC-10 ebU5ogfehM87oO1f8e1VVrFOjJBsZJEUQLcyOls7 GP5zpIb5EzAsPrT9EuL6tdcJ2BVGbFXtch3F4rkO 58 P4q95WqLs9yWOdx6yryAt7zNgO8YeGzqmXTLdHJe 26-NOV-09 eTsS6sZdjeZbRWSnjq2m3ivoACc29dQENlVYjtkK DTTfROusF1hU1LLGHNRXWWGwpFlO47zedJWgEdX5 55

36 Der ungünstigste Fall Einzelinserts – Simuliert über Cursor-Prozedur
CREATE OR REPLACE PROCEDURE PR_x AS CURSOR 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; BEGIN open 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; Lese-Operation T10 Tabelle Datenbewegung über Variablen Schreibvorgang Laufzeit: 08:31 (Minuten : Sekunden)

37 Der einfache INSERT INSERT in leere Tabelle INSERT in gefüllte Tabelle
insert into t20 select * from t10; 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)

38 Logging / Nologging INSERT im Archivelog-Modus
INSERT mit NOLOGGING im ARCHIVE-Modus insert into t20 select * from t10; Laufzeit: 02:56 (Minuten : Sekunden) insert /*+ NOLOGGING */ into t20 select * from t10; Laufzeit: 01:48 (Minuten : Sekunden)

39 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

40 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

41 RMAN- Backup-Verfahren: Was wird gesichert?
Data Integration Layer Enterprise Information Layer User View Layer R: Referenztabellen T R R D D T: Transfertabellen S: Stammdaten B: Bewgungsdaten T S S S F D D: Dimensionen B F: Fakten T D B Keine Sicherung Keine Sicherung, wenn Data Marts komplett neu aufgebaut Werden Inkremental Backup nur für Referenz- und Stammdaten RMAN (Incremental) große Bewegungsdatentabellen am besten nach Abschluss des ETL-Laufes sichern RMAN (Incremental) 41

42 Direct Path Load Create Table As Select (CTAS INSERT mit APPEND - Hint
Create Table t20 as select * from t10; Laufzeit: 01:00 (Minuten : Sekunden) insert /*+ APPEND */ into t20 select * from t10; Laufzeit: 01:00 (Minuten : Sekunden)

43 Arbeiten mit Buffer-Caches
Wiederholtes Laden ohne zuvor die Buffer-Caches zu leeren Der SELECT-Teil läuft schneller 1. Verarbeitung insert /*+ APPEND */ into t20 select * from t10; Laufzeit: 01:00 (Minuten : Sekunden) 2. Verarbeitung insert /*+ APPEND */ into t20 select * from t10; Laufzeit: 00:25 (Minuten : Sekunden)

44 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 Data Integration Layer Enterprise Information Layer User View Layer R: Referenztabellen CTAS 20% R R T S S S D D T: Transfertabellen SSD S: Stammdaten CTAS B: Bewgungsdaten T PEL F D D: Dimensionen SSD SSD SSD B SSD F: Fakten T A: Aggregate D SSD SSD A Partitionierte Tabellen B PEL T SSD PEL SSD SSD Prüfungen 80%

45 Verlagern des Ladeprozesses auf SSD-Platten
Test mit Direct Path Load CTAS mit SSD Create Table T10 as select * from t10; Laufzeit: 00:10 (Minuten : Sekunden) APPEND mit SSD insert /*+ APPEND */ into t20 select * from t10; Laufzeit: 00:10 (Minuten : Sekunden)

46 Alle Messdaten in der Übersicht

47 Partition Exchange Loading (PEL)
Temporäre Tabelle Financial Production Neuer Monat Human Res. P1 P2 P3 P4 4 8 9 Z1 Z2 Z3 Z4 Zeit Store Supplier Monat 13 Marketing Parallel Direct Path INSERT (Set Based) CREATE TABLE AS SELECT (CTAS) CREATE Indizes / Statistiken anlegen EXCHANGE Tabelle Monat 12 Service Monat 11 Monat 10 Region DROP PARTITION Unvergleichbar schnell! Faktentabelle 47

48 Partition Exchange Loading (PEL)
-- Leere Partition an Zieltabelle hinzufügen ALTER TABLE Bestellung ADD PARTITION "Nov08" VALUES LESS THAN (to_date('30-Nov-2008','dd-mon-yyyy')); -- Neue leere temporäre Tabelle erstellen CREATE 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 Tabelle CREATE 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; 1 2 3 4 5 48

49 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

50 Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse
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 50

51 Deltadaten Extrahieren
OLTP DWH 1 Table Änderungsdatum Table 2 Table Trigger Table Queue Deltabildung über MINUS 3 Table Table 4 LogFile Queue Table Logminer 5 LogFile Streams Table Queue LogFile 6 Golden Gate Queue Table

52 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

53 Einlesetechniken Vorsysteme
EBCDIC ASCII SQL-Loader Direct Save External Table SQL Database Link SQL Oracle Transportable TS BS Copy BS Copy Datapump Oracle DWH Non Oracle ODBC SQL JDBC SQL Gateway SQL Applikation z. B. SAP R/3 API CALL API SQL

54 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äufe CREATE OR REPLACE TRIGGER Bestellung BEFORE DELETE OR INSERT OR UPDATE ON Bestellung FOR EACH ROW WHEN (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

55 SQL*Loader Loader Modes Convential Path Direct 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 Show SQL Loader in OEM Sqlldr Line Modus 55

56 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 An unrecoverable load does not record loaded data in the redo log file 56

57 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 DATA CHARACTERSET WE8MSWIN1252 INFILE '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

58 Aufruf des SQL*Loaders
sqlldr userid=DWH/DWH control=c:\orte.ctl log=C:\orte.log orte.ctl orte.csv Control File Daten TB_ORTE 58

59 Data Pump Architektur Werkzeug auch im Oracle Client vorhanden. Allerdings wird server-seitig der Job angestartet. Die Dump-Dateien liegen Serverseitig. D.h. Datendateien werden nicht vom Client zum Server transferiert. Detaching/Attaching des Client- vom Serverprozess möglich. Früher 1:1 Bezug zu Client- u. ServerProzess Eigenes Binary-Format der Datendateien: nicht von alten ex-im-loader lesbar. Data Pump deckt auch Teile der SQL*Loader Funktionalität ab. Allerdings im eigenen Datenformat! Deshalb ist SQL*Loader immer noch wichtig. Quelle: 59

60 Vereinfachte Verfahrensdarstellung
OLTP DWH Import mit Data Pump (impdp) Export mit Data Pump (expdp) FTP Schema OLTP Besondere GRANTs Schema DWH Delta-Load Network Mode Data Pump Export and Import both support a network mode in which the job's source is a remote Oracle instance. When you perform an import over the network, there are no dump files involved because the source is another database, not a dump file set. When you perform an export over the network, the source can be a read-only database on another system. Dump files are written out on the local system just as they are with a local (non-networked) export. 60

61 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 Verwendung von Parameter-File wird empfohlen Eingeführt mit Oracle 10gR1 Original Export: “Desupport for general use” in Oracle 11g In Oracle10gR2 Unterstützung aller 10g Features außer XML Schemas und XML Schema based Tables In Oracle 11g keine Einschränkungen Benötigt Schreibzugriff auf DB-Server für master table, Export von readonly DBs via NETWORK_LINK 61

62 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 expdp hr DIRECTORY=dpump_dir1 NETWORK_LINK=source_database_link DUMPFILE=network_export.dmp LOGFILE=network_export.log 62

63 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 parfile=Para_EX.txt impdp DIRECTORY=DP_OUT DUMPFILE=EXP1.DMP LOGFILE=DP_OUT:imp_log REMAP_SCHEMA=DWH:DWH2 63

64 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_link NOLOGFILE={y | n} PARALLEL=integer PARFILE=[directory_path]file_name QUERY = [schema.][table_name:] query_clause QUERY=employees:"WHERE department_id > 10 AND salary > 10000“ REMAP_DATA=[schema.]tablename.column_name:[schema.]pkg.function

65 Export-Beispiele 65

66 Import-Beispiele 66

67 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 START_JOB STATUS 67

68 Laufzeitenbeispiel C:\Users\aschlauc>expdp dwh/dwh
"DWH"."SYS_EXPORT_SCHEMA_01": dwh/******** wird gestartet SchStzung erfolgt mit Methode BLOCKS... Objekttyp SCHEMA_EXPORT/TABLE/TABLE_DATA wird verarbeitet Gesamte SchStzung mit BLOCKS Methode: GB Objekttyp SCHEMA_EXPORT/USER wird verarbeitet Objekttyp SCHEMA_EXPORT/SYSTEM_GRANT wird verarbeitet Objekttyp SCHEMA_EXPORT/ROLE_GRANT wird verarbeitet Objekttyp SCHEMA_EXPORT/DEFAULT_ROLE wird verarbeitet Objekttyp SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA wird verarbeitet Objekttyp SCHEMA_EXPORT/TABLE/TABLE wird verarbeitet Objekttyp SCHEMA_EXPORT/TABLE/COMMENT wird verarbeitet Objekttyp SCHEMA_EXPORT/PROCEDURE/PROCEDURE wird verarbeitet Objekttyp SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE wird verarbeitet Objekttyp SCHEMA_EXPORT/TABLE/INDEX/INDEX wird verarbeitet Objekttyp SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT wird verarbeitet Objekttyp SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS wird verarbeitet Objekttyp SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS wird verarbeitet . . "DWH"."F_UMSATZ" GB Zeilen exportiert . . "DWH"."T10" GB Zeilen exportiert . . "DWH"."LIEFERUNG" MB Zeilen exportiert . . "DWH"."LIEFERUNG_COMP" MB Zeilen exportiert . . "DWH"."LIEFERUNG_MITTEL_COMP" MB Zeilen exportiert . . "DWH"."LIEFERUNG_MITTEL" MB Zeilen exportiert . . "DWH"."D_REGION" KB Zeilen exportiert . . "DWH"."D_KUNDE" KB Zeilen exportiert . . "DWH"."BESTELLUNGEN" KB Zeilen exportiert . . "DWH"."D_ARTIKEL" KB Zeilen exportiert . . "DWH"."D_VERTRIEBSKANAL" KB Zeilen exportiert . . "DWH"."KUNDE" KB Zeilen exportiert . . "DWH"."LIEFERUNGEN" KB Zeilen exportiert . . "DWH"."PRODUKT" KB Zeilen exportiert . . "DWH"."D_ZEIT" KB Zeilen exportiert Master-Tabelle "DWH"."SYS_EXPORT_SCHEMA_01" erfolgreich geladen/entladen ******************************************************************************

69 Testlaufzeiten Gesamtlaufzeit für 4,5 GB Schreiben auf SSD 4 Cores
Dumpfile 4,5 GB Parallel : 42 Minuten Parallel 2 0: 56 Minuten Parallel 4 0: 52 Minuten Alternative mit klassischem EXP: exp 3,5 Minuten

70 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

71 External Tables – Beispiel 1
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_loader DEFAULT DIRECTORY Exttab ACCESS 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;KreisID ;Flensburg;;0; ;Kiel;;0; ;Luebeck;;0; ;Neumuenster;;0; ;Albersdorf;;0; ;Arkebek;;0; ;Averlak;;0; ;Bargenstedt;;0; ;Barkenholm;;0; ;Barlt;;0; ;Bergewoehrden;;0; ;Brickeln;;0; ;Brunsbuettel;;0;1051 External tables are defined as tables that do not reside in the database, and can be in any format for which an access driver is provided. Oracle Database provides two access drivers: ORACLE_LOADER and ORACLE_Data Pump. By providing the database with metadata describing an external table, the database is able to expose the data in the external table as if it were data residing in a regular database table. 71

72 Modifikationsmöglichkeiten
create or replace directory LC_TEXTE_2 AS 'D:\Szenario\Testdaten'; alter table ex_orte default directory LC_Texte_2; alter table ex_orte location ('ORTE_Y.CSV'); 72

73 Konzept zum einspielen von Dateien
Änderungsprozedur zum Kopieren der Dateien Umbenennen von Dateinamen Ändern der Einträge in der External Table Ändern des Pfades im Directory-Objekt ABC120109 ABC130109 ABC140109 ABC150109 Sich täglich ändernde Dateinamen Datum im Dateinamen Lieferantenname im Dateinamen 73

74 Preprocessing für External Tables
Release 2 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; 74

75 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

76 External Tables mit Data Pump
OLTP DWH EX_T EX_T FTP 76

77 External Tables mit Data Pump
OLTP DWH select * from EX_Bestellung_2 77

78 Testzenario CTAS OLTP DWH Bestellung DB_Link Bestellung OLTP DWH EX_T
Impliziter FTP-Lauf

79 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

80 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

81 Vorgehensweise Anlegen des Tablespaces im Quellsystem
Zuweisung der zu kopierenden Daten zum Tablespace Alle Daten sind dem Tablespace zugeordnet (Indizes etc.) Ändern des Tablespaces auf Read-Only Export der Metadaten mit Data Pump (EXPDP) Eventuell Konvertierung des Tablespace Datafiles Über die RMAN CONVERT Function Kopieren des Tablespace Datafiles und der Metadaten Import der Metadaten in der Zielumgebung Ändern des Tablespaces auf Read-Write 81

82 Beispiele 1 2 3 4 5 7 82

83 Transportable Tablespaces
1 CREATE TABLE temp_jan_umsatz NOLOGGING TABLESPACE ts_temp_umsatz AS SELECT * FROM ????????? WHERE time_id BETWEEN '31-DEC-1999' AND '01-FEB-2000'; Buchhaltung Produktion Personal P1 P2 P3 P4 4 8 9 Z1 Z2 Z3 Z4 Lager Index/Constraint free Parallel Direct Path Insert Set Based Lieferanten Marketing Service 2 ALTER TABLESPACE ts_temp_umsatz READ ONLY; 3 Kopieren des Tablespace zur Zielplattform BS-Copy Daten EXP TRANSPORT_TABLESPACE=y TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp Meta daten 4 83

84 Transportable Tablespaces
5 IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f' TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp Metadaten 6 ALTER TABLESPACE ts_temp_umsatz READ WRITE; 7 Neuer Monat ALTER TABLE umsatz ADD PARTITION umsatz_00jan VALUES LESS THAN (TO_DATE('01-feb-2000','dd-mon-yyyy')); ALTER TABLE umsatz EXCHANGE PARTITION umsatz_00jan WITH TABLE temp_umsatz_jan INCLUDING INDEXES WITH VALIDATION; 121999 111999 101999 091999 Fakttable Umsatz 84

85 Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse
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 85

86 Data Integration Layer Enterprise Information Layer
Frühzeitige ETL-Aktivitäten schaffen Synergien Das Schichtenmodell hilft bei der Positionsfindung für Transformationen und Aggregationen Die frühest mögliche Stelle für Transformationen und Prüfungen finden Data Integration Layer Enterprise Information Layer User View Layer R: Referenztabellen T R R ETL: Kosten pro Kunde D D T: Transfertabellen S S: Stammdaten B: Bewgungsdaten T S S F D D: Dimensionen B F: Fakten ETL: Kosten pro Kunde T D B Transformation ETL: Kosten pro Kunde B B D F D B B ETL: Kosten pro Kunde D Prüfungen F D 86

87 Enterprise Information Layer Data Integration Layer
Frühzeitige ETL-Aktivitäten schaffen Synergien Das Schichtenmodell hilft bei der Positionsfindung für Transformationen und Aggregationen Die frühest mögliche Stelle für Transformationen und Prüfungen finden Enterprise Information Layer User View Layer Data Integration Layer R: Referenztabellen T: Transfertabellen T R R S D S: Stammdaten D F T S S B: Bewgungsdaten B D D: Dimensionen T B D D F: Fakten B B D B F B D F D Prüfungen Distincts Joins 87

88 Effizientes Laden beginnt so früh wie möglich
Data Integration Layer T Data Integration Layer 1:1 1:1 CTAS T 1:1 1:1 Warum? Logik so früh wie möglich 88

89 Verteilte Server zwingen oft zu unproduktiven 1:1 Ladevorgängen Viele unnötige und versteckte Aufwände User View Layer 1:1 Vorsystem Data Integration Layer Enterprise Information Layer User View Layer 1:1 Process neutral / 3 NF 1:1 1:1 Vorsystem mit Vorrechner User View Layer 1:1

90 Eine Hardware (bzw. Cluster) / ein Ort ermöglicht flexibles Handeln durch kurze Wege
Freie Wahlmöglichkeit für Ort und Art des ETL Data Integration Layer Enterprise Information Layer User View Layer Process neutral / 3 NF

91 Zu viele teuere Ladestrecken
Redundante Wege Gefahr von 1:1 Kopien Schwache Netze DWH Server Data Integration Layer c Enterprise Information Layer User View Layer OLTP Process neutral / 3 NF Separater ETL Server

92 Balance zwischen den beteiligten Komponenten finden
DWH-Datenbank ETL-Engine ETL-Server DWH-Server

93 Balance zwischen den beteiligten Komponenten finden
DWH-Datenbank ETL-Engine ETL-Server DWH-Server

94 Balance zwischen den beteiligten Komponenten finden
Dokumentation Steuerung Benutzerfühung Rechen-Power Ausnutzen von bestehenden Ressource DWH-Datenbank ETL-Engine ETL-Server DWH-Server

95 Aufwendige Extraktionsverfahren
Nur ein Ladeschritt ! Oracle OLTP Oracle DWH 2. Ladeschritt ETL Tool Server 1. Ladeschritt

96 Varianten von Regeln / Prüfungen
Attribut-bezogene Regeln Not Null / Pflichtfelder Formatangaben numeric Alphanumerisch Date Masken Div. Check Constraint Wertbereiche Ober-/Untergrenzen / Wertelisten Satz-bezogene Regeln Abhängigkeiten von Werten in anderen Attributen desselben Satzes Satz-übergreifende Regeln Primary Key / Eindeutigkeit Aggregat – Bedingungen Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Rekursive Zusammenhänge Verweise auf andere Sätze derselben Tabelle (Relation) Tabellen-übergreifende Regeln Foreign Key Child-Parent (Orphan) Parent-Child Aggregat – Bedingungen Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Referenz-Zusammenhänge Verweise auf Sätze einer anderen Tabelle (Relation) Zeit-/ Zusammenhang-bezogene Regeln Zeitinvariante Inhalte Anz. Bundesländer Zeitabhängige Veränderungen Über die Zeit mit anderen Daten korrelierende Feldinhalte Verteilungs-/Mengen-bezogene Regeln Verteilung Arithmetische Mittel Varianz / Standardabweichungen Qualitätsmerkmale und Mengen 96

97 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

98 Prüfkonzepte Einfach implementierbar Bessere Performance
Nur bei aktivierten Constraints Fachliche Prüfungen kaum möglich Eventuell zusätzliche Prüfungen nötig Stage-Tabelle + Geprüfte Daten Statistik Routine Statistiken Date Number Varchar2() Kopieren Check Constraints Bad File Fehlerhafte Sätze DML Error Log 98

99 Error Logging Constraints Unique Key / Primary Key Foreign Key
NOT NULL Check Constraint Kunde KUNDENNR VORNAME NACHNAME ORTNR STRASSE TELEFON INSERT INTO Kunde VALUES (......) LOG ERRORS INTO kunde_err('load_ ') Kunde_err KUNDENNR VORNAME NACHNAME ORTNR STRASSE TELEFON ORA_ERR_NUMBER$ ORA_ERR_MESG$ ORA_ERR_ROWID$ ORA_ERR_OPTYP$ ORA_ERR_TAG$ 99

100 Error Logging: Beispiel
100

101 Testfall Bestellung Bestellung_Check UNIQUE- CONSTRAINT 1.100.000
BESTELLNR ORTNR KUNDENNR DATUM ANZAHLPOS BESTELLNR ORTNR KUNDENNR DATUM ANZAHLPOS Sätze doppelt Bestellung_Check_Errors BESTELLNR ORTNR KUNDENNR DATUM ANZAHLPOS ORA_ERR_NUMBER$ ORA_ERR_MESG$ ORA_ERR_ROWID$ ORA_ERR_OPTYP$ ORA_ERR_TAG$

102 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 3 ; Zeilen erstellt. Abgelaufen: 00:00:50.63

103 Die Alternative Zusammen 00:00:03.15 1. 2.
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 2. 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); Zeilen erstellt. Abgelaufen: 00:00:02.26 Zusammen :00:03.15

104 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) ); Regel: Im Kundennamen müssen Buchstaben vorkommen und keine reine Zahlenkolonne ALTER TABLE check_kunde ADD CONSTRAINT Ch_KD_Name CHECK(REGEXP_LIKE(NACHNAME, '[^[:digit:]]')); INSERT INTO check_kunde (Kundennr, Geschlecht, Vorname, Nachname, Anrede, Gebdat, Ortnr, Strasse, Telefon) VALUES (9,1,'Klaus','123','Herr',' ',2,'Haupstr.', ); FEHLER in Zeile 1: ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt Verwendung von Regular Expressions steigert die Performance bei Prüfungen 104

105 Beispiele Modus Zeichenklassen * 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 Modus [: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 Zeichenklassen 105

106 Wichtiges Hilfsmittel für Einzelfeldprüfungen: CASE-Anweisung
SELECT CASE WHEN isnumeric('999') = 1 THEN 'numerisch' ‚ ELSE 'nicht numerisch'‚ END Ergebnis FROM 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

107 Hilfsfunktion: Date_Check
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; 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; In Verbindung mit der CASE-Anweisung 107

108 Abarbeitungslogik für Einzelfeldprüfung mit CASE
Gepruefte_Daten Stage-Tabelle Temp-Tabelle Date Number Varchar2() INSERT ALL WHEN Feld_1_is_null =1 into Error_Daten WHEN Feld_1_is_null=0 into Gepruefte_Daten Varchar2() Varchar2() INSERT INTO temp_table SELECT CASE .... FROM Stage_Table Feld1 Feld2 Feld3 Feld1 Feld2 Feld3 Feld1_is_null Feld1_is_numeric Feld2_is_numeric Kopieren Error_Daten Date Number Varchar2() Temporäre Tabelle ist optional Ist wesentlich übersichtlicher Erlaubt Kombination von unterschiedlichen Prüfkriterien 108

109 Abarbeitungslogik mit CASE
OLTP_Kunden_tmp Bestellnr Menge Summe Name Ort BestDatum OLTP_Kunden Bestellnr Menge Summe Name Ort BestDatum INSERT INTO OLTP_Kunden_tmp SELECT Bestellnr,Menge,Summe,Name,Ort,BestDatum, CASE WHEN (Bestellnr is NULL) then 1 ELSE 0 END Bestellnr_isNull, CASE WHEN (isNumeric(Menge) = 1) END Menge_isNumeric, CASE WHEN (isNumeric(Summe) = 1) END Summe_isNumeric, CASE WHEN (Summe is NULL) END Summe_isNull, CASE WHEN (isDate(BestDatum) = 1) END BestDatum_isDate FROM OLTP_Kunden; Bestellnr_isNull Menge_isNumeric Summe_isNumeric Summe_isNull BestDatum_isDate ...

110 Beispiel mit graphischer Modellierung: Einsatz von CASE und Zwischentabelle
110

111 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

112 Herausfiltern und Protokollieren von Feldern mit dem Wert „NOT NULL“
CASE WHEN F2 IS NULL THEN ELSE END 112

113 Prüfen auf Eindeutigkeit der Eingabesätze
Es dürfen nur Sätze geladen werden, die einmal im Quell-Bestand vorkommen SELECT F1 FROM (SELECT count(F1) n,F1 FROM s GROUP BY F1) WHERE n > 1; 113

114 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

115 Summenvergleich graphisch
Bestellung Bestellnummer (PK) Gesamtsumme Bestellposition = Bestellnummer (FK) Positionssumme 115

116 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.

117 Die Beispiel - Quellumgebung
PK Die Beispiel - Quellumgebung ARTIKEL ARTIKEL_NAME ARTIKEL_ID GRUPPE_NR PREIS ARTIKEL_GRUPPEN GRUPPE_NR GRUPPE_NAME SPARTE_NR PK ARTIKEL_SPARTEN PK FK SPARTE_NAME SPARTE_NR PK FK BESTELLUNG BESTELLPOSITION KUNDE BESTELLNR ORTNR KUNDENNR BESTELLDATUM ANZAHLPOS PK BESTELLNR POSITIONSNR MENGE ARTIKELNR DEPOTSTELLE RABATT FK PK KUNDENNR KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP PK FK FK 117

118 Beispielprüfungen

119 Beispielprüfungen

120 1. Schritt: Prüfungen von Tabellen-übergreifenden Beziehungen
PK 1. Schritt: Prüfungen von Tabellen-übergreifenden Beziehungen ARTIKEL ARTIKEL_NAME ARTIKEL_ID GRUPPE_NR PREIS ARTIKEL_GRUPPEN GRUPPE_NR GRUPPE_NAME SPARTE_NR PK ARTIKEL_SPARTEN PK FK SPARTE_NAME SPARTE_NR PK FK 18 2 6 BESTELLUNG BESTELLPOSITION KUNDE BESTELLNR ORTNR KUNDENNR BESTELLDATUM ANZAHLPOS PK BESTELLNR POSITIONSNR MENGE ARTIKELNR DEPOTSTELLE RABATT FK PK KUNDENNR KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP PK FK 13 FK 21 120

121 PK 2. Schritt: Prüfungen und Berechnungen von Satz-übergreifenden Abhängigkeiten ARTIKEL ARTIKEL_NAME ARTIKEL_ID GRUPPE_NR PREIS ARTIKEL_GRUPPEN GRUPPE_NR GRUPPE_NAME SPARTE_NR PK ARTIKEL_SPARTEN PK FK SPARTE_NAME SPARTE_NR PK FK 1 13 18 2 6 BESTELLUNG BESTELLPOSITION KUNDE BESTELLNR ORTNR KUNDENNR BESTELLDATUM ANZAHLPOS PK BESTELLNR POSITIONSNR MENGE ARTIKELNR DEPOTSTELLE RABATT FK PK 14 KUNDENNR KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP PK FK 13 4 9 FK 10 21 121

122 3. Schritt: Feldprüfungen
PK 3. Schritt: Feldprüfungen ARTIKEL ARTIKEL_NAME ARTIKEL_ID GRUPPE_NR PREIS ARTIKEL_GRUPPEN GRUPPE_NR GRUPPE_NAME SPARTE_NR PK ARTIKEL_SPARTEN PK FK SPARTE_NAME SPARTE_NR PK FK 1 13 18 2 6 BESTELLUNG BESTELLPOSITION 5 12 11 KUNDE BESTELLNR ORTNR KUNDENNR BESTELLDATUM ANZAHLPOS PK BESTELLNR POSITIONSNR MENGE ARTIKELNR DEPOTSTELLE RABATT FK PK 14 KUNDENNR KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP PK FK 15 16 17 13 4 18 9 FK 10 6 19 20 8 21 122

123 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

124 Anordnung und Gruppierung der Ladeschritte des Beispiel-Szenarios
KUNDE err_orphan_Bestellung err_anz_pos_Bestellposition err_AVG_Pos_Wert err_childless_Bestellung err_orphan_PositionArtikel err_seq_pos_Bestellposition BEST_POS BESTELLUNG BESTELLPOSITION Tmp_ BEST_POS Tmp2_ BEST_POS err_non_unique_bestellung err_kd_Rabatt_ok err_orphan_Position err_Wert_Menge err_maske_depotstelle Hauptdatenfluss ARTIKEL Beziehungsprüfungen err_not_null_Menge Hauptdatenfluss err_not_Rabatt_Wert Hauptdatenfluss

125 Umsetzung der Prüfungen
Siehe separaten Ausdruck

126 Umsetzung der Prüfungen
Siehe separaten Ausdruck

127 Umsetzung der Prüfungen
Siehe separaten Ausdruck

128 Umsetzung der Prüfungen
Siehe separaten Ausdruck

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

130 Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse
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 130

131 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)

132 Materialized Views entlasten den ETL-Prozess
Dimension Ort Orte Regionen Länder Level 1 Definitionen Attribute Level 2 Definitionen Attribute Level 3 Definitionen Attribute Analytical- Functions Query Rewrite Materialized View Zeit Star-Transformation FK_Ort Bitmap-Index FK_Zeit FK_Produkt Parallel eingesetzte Techniken Materialized Views Query Rewrite Verwendung von Dimension Tables Partitions Umsätze Parallel+ Cluster Produkt Kunde

133 Materialized Views sparen Plattenplatz und minimieren die Objektanzahl
Top/Alle_Artikel Summe pro Segement Segement Summe pro Sparte Artikelsparte Query Review Summe pro Gruppe Artikelgruppe Summe pro Artikel Artikel Summe pro Charge Artikelcharge Summe pro Charge Menge Umsatz

134 Nested Materialized Views nutzen bereits ausgeführte IO-Leistung
Materialized View Level 4 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 Materialized View Level 3 Materialized View Level 2 Materialized View Level 1 Basistabellen IO 134

135 Table Functions – Pipeline-Verfahren Parallelisierung trotz aufwendiger Programmierlogik
tf1 tf2 Quelle Ziel tf3 Stage_tabelle INSERT INTO Ziel SELECT * FROM (tf2(SELECT * FROM (tf1(SELECT * FROM Quelle)))) INSERT INTO Ziel SELECT * FROM tf( SELECT * FROM (Stage_tabelle)) 135

136 Begriffe im Bereich Table Functions
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

137 Mengenbasierte Verarbeitung Trotz Programmierung
INSERT INTO Table SELECT Feld1, Feld2 FROM Schnelle Verarbeitung (Pipelined) Objekttechnik Parallelisierung Mehrere Rückgabewerte und Einzelrückgaben Cursor als Input Schachtelbar Table_Function( ) Funktion Cursor Fetch Loop If a = b... Update... Case... Parallel eingesetzte Techniken Materialized Views Query Rewrite Verwendung von Dimension Tables pipe row(record Type) Variante 1 Variante 2 Return Table 137

138 Die Hilfstypen für Daten und Cursor
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; Definition Record-Type Definition Nested-Table auf der Basis des Rekord-Types Definition Cursor als Typ des Übergabeparameters 138

139 Die Table Function Übernahme von Ausgangssätzen als Cursor
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; begin LOOP 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(' ','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; Definieren einer Nested-Table-Struktur für die spätere Rückgabe. Lesen aus Cursor Erweitern Nested-Table um einen Satz und Überführen eines Satzes in die Nested-Table Rückgabe der kompletten Tabelle an das aufrufende Statement (Alternative zu PIPE). 139

140 Beispielaufrufe 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)) 140

141 Verhindern des mehrfachen Ladens
Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 1 Bestellung Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 2 Bestellposition Der Join wird 4 mal ausgeführt Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 3 Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 4

142 Verhindern des mehrfachen Ladens
select * from TABLE(f_bestellung(CURSOR(select * from bestellung b, bestellposition p where b.PK = p.FK))) Bestellung f_bestellung Bestellposition Einlesen Cursor Prüfung 1 Der Join wird 1 mal ausgeführt Prüfung 2 Prüfung 3 Prüfung 4 Pipe

143 Native Support für Pivot und Unpivot
SALESREP QU REVENUE 100 Q 100 Q 100 Q 100 Q 101 Q 101 Q 101 Q 101 Q 102 Q 102 Q 102 Q 102 Q Sinnvoller Einsatz im Rahmen des ETL-Prozesses SALESREP Q1 Q2 Q3 Q4 143

144 Native Support für Pivot und Unpivot
SALESREP QU REVENUE 100 Q 100 Q 100 Q 100 Q 101 Q 101 Q 101 Q 101 Q 102 Q 102 Q 102 Q 102 Q Sinnvoller Einsatz im Rahmen des ETL-Prozesses QUARTERLY_SALES SALESREP Q1 Q2 Q3 Q4 select * from quarterly_sales unpivot include nulls (revenue for quarter in (q1,q2,q3,q4))‏ order by salesrep, quarter ; 144

145 Native Support für Pivot und Unpivot
SALES_BY_QUARTER SALESREP QU REVENUE 100 Q 100 Q 100 Q 100 Q 100 Q 100 Q 100 Q 101 Q 101 Q 101 Q 101 Q 102 Q Sinnvoller Einsatz im Rahmen des ETL-Prozesses SALESREP 'Q1' 'Q2' 'Q3' 'Q4' select * from sales_by_quarter pivot (sum(revenue)‏ for quarter in ('Q1','Q2','Q3','Q4'))‏ order by salesrep ; 145

146 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

147 MERGE INTO "Kunde_TGT" USING (SELECT "KUNDEN_STAMM"
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_SUBQUERY ON ( "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 Into - Zielobjekt Using – betrachtete Daten ON – Bedingung 147

148 Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse
Planung und Organisation des ETL Prozesses Schichten als Planungsgrundlage Umgang mit separaten ETL-Tools und Lade-Engines Szenario zum Prüfen von Daten Weitere Datenbank-Techniken Ersatz von Aggregat-Tabellen durch MAVs Table Functions Pivoting Multiple Inserts / Merge Zusammenfassung 148

149 Zusammenfassung der bevorzugten Lade-Varianten
Data Integration Layer Enterprise Information Layer User View Layer R: Referenztabellen CTAS 20% R R T S S S D D T: Transfertabellen S: Stammdaten CTAS B: Bewgungsdaten T PEL F D D: Dimensionen B F: Fakten T A: Aggregate D PEL A Partitionierte Tabellen T B PEL Prüfungen 80% Aggregatbildung durch Materialized Views Vorgelagerte Prüfungen Mengen- basierte Prüfungen Vorbereitete temporäre Tabellen Partition Exchange Partition Exchange Konzentration aller Prüfungen Denormalisierung (Joins) und Aggregate CTAS : Create Table As Select PEL : Partition Exchange and Load 149


Herunterladen ppt "Oracle Data Warehouse – Datenbank basierte ETL-Prozesse"

Ähnliche Präsentationen


Google-Anzeigen