DATA WAREHOUSE Oracle Data Warehouse – Datenbank basierte ETL-Prozesse DATA WAREHOUSE Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse • Anforderungen an den ETL-Prozess im Data Warehouse Insert Picture Here • Speichermanagement und Grundlagentechniken Click to edit• title Blöcke, Extents, Segmente, Tablespace Click to edit Master text styles • Direct Path Load, Mengenbasiertes Laden • Logging / NoLogging • Hilfsmittel für schnelles Laden • Prüftechniken mit SQL • Szenario zum Prüfen von Daten • Zusätzliche Techniken für schnelles und sicheres Laden • Partition Exchange and Load (PEL) • Multiple Inserts 2 Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse • Zugriff auf Quellsystemen • Umgang mit Deltadaten • Kopiertechniken / SQL Loader / Data Pump / External Tables / Transportable Tablespace Click to edit title Insert Picture Here Click to edit Master text styles • Planung und Organisation des ETL Prozesses • Schichten als Planungsgrundlage • Umgang mit separaten ETL-Tools und Lade-Engines • Weitere Datenbank-Techniken • • • • Ersatz von Aggregat-Tabellen durch MAVs Table Functions Pivoting Merge • Zusammenfassung 3 Das große Klagen System-Nutzen • Lieferzeiten der Daten zu lange (Latenzen) • Zu schwerfällig bei Änderungen Insert Picture Here • Informationen vorhanden Click tomehrfach edit title • Fehlende unternehmensweite Click to edit Master text styles Sichten • Nicht die richtigen Informationen für die Anwender • Anwender haben zu wenig unmittelbaren Einfluss auf die Daten Maintenance Technik • Immer teuerer • Maintenance-Aufwand zu hoch / Personal • Explodierende Datenmengen -> Storage- / Ladezeitenthematik Flexibilität und schnelles Bereitsstellen Enterprise Information Layer S T S Click to edit title B B D B B D B D F D Insert Picture Here T Click to edit Master text styles Operative Daten D S B Strategische Daten Zusammenhängender Abfragebereich R R T User View Layer aufbereiten integrieren Data Integration Layer F D F D D Taktische Daten R: Referenztabellen T: Transfertabellen S: Stammdaten B: Bewgungsdaten D: Dimensionen F: Fakten 5 Lade-Aktivitäten an Schichtübergängen Integration Persistent Flüchtige Daten Clearing-Verfahren, technisches, logisches, semantisches Prüfen Enterprise Normalisieren (Granularisieren) Click to edit title User View Kopien / teilpersistent dynamisch Denormalisieren Historisieren z.T. Aggregieren Insert Picture Here Click to edit Master text styles Generische Datenstrukturen (isolierte Tabellen, teil-ausgeprägte Datentypen) Keine Constraints Kopieren Selektieren 6 Mengenbasiertes Prüfen ohne Constraints 3 NF Datenstrukturen (ER-Tabellen, ausgeprägte Datentypen) Multidimensionale Modelle (ER-Tabellen, ausgeprägte Datentypen) Aktivierte Constraints Umschlüsselung Lookups -> Referenz-/Stammdaten Joins Aufbauen von Distinct-Strukturen (Normalisieren) Umschlüsselung Lookups -> Dimensionsdaten Joins - Denormalisieren Hilfsmittel in der Datenbank (Auflistung) • Parallelisierung • Partitioning / Partition Exchange Load (PEL) • Direct Path Load Insert Picture Here Click to edit title • Set-Based SQL Click to edit Master styles • Pipelined Tabletext Functions • Materialized Views • External Tables / Loader • Transportable Tablespace • Data Pump • Database Link • Direkt FTP-Load 1. Integrieren 1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln • Identifizieren von identischen oder zusammenhängenden Informationen • Synonymen-/Homonymen-Thematik • Click to edit title Aggregationslevel angleichen Click•toIdentifizieren edit Master styles und text Angleichen • Formate, Zustände, Sichtweisen etc... 9 Betrag / Summe Artikel / Produkt Insert Picture Here Artikel / Artikelgruppe Meter / Kilometer Lose Stücke / Gebinde 2. Informations-Mehrwerte 1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln • Qualitativ gute Informationen schaffen • Datenqualitäts-Checks • Vollständigkeit • Datentypen • Referentielle Integrität Eindeutigkeit to•edit Master text styles • Korrekte Werte Click to edit title Click Insert Picture Here • Fachliche Regeln überprüfen • Berechnungen / Aggregationen / Zusammenfassungen • Anreichern und Vermengen mit Referenzdaten • Lookups • Marktdaten • Vergleichszahlen 10 3. Kopieren 1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln • 1:1-Datenbewegung • Einfachste Aufgabe • Mengen-Operationen • Click to edit Ohne zusätzliche Logik title Click to edit Master text styles • Überwindung von Systemgrenzen • Vorschriften zum Mapping • Schnittstellen-Konventionen • Aspekt der Performance 11 Insert Picture Here 1. Integrieren 2. Informations-Mehrwerte 3. Kopieren 4. Sammeln 4. Sammeln • Einlagern von Daten • Zeitliche Rahmenvorgaben • Historisierung Click to edit title Versionieren von Daten Insert Picture Here • Click to edit Master/ text styles • Kategorisieren Inventarisieren von Daten • Dokumentieren der eingelagerten Informationen • • • • 12 Referenzen aufbauen Alterungs-Eigenschaften berücksichtigen Dokumentieren Mehr als nur eine Momentaufnahme Daten-nahe Transformation im DWH Den richtigen Platz finden Quellsystem DWH-System n-tier n-tier Insert Picture Here Click to edit title Click to edit Master text styles Application Server ETL? ETL? 13 Application Server Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse • Anforderungen an den ETL-Prozess im Data Warehouse Insert Picture Here • Speichermanagement und Grundlagentechniken Click to edit• title Blöcke, Extents, Segmente, Tablespace Click to edit Master text styles • Direct Path Load, Mengenbasiertes Laden • Logging / NoLogging • Hilfsmittel für schnelles Laden • Prüftechniken mit SQL • Szenario zum Prüfen von Daten • Zusätzliche Techniken für schnelles und sicheres Laden • Partition Exchange and Load (PEL) • Multiple Inserts / 14 Zuordnung Datenobjekten und Speicher DB-Objekte Table Click to edit title Click to editPartition Master text styles Index Mview Insert Picture Here Speicherobjekte Click to edit title Click to edit Master text styles Insert Picture Here Die automatische Extent-Vergrößerung • Automatische Allokierung von weiteren Segmenten • Exponentielles Vergrößerungs-Mass select Insert Picture Here t.TABLE_NAME, t.blocks,t.EMPTY_BLOCKS,t.AVG_SPACE,t.AVG_ROW_LEN,t.NUM_ROWS, Click to edit title t.pct_free, t.compression,s.EXTENTS,s.bytes seg_bytes,e.blocks ext_blks,e.bytes ext_bytes Click from to edit user_segments Master text styles 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 277772 0 34 51200000 10 DISABLED 217 2281701376 8 65536 F_UMSATZ 277772 0 34 51200000 10 DISABLED 217 2281701376 128 1048576 F_UMSATZ 277772 0 34 51200000 10 DISABLED 217 2281701376 1024 8388608 F_UMSATZ 277772 0 34 51200000 10 DISABLED 217 2281701376 8192 67108864 Block- und Satzstruktur Click to edit title Insert Picture Here Click to edit Master text styles Row header Datenbank Block Column length Column value High Water Mark Nach INSERTS: Extent ID 0 1 2 3 4 Segment Insert Picture Here Click to edit title Click to edit Master text styles High-water mark Nach DELETES: Extent ID 0 1 2 3 4 Segment Used block Unused block Free space after delete Wie wird die „High Water Mark“ bestimmt TOTAL_BLOCKS UNUSED_BLOCKS Insert Picture Here Click to edit title Click to edit Master text styles Extent ID 0 1 2 3 4 Segment High-water mark LAST_USED_EXTENT_FILE_ID, LAST_USED_EXTENT_BLOCK_ID Deallocate Space Extent ID 0 1 2 3 4 Segment Before deallocation Insert Picture Here Click to edit title TABLE tablename ClickALTER to edit Master text styles High-water mark DEALLOCATE UNUSED; Extent ID 0 1 2 4 Segment After deallocation Used block 3 Unused block Free space after delete Truncate Table TRUNCATE TABLE tablename Insert Picture Here Click to edit title Click to edit Master text styles Extent ID 0 1 Segment Free space High-water mark Direct Path Load INSERT /*+APPEND */ INTO DWH.F_UMSATZ NOLOGGING Insert Picture Here SELECT FROM Click* to editOLTP.BESTELLUNGEN; title Click to edit Master text styles Server process F_UMSATZ Segment Used block Free space after delete High-water mark Blocks used by inserted rows Paralleler Direct Path Load ALTER SESSION ENABLE PARALLEL DML; INSERT /*+APPEND PARALLEL(F_UMSATZ,2) */ INTO DWH.F_UMSATZ NOLOGGING Insert Picture Here Click to edit title * FROM ClickSELECT to edit Master text OLTP.BESTELLUNGEN; styles Slave process Slave process F_UMSATZ Segment Used block Free space after delete High-water mark Temporary segments „Convential“ und „Direct Path“ - Load Instance SGA Shared pool Array insert Insert Picture Here Extent Click to edit title management ClickConventional to edit Master text styles Table Data save Direct path High-water mark Space used only by conventional load Testfall F_Umsatz F_Umsatz_DP 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 Click to edit title Click51.100.000 to edit Master text styles Sätze Insert Picture Here 51.100.000 Sätze SQL> insert into f_umsatz_DP select * from f_umsatz; 51200000 Zeilen erstellt. Abgelaufen: 00:07:57.73 SQL> insert /*+ APPEND */ into f_umsatz_DP select * from f_umsatz; 51200000 Zeilen erstellt. Abgelaufen: 00:00:27.24 SQL> insert /*+ APPEND PARALLEL(F_UMSATZ_DP,2) */ into f_umsatz_DP select * from f_umsatz; 51200000 Zeilen erstellt. Abgelaufen: 00:00:20.68 Direct Path / Convential Path SQL Loader External Table Insert Append CTAS Direct Path O r a c l e Click Convential Path • Commits • Reuse Free Space in Blöcken Convential Path • Constraint Checks SQL Command Processing Picture Here / Logging Space Management Click to edit title• Immer Undo DataInsert • Daten zunächst immer in SGA Buffer Get new extents to edit Master text Find partial blocks styles Adjust High Fill partial blocks • Tabelle für andere Benutzer offen Water Mark Benutzer Read Database Blocks Buffer Cache Write Database Blocks Database S e r v e r Buffer Cache Management - Manage queues - Manage contention 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 Beliebte Fehler Schreiben einzelner INSERTS mit APPEND Create or Replace procedure ABC as ..... Cursor pos is select ..... .... Click to edit Master text styles Begin open pos; loop exit when pos%notfound; ..... Insert /*+ APPEND */ into Ziel_Tabelle select ...... ...... Commit; end loop; ..... End; Click to edit title Stattdessen INSERTS mit vielen Sätzen Insert /*+ APPEND */ into ziel_Tabelle Insert Picture select ...... Here Direct Path Load nur mit echten Mengen und nicht bei Einzel-Inserts Beliebte Fehler Batch-Lauf 1 Batch-Lauf 2 (Session 1) (Session 2) Click to edit title Insert /*+ APPEND */ into ClickF_UMSATZ to edit Master select ...... text styles Picture Insert Insert /*+ APPEND */ into F_UMSATZ select ...... Here Tabelle BESTELLUNG Gegenseitiges Blockieren durch Direct Path Loads auf In unterschiedlichen Sessions auf die gleiche Tabelle Space Management Automatische Verwaltung des freien Platzes ASSM Click to edit title Click to edit Master text styles Insert Picture Here MSSM Freelists werden gepflegt • Empfehlung: Locally Managed Tablespace mit ASSM • Prüfung ob MSSM bei Massen-Inserts schneller ist Bitmap managed Storage Locally managed Tablespace ohne Freelists Click to edit title Click to edit Master text styles Insert Picture Here 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 Insert Picture Click to edit title • Sollten dennoch UPDATES gemacht werden müssen: • Partitionieren Tabelle Click to edit Master der text styles • 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 Performnce aus Here Klassische PL/SQL Cursor – Verarbeitung (Negativ – Beispiel) Für alle Bewegeungssätze z. B. 300.000) Loop (0,1 Sec / Lauf) select t_Ref_1 (z. B. 10000) select t_ref_2 (z. B. 5000) select t_ref_3 (z. B. 50) select t_ref_4 (z. B. 6000) Click to edit title Insert Picture Here t_Quelle_Stage_1 (z. B. 100000) Click to edit Master textcursor styles t_Quelle_Stage_2 (z. B. 5000) cursor 8,3 Std* select t_ref_5 (z. B. 8000) select t_ref_6 (z. B. 400) select t_ref_7 (z. B. 80) select t_ref_8 (z. B. 12000) select t_ref_9 (z. B. 15000) + Diverse Updates und Inserts auf Protokolltabellen * Wert aus einer Bank (2003), wäre heute wesentlich weniger Insert Faktentabelle Das Simulations-Szenario Tabelle T10 Name Type ------------------F0 NUMBER F1 NUMBER F2 NUMBER F3 VARCHAR2(50) toF4edit DATE Master text F5 VARCHAR2(50) F6 VARCHAR2(50) F7 NUMBER Tabelle T20 ~ 10 Millionen Sätze Click to edit title Click styles Name Type ------------------F0 NUMBER F1 NUMBER Insert Picture F2 NUMBER F3 VARCHAR2(50) F4 DATE F5 VARCHAR2(50) F6 VARCHAR2(50) F7 NUMBER Here F0 F1 F2 F3 F4 F5 F6 F7 ----- --- ---------- ----------------------------------------- --------- ----------------------------------------- --------------------------------- --28839 74 3 IamPFnAz6qnhWZlqao1AHgaR9gQczm4SSvtJn9lU 27-JAN-11 upOLaDSvWuxmv4pFlZsgtEPqgi43uRgI1uQjF7kV x2AFYV3W2QIcxf5mPzl39MpErCZI7rc1eQMXuMs8 42 28840 10 89 ESh7uiu6Hqo6cwqqk9B7D1w9biFR3QjCVDyNWjaq 01-MAY-08 Mcj4QZEVmiG5Qof4eoPwqARLFhlc1xpLmgrAzL5i jvuabLwH44YODTusRR3Huyz7sECCTrLFGZA5QJdD 12 28841 4 59 PA2OpnqxTISxHoHsJ5BZrIJArDGhcKCIi1lAzJyj 17-DEC-10 ebU5ogfehM87oO1f8e1VVrFOjJBsZJEUQLcyOls7 GP5zpIb5EzAsPrT9EuL6tdcJ2BVGbFXtch3F4rkO 58 28842 79 74 P4q95WqLs9yWOdx6yryAt7zNgO8YeGzqmXTLdHJe 26-NOV-09 eTsS6sZdjeZbRWSnjq2m3ivoACc29dQENlVYjtkK DTTfROusF1hU1LLGHNRXWWGwpFlO47zedJWgEdX5 55 ............................................................................................................................. ........................... 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; Lese-Operation T10 Tabelle Insert Picture Here Click to edit title Click to edit Master text styles Datenbewegung über Variablen 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; Schreibvorgang Laufzeit: 08:31 (Minuten : Sekunden) Der einfache INSERT insert into t20 select * from t10; • INSERT in leere Tabelle Laufzeit: 01:46 : Sekunden) Click to(Minuten edit title Insert Picture Here Click to edit Master text styles • INSERT in gefüllte Tabelle Laufzeit: 01:58 (Minuten : Sekunden) • INSERT in gefüllte Tabelle (Wiederholung) Laufzeit: 01:58 (Minuten : Sekunden) Logging / Nologging • INSERT im Archivelog-Modus Click to select edit *title insert into t20 from t10; Insert Picture Here Click toLaufzeit: edit Master text styles 02:56 (Minuten : Sekunden) • INSERT mit NOLOGGING im ARCHIVE-Modus insert /*+ NOLOGGING */ into t20 select * from t10; Laufzeit: 01:48 (Minuten : Sekunden) Logging / Nologging • Wird der Archivelog-Modus benötigt oder nicht? • Relevant für • Backup • DataGuard / Golden Gate Click to edit title • Flashback Click to edit Master text styles • Wichtigster Punkt ist: BACKUP • Abhängig vom Backup-Konzept Insert Picture Here Auswirkungen auf das Backup-Konzept • Plattensicherung • Oft einfach, weil eingespielte Verfahren • Grosser Ressourcenverbrauch • Alle (DWH-Bereiche) werden gesichtert -> großer Platzbedarf Insert Picture • Teure Backup-Software Click to edit title • Nicht immer sicher, weil korrupte Datenbank-Blöcke nicht erkannt Click to edit Master text styles 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 Here RMAN- Backup-Verfahren: Was wird gesichert? Data Integration Layer User View Layer Enterprise Information Layer R: Referenztabellen T T R R S D S Click to edit title S: Stammdaten D Insert Picture Here F B D B Inkremental Backup nur für Referenz- und Stammdaten D: Dimensionen F: Fakten T Keine Sicherung, wenn Data Marts komplett neu aufgebaut Werden RMAN große (Incremental) Bewegungsdatentabellen am besten nach Abschluss des ETL-Laufes sichern RMAN (Incremental) 40 T: Transfertabellen B: Bewgungsdaten S Click to edit Master text styles Keine Sicherung D Direct Path Load • Create Table As Select (CTAS) Click tot20edit title* from t10; Create Table as select Insert Picture Here Click toLaufzeit: edit Master text styles 01:00 (Minuten : Sekunden) • INSERT mit APPEND - Hint insert /*+ APPEND */ into t20 select * from t10; Laufzeit: 01:00 (Minuten : Sekunden) Arbeiten mit Buffer-Caches • Wiederholtes Laden ohne zuvor die Buffer-Caches zu leeren • Der SELECT-Teil läuft schneller Click to edit title Insert Picture Here 1. Verarbeitung Click to edit Master text styles 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) 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 Insert Picture Here Click to edit title Click to edit text Enterprise styles Information Data Master Integration Layer CTAS CTAS Layer User View Layer R: Referenztabellen T 20% R R S S S D T: Transfertabellen D S: Stammdaten SSD T B: Bewgungsdaten SSD SSD SSD T B D B T PEL 80% D SSD SSD SSD SSD F PEL SSD SSD PEL A D: Dimensionen F: Fakten A: Aggregate Partitionierte Tabellen Prüfungen Verlagern des Ladeprozesses auf SSD-Platten • Test mit Direct Path Load CTAS mit SSD Create Table T20 as select * from t10; Click to edit title Insert Picture Here Laufzeit: 00:10 (Minuten : Sekunden) Click to edit Master text styles APPEND mit SSD insert /*+ APPEND */ into t20 select * from t10; Laufzeit: 00:10 (Minuten : Sekunden) Alle Messdaten in der Übersicht Click to edit title Click to edit Master text styles Insert Picture Here Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse • Anforderungen an den ETL-Prozess im Data Warehouse Insert Picture Here • Speichermanagement und Grundlagentechniken Click to edit• title Blöcke, Extents, Segmente, Tablespace Click to edit Master text styles • Direct Path Load, Mengenbasiertes Laden • Logging / NoLogging • Hilfsmittel für schnelles Laden • Prüftechniken mit SQL • Szenario zum Prüfen von Daten • Zusätzliche Techniken für schnelles und sicheres Laden • Partition Exchange and Load (PEL) • Multiple Inserts / 46 Varianten von Regeln / Prüfungen Attribut-bezogene Regeln Tabellen-übergreifende Regeln 1. 2. Not Null / Pflichtfelder Formatangaben 9. a) b) c) d) 10. Aggregat – Bedingungen 3. 4. numeric Alphanumerisch Date Masken Click to edit title Div. Check Constraint Wertbereiche Click to• edit Master text styles Ober-/Untergrenzen / Wertelisten Satz-bezogene Regeln 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes Satz-übergreifende Regeln 6. 7. Primary Key / Eindeutigkeit Aggregat – Bedingungen a) b) 8. Rekursive Zusammenhänge • 47 Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Verweise auf andere Sätze derselben Tabelle (Relation) Foreign Key a) b) Child-Parent (Orphan) Parent-Child a) b) Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Insert Picture Here 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) b) Arithmetische Mittel Varianz / Standardabweichungen 16. Qualitätsmerkmale und Mengen Varianten von Regeln / Prüfungen Attribut-bezogene Regeln Tabellen-übergreifende Regeln 1. 2. 9. Not Null / Pflichtfelder Formatangaben a) b) c) d) A 3. 4. numeric Alphanumerisch Date Masken a) b) D Click to edit title Div. Check Constraint Wertbereiche Click to• edit Master text styles Ober-/Untergrenzen / Wertelisten Satz-bezogene Regeln B 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes E Primary Key / Eindeutigkeit Aggregat – Bedingungen a) b) C 8. Rekursive Zusammenhänge • 48 Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Verweise auf andere Sätze derselben Tabelle (Relation) Child-Parent (Orphan) Parent-Child 10. Aggregat – Bedingungen a) b) Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Insert Picture Here 11. Referenz-Zusammenhänge • Verweise auf Sätze einer anderen Tabelle (Relation) Zeit-/ Zusammenhang-bezogene Regeln 12. Zeitinvariante Inhalte Satz-übergreifende Regeln 6. 7. Foreign Key Anz. Bundesländer 13. Zeitabhängige Veränderungen 14. Über die Zeit mit anderen Daten korrelierende Feldinhalte Verteilungs-/Mengen-bezogene Regeln 15. Verteilung F a) b) Arithmetische Mittel Varianz / Standardabweichungen 16. Qualitätsmerkmale und Mengen Prüfungen Kategorie A Attribut-/Column-bezogene Regeln 1. Not Null / Pflichtfelder 2. Formatangaben a) b) c) d) numeric Alphanumerisch Date Masken Click to edit title Check Constraint Click3.toDiv. edit Master text styles 4. Wertbereiche Ober-/Untergrenzen / Wertelisten Insert Picture Here Prüfen mit oder Ohne Datenbank-Constraints • Constraints verlangsamen den Massen-Insert des ETLProzesses • => Ohne Constraints arbeiten Insert Picture Here • => Prüfen Clickmit to SQL-Mitteln edit title • => Prüfen mit DML-Errorlogging Click to edit Master text styles • Nur bei wenigen Daten sinnvoll Prüfkonzepte • Einfach implementierbar • Bessere Performance • Nur bei aktivierten Constraints • Fachliche Prüfungen kaum möglich • Eventuell zusätzliche Prüfungen nötig Insert Picture Here Click to edit title Stage-Tabelle + Geprüfte Daten Click to edit Master text styles Statistik Routine Date Kopieren Number Varchar2() Check Constraints Bad File 51 DML Error Log Fehlerhafte Sätze Statistiken Error Logging Kunde INSERT INTO Kunde VALUES (......) KUNDENNR VORNAME NACHNAME ORTNR STRASSE TELEFON Click to edit title LOG ERRORS INTO kunde_err('load_20040802 ') Click to edit Master text styles Kunde_err KUNDENNR VORNAME NACHNAME ORTNR STRASSE TELEFON ORA_ERR_NUMBER$ ORA_ERR_MESG$ ORA_ERR_ROWID$ ORA_ERR_OPTYP$ ORA_ERR_TAG$ 52 • Constraints • • • • Unique Key / Primary Key Foreign Key NOT NULL Insert Picture Here Check Constraint Testfall Bestellung BESTELLNR ORTNR KUNDENNR DATUM ANZAHLPOS Click to edit title Bestellung_Check BESTELLNR ORTNR KUNDENNR DATUM ANZAHLPOS UNIQUECONSTRAINT Insert Picture Here Click1.100.000 to edit Master text styles Sätze 100.000 doppelt Bestellung_Check_Errors BESTELLNR ORTNR KUNDENNR DATUM ANZAHLPOS ORA_ERR_NUMBER$ ORA_ERR_MESG$ ORA_ERR_ROWID$ ORA_ERR_OPTYP$ ORA_ERR_TAG$ Testfall begin dbms_errlog.create_error_log( dml_table_name err_log_table_name ); end; Click to edit title => 'BESTELLUNG_CHECK', => 'BESTELLUNG_CHECK_ERRORS' Insert Picture Here Click to edit Master text styles SQL> insert into bestellung_check select * from bestellung 2 LOG ERRORS INTO bestellung_check_errors ('daily_load') REJECT LIMIT 200000 3 ; 1000000 Zeilen erstellt. Abgelaufen: 00:00:50.63 Die Alternative 1. create table Bestellung_non_unique as select bestellnr from (select count(BESTELLNR) n, bestellnr from bestellung group by bestellnr) where n > 1; Insert Picture Here Click to edit title Tabelle wurde erstellt. Click to edit00:00:00.49 Master text styles Abgelaufen: 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); 900000 Zeilen erstellt. Abgelaufen: 00:00:02.26 Zusammen 00:00:03.15 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 Insert Picture Here Click to edit title TABLE check_kunde Click to edit Master text styles ALTER 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','01.01.60',2,'Haupstr.',08923456); FEHLER in Zeile 1: ORA-02290: CHECK-Constraint (DWH.CH_KD_NAME) verletzt • Verwendung von Regular Expressions steigert die Performance bei Prüfungen 57 Beispiele * Match 0 or more times ? Match 0 or 1 time Modus + 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 Insert Picture \n Cause the previous expression to be repeated n times Here Click to edit title [:alnum:] Alphanumeric characters Click to edit Master text styles [:alpha:] Alphabetic characters Zeichenklassen [: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 58 Wichtiges Hilfsmittel für Einzelfeldprüfungen: CASE-Anweisung SELECT CASE WHEN isnumeric('999') = 1 THEN 'numerisch' ‚ ELSE 'nicht numerisch'‚ Insert Picture END Ergebnis FROM Click to dual; edit Master text styles 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; Click to edit title 59 Here Hilfsfunktion: Date_Check create or replace function IsDate (str varchar2) return varchar2 is inDate varchar2(40); FUNCTION dateCheck (inputDate varchar2, inputMask varchar2) RETURN varchar2 Click to edit title IS dateVar date; Click to edit Master text styles BEGIN dateVar:= to_date(inputDate,inputMask); return 'true'; exception when others then return 'false'; END; • In Verbindung mit der CASE-Anweisung 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'; Insert Picture Here END; 60 Abarbeitungslogik für Einzelfeldprüfung mit CASE Gepruefte_Daten Temp-Tabelle Stage-Tabelle Varchar2() Kopieren INSERT INTO temp_table Varchar2() Feld1 Feld1 Click to edit title Feld2 Feld2 SELECT Feld3 Click to editFeld3 Master text styles CASE .... FROM Stage_Table INSERT ALL WHEN Feld_1_is_null =1 into Error_Daten Date Number Insert Picture Here WHEN Feld1_is_null Feld_1_is_null=0 Feld1_is_numeric into Feld2_is_numeric Gepruefte_Daten Varchar2() Error_Daten Date Number Varchar2() • Temporäre Tabelle ist optional • Ist wesentlich übersichtlicher • Erlaubt Kombination von unterschiedlichen Prüfkriterien 61 Abarbeitungslogik mit CASE OLTP_Kunden_tmp Bestellnr OLTP_Kunden Bestellnr Menge Menge 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; Click to edit title Summeto edit Master text styles Click Name Ort BestDatum Summe Insert Name Picture Here Ort BestDatum Bestellnr_isNull Menge_isNumeric Summe_isNumeric Summe_isNull BestDatum_isDate ... Beispiel mit graphischer Modellierung: Einsatz von CASE und Zwischentabelle Click to edit title Click to edit Master text styles 63 Insert Picture Here Prüfungen Kategorie B Satz-bezogene Regeln Satz-bezogene Regeln 5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes Insert Picture Here • Lösung: Analog zu Kategorie A über CASE Click to edit title F4 Click F1 to edit F2 MasterF3text styles 3 9 7 5 3 1 4 4 select CASE WHEN (F1 = 3 and F2 = F3 + F4) then 1 ELSE 0 end from fx 1 0 Prüfungen Kategorie C Satz-übergreifende Regeln 6. Primary Key / Eindeutigkeit 7. Aggregat – Bedingungen a) b) 8. Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Click to edit title Rekursive Zusammenhänge andere Sätze derselben Tabelle (Relation) Click to Verweise edit auf Master text styles Insert Picture Here 6. Eindeutigkeit / PK BESTELLUNG BESTELLPOSITION BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS BESTELLNR FK POSITIONSNR PK MENGE ARTIKELNR FK DEPOTSTELLE RABATT Click to edit title Insert Picture Here Mengenbasiertes Sammeln doppelter Sätze in Fehlertabelle Click• Lösung: to edit Master text styles insert /*+ APPEND */ into err_non_unique_bestellung select bestellnr from (select count(bestellnr) n, bestellnr from bestellung group by bestellnr) where n > 1; D_ARTIKEL 7. Aggregatbildung F_UMSATZ •Anforderung: Wenn der Umsatz pro Artikel ARTIKEL_ID FK unter 20% des Artikelgruppen-Gesamtwertes fällt, KUNDEN_ID FK ZEIT_ID FK dann ROT •Lösung: Mit analytischen Funktionen: Auf Satzebene über Informationen von Satzgruppen verfügen Click to edit title ARTIKEL_NAME GRUPPE_NR GRUPPE_NAME SPARTE_NAME SPARTE_NR ARTIKEL_ID PK REGION_ID FK KANAL_ID FK UMSATZ MENGE UMSATZ_GESAMT Insert Picture Here Click to edit Master text styles select Artikelname, Artikelgruppe, Wert, sum(wert) over (partition by Artikelname) Artikelgesamtwert, sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert, case when (round(((sum(wert) over (partition by Artikelname))/(sum(wert) over (partition by Artikelgruppe))*100),0) ) < 20 then 'ROT' ELSE 'GRUEN' end Prozent from Artikel 8. Rekursive Zusammenhänge •Anforderung: Die Summe aller Member_Value-Werte pro Parent muss gleich dem Group_Value-Wert des Parent sein. •Lösung: Über Sub-Select in dem nach Parent gruppiert und summiert wird. Click to edit title Click to edit Master text styles F_Key Parent Member Group _Value _Value 3 9 12 15 4 17 23 28 0 3 3 3Insert 0 4 4 4 0 12 4 0 6 0 Picture 2 0 Here 0 15 3 0 8 0 1 0 select distinct A.F_key from rk A, (select sum(member_value) sum_member, parent from rk where parent != 0 group by group_value, parent) B where A.member_value = 0 and A.group_value = B.sum_member; Prüfungen Kategorie D Tabellen-übergreifende Regeln 9. Foreign Key a) b) Child-Parent (Orphan) Parent-Child 10. Aggregat – Bedingungen a) b) Click to edit title Ober- Untergrenzen von Summen Anzahl Sätze pro Intervall usw. Click11.toReferenz-Zusammenhänge edit Master text styles Verweise auf Sätze einer anderen Tabelle (Relation) Insert Picture Here 9. Foreign Keys BESTELLUNG KUNDE KUNDENNR PK KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP •Anforderung: Zu jeder Bestellung muss es einen Kunden geben. Click to edit title BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS Insert Picture Here Click to edit Master text styles •Lösung: Sub-Select in Where-Klausel. insert /*+ APPEND */ into err_orphan_Bestellung select bestellnr from bestellung where Kundennr not in (select Kundennr from kunde); 10. Aggregatbedingungen Anzahl Sätze pro Einheit •Anforderung: Anzahl Positionen muss einen bestimmten Wert haben. BESTELLUNG BESTELLPOSITION BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS BESTELLNR FK POSITIONSNR PK MENGE ARTIKELNR FK DEPOTSTELLE RABATT to edit title •Lösung: Click Sub-Select in FROM-Klausel. Click to edit Master text styles insert /*+APPEND */ into err_anz_pos_Bestellposition select BESTELLNR, anzahl_pos, bst_ANZAHLPOS from (select bestellnr, count(positionsnr) Anzahl_pos, ANZAHLPOS bst_anzahlpos from Best_Pos group by bestellnr,ANZAHLPOS) where Anzahl_pos <> bst_anzahlpos; Insert Picture Here Prüfung auf Eindeutigkeit: Beispiel graphisch und manuell Click to edit title Beispiel entfernen Insert Picture Here Click to edit Master text styles 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; 72 Herausfiltern und Protokollieren von Feldern mit dem Wert „NOT NULL“ CASE WHEN F2 IS NULL THEN 1 ELSE 0 END Click to edit title Click to edit Master text styles 73 Insert Picture Here Prüfen auf Eindeutigkeit der Eingabesätze Es dürfen nur Sätze geladen werden, die einmal im Quell-Bestand vorkommen Click to edit title Insert Picture Here Click to edit Master text styles SELECT F1 FROM (SELECT count(F1) n,F1 FROM s GROUP BY F1) WHERE n > 1; 74 Inhaltliche Abhängigkeit von zwei Feldern Die satzübergreifende Reihenfolge von den Werten einer Spalte muss mit der Reihenfolge in einer anderen Spalte übereinstimmen Click to edit title Click to edit Master text styles 75 Insert Picture Here Summenvergleich graphisch Bestellung Bestellnummer (PK) Gesamtsumme Bestellposition Click to edit title Bestellnummer (FK) Positionssumme Click to edit Master text styles 76 =Insert Picture Here 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. Bestellpositionen Click toder edit title • • • • • • Insert Picture Here 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: Click to edit Master text styles • • • 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. Die Beispiel - Quellumgebung ARTIKEL ARTIKEL_GRUPPEN ARTIKEL_SPARTEN SPARTE_NAME SPARTE_NR PK GRUPPE_NR PK GRUPPE_NAME SPARTE_NR FK Click to edit title ARTIKEL_NAME ARTIKEL_ID PK GRUPPE_NR FK PREIS Insert Picture Here Click to edit Master text styles KUNDE KUNDENNR PK KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP 78 BESTELLUNG BESTELLPOSITION BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS BESTELLNR FK POSITIONSNR PK MENGE ARTIKELNR FK DEPOTSTELLE RABATT Beispielprüfungen Click to edit title Click to edit Master text styles Insert Picture Here Beispielprüfungen Click to edit title Click to edit Master text styles Insert Picture Here 1. Schritt: Prüfungen von Tabellen-übergreifenden Beziehungen ARTIKEL ARTIKEL_GRUPPEN ARTIKEL_SPARTEN SPARTE_NAME SPARTE_NR PK GRUPPE_NR PK GRUPPE_NAME SPARTE_NR FK Click to edit title ARTIKEL_NAME ARTIKEL_ID PK GRUPPE_NR FK PREIS Insert Picture Here 18 Click to edit Master text styles 6 KUNDE KUNDENNR PK KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP 21 81 BESTELLUNG BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS 2 13 BESTELLPOSITION BESTELLNR FK POSITIONSNR PK MENGE ARTIKELNR FK DEPOTSTELLE RABATT 2. Schritt: Prüfungen und Berechnungen von Satz-übergreifenden Abhängigkeiten ARTIKEL ARTIKEL_NAME ARTIKEL_ID PK GRUPPE_NR FK PREIS ARTIKEL_GRUPPEN GRUPPE_NR PK GRUPPE_NAME SPARTE_NR FK ARTIKEL_SPARTEN SPARTE_NAME SPARTE_NR PK 1 Insert Picture Here 13 Click to edit title 18 Click to edit Master text styles BESTELLUNG 6 KUNDE KUNDENNR PK KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP 21 82 4 BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS 2 13 BESTELLPOSITION 9 BESTELLNR FK POSITIONSNR PK MENGE ARTIKELNR FK DEPOTSTELLE RABATT 14 10 3. Schritt: Feldprüfungen ARTIKEL ARTIKEL_NAME ARTIKEL_ID PK GRUPPE_NR FK PREIS ARTIKEL_GRUPPEN GRUPPE_NR PK GRUPPE_NAME SPARTE_NR FK ARTIKEL_SPARTEN SPARTE_NAME SPARTE_NR PK 1 Insert Picture Here 13 Click to edit title 18 Click to edit Master text styles 6 KUNDE KUNDENNR PK KUNDENNAME BERUFSGRUPPE SEGMENT KUNDENTYP 21 83 2 BESTELLUNG 5 4 BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS 6 8 BESTELLPOSITION 11 13 9 12 BESTELLNR FK POSITIONSNR PK 14 MENGE 15 16 17 ARTIKELNR FK 18 DEPOTSTELLE 10 19 RABATT 20 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 Insert Picture Here Click Click to edit title Prüfen einer Join-Tabelle • to edit Möglichkeit Master text styles • Nach 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 Anordnung und Gruppierung der Ladeschritte des Beispiel-Szenarios KUNDE err_anz_pos_Bestellposition err_orphan_Bestellung err_childless_Bestellung Click err_orphan_PositionArtikel to edit title err_AVG_Pos_Wert Insert Picture Here err_seq_pos_Bestellposition Click to edit Master text styles 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 Beziehungsprüfungen Hauptdatenfluss Hauptdatenfluss ARTIKEL err_not_null_Menge err_not_Rabatt_Wert Umsetzung der Prüfungen Click to edit title Click to edit Master text styles Siehe separaten Ausdruck Insert Picture Here Umsetzung der Prüfungen Click to edit title Click to edit Master text styles Siehe separaten Ausdruck Insert Picture Here Umsetzung der Prüfungen Click to edit title Insert Picture Here Click to edit Master text styles Siehe separaten Ausdruck Umsetzung der Prüfungen Click to edit title Insert Picture Here Click to edit Master text styles Siehe separaten Ausdruck Auflistung der Laufzeiten für die einzelnen Prüfungen (unterschiedliche Massnamen) Click to edit title Click to edit Master text styles Insert Picture Here Themenübersicht 1/2 Datenbank-basierte ETL-Prozesse • Anforderungen an den ETL-Prozess im Data Warehouse Insert Picture Here • Speichermanagement und Grundlagentechniken Click to edit• title Blöcke, Extents, Segmente, Tablespace Click to edit Master text styles • Direct Path Load, Mengenbasiertes Laden • Logging / NoLogging • Hilfsmittel für schnelles Laden • Prüftechniken mit SQL • Szenario zum Prüfen von Daten • Zusätzliche Techniken für schnelles und sicheres Laden • Partition Exchange and Load (PEL) • Multiple Inserts / 91 Partition Exchange Loading (PEL) Financial Temporäre Tabelle Production Human Res. Neuer Monat P1 Z1 4 Click to edit title P2 Z2 4 Insert Picture Here Zeit Store to edit Master text P3 Z3 9 Click styles Supplier Marketing Service P4 Z4 8 Parallel Direct Path INSERT (Set Based) CREATE TABLE AS SELECT (CTAS) CREATE Indizes / Statistiken anlegen EXCHANGE Tabelle • Unvergleichbar schnell! 92 Monat 13 Monat 12 Monat 11 Monat 10 DROP PARTITION Faktentabelle Region 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')); 1 -- Neue leere temporäre Tabelle erstellen CREATE TABLE Bestellung_temp AS SELECT * FROM Bestellung WHERE ROWNUM < 1; 2 -- Inhalte ladenClick to edit title Insert Picture Here 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; Click to edit Master text styles 3 -- 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; 93 5 4 PEL – Auswirkungen auf die DWH-Verwaltung und Konzepte • Angleichung des Partition-Kriteriums auf den LadeRythmus und damit die „Zeit“ • Meist täglicher Load -> Tagespartitionen • Späteres Merge auf Monatsebene möglich / nötig Insert Click to edit title Picture Here • Zwang zum späteren Monats-Merge nutzen für Click to edit Master text styles • Komprimierung • Reorganisation • ILM-Konzept • Eine Partitionierungs-Ebene ist durch das PELVerfahren meist schon belegt • Local-Indizierung (wenn überhaupt gebraucht) entstehen automatisch Mengenbasierte Alternative (Performance – Optimierung bis zu Faktor 20 und mehr) t_Ref_1 t_Ref_2 t_Ref_3 Click to editt_Ref_4 title Insert Picture Here Click to edit Master text t_Ref_5 styles 300.000 Outer Join Temp Table t_Ref_6 t_Ref_7 t_Ref_8 t_Ref_9 Fakt Table Cursor loop Satzweise Prüfung Protokoll Aufgabenstellung: Lookup-Argumente über Funktionen gewinnen • Mehrstufige Verarbeitung 1. Über Funktionen Argumente gewinnen 2. Argumente in Lookup-Aufrufe einbauen • WITH-Verarbeitung Click to edit title Click to edit Master text styles Insert Picture Here Insert into ziel select * from (with lc as ( select level V_KAUF_ID, ran_M_N(0,2000) V_MITARBEITER_ID, ran_M_N(1,100024) V_KUNDEN_ID, sysdate-ran_M_N(20,1000) V_Kaufdatum, ran_M_N(999,1011) V_PRODUKT_ID, ran_M_N(0,4) V_GESAMT_DISCOUNT_PROZENT from Dual connect by level < 5) select L.V_KAUF_ID, L.V_MITARBEITER_ID, L.V_KUNDEN_ID, L.V_Kaufdatum, L.V_PRODUKT_ID, M.FILIAL_ID, M.MANAGER_ID, F.FILIALLEITER_ID, F.ORTNR, P.VK_PREIS-((P.VK_PREIS*1)*L.V_GESAMT_DISCOUNT_PROZENT)/100 Gesamt_wert, L.V_GESAMT_DISCOUNT_PROZENT from LC L, d_MITARBEITER M, d_filialen F, d_produkt P where L.V_MITARBEITER_ID = M.MITARBEITER_ID and M.FILIAL_ID = F.FILIAL_ID and L.V_ProdukT_id = P.produkt_id) Click to edit title Click to edit Master text styles Insert Picture Here Beschreiben einer Master/Detail - Beziehung • Ziel: Die Sätze in der Detail-Tabelle müssen immer einen Parent-Satz haben • Lösung: Click Picture • Multiple Insert: Die Information aus einer QuelleInsert steht immer zum Click to edit title Beschreiben von Parent- und Child-Tabelle zur Verfügung. to edit Master text styles • Beide sind synchronisierbar BESTELLUNG BESTELLPOSITION BESTELLNR PK ORTNR KUNDENNR FK BESTELLDATUM ANZAHLPOS BESTELLNR FK POSITIONSNR PK MENGE ARTIKELNR FK DEPOTSTELLE RABATT Here Multiple Inserts verarbeiten INSERT ALL WHEN 1=1‚ THEN INTO BESTELLUNG (KUNDENCODE,BESTELL_TOTAL,STATUS) VALUES (KUNDENCODE,BESTELL_TOTAL,STATUS) Insert Picture WHEN 1=1, INTO BESTELLPOSITION ClickTHEN to (BESTELLMENGE,BESTELL_TOTAL,PRODUKT_NR) edit Master text styles VALUES (BESTELLMENGE, BESTELL_TOTAL, PRODUKT_NR) SELECT WH_TRANSAKTIONEN.BESTELLMENGE BESTELLMENGE, WH_TRANSAKTIONEN.KUNDENCODE KUNDENCODE, WH_TRANSAKTIONEN.BESTELL_TOTAL BESTELL_TOTAL, WH_TRANSAKTIONEN.STATUS STATUS, WH_TRANSAKTIONEN.PRODUKT_NR PRODUKT_NR FROM WH_TRANSAKTIONEN WH_TRANSAKTIONEN ; Click to edit title 99 Here Multiple Inserts verarbeiten INSERT ALL WHEN STATUS = 'P'‚ THEN INTO WH_TRANS_PRIVAT (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) VALUES (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) WHEN STATUS = 'F'‚ THEN INTO WH_TRANS_FIRMA (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) VALUES (BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS) SELECT WH_TRANSAKTIONEN.BESTELLMENGE BESTELLMENGE, WH_TRANSAKTIONEN.KUNDENCODE KUNDENCODE, WH_TRANSAKTIONEN.BESTELL_TOTAL BESTELL_TOTAL, WH_TRANSAKTIONEN.STATUS STATUS FROM WH_TRANSAKTIONEN WH_TRANSAKTIONEN WHERE (WH_TRANSAKTIONEN.STATUS = 'P‚ /*SPLITTER.PRIVATKUNDEN*/) OR (WH_TRANSAKTIONEN.STATUS = 'F‚ /*SPLITTER.FIRMENKUNDEN*/); Click to edit title Click to edit Master text styles 100 Insert Picture Here Zusammenfassung der Techniken bezogen auf das Schichten-Modell Data Integration Layer CTAS Enterprise Information Layer R: Referenztabellen T 20% R T PEL Click to edit title CTAS User View Layer R Click to edit Master text styles S S S Insert D DPicture Here T: Transfertabellen S: Stammdaten B: Bewgungsdaten F B T D D B T PEL A PCT PEL 80% Typ-/FormatPrüfungen für Texte Über Loader bzw. External TablePrüfungen Temporäre Prüf- und Zwischentabellen mit Direct Path Load (CTAS) Partition Exchange Load als Weiterverarbeitung der External Tables Referenzieren von großen Faktentabellen in die WarehouseSchicht hinein Kennzahlensysteme mit Materialized Views Fast Refresh mit Partition Change Tracking (PCT) D: Dimensionen F: Fakten A: Aggregate Partitionierte Tabellen Prüfungen Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse • Zugriff auf Quellsystemen • Umgang mit Deltadaten • Kopiertechniken / SQL Loader / Data Pump / External Tables / Transportable Tablespace Click to edit title Insert Picture Here Click to edit Master text styles • Planung und Organisation des ETL Prozesses • Schichten als Planungsgrundlage • Umgang mit separaten ETL-Tools und Lade-Engines • Weitere Datenbank-Techniken • • • • Ersatz von Aggregat-Tabellen durch MAVs Table Functions Pivoting Merge • Zusammenfassung 102 Deltadaten Extrahieren OLTP 1 DWH Table Änderungsdatum Click to edit title Trigger Table 2 Click to edit Master text styles Table Insert Picture Here Table Queue 3 Table Deltabildung über MINUS Table 4 LogFile Logminer Table Queue 5 LogFile Streams Queue Table 6 LogFile Golden Gate Queue Table Herausforderungen beim Extrahieren • Unterschiedliche Namen in Quell- und Zielsystemen • Bewahrung der Konsistenz • Zeitpunkt des Ladens kann kritisch sein Click to edit title Insert Picture Here • Vollständigkeit der Daten Click to edit Master text styles • Unterschiedliche GRANTs der User • Zusätzlicher Netzwerkverkehr • Meist ist nur das Delta der geänderten Daten gewünscht • Formate (Datum, Zeichensätze) 104 Einlesetechniken Vorsysteme EBCDIC ASCII SQL-Loader External Table Database Link Transportable TS textDatapump styles OracleClick to edit title Click to edit Master ODBC JDBC Gateway Non Oracle API Applikation z. B. SAP R/3 API CALL Direct Save SQL SQL BS Copy BS Copy SQL SQL SQL SQL Insert Picture Here Oracle DWH Datenbank-Trigger? • Werden nur im Quellsystem angelegt • Beeinflusst Performance des Quellsystems • Eher als Notlösung anzusehen Click • Wenn es kein Änderungsdatum in der Quelltabelle gibt Picture Insert Click to edit title • Zum Triggern Message-basierter oder Event-gesteuerter to Ladeläufe edit Master text styles 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; / 106 Here SQL*Loader • Loader Modes • Convential Path • INSERT von Daten / UPDATE von Indizes / Auslösen von Triggern • Auswertung von Constraints • Direct Path to Click edit title Insert Picture Here • Formatieren der Daten in Blöcken und direktes Einfügen in die Click to edit Master text styles Datafiles • Keine SGA-Operationen / kein INSERT auf SQL-Level • Parallel Direct Path • Parallele SQL*Loader-Aufrufe 107 SQL*Loader – Empfehlungen • Direct Path Load nutzen • Alle Integrity Constraints ausschalten • NOT NULL, Unique und Primary Key Constraints • Verhindern von Index-AktualisierungenInsert Picture Here Click to edit titlewählen • UNRECOVERABLE Option Click to edit Master text styles • 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 108 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' Insert Picture Here BADFILE 'orte.bad' DISCARDFILE 'orte.dis‚ Click to edit Master text styles 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 ) Click to edit title 109 Aufruf des SQL*Loaders sqlldr userid=DWH/DWH control=c:\orte.ctl log=C:\orte.log orte.ctl Click to edit title orte.csvInsert Picture Here Click to edit Master text styles Control File 110 Daten TB_ORTE Data Pump Architektur Click to edit title Insert Picture Here Click to edit Master text styles Quelle: http://www.dbazine.com/blogs/blog-cf/chrisfoot/blogentry.2006-05-26.3042156388 111 Vereinfachte Verfahrensdarstellung DWH OLTP Click to edit title Click to edit Master text styles Export mit Data Pump (expdp) 112 FTP Insert Picture Here Import mit Data Pump (impdp) Schema OLTP Schema DWH Besondere GRANTs Delta-Load 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 Insert Picture Here Kontrolle derto Datenextraktion Click edit title Click to edit Master text styles • 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 113 Release 2 Export der Daten • Optional Flashback zum Absichern des EntladeZeitpunktes nutzen • Remote-Export möglich (per NETWORK_LINK) • Wegfall von separatem FTP-Aufruf Click to edit title Insert Picture Here • Einschränkung durch Query-Bedingung Click to edit Master text styles • Damit Zugriff z. B. auf „Last Update-Sätze“ • Default Export Location • D:\o11\admin\o11\dpdump\EXPDAT.DMP 114 Ablauf des Exports Click to edit title expdp dwh/dwh@o11 parfile=Para_EX.txt Click to edit Master text styles impdp dwh2/dwh2@o11 DIRECTORY=DP_OUT DUMPFILE=EXP1.DMP LOGFILE=DP_OUT:imp_log REMAP_SCHEMA=DWH:DWH2 115 Insert Picture Here • Export über Parameter-Datei • Export auch mit RemoteZugriff • Einschränkung der Datenmenge durch QUERY • Bei dem Import: REMAP auf das Schema Parameterauswahl SCHEMAS=HR DUMPFILE=expinclude.dmp DIRECTORY=dpump_dir1 LOGFILE=expinclude.log INCLUDE=TABLE:"IN ('EMPLOYEES', 'DEPARTMENTS')" INCLUDE=PROCEDURE Insert Picture INCLUDE=INDEX:"LIKE 'EMP%'“ ClickNETWORK_LINK=source_database_link to edit Master text styles 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 Click to edit title Here 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 Click to edit title • STOP_JOB • Aktueller Job wird beendet • Einstellung des Parallelisierungsgrads Insert Picture Here Click to edit Master text styles • PARALLEL • Eingabe von „continue_client“ führt zur normalen Monitor-Ausgabe zurück • FILESIZE • HELP • PARALLEL • START_JOB • STATUS • STOP_JOB 119 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: 4.570 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 Click to edit title Insert Picture Here Click to edit Master text styles Objekttyp SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS wird verarbeitet . . "DWH"."F_UMSATZ" 1.807 GB 51200000 Zeilen exportiert . . "DWH"."T10" 1.256 GB 8999991 Zeilen exportiert . . "DWH"."LIEFERUNG" 421.5 MB 1999999 Zeilen exportiert . . "DWH"."LIEFERUNG_COMP" 421.5 MB 1999999 Zeilen exportiert . . "DWH"."LIEFERUNG_MITTEL_COMP" 70.45 MB 1999999 Zeilen exportiert . . "DWH"."LIEFERUNG_MITTEL" 70.45 MB 1999999 Zeilen exportiert . . "DWH"."D_REGION" 469.8 KB 7202 Zeilen exportiert . . "DWH"."D_KUNDE" 209.9 KB 1029 Zeilen exportiert . . "DWH"."BESTELLUNGEN" 5.859 KB 4 Zeilen exportiert . . "DWH"."D_ARTIKEL" 16.40 KB 129 Zeilen exportiert . . "DWH"."D_VERTRIEBSKANAL" 6.859 KB 7 Zeilen exportiert . . "DWH"."KUNDE" 5.015 KB 2 Zeilen exportiert . . "DWH"."LIEFERUNGEN" 5.859 KB 4 Zeilen exportiert . . "DWH"."PRODUKT" 5.031 KB 3 Zeilen exportiert . . "DWH"."D_ZEIT" 0 KB 0 Zeilen exportiert Master-Tabelle "DWH"."SYS_EXPORT_SCHEMA_01" erfolgreich geladen/entladen ****************************************************************************** Testlaufzeiten Gesamtlaufzeit für 4,5 GB Schreiben auf SSD 4 Cores Dumpfile GBtitle Click to 4,5 edit Click to edit Master text styles Parallel 0 Parallel 2 Parallel 4 Insert Picture Here 1: 42 Minuten 0: 56 Minuten 0: 52 Minuten Alternative mit klassischem EXP: exp 3,5 Minuten External Tables • Tabelle, die eine Datei referenziert • Datei wird als normale Tabelle behandelt • Nur lesend zugreifbar Insert Picture Here • RMAN sichert Click to nicht edit die titleDaten • Bulk-Loading Click to edit MasterOperationen, text styles wie insert... select • Mehr Transformationsoptionen als im SQL* Loader • Parallelisierbares Lesen • Alternative zum SQL*Loader 122 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) ) Click to edit title ORGANIZATION EXTERNALtext styles Click to edit Master (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') ) 123 GemeindeID;Gemeinde;KundenID;KreisID 01001000;Flensburg;;0;1001 01002000;Kiel;;0;1002 01003000;Luebeck;;0;1003 01004000;Neumuenster;;0;1004 01051001;Albersdorf;;0;1051 01051002;Arkebek;;0;1051 01051003;Averlak;;0;1051 01051004;Bargenstedt;;0;1051 01051005;Barkenholm;;0;1051 01051006;Barlt;;0;1051 01051008;Bergewoehrden;;0;1051 01051010;Brickeln;;0;1051 01051011;Brunsbuettel;;0;1051 Insert Picture Here ........................... ........................... Modifikationsmöglichkeiten create or replace directory LC_TEXTE_2 AS 'D:\Szenario\Testdaten'; Click to edit title Click to edit Master text styles Insert Picture Here alter table ex_orte default directory LC_Texte_2; alter table ex_orte location ('ORTE_Y.CSV'); 124 Konzept zum einspielen von Dateien 1. Änderungsprozedur zum Click to edit title ABC120109 ABC130109 ABC140109 ABC150109 Click to edit Master text styles • Kopieren der Dateien • Umbenennen von Insert Picture Dateinamen Here 2. Änderungsprozedur zum • Ändern der Einträge in der External Table • Ändern des Pfades im Directory-Objekt Sich täglich ändernde Dateinamen Datum im Dateinamen Lieferantenname im Dateinamen 125 Preprocessing für External Tables Release 2 CREATE TABLE sales_transactions_ext (PROD_ID NUMBER, CUST_ID NUMBER ...) ORGANIZATION external (TYPE oracle_loader DEFAULT DIRECTORY data_file_dir Insert Picture Here ACCESS PARAMETERS Click to edit title (RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII Click toPREPROCESSOR edit Master text styles 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; 126 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 • Insert Picture Here Click to edit title Kopieren der Dump-Datei auf die Zielumgebung Click to edit Master text styles • In der Zielumgebung neue External Table-Definition erstellen und aktivieren • Durch Zugriff mit SELECT auf die External Table die Daten lesen 127 External Tables mit Data Pump DWH OLTP Click to edit title EX_T Click to edit Master text styles FTP 128 Insert Picture Here EX_T External Tables mit Data Pump OLTP DWH select * from EX_Bestellung_2 Click to edit title Click to edit Master text styles 129 Insert Picture Here Testzenario DWH OLTP DB_Link Bestellung Click to edit title Insert CTAS Bestellung Click to edit Master text styles OLTP DWH EX_T EX_T Bestellung Impliziter FTP-Lauf Picture Here Bestellung Vorteile der Kombination • Leichte Handhabung • Syntax der beiden Typen sehr ähnlich • Hohe Performance Click • Data Pump-eigenes Format ist für schnellen Ex-/Import Insert ausgelegt Picture Here Click to edit title • Parameter von Data Pump zusätzlich nutzen, um die zu to extrahierende edit MasterDatenmenge text stylesauf das Wesentliche zu reduzieren • Verbleiben innerhalb der SQL-Sprache • Durch CREATE TABLE AS SELECT lassen sich sowohl WHEREFilter als auch Joins während des Extrahierens verarbeiten 131 Transportable Tablespaces • Höchste Performance beim Austausch von Oracle zu Oracle • Daten werden als komplettes File oder File Set bewegt • Austausch zwischen unterschiedlichenInsert Picture Here Click to edit title Betriebssystemen möglich Click to edit Master text styles • 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 132 Vorgehensweise 1. Anlegen des Tablespaces im Quellsystem 2. Zuweisung der zu kopierenden Daten zum Tablespace • Alle Daten sind dem Tablespace zugeordnet (Indizes etc.) Insert Picture Here 3. Ändern des Click toTablespaces edit title auf Read-Only 4. to Export der Metadaten mit Data Pump (EXPDP) Click edit Master text styles 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 133 Transportable Tablespaces Buchhaltung 1 Produktion Personal CREATE TABLE temp_jan_umsatz NOLOGGING TABLESPACE ts_temp_umsatz AS SELECT * FROM ????????? WHERE time_id BETWEEN '31-DEC1999' AND '01-FEB-2000'; P1 Z1 4 Click to edit title P2 Z2 4 Insert Picture Here Lager P3 Z3 9 Click to edit Master text styles Index/Constraint free Lieferanten P4 Z4 8 Marketing Service 2 ALTER TABLESPACE ts_temp_umsatz READ ONLY; 3 Kopieren des Tablespace zur Zielplattform 4 135 Parallel Direct Path Insert Set Based BS-Copy EXP TRANSPORT_TABLESPACE=y TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp Daten Meta daten Transportable Tablespaces 5 IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f' TABLESPACES=ts_temp_umsatz FILE=jan_umsatz.dmp 6 ALTER TABLESPACE ts_temp_umsatz READ WRITE; Click to edit title Click to edit Master text styles ALTER TABLE umsatz ADD PARTITION 7 Metadaten Insert Picture Here 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; Neuer Monat 012000 121999 111999 101999 091999 Fakttable Umsatz 136 Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse • Zugriff auf Quellsystemen • Umgang mit Deltadaten • Kopiertechniken / SQL Loader / Data Pump / External Tables / Transportable Tablespace Click to edit title Insert Picture Here Click to edit Master text styles • Planung und Organisation des ETL Prozesses • Schichten als Planungsgrundlage • Umgang mit separaten ETL-Tools und Lade-Engines • Weitere Datenbank-Techniken • • • • Ersatz von Aggregat-Tabellen durch MAVs Table Functions Pivoting Merge • Zusammenfassung 137 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 R Click Tto edit Rtitle T: Transfertabellen S T Click to edit Master text styles S InsertDPicture Here ETL: Kosten D B B F B B ETL: Kosten pro Kunde D B 138 D D B ETL: Kosten pro Kunde Prüfungen B: Bewgungsdaten S T ETL: Kosten pro Kunde S: Stammdaten pro Kunde D: Dimensionen F: Fakten Transformation F D F D D 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 Insert Picture Here Click to edit title S T T: Transfertabellen R R T S S Click to edit Master text styles T B D F 139 Distincts Joins S: Stammdaten B: Bewgungsdaten D F Prüfungen D D D B B F B B B D D: Dimensionen F: Fakten D D Effizientes Laden beginnt so früh wie möglich Data Integration Layer Data Integration Layer 1:1 T 1:1 Click to edit title Insert Picture Here CTAS T Click to edit Master text styles T 1:1 1:1 T T Warum? 140 T Logik so früh wie möglich Verteilte Server zwingen oft zu unproduktiven 1:1 Ladevorgängen Viele unnötige und versteckte Aufwände User View Layer Click to edit title 1:1 Insert Picture Here Data Integration Layer Enterprise Information Layer Vorsystem Click to edit Master text styles User View Layer 1:1 Process neutral / 3 NF 1:1 Vorsystem mit Vorrechner 1:1 1:1 User View Layer 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 Click to edit title Click to edit Master text styles Process neutral / 3 NF User View Layer Insert Picture Here Zu viele teuere Ladestrecken • Redundante Wege • Gefahr von 1:1 Kopien • Schwache Netze DWH Server Data Integration Layer Enterprise Information Layer Click to edit title c User View Layer Insert Picture Here Click to edit Master text styles OLTP Process neutral / 3 NF Separater ETL Server Balance zwischen den beteiligten Komponenten finden DWH-Datenbank Click to edit title Insert Picture Here Click to edit Master text styles ETL-Engine ETL-Server DWH-Server Balance zwischen den beteiligten Komponenten finden DWH-Datenbank Click to edit title Insert Picture Here Click to edit Master text styles ETL-Engine ETL-Server DWH-Server Balance zwischen den beteiligten Komponenten finden Dokumentation Steuerung Benutzerfühung Click to edit title Rechen-Power Ausnutzen von bestehenden Ressource DWH-Datenbank Insert Picture Here Click to edit Master text styles ETL-Engine ETL-Server DWH-Server Aufwendige Extraktionsverfahren Insert Picture Here Nur ein Ladeschritt ! Click to edit title Oracle OLTP Click to edit Master text styles Oracle DWH 2. Ladeschritt 1. Ladeschritt ETL Tool Server Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse • Zugriff auf Quellsystemen • Umgang mit Deltadaten • Kopiertechniken / SQL Loader / Data Pump / External Tables / Transportable Tablespace Click to edit title Insert Picture Here Click to edit Master text styles • Planung und Organisation des ETL Prozesses • Schichten als Planungsgrundlage • Umgang mit separaten ETL-Tools und Lade-Engines • Weitere Datenbank-Techniken • • • • Ersatz von Aggregat-Tabellen durch MAVs Table Functions Pivoting Merge • Zusammenfassung 148 Aggregattabellen • Die meisten Kennzahlen sind bekannt • In der Datenbank als Aggregattabellen vorbereiten • Nicht über das BI-Tool umsetzen (meist langsamer) Insert Picture Here • Keine eigenständigen Aggregat-Tabellen Click to edit title • Haben separate Namen -> Zwang zu Änderungen in BI-Tools Click to edit Master text styles • 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) Materialized Views entlasten den ETL-Prozess Länder AnalyticalFunctions Zeit Regionen Click to edit title Click to edit Master text stylesOrte Star-Transformation Bitmap-Index Partitions Produkt FK_Ort FK_Zeit FK_Produkt Level 3 Insert Definitionen Picture Here Attribute Level 2 Definitionen Attribute Level 1 Definitionen Attribute Query Rewrite Materialized View Umsätze Parallel+ Cluster Dimension Ort Kunde Materialized Views sparen Plattenplatz und minimieren die Objektanzahl Top/Alle_Artikel Segement Click to edit title Summe pro Sparte Click to edit Master text Artikelsparte styles Artikelgruppe Summe pro Artikel Artikel Summe pro Charge Artikelcharge Menge Umsatz Insert Picture Here Review Summe pro Gruppe Query Summe pro Segement Summe pro Charge Nested Materialized Views nutzen bereits ausgeführte IO-Leistung Umsatz Prod. Gr B relativ zum Gesamtjahresumsatz Materialized View Level 4 Summierung/Jahr Click to edit title Insert Picture Here Materialized View Level 3 Click to edit Master text styles Umsatz Prod.Gr A Umsatz Prod.Gr B Summierung/Monat Aufwendige Join-Operation DIM_Zeit FAKT_Umsatz DIM_Produkte Materialized View Level 2 Materialized View Level 1 Basistabellen IO 152 Table Functions – Pipeline-Verfahren Parallelisierung trotz aufwendiger Programmierlogik tf1 Click to edit title tf2 Insert Picture Here Click to edit Master text styles Quelle Ziel tf3 Stage_tabelle INSERT INTO Ziel SELECT * FROM (tf2(SELECT * FROM (tf1(SELECT INSERT INTO Ziel SELECT 153 * FROM Quelle)))) * FROM tf( SELECT * FROM (Stage_tabelle)) Begriffe im Bereich Table Functions • Table Function • Record Type • Nested Tableto Click • 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. • Ein komplexer, aus mehreren Feldern zusammengesetzter Datentyp. • Insert Picture Here edit title Eine Art virtuelle Tabelle (temporäre Tabelle im Speicher). Eine Table einestyles solche Tabelle komplett an das aufrufende Click to edit Function Masterkann text Kommando zurückgeben. 154 • Ref Cursor • Parallel • Pipelined • 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. • Table Functions können eingehende Sätze parallel bearbeiten, wenn diese als Ref Cursor übergeben werden. • Eine Table Function reicht bereits fertige Sätze an das aufrufende Kommando zur weiteren Verarbeitung weiter, während sie noch weitere Sätze bearbeitet. Mengenbasierte Verarbeitung Trotz Programmierung INSERT INTO Table SELECT Feld1, Feld2 FROM Table_Function( Click toFunktion edit title Click to edit Master text styles Cursor Fetch Loop Variante 1 Variante 2 155 If a = b... Update... Case... pipe row(record Type) Return Table ) • Schnelle Verarbeitung Insert Picture Here (Pipelined) • Objekttechnik • Parallelisierung • Mehrere Rückgabewerte und Einzelrückgaben • Cursor als Input • Schachtelbar 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); Click to edit title Click to edit Master text styles 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; 156 Definition Record-Type Insert Picture Here Definition Nested-Table auf der Basis des Rekord-Types Definition Cursor als Typ des Übergabeparameters Die Table Function 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); Click to edit title Übernahme von Ausgangssätzen als Cursor Insert Picture Here Definieren einer Nested-Table-Struktur objset Bestellung_X_t_table := Bestellung_X_t_table(); für die spätere Rückgabe. i number := 0; begin LOOP Lesen aus Cursor -- read from cursor variable FETCH cur into BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,ORDER_ID; -- ext when last row EXIT WHEN cur%NOTFOUND; i := i+1; if substr(to_char(LIEFERDATUM,'YYYY.MM.YY'),1,4) >2002 then Fehler_Datum := to_date('9999.12.12','YYYY.MM.DD'); Erweitern Nested-Table um einen else Fehler_Datum := LIEFERDATUM; Satz und Überführen eines Satzes in End if; die Nested-Table objset.extend; objset(i) := Bestellung_X_t(BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,Fehler_Datum); END LOOP; Rückgabe der kompletten Tabelle an CLOSE cur; das aufrufende Statement Return objset; (Alternative zu PIPE). END; Click to edit Master text styles 157 Beispielaufrufe insert into bestellung_X Insert Picture Here select * from Click to edit title TABLE(f_Bestellung_X(CURSOR(SELECT * from Bestellung))) Click to edit Master text styles select * from TABLE(f_bestellung(CURSOR(SELECT * from Bestellung))) select count(*) from TABLE(f_bestellung(CURSOR(SELECT * from Bestellung)) 158 Verhindern des mehrfachen Ladens Prüfung 1 Bestellung Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 2 Click to edit title Insert into Ergebnis Bestellposition Insert Picture Here select * from bestellung b, bestellposition p Click to edit Master text styles where b.PK = p.FK Der Join wird 4 mal ausgeführt Prüfung 3 Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Prüfung 4 Insert into Ergebnis select * from bestellung b, bestellposition p where b.PK = p.FK Verhindern des mehrfachen Ladens Bestellung select * from TABLE(f_bestellung(CURSOR(select * from bestellung b, bestellposition p where b.PK = p.FK))) Click to edit title Bestellposition Click to edit Master text styles Der Join wird 1 mal ausgeführt Insert f_bestellung Picture Here Einlesen Cursor Prüfung 1 Prüfung 2 Prüfung 3 Prüfung 4 Pipe Native Support für Pivot und Unpivot Sinnvoller Einsatz im Rahmen des ETL-Prozesses SALESREP Q1 Q2 Q3 Q4 ---------- ----- ----- ----- ----100 230 240 260 300 101 200 220 250 260 102 260 280 265 310 Click to edit title Click to edit Master text styles 161 SALESREP ---------100 100 100 100 101 101 101 101 102 102 102 102 QU REVENUE -- ---------Q1 230 Q2 240 Q3 260 Q4 300 Q1 200 Q2 220 Q3 250 Q4 260 Q1 260 Q2 280 Q3 265 Q4 310 Insert Picture Here Native Support für Pivot und Unpivot Sinnvoller Einsatz im Rahmen des ETL-Prozesses QUARTERLY_SALES SALESREP Q1 Q2 Q3 Q4 ---------- ----- ----- ----- ----100 230 240 260 300 101 200 220 250 260 102 260 280 265 310 Click to edit title Click to edit Master text styles SALESREP ---------100 100 100 100 101 101 101 101 102 102 102 102 QU REVENUE -- ---------Q1 230 Q2 240 Q3 260 Q4 300 Q1 200 Q2 220 Q3 250 Q4 260 Q1 260 Q2 280 Q3 265 Q4 310 Insert Picture Here select * from quarterly_sales unpivot include nulls (revenue for quarter in (q1,q2,q3,q4)) order by salesrep, quarter ; 162 Native Support für Pivot und Unpivot Sinnvoller Einsatz im Rahmen des ETL-Prozesses SALESREP 'Q1' 'Q2' 'Q3' 'Q4' ---------- ----- ----- ----- ----100 230 240 260 300 101 200 220 250 260 102 260 280 265 310 Click to edit title Click to edit Master text styles SALES_BY_QUARTER SALESREP ---------100 100 100 100 100 100 100 101 101 101 101 102 QU REVENUE -- ---------Q1 230 Q2 240 Q3 160 Q4 90 Q3 100 Q4 140 Q4 70 Q1 200 Q2 220 Q3 250 Q4 260 Q1 260 Insert Picture Here select * from sales_by_quarter pivot (sum(revenue) for quarter in ('Q1','Q2','Q3','Q4')) order by salesrep ; 163 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 Click to edit title (ON-Klausel) ClickSchlüssels to edit Master text styles • Auch DELETEOperationen möglich 164 Insert Picture Here Themenübersicht 2/2 Datenbank-basierte ETL-Prozesse • Planung und Organisation des ETL Prozesses Insert Picture Here Schichten als Planungsgrundlage Click to edit•• title Umgang mit separaten ETL-Tools und Lade-Engines Click to edit Master text styles • Szenario zum Prüfen von Daten • Szenario zum Prüfen von Daten • Weitere Datenbank-Techniken • • • • Ersatz von Aggregat-Tabellen durch MAVs Table Functions Pivoting Multiple Inserts / Merge • Zusammenfassung 165 Zusammenfassung der bevorzugten LadeVarianten Data Integration Layer CTAS Enterprise Information Layer User View Layer R: Referenztabellen 20% R T R S S S Click Tto edit PEL title S: Stammdaten B: Bewgungsdaten CTAS Click to edit Master text styles T: Transfertabellen D D Insert Picture Here F B T D D B T PEL A PEL Mengenbasierte Prüfungen Vorbereitete temporäre Tabellen Partition Exchange Konzentration aller Prüfungen 166 CTAS : Create Table As Select F: Fakten A: Aggregate Partitionierte Tabellen Prüfungen 80% Vorgelagerte Prüfungen D: Dimensionen Partition Exchange Aggregatbildung durch Materialized Views Denormalisierung (Joins) und Aggregate PEL : Partition Exchange and Load