Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE.

Ähnliche Präsentationen


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

1

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

3 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

4 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

5 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

6 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

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

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

9 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

10 Die vier Funktionsbereiche des ETL 1.Integrieren 2.Informations-Mehrwerte 3.Kopieren 4.Sammeln 9

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

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

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

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

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

16 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

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

18 Speicherobjekte

19 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 DISABLED F_UMSATZ DISABLED F_UMSATZ DISABLED F_UMSATZ DISABLED 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';

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

21 High Water Mark Free space after delete Unused block Extent ID Used block Nach INSERTS: High-water mark Segment Nach DELETES:

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

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

24 Segment Truncate Table High-water mark Free space Extent ID 01 TRUNCATE TABLE tablename

25 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

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

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

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

29 Testfall F_Umsatz Sätze ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT F_Umsatz_DP Sätze ARTIKEL_ID KUNDEN_ID ZEIT_ID REGION_ID KANAL_ID UMSATZ MENGE UMSATZ_GESAMT 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; Zeilen erstellt. Abgelaufen: 00:00:27.24 SQL> insert /*+ APPEND PARALLEL(F_UMSATZ_DP,2) */ into f_umsatz_DP select * from f_umsatz; Zeilen erstellt. Abgelaufen: 00:00:20.68

30 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

31 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

32 Bitmap managed Storage Locally managed Tablespace ohne Freelists

33 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

34 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 select Faktentabelle Insert select + Diverse Updates und Inserts auf Protokolltabellen Für alle Bewegeungs- sätze z. B ) Loop (0,1 Sec / Lauf) 8,3 Std* * Wert aus einer Bank (2003), wäre heute wesentlich weniger

35 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

36 Das Simulations-Szenario F0 F1 F2 F3 F4 F5 F6 F IamPFnAz6qnhWZlqao1AHgaR9gQczm4SSvtJn9lU 27-JAN-11 upOLaDSvWuxmv4pFlZsgtEPqgi43uRgI1uQjF7kV x2AFYV3W2QIcxf5mPzl39MpErCZI7rc1eQMXuMs ESh7uiu6Hqo6cwqqk9B7D1w9biFR3QjCVDyNWjaq 01-MAY-08 Mcj4QZEVmiG5Qof4eoPwqARLFhlc1xpLmgrAzL5i jvuabLwH44YODTusRR3Huyz7sECCTrLFGZA5QJdD PA2OpnqxTISxHoHsJ5BZrIJArDGhcKCIi1lAzJyj 17-DEC-10 ebU5ogfehM87oO1f8e1VVrFOjJBsZJEUQLcyOls7 GP5zpIb5EzAsPrT9EuL6tdcJ2BVGbFXtch3F4rkO P4q95WqLs9yWOdx6yryAt7zNgO8YeGzqmXTLdHJe 26-NOV-09 eTsS6sZdjeZbRWSnjq2m3ivoACc29dQENlVYjtkK DTTfROusF1hU1LLGHNRXWWGwpFlO47zedJWgEdX 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

37 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; Laufzeit: 08:31 (Minuten : Sekunden) Lese-Operation T10 Tabelle Datenbewegung über Variablen Schreibvorgang

38 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) insert into t20 select * from t10;

39 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;

40 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

41 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

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

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

44 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

45 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 TTT T: Transfertabellen R: Referenztabellen S: Stammdaten B: Bewgungsdaten D: Dimensionen F: Fakten B F 80% 20% PEL A A: Aggregate PEL T CTAS PEL Partitionierte Tabellen Prüfungen SSD

46 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

47 Alle Messdaten in der Übersicht

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

49 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;

50 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

51 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

52 Deltadaten Extrahieren Änderungsdatum Trigger Deltabildung über MINUS Logminer Streams Golden Gate LogFile Table Queue OLTP DWH Table Queue Table Queue Table

53 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

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

55 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

56 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

57 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

58 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

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

60 Data Pump Architektur Quelle: 59

61 Vereinfachte Verfahrensdarstellung OLTP DWH Schema OLTP Besondere GRANTs Schema DWH Delta-Load FTP Export mit Data Pump ( expdp ) Import mit Data Pump ( impdp ) 60

62 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

63 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

64 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

65 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 > REMAP_DATA=[schema.]tablename.column_name:[schema.]pkg.function

66 Export-Beispiele 65

67 Import-Beispiele 66

68 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

69 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 7202 Zeilen exportiert.. "DWH"."D_KUNDE" KB 1029 Zeilen exportiert.. "DWH"."BESTELLUNGEN" KB 4 Zeilen exportiert.. "DWH"."D_ARTIKEL" KB 129 Zeilen exportiert.. "DWH"."D_VERTRIEBSKANAL" KB 7 Zeilen exportiert.. "DWH"."KUNDE" KB 2 Zeilen exportiert.. "DWH"."LIEFERUNGEN" KB 4 Zeilen exportiert.. "DWH"."PRODUKT" KB 3 Zeilen exportiert.. "DWH"."D_ZEIT" 0 KB 0 Zeilen exportiert Master-Tabelle "DWH"."SYS_EXPORT_SCHEMA_01" erfolgreich geladen/entladen ******************************************************************************

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

71 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

72 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; External Tables – Beispiel 1 71

73 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

74 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 ABC ABC ABC ABC Sich täglich ändernde Dateinamen Datum im Dateinamen Lieferantenname im Dateinamen 73

75 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

76 External Tables mit Data Pump Erstellen External Table in Quell-DB Verwendung von CREATE AS SELECT * FROM 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

77 External Tables mit Data Pump OLTP DWH FTP EX_T 76

78 External Tables mit Data Pump OLTPDWH select * from EX_Bestellung_2 77

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

80 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

81 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

82 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

83 Beispiele

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

85 Transportable Tablespaces IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f' TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp ALTER TABLESPACE ts_temp_umsatz READ WRITE; 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; Metadaten Fakttable Umsatz Neuer Monat

86 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

87 R R B S S S D D DD Enterprise Information Layer User View Layer Data Integration Layer TTT 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 Synergien Das 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

88 T: Transfertabellen R: Referenztabellen S: Stammdaten B: Bewgungsdaten D: Dimensionen F: Fakten Enterprise Information Layer User View Layer Data Integration Layer R R B S S S D D D D T T T B F F F D D D D B B B B Frühzeitige ETL-Aktivitäten schaffen Synergien Das 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 Joins Distincts

89 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 CTAS

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

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

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

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

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

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

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

97 Varianten von Regeln / Prüfungen Attribut-bezogene Regeln 1.Not Null / Pflichtfelder 2.Formatangaben a)numeric b)Alphanumerisch c)Date d)Masken 3.Div. Check Constraint 4.Wertbereiche Ober-/Untergrenzen / Wertelisten Satz-bezogene Regeln 5.Abhängigkeiten von Werten in anderen Attributen desselben Satzes Satz-übergreifende Regeln 6.Primary Key / Eindeutigkeit 7.Aggregat – Bedingungen a)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 Regeln 9.Foreign Key a)Child-Parent (Orphan) b)Parent-Child 10.Aggregat – Bedingungen a)Ober- Untergrenzen von Summen b)Anzahl Sätze pro Intervall usw. 11.Referenz-Zusammenhänge Verweise auf Sätze einer anderen Tabelle (Relation) Zeit-/ Zusammenhang-bezogene Regeln 12.Zeitinvariante Inhalte Anz. Bundesländer 13.Zeitabhängige Veränderungen 14.Über die Zeit mit anderen Daten korrelierende Feldinhalte Verteilungs-/Mengen-bezogene Regeln 15.Verteilung a)Arithmetische Mittel b)Varianz / Standardabweichungen 16.Qualitätsmerkmale und Mengen 96

98 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

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

100 Error Logging Constraints Unique Key / Primary Key Foreign Key NOT NULL Check Constraint Kunde Kunde_err KUNDENNR VORNAME 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_ ') 99

101 Error Logging: Beispiel 100

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

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

104 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); Zeilen erstellt. Abgelaufen: 00:00:02.26 Zusammen 00:00:

105 Check Constraint mit Regular Expressions CREATE TABLE Check_KUNDE ( KUNDENNR NUMBER, GESCHLECHT NUMBER, VORNAME VARCHAR2(50), NACHNAMEVARCHAR2(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',' ',2,'Haupstr.', ); FEHLER in Zeile 1: ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt 104 Verwendung von Regular Expressions steigert die Performance bei Prüfungen

106 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

107 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

108 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

109 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() Feld1 Feld2 Feld3 Temp-Tabelle Varchar2() Feld1 Feld2 Feld3 Feld1_is_null Feld1_is_numeric Feld2_is_numeric INSERT INTO temp_table SELECT CASE.... FROM Stage_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

110 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_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) 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_isDate FROM OLTP_Kunden;

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

112 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

113 Herausfiltern und Protokollieren von Feldern mit dem Wert NOT NULL CASE WHEN F2 IS NULL THEN 1 ELSE 0 END 112

114 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

115 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

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

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

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

119 Beispielprüfungen

120

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

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

123 3. Schritt: Feldprüfungen 122 ARTIKEL_SPARTEN SPARTE_NAME SPARTE_NR PK BESTELLPOSITION BESTELLNR POSITIONSNR MENGE ARTIKELNR DEPOTSTELLE RABATT PK ARTIKEL ARTIKEL_NAME ARTIKEL_ID GRUPPE_NR PREIS ARTIKEL_GRUPPEN GRUPPE_NR GRUPPE_NAME SPARTE_NR BESTELLUNG BESTELLNR ORTNR KUNDENNR BESTELLDATUM ANZAHLPOS KUNDE KUNDENNR KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP PK FK

124 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

125 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 Hauptdatenfluss Beziehungsprüfungen Hauptdatenfluss

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 Umsetzung der Prüfungen Siehe separaten Ausdruck

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

131 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

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

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

134 Top/Alle_Artikel Segement Artikelsparte Artikelgruppe Artikel Artikelcharge Materialized Views sparen Plattenplatz und minimieren die Objektanzahl Menge Umsatz Summe pro ChargeSumme pro ArtikelSumme pro GruppeSumme pro SparteSumme pro SegementSumme pro Charge Query Review

135 Nested Materialized Views nutzen bereits ausgeführte IO-Leistung Aufwendige Join-Operation DIM_ZeitFAKT_UmsatzDIM_Produkte Umsatz Prod.Gr A Umsatz Prod. Gr B relativ zum Gesamtjahresumsatz Summierung/Monat Summierung/Jahr Umsatz Prod.Gr B Basistabellen Materialized View Level 1 Materialized View Level 2 Materialized View Level 3 Materialized View Level IO

136 tf1tf2 tf3 Stage_tabelle QuelleZiel 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-Verfahren Parallelisierung trotz aufwendiger Programmierlogik 135

137 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

138 If a = b... Update... Case... Cursor Fetch Loop Funktion Table_Function( ) INSERT INTO Table SELECT Feld1, Feld2 FROM Mengenbasierte Verarbeitung Trotz 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

139 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 Die Hilfstypen für Daten und Cursor 138

140 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; Übernahme von Ausgangssätzen als Cursor 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). Die Table Function 139

141 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

142 Verhindern des mehrfachen Ladens Bestellposition Bestellung Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 1 Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 2 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 Der Join wird 4 mal ausgeführt

143 Verhindern des mehrfachen Ladens Bestellposition Bestellung Einlesen Cursor Der Join wird 1 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

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

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

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

147 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

148 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 147

149 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 Weitere Datenbank-Techniken Ersatz von Aggregat-Tabellen durch MAVs Table Functions Pivoting Multiple Inserts / Merge Zusammenfassung Datenbank-basierte ETL-Prozesse 148

150 R R B S S S D D DD Enterprise Information Layer User View Layer Data Integration Layer TTT 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 PEL T CTAS PEL Vorgelagerte Prüfungen Mengen- basierte Prüfungen Vorbereitete temporäre Tabellen Aggregatbildung durch Materialized Views Partition Exchange Konzentration aller PrüfungenDenormalisierung (Joins) und Aggregate Partitionierte Tabellen Prüfungen CTAS : Create Table As Select PEL : Partition Exchange and Load


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

Ähnliche Präsentationen


Google-Anzeigen