DB_ETL_April_2017 - Oracle Data Warehouse Community Seite

Werbung
Oracle Data Warehouse –
Datenbank basierte ETL-Prozesse
Reduzieren Sie Ihre Ladezeiten! Organisieren Sie Ihre ETL-Prozesse!
DATA WAREHOUSE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Themenübersicht
Datenbank-basierte ETL-Prozesse
• Anforderungen an den ETL-Prozess im Data Warehouse
• Speichermanagement und Grundlagentechniken
• Blöcke, Extents, Segmente, Tablespace
• Direct Path Load, Mengenbasiertes Laden
• Optimierungsszenario
• Hilfsmittel für schnelles Laden
• Prüftechniken mit SQL
• Szenario zum Prüfen von Daten
• Weitere Techniken und Tools
2
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Das große Klagen
Bzgl. System-Nutzen
• 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
Bzgl. Maintenance und Technik
• Immer teuerer
• Maintenance-Aufwand zu hoch / Personal
• Explodierende Datenmengen -> Storage- / Ladezeitenthematik
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ETL ist mehr als nur Daten von A nach B kopieren
nicht Point-To-Point sondern Informationsschaffend
Quellsystem
DWH-System
n-tier
n-tier
Application Server
ETL?
Application Server
ETL?
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 4
Die strategische Rolle der Warehouse-Schicht
Service
Logistik
Einkauf
Vertrieb
Integration
Layer
Die
selben
Geschäftsobjekte
in unterschiedlichen
Prozessen
?
Enterprise Layer
Core - DWH / Info Pool
Strategische
Daten
Controlling
Marketing
Wirkungsweite des
Systems muss
festgelegt sein
User View
Layer
Wunsch
für
unterschiedliche
Sichten
auf die
selben
Geschäftsobjekte
?
Eindeutigkeit in
der Kernschicht
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Service
Logistik
Einkauf
Vertrieb
Controlling
Marketing
Was verdienen wir an gelben + bunten Fahrrädern?
Logistik
WARE
Waren_Nr
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Einkauf
ARTIKEL
Artikel_Nr
Einheit
Preis
Lieferant
Vertrieb
PRODUKT
Produkt_Nr
Einheit
Farbe
Preis
Integration
T_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
Lieferant
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Vert_Einheit
Farbe
Vert_Preis
Rabatte
LieferantenDiscounts
Enterprise Layer
LIEFERANT
PK_Lieferanten_ID
Lieferant_Name
Es geht um
Gesamtsichten:
Verpackungen
S_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
FK_Lieferanten_ID
Gebinde
Gewicht
PK_Verpackungs_ID
Vert_Einheit
FK_Farben_ID
Vert_Preis
FARBE
PK_Farben_ID
Farbe
Aufschlag
User View
„Breite“ der
Datenmodelle
Gelagerte
Artikel,
Menge +
Größe
Lager
Lieferanten
Gekaufte
Artikel,
Menge +
Preise
Zeit
VERPACKUNGSART
PK_Verpackungs_ID
Hoehe
Laenge
Breite
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Artikel
Verkaufte
Artikel
Menge +
Preise
Gewinn =
Verkaufspr. –
Einkaufspr. –
Lagerkosten
Was verdienen wir an gelben + bunten Fahrrädern?
Logistik
WARE
Waren_Nr
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Einkauf
ARTIKEL
Artikel_Nr
Einheit
Preis
Lieferant
Vertrieb
PRODUKT
Produkt_Nr
Einheit
Farbe
Preis
Integration
T_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
Lieferant
Gebinde
Gewicht
Hoehe
Laenge
Breite
Verpackung
Vert_Einheit
Farbe
Vert_Preis
User View
Enterprise Layer
LIEFERANT
PK_Lieferanten_ID
Lieferant_Name
Verpackungen
S_ARTIKEL
PK_Artikel_ID
Eink_Artikel_Nr
Log_Waren_Nr
Vert_Produkt_Nr
Eink_Einheit
Eink_Preis
FK_Lieferanten_ID
Gebinde
Gewicht
PK_Verpackungs_ID
Vert_Einheit
FK_Farben_ID
Vert_Preis
FARBE
PK_Farben_ID
Rabatte
Farbe
Lieferanten- Aufschlag
Discounts
VERPACKUNGSART
PK_Verpackungs_ID
Hoehe
Laenge
Breite
D_ARTIKEL_LAGER
PK_Artikel_ID
Log_Waren_Nr
Gebinde
Gewicht
Verpackung
D_ARTIKEL_EINK
PK_Artikel_ID
Eink_Artikel_Nr
Eink_Einheit
Eink_Preis
Lieferanten
Farben
D_ARTIKEL_VERT
PK_Artikel_ID
Vert_Produkt_Nr
Eink_Einheit
Vert_Einheit
Farben
Vert_Preis
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Lager
Gelagerte
Artikel,
Menge +
Größe
Lieferanten
Gekaufte
Artikel,
Menge +
Preise
Zeit
Verkaufte
Artikel
Menge +
Preise
Es geht
um
Gesamtsichten:
„Breite“
der
Datenmodelle
Was definieren wir als ETL-Prozesse?
Enterprise Information
Layer
User View
Layer
OLTP + Data Warehouse + BI
von
L a t e n z
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 8
BI-Tool Server + Caches
Data Integration
Layer
bis
Es gibt Data Warehouse-spezifische Rahmenbedingungen
OLTP
Data Warehouse
Interaktion
Lesen und Schreiben
Eher nur Lesen / konzentriertes
Mengen-Schreiben
Verteilung der
Aktionen
Oft auf viele Tabellen
verteilt
Oft zentrisches Arbeiten auf
wenigen Tabellen
Art von Lese-/SchreibAktionen
Verteilt und nur einzelne
Sätze
Konzentriert und viele Sätze
gleichzeitig
Art der physischen
Speicherung
Satzorientiert in kleinen
Blöcken
Spaltenorientiert in sortieren Blöcken
Anzahl Benutzer
Hoch
Weniger
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
9
Was bedeutet das für die eingesetzte Technologie?
OLTP
Data Warehouse
Interaktion
Lesen und Schreiben
Eher nur Lesen / konzentriertes
Mengen-Schreiben
Parallelisierung
Gering
Hoch
Hochverfügbarkeit
Hoch
Eher gering
Storagesystem
SAN
Dedicated
Backup
komplett
selektiv
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
10
11
Bei der Wahl von Mitteln immer berücksichtigen:
10 – 50 Tabellen
500 – 1000 Tabellen
Große Tabellen
Partitioniert
Namentlich bekannt
> 70 % des Datenvolumens
KleineTabellen
Nicht Partitioniert
Unkenntliche Masse
< 30 % des Datenvolumens
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Datenbank-nahes Laden – Grundlage für Flexibilität und
Performance
• Daten dort laden, wo sie liegen
• Möglichst wenig Datenbewegung
• Mengenbasiertes Laden!
• ETL-Tools sollten Datenbank – Features mitnehmen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Restricted
12
Ziele und Aufgaben
• Bereitstellen von Daten in adäquater
Weise
– Zeitlich passend
– Richtige Form
– Passende Inhalte
• Daten so ablegen, dass man sie
wiederfindet
– Dokumentation
• Daten Ressourcen-ökonomisch
speichern
– Berücksichtigung von Plattenplatz
13
Was wird geladen
• Es sollte nur das geladen werden, was
wirklich gebraucht wird
• Gibt es einen Auftrag für das Laden
bestimmter Daten?
– Wer braucht die Daten?
– Welche Daten werden gebraucht?
• Sind die zu ladenden Daten in einem
brauchbaren Zustand?
– Welche Anforderungen sind an Quelldaten zu
stellen?
– Wer definiert die Anforderungen?
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Ziele eines effizienten ETL-Prozesses
• Ressource-schonend
– Rechenzeit, Storage
• Schnell änderbar und pflegbar
• Kurze Laufzeiten
• Erzeugen von stimmigen Abfrage-Ergebnissen
• Erleichterung für BI-Tools
....
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Allgemeine Regeln
• Schichtenmodell als Orientierung nutzen – ganzheitlich planen
• Transformationen so früh wie möglich im Verlauf des Schichtenmodells
• Auf die spezifischen Anforderungen und Situationen in den jeweiligen
Schichten reagieren
• Alle Schichten innerhalb derselben Datenbank
• Daten nur dann bewegen, wenn sich qualitativ etwas verändert.
• Nur diejenigen Daten laden, die wirklich benötigt werden
• Eher selektieren als kopieren
• Prüfungen an wenigen Stellen konzentrieren
• Bei Data Marts prüfen, ob sie permanent bereit gehalten werden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Enterprise Information Layer
R
R
T
T
T
S
B
B
S
User View Layer
D
S
B
B
Strategische
Daten
D
B
F
B
D
D
D
F
D
F
D
D
Taktische
Daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 17
Zusammenhängender
Abfragebereich
Operative
Daten
Data Integration Layer
aufbereiten
integrieren
Flexibilität und schnelles Bereitsstellen
R: Referenztabellen
T: Transfertabellen
S: Stammdaten
B: Bewgungsdaten
D: Dimensionen
F: Fakten
Die Organisation des ETL-Prozesses
Data Integration
Layer
Richtig
selektieren
Die Masse
aller
Prüfungen
Enterprise Information
Layer
StammReferenzdaten
aktualisieren
User View
Layer
Nur
denormalisierende
Joins
Repository
(Glossar, alle Objekte)
Für alle Aktionen den frühest möglichen Punkt finden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 18
Möglichst viele
Kennzahlen
in die
Datenbank
Angemessen in den Situationen agieren
Data Integration
Layer
Keine
Daten
Enterprise Information
Layer
Referenzdaten
Stammdaten
Bewegungsdaten
(granulare
Transaktionsdaten)
User View
Layer
Dimensionen
Fakten
vorberechnete
Kennzahlen
vorberechnete
Kennzahlen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 19
R: Referenztabellen
T: Transfertabellen
S: Stammdaten
B: Bewgungsdaten
D: Dimensionen
F: Fakten
Angemessen in den Situationen agieren
Data Integration
Layer
Temporäre
Daten
Enterprise Information
Layer
20% Volumen f. viele
Kleine Tabellen
User View
Layer
Wieder
herstellbare
Daten
80% Volumen f.
wenige
große Tabellen
=> partitioniert
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 20
Lade-Aktivitäten an Schichtübergängen
Integration
Enterprise
Persistent
Flüchtige Daten
Clearing-Verfahren,
technisches, logisches,
semantisches Prüfen
Keine Constraints
Kopieren
Selektieren
Mengenbasiertes
Prüfen ohne
Constraints
Kopien / teilpersistent
dynamisch
Denormalisieren
z.T. Aggregieren
Normalisieren
(Granularisieren)
Historisieren
Generische
Datenstrukturen
(isolierte Tabellen,
teil-ausgeprägte Datentypen)
User View
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)
Lookups -> Dimensionsdaten
Joins - Denormalisieren
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 21
Verfahren für schnelles ETL in der Datenbank
Data Integration
Layer
Selektieren
Statt
kopieren
Direct Path
in temporäre
Tabellen
Contraintfreies
Prüfen mit
Mengenbasiertem
SQL
User View
Layer
Enterprise Information
Layer
Partition
Exchange
&LOAD
in partit.
Tabellen
(PEL)
Unveränderte
Bewegungsdaten liegen
lassen
Große
Fakten-Tab.
über PEL.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Kennzahlen ausschließlich
über
MAVRefresh
Bekannte
Kennzahlen
in die DB
weniger
Koipien in
BI-Tools
Themenübersicht
Datenbank-basierte ETL-Prozesse
• Anforderungen an den ETL-Prozess im Data Warehouse
• Speichermanagement und Grundlagentechniken
• Blöcke, Extents, Segmente, Tablespace
• Direct Path Load, Mengenbasiertes Laden
• Optimierungsszenario
• Hilfsmittel für schnelles Laden
• Prüftechniken mit SQL
• Szenario zum Prüfen von Daten
• Weitere Techniken und Tools
23
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Zuordnung Datenobjekten und Speicher
DB-Objekte
Table
Partition
Index
Mview
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Speicherobjekte
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Die automatische Extent-Vergrößerung
• Automatische Allokierung von weiteren Segmenten
• Exponentielles Vergrößerungs-Mass
select
t.TABLE_NAME, t.blocks,t.EMPTY_BLOCKS,t.AVG_SPACE,t.AVG_ROW_LEN,t.NUM_ROWS,
t.pct_free, t.compression,s.EXTENTS,s.bytes seg_bytes,e.blocks ext_blks,e.bytes ext_bytes
from
user_segments s, user_tables t, user_extents e
where
t.TABLE_NAME = s.segment_name
and e.SEGMENT_NAME = s.SEGMENT_NAME
and t.TABLE_NAME = 'F_UMSATZ';
TABLE_NAME BLOCKS EMPTY_BLOCKS AVG_ROW_LEN NUM_ROWS PCT_FREE COMPRESS EXTENTS SEG_BYTES EXT_BLKS EXT_BYTES
----------------- ------------ ----------- -------- -------- -------- ------- ---------- -------- --------F_UMSATZ
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Block- und Satzstruktur
Datenbank Block
Row header
Column length
Column value
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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 Performnce aus
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
High Water Mark
Nach INSERTS:
0
1
2
0
1
2
Unused block
3
4
Free space
after delete
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Segment
Used block
4
High-water mark
Nach DELETES:
Extent ID
3
Segment
Extent ID
Wie wird die „High Water Mark“ bestimmt
TOTAL_BLOCKS
UNUSED_BLOCKS
0
1
2
3
High-water mark
LAST_USED_EXTENT_FILE_ID,
LAST_USED_EXTENT_BLOCK_ID
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
4
Segment
Extent ID
Deallocate Space
0
1
2
3
ALTER TABLE tablename
DEALLOCATE UNUSED;
0
Used block
1
High-water mark
2
3
Unused block
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
4
Segment
Extent ID
After
deallocation
4
Segment
Extent ID
Before
deallocation
Free space
after delete
Truncate Table
TRUNCATE TABLE tablename
Extent ID
0
1
Segment
High-water mark
Free space
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Direct Path Load
INSERT /*+APPEND */ INTO DWH.F_UMSATZ
NOLOGGING
SELECT * FROM OLTP.BESTELLUNGEN;
F_UMSATZ
Server
process
Segment
Used block
Free space after delete
High-water mark
Blocks used by inserted rows
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Paralleler Direct Path Load
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+APPEND PARALLEL(F_UMSATZ,2) */
INTO DWH.F_UMSATZ NOLOGGING
SELECT * FROM OLTP.BESTELLUNGEN;
Slave
process
Slave
process
F_UMSATZ
Segment
Used block
Free space after delete
High-water mark
Temporary segments
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
„Convential“ und „Direct Path“ - Load
Instance
SGA
Shared pool
Array
insert
Extent
management
Conventional
Table
Data
save
Direct
path
High-water mark
Space used only by conventional load
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Direct Path / Convential Path
SQL Loader
External Table
Insert Append
CTAS
Convential Path
SQL Command Processing
Space Management
Get new extents
Adjust High
Water Mark
Find partial blocks
Fill partial blocks
Buffer Cache Management
- Manage queues
- Manage contention
Read Database
Blocks
Buffer
Cache
Write Database
Blocks
Database
Oracle Server
Direct
Path
Benutzer
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
51.100.000
Sätze
Beliebte Fehler – Direct Path Load
Schreiben einzelner INSERTS
mit APPEND
Create or Replace procedure ABC as
.....
Cursor pos is select .....
....
Begin
open pos;
loop
exit when pos%notfound;
.....
Insert /*+ APPEND */ into Ziel_Tabelle
select ......
......
Commit;
end loop; .....
End;
Stattdessen INSERTS mit
vielen Sätzen
Insert /*+ APPEND */ into
ziel_Tabelle
select ......
Direct Path Load nur mit
echten Mengen und nicht
bei Einzel-Inserts
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Beliebte Fehler – Direct Path Load
Batch-Lauf 1
Batch-Lauf 2
(Session 1)
(Session 2)
Insert /*+ APPEND */
into
F_UMSATZ
select ......
Insert /*+ APPEND */
into
F_UMSATZ
select ......
Tabelle
BESTELLUNG
Gegenseitiges Blockieren durch Direct Path Loads auf
In unterschiedlichen Sessions auf die gleiche Tabelle
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Das Simulations-Szenario
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
1, 6 GB, unkompr.
Name Type
------------------F0 NUMBER
F1 NUMBER
F2 NUMBER
F3 VARCHAR2(50)
F4 DATE
F5 VARCHAR2(50)
F6 VARCHAR2(50)
F7 NUMBER
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
........................................................................................................................................................
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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
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;
Laufzeit: 08:31 (Minuten : Sekunden)
Schreibvorgang
(8:12 System DWH)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Der einfache INSERT
insert into t20 select * from t10;
• INSERT in leere Tabelle
Laufzeit: 01:46 (Minuten : Sekunden)
• INSERT in gefüllte Tabelle
Laufzeit: 01:58 (Minuten : Sekunden)
• INSERT in gefüllte Tabelle (Wiederholung)
Laufzeit: 01:58 (Minuten : Sekunden)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Umschalten der DB
shutdown immediate;
startup mount
alter database archivelog;
[alter database noarchivelog;]
alter database open;
Logging / Nologging
• INSERT im Archivelog-Modus
insert into t20 select * from t10;
Laufzeit: 02:56 (Minuten : Sekunden)
(3:10 System DWH)
• INSERT mit NOLOGGING im ARCHIVE-Modus
insert /*+ NOLOGGING */ into t20 select * from t10;
Laufzeit: 01:48 (Minuten : Sekunden)
(Hint nur zu Dokuzwecken. Steuerung des NOLOGGING-Zustands über ALTER DATABASE NOARCHIVELOG.)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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 mit Driect Path Load (NOLOGGING) -> separate Sicherung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
RMAN- Backup-Verfahren:
Was wird gesichert?
Data Integration Layer
T
T
T
Keine Sicherung
Enterprise Information Layer
R
R
S
User View Layer
D
S
S
B
B
F
D
D
Keine Sicherung,
Inkremental Backup
wenn Data Marts
nur für Referenz- und
komplett neu aufgebaut
Stammdaten
Werden
große
RMAN
Bewegungsdatentabellen
besten nach Abschluss des
(Incremental)am
ETL-Laufes sichern
RMAN (Incremental)
46
D
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
R: Referenztabellen
T: Transfertabellen
S: Stammdaten
B: Bewgungsdaten
D: Dimensionen
F: Fakten
Direct Path Load
• Create Table As Select (CTAS)
Create Table t20 as select * from t10;
Laufzeit: 01:00 (Minuten : Sekunden)
• INSERT mit APPEND - Hint
insert /*+ APPEND */ into t20 select * from t10;
Laufzeit: 01:00 (Minuten : Sekunden)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Arbeiten mit Buffer-Caches
• Wiederholtes Laden ohne zuvor die Buffer-Caches zu leeren
– Der SELECT-Teil läuft schneller
1. Verarbeitung
insert /*+ APPEND */ into t20 select * from t10;
Laufzeit: 01:00 (Minuten : Sekunden)
2. Verarbeitung
insert /*+ APPEND */ into t20 select * from t10;
Laufzeit: 00:25 (Minuten : Sekunden)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Verlagern des Ladeprozesses auf SSD-Platten
• Bestimmte Arbeitstabellen des ETL-Prozesses liegen auf gesonderten SSD-Platten
– Die aktiven Partitionen großer Tabellen
– Temporäre Tabellen
Data Integration
Layer
CTAS
CTAS
T
SSD
T
SSD
T
SSD
T
SSD
User View
Layer
Enterprise Information
Layer
20% R
PEL
SSD
R
S
SSD
S
B
80%
D
D
F
B
SSD
PEL
S
SSD
PEL
SSD SSD
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D
D
A
R: Referenztabellen
T: Transfertabellen
S: Stammdaten
B: Bewgungsdaten
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;
Laufzeit: 00:10 (Minuten : Sekunden)
APPEND mit SSD
insert /*+ APPEND */ into t20 select * from t10;
Laufzeit: 00:10 (Minuten : Sekunden)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Themenübersicht
Datenbank-basierte ETL-Prozesse
• Anforderungen an den ETL-Prozess im Data Warehouse
• Speichermanagement und Grundlagentechniken
• Blöcke, Extents, Segmente, Tablespace
• Direct Path Load, Mengenbasiertes Laden
• Optimierungsszenario
• Hilfsmittel für schnelles Laden
• Prüftechniken mit SQL
• Szenario zum Prüfen von Daten
• Weitere Techniken und Tools
51
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Verfahren für schnelles ETL in der Datenbank
Data Integration
Layer
Selektieren
Statt
kopieren
Direct Path
in temporäre
Tabellen
Contraintfreies
Prüfen mit
Mengenbasiertem
SQL
User View
Layer
Enterprise Information
Layer
Partition
Exchange
&LOAD
in partit.
Tabellen
(PEL)
Unveränderte
Bewegungsdaten liegen
lassen
Große
Fakten-Tab.
über PEL.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Kennzahlen ausschließlich
über
MAVRefresh
Bekannte
Kennzahlen
in die DB
weniger
Koipien in
BI-Tools
Es gibt 6 Prüf-Kategorien
Tabellen-über
greifende Regeln
Attribut-bezogene Regeln
1.
2.
Not Null / Pflichtfelder
Formatangaben
A
3.
4.
9.
numeric
Alphanumerisch
Date
Masken
a)
b)
c)
d)
D
5.
C
Abhängigkeiten von Werten in anderen Attributen
desselben Satzes
E
Primary Key / Eindeutigkeit
Aggregat – Bedingungen
a)
b)
8.
Aggregat – Bedingungen
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
Referenz-Zusammenhänge
–
Satz-übergreifende Regeln
6.
7.
10.
11.
Ober-/Untergrenzen / Wertelisten
Satz-bezogene Regeln
B
Child-Parent (Orphan)
Parent-Child
a)
b)
a)
b)
Div. Check Constraint
Wertbereiche
–
Foreign Key
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
F
Zeit-/ Zusammenhang-bezogene Regeln
12.
13.
14.
Zeitinvariante Inhalte (z. B. Anz. Bundesländer)
Zeitabhängige Veränderungen
Über die Zeit mit anderen Daten korrelierende Feldinhalte
Verteilungs-/Mengen-bezogene Regeln
15.
Verteilung
a)
b)
Rekursive Zusammenhänge
Verweise auf andere Sätze derselben Tabelle (Relation)
Verweise auf Sätze einer anderen Tabelle (Relation)
16.
Arithmetische Mittel
Varianz / Standardabweichungen
Qualitätsmerkmale und Mengen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Mengen-basierte Prüfungen mit SQL
Attribut-bezogene Regeln
1.
2.
A
3.
4.
select
bestellnr,
Not Null / Pflichtfelder
case
Formatangaben
when -- wenn Feld BESTELLNR nicht numerisch
a)
numeric
REGEXP_LIKE(BESTELLNR, '[^[:digit:]]')
b)
Alphanumerisch
then 1
c)
Date
else 0
d)
Masken
End Num_Check_bestellnr
select
Div. Check Constraint
from bestellung;
CASE
Wertbereiche
WHEN (F1 = 3 and F2 = F3 + F4)
–
Ober-/Untergrenzen / Wertelisten
then 1
ELSE 0
end
from fx
Abhängigkeiten von Werten in anderen Attributen
Satz-bezogene Regeln
B
5.
desselben Satzes
insert /*+ APPEND */ into err_non_unique_bestellung
select bestellnr from
(select
count(bestellnr) n,
bestellnr
from bestellung
group by bestellnr)
where n > 1;
Satz-übergreifende Regeln
C
6.
7.
Primary Key / Eindeutigkeit
Aggregat – Bedingungen
a)
b)
8.
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
Rekursive Zusammenhänge
Verweise auf andere Sätze derselben Tabelle (Relation)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Umgang mit SQL und PL/SQL im DB-ETL
So nicht ...
Aber z. B. so ...
Create or replace procedure Proc_A
V1
number;
V2
number;
V3
varchar2;
V4
varchar2;
....
Cursor CS as select s1,s2 from tab_src;
Begin
open CS;
loop
fetch CS into v1,v2,...;
select f1 into v3 from tab1;
select f1 into v4 from tab2;
insert into Ziel _tab s1,s2,s3,s4
values(v1,v2,v3,v4);
end;
end;
insert into ziel
select f1, f2, f3, f4 from
(with CS as
select s1 v1,s2 v2 from tab_src
Select tab1.f1 f1 ,tab2.f2 f2, CS.s1 f3,CS.s2 f4
from tab1,tab2,CS
Where...
);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Prüfungen Kategorie A
Attribut-/Column-bezogene Regeln
1. Not Null / Pflichtfelder
2. Formatangaben
a)
b)
c)
d)
numeric
Alphanumerisch
Date
Masken
3. Div. Check Constraint
4. Wertbereiche
Ober-/Untergrenzen / Wertelisten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Prüfkonzepte
• Fachliche Prüfungen kaum möglich
• Eventuell zusätzliche Prüfungen nötig
• Einfach implementierbar
• Bessere Performance
• Nur bei aktivierten Constraints
Stage-Tabelle
+ Geprüfte Daten
Kopieren
Statistik
Routine
Date
Number
Varchar2()
Bad
File
DML
Error Log
Check
Constraints
Fehlerhafte
Sätze
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 58
Statistiken
Error Logging
• Constraints
Kunde
INSERT INTO Kunde
VALUES (......)
LOG ERRORS INTO
kunde_err('load_20040
802')
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
– Unique Key / Primary Key
– Foreign Key
– NOT NULL
– Check Constraint
Kunde_err
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
ORA_ERR_NUMBER$
ORA_ERR_MESG$
ORA_ERR_ROWID$
ORA_ERR_OPTYP$
ORA_ERR_TAG$
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 59
Testfall
Bestellung
BESTELLNR
ORTNR
KUNDENNR
DATUM
ANZAHLPOS
Bestellung_Check
BESTELLNR
ORTNR
KUNDENNR
DATUM
ANZAHLPOS
1.100.000
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$
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
UNIQUECONSTRAINT
Testfall
begin
dbms_errlog.create_error_log(
dml_table_name
err_log_table_name
);
end;
=> 'BESTELLUNG_CHECK',
=> 'BESTELLUNG_CHECK_ERRORS'
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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;
Tabelle wurde erstellt.
Abgelaufen: 00:00:00.49
2.
insert /*+ APPEND */ into bestellung_check
select B.BESTELLNR,B.ORTNR,B.KUNDENNR,B.DATUM , B.ANZAHLPOS
from bestellung B
where B.BESTELLNR not in (select bestellnr from Bestellung_non_unique);
900000 Zeilen erstellt.
Abgelaufen: 00:00:02.26
Zusammen
00:00:03.15
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Check Constraint mit Regular Expressions
CREATE TABLE Check_KUNDE (
KUNDENNR
NUMBER,
GESCHLECHT
NUMBER,
VORNAME
VARCHAR2(50),
NACHNAME
VARCHAR2(50),
ANREDE
VARCHAR2(10),
GEBDAT
DATE,
ORTNR
NUMBER,
STRASSE
VARCHAR2(50),
TELEFON
VARCHAR2(30)
);
Regel: Im Kundennamen müssen Buchstaben
vorkommen und
keine reine Zahlenkolonne
ALTER TABLE check_kunde
ADD CONSTRAINT Ch_KD_Name
CHECK(REGEXP_LIKE(NACHNAME, '[^[:digit:]]'));
INSERT INTO check_kunde (Kundennr, Geschlecht, Vorname, Nachname, Anrede, Gebdat,
Ortnr, Strasse, Telefon)
VALUES (9,1,'Klaus','123','Herr','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
63
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Beispiele
* Match 0 or more times
Modus
? Match 0 or 1 time
+ Match 1 or more times
{m} Match exactly m times
[:alnum:] Alphanumeric characters
[:alpha:] Alphabetic characters
[:blank:] Blank Space Characters
{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
[:cntrl:] Control characters (nonprinting)
[:digit:] Numeric digits
[:graph:] Any [:punct:], [:upper:], [:lower:], and [:digit:] chars
[:lower:] Lowercase alphabetic characters
[:print:] Printable characters
Zeichenklassen
[:punct:] Punctuation characters
[:space:] Space characters (nonprinting), such as carriage return, newline, vertical tab, and form feed
[:upper:] Uppercase alphabetic characters
[:xdigit:] Hexidecimal characters
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
64
Wichtiges Hilfsmittel für Einzelfeldprüfungen: CASEAnweisung
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;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
65
Hilfsfunktion:
Date_Check
create or replace function IsDate (str varchar2)
return varchar2 is inDate varchar2(40);
FUNCTION dateCheck (inputDate varchar2,
inputMask varchar2) RETURN varchar2
IS dateVar date;
BEGIN
dateVar:= to_date(inputDate,inputMask);
return 'true';
exception
when others then
return 'false';
END;
• In Verbindung mit der
CASE-Anweisung
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;
66
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Abarbeitungslogik für Einzelfeldprüfung mit CASE
Gepruefte_Daten
Temp-Tabelle
Stage-Tabelle
Kopieren
Varchar2()
Feld1
Feld2
Feld3
INSERT INTO
temp_table
SELECT
CASE ....
FROM
Stage_Table
Varchar2()
Feld1
Feld2
Feld3
Feld1_is_null
Feld1_is_numeric
Feld2_is_numeric
INSERT ALL
WHEN
Feld_1_is_null =1
into
Error_Daten
WHEN
Feld_1_is_null=0
into
Gepruefte_Daten
Date
Number
Varchar2()
Error_Daten
Date
Number
Varchar2()
• Temporäre Tabelle ist optional
– Ist wesentlich übersichtlicher
– Erlaubt Kombination von unterschiedlichen Prüfkriterien
67
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Abarbeitungslogik mit CASE
OLTP_Kunden
Bestellnr
Menge
Summe
Name
Ort
BestDatum
INSERT INTO OLTP_Kunden_tmp
SELECT Bestellnr,Menge,Summe,Name,Ort,BestDatum,
CASE WHEN (Bestellnr is NULL)
then 1 ELSE 0
END Bestellnr_isNull,
CASE WHEN (isNumeric(Menge) = 1)
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;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
OLTP_Kunden_tmp
Bestellnr
Menge
Summe
Name
Ort
BestDatum
Bestellnr_isNull
Menge_isNumeric
Summe_isNumeric
Summe_isNull
BestDatum_isDate
...
Prüfungen Kategorie B
Satz-bezogene Regeln
Satz-bezogene Regeln
5. Abhängigkeiten von Werten in anderen Attributen desselben Satzes
• Lösung: Analog zu Kategorie A über CASE
F1
3
9
F2
7
5
F3
3
1
F4
4
4
1
0
select
CASE
WHEN (F1 = 3 and F2 = F3 +
F4)
then 1
ELSE 0
end
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Prüfungen Kategorie C
Satz-übergreifende Regeln
6. Primary Key / Eindeutigkeit
7. Aggregat – Bedingungen
a)
b)
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
8. Rekursive Zusammenhänge
Verweise auf andere Sätze derselben Tabelle (Relation)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
6. Eindeutigkeit / PK
BESTELLUNG
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
BESTELLPOSITION
BESTELLNR
FK
PK
POSITIONSNR
MENGE
FK
ARTIKELNR
DEPOTSTELLE
RABATT
• Lösung: Mengenbasiertes Sammeln doppelter Sätze in Fehlertabelle
insert /*+ APPEND */ into err_non_unique_bestellung
select bestellnr from
(select
count(bestellnr) n,
bestellnr
from bestellung
group by bestellnr)
where n > 1;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
7. Aggregatbildung
•Anforderung: Wenn der Umsatz pro Artikel
unter 20% des Artikelgruppen-Gesamtwertes fällt,
dann ROT
•Lösung: Mit analytischen Funktionen:
Auf Satzebene über Informationen
von Satzgruppen verfügen
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
FK
FK
ZEIT_ID
REGION_ID FK
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME PK
SPARTE_NR
ARTIKEL_ID
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
gruppiert
select distinct
A.F_key und summiert wird.
F_Key
3
9
12
15
4
17
23
Parent
28
Parent
Member Group
_Value
_Value
0
3
3
3
0
4
4
4
0
4
6
2
0
3
8
1
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;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
12
0
0
0
15
0
0
0
Prüfungen Kategorie D
Tabellen-übergreifende Regeln
9. Foreign Key
a)
b)
Child-Parent (Orphan)
Parent-Child
10. Aggregat – Bedingungen
a)
b)
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
11. Referenz-Zusammenhänge
Verweise auf Sätze einer anderen Tabelle (Relation)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
BESTELLUNG
KUNDE
9. Foreign Keys
•Anforderung:
Zu jeder Bestellung muss es einen
Kunden geben.
•Lösung:
KUNDENNR PK
KUNDENNAME
BERUFSGRUPPE
SEGMENT
KUNDENTYP
Sub-Select in Where-Klausel.
insert /*+ APPEND */ into err_orphan_Bestellung
select bestellnr
from bestellung
where
Kundennr not in (select Kundennr from kunde);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
10. Aggregatbedingungen
Anzahl Sätze pro Einheit
BESTELLUNG
•Anforderung:
Anzahl Positionen muss
einen bestimmten Wert haben.
•Lösung:
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
Sub-Select in FROM-Klausel.
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;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
BESTELLPOSITION
FK
BESTELLNR
PK
POSITIONSNR
MENGE
FK
ARTIKELNR
DEPOTSTELLE
RABATT
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.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Die Beispiel - Quellumgebung
ARTIKEL
ARTIKEL_SPARTEN
SPARTE_NAME
SPARTE_NR
PK
ARTIKEL_GRUPPEN
GRUPPE_NR
PK
GRUPPE_NAME
FK
SPARTE_NR
BESTELLUNG
KUNDE
PK
KUNDENNR
KUNDENNAME
BERUFSGRUPPE
SEGMENT
KUNDENTYP
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
ARTIKEL_NAME
PK
ARTIKEL_ID
FK
GRUPPE_NR
PREIS
BESTELLPOSITION
BESTELLNR
FK
PK
POSITIONSNR
MENGE
FK
ARTIKELNR
DEPOTSTELLE
RABATT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 78
Beispielprüfungen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Beispielprüfungen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
1. Schritt: Prüfungen von
Tabellen-übergreifenden Beziehungen
ARTIKEL
ARTIKEL_SPARTEN
SPARTE_NAME
SPARTE_NR
PK
ARTIKEL_GRUPPEN
GRUPPE_NR
PK
GRUPPE_NAME
FK
SPARTE_NR
ARTIKEL_NAME
PK
ARTIKEL_ID
FK
GRUPPE_NR
PREIS
18
KUNDE
6
PK
KUNDENNR
KUNDENNAME
BERUFSGRUPPE
SEGMENT
KUNDENTYP
BESTELLUNG
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
2
13
BESTELLPOSITION
BESTELLNR
FK
PK
POSITIONSNR
MENGE
FK
ARTIKELNR
DEPOTSTELLE
RABATT
21
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 81
2. Schritt: Prüfungen und Berechnungen von
Satz-übergreifenden Abhängigkeiten
ARTIKEL
ARTIKEL_GRUPPEN
GRUPPE_NR
PK
GRUPPE_NAME
FK
SPARTE_NR
ARTIKEL_SPARTEN
SPARTE_NAME
SPARTE_NR
PK
ARTIKEL_NAME
PK
ARTIKEL_ID
FK
GRUPPE_NR
PREIS
18
KUNDE
BESTELLUNG
6
PK
KUNDENNR
KUNDENNAME
BERUFSGRUPPE
SEGMENT
KUNDENTYP
4
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
2
13 9
BESTELLPOSITION
BESTELLNR
FK
PK
POSITIONSNR
MENGE
FK
ARTIKELNR
DEPOTSTELLE
RABATT
21
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
82
14
10
1
13
3. Schritt: Feldprüfungen
ARTIKEL
GRUPPE_NR
PK
GRUPPE_NAME
FK
SPARTE_NR
ARTIKEL_SPARTEN
SPARTE_NAME
SPARTE_NR
ARTIKEL_NAME
PK
ARTIKEL_ID
FK
GRUPPE_NR
PREIS
ARTIKEL_GRUPPEN
PK
18
KUNDE
6
PK
KUNDENNR
KUNDENNAME
BERUFSGRUPPE
SEGMENT
KUNDENTYP
5
4
21
2
BESTELLUNG
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
6
ANZAHLPOS
8
BESTELLPOSITION
11
13 9
12
BESTELLNR
FK
PK
POSITIONSNR
15 16
MENGE
FK 18
ARTIKELNR
DEPOTSTELLE
19
RABATT 20
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 83
14
17
10
1
13
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Anordnung und Gruppierung der Ladeschritte des
Beispiel-Szenarios
KUNDE
err_anz_pos_Bestellposition
err_orphan_Bestellung
err_AVG_Pos_Wert
err_childless_Bestellung
err_orphan_PositionArtikel
BESTELLUNG
err_seq_pos_Bestellposition
BEST_POS
BESTELLPOSITION
Tmp_ BEST_POS
Tmp2_ BEST_POS
err_non_unique_bestellung
err_kd_Rabatt_ok
err_orphan_Position
err_Wert_Menge
Hauptdatenfluss
Beziehungsprüfungen
Hauptdatenfluss
Hauptdatenfluss
err_maske_depotstelle
ARTIKEL
err_not_null_Menge
err_not_Rabatt_Wert
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Auflistung der Laufzeiten für die einzelnen
Prüfungen (unterschiedliche Massnamen)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Themenübersicht
Datenbank-basierte ETL-Prozesse
• Anforderungen an den ETL-Prozess im Data Warehouse
• Speichermanagement und Grundlagentechniken
• Blöcke, Extents, Segmente, Tablespace
• Direct Path Load, Mengenbasiertes Laden
• Optimierungsszenario
• Hilfsmittel für schnelles Laden
• Prüftechniken mit SQL
• Szenario zum Prüfen von Daten
• Weitere Techniken und Tools
91
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Verfahren für schnelles ETL in der Datenbank
Data Integration
Layer
Selektieren
Statt
kopieren
Direct Path
in temporäre
Tabellen
Constraintfreies
Prüfen mit
Mengenbasiertem
SQL
User View
Layer
Enterprise Information
Layer
Partition
Exchange
&LOAD
in partit.
Tabellen
(PEL)
Unveränderte
Bewegungsdaten liegen
lassen
Große
Fakten-Tab.
über PEL.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Kennzahlen ausschließlich
über
MAVRefresh
Bekannte
Kennzahlen
in die DB
weniger
Kopien in
BI-Tools
Partition Exchange Loading (PEL)
Financial
Production
Human Res.
Store
Supplier
Marketing
Service
Temporäre
Tabelle
P1
P2
P3
P4
Z1
Z2
Z3
Z4
Neuer Monat
4
4
9
8
Zeit
Monat 13
Parallel Direct Path INSERT
(Set Based)
CREATE TABLE AS SELECT
(CTAS)
CREATE Indizes / Statistiken anlegen
EXCHANGE Tabelle
Monat 12
Monat 11
Monat 10
DROP
PARTITION
Region
Faktentabelle
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
93
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 /*+ APPEND */ 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;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
94
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Exchange Partition
Data Integration
Layer
Enterprise Information
Layer
Älteste
Checks
CTAS
Tmp_table
Direct Path
Archivieren
(drop partition)
Mai
Juni
Juli
August
September
Oktober
November
Alter table
add partition
Alter table exchange partition
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
User View
Layer
Aufbau Fakten-Tabellen
Data Integration
Layer
Archivieren
(drop partition)
Älteste
Checks
CTAS
Tmp_table
Direct Path
User View
Layer
Enterprise Information
Layer
Fact-Table
Juni
Juli
August
September
Mai
Juni
Juli
August
September
Oktober
November
Tmp_table
Oktober
November
CTAS
Tmp_table
Alter table
exchange partition
Alter table exchange partition
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Beispiele für Lösungen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Klassische PL/SQL Cursor – Verarbeitung
(Negativ – Beispiel)
Für alle
Bewegeungssätze z. B.
300.000)
8,3 Std*
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)
cursor
t_Quelle_Stage_1 (z. B. 100000)
cursor
t_Quelle_Stage_2 (z. B. 5000)
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Insert
Faktentabelle
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
300.000
Outer
Join
Temp Table
Fakt Table
Cursor
loop
t_Ref_6
t_Ref_7
Satzweise
Prüfung
t_Ref_8
t_Ref_9
Protokoll
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Aufgabenstellung:
Lookup-Argumente über Funktionen gewinnen
• Mehrstufige Verarbeitung
1.
2.
Über Funktionen Argumente gewinnen
Argumente in Lookup-Aufrufe einbauen
• WITH-Verarbeitung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
L.V_ProdukT_id
= P.produkt_id)
Beschreiben einer Master/Detail - Beziehung
• Ziel: Die Sätze in der Detail-Tabelle müssen immer einen Parent-Satz haben
• Lösung:
– Multiple Insert: Die Information aus einer Quelle steht immer zum Beschreiben von Parentund Child-Tabelle zur Verfügung.
– Beide sind synchronisierbar
BESTELLUNG
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
BESTELLPOSITION
BESTELLNR
FK
PK
POSITIONSNR
MENGE
FK
ARTIKELNR
DEPOTSTELLE
RABATT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Multiple Inserts verarbeiten / pauschal
INSERT ALL
WHEN 1=1‚
THEN INTO BESTELLUNG
(KUNDENCODE,BESTELL_TOTAL,STATUS)
VALUES
(KUNDENCODE,BESTELL_TOTAL,STATUS)
WHEN 1=1,
THEN INTO BESTELLPOSITION
(BESTELLMENGE,BESTELL_TOTAL,PRODUKT_NR)
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 ;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
104
Multiple Inserts verarbeiten / selektiert
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*/);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
105
Deltadaten Extrahieren
OLTP
DWH
1
Table
Änderungsdatum
Table
2
Table
Trigger
Table
Queue
3
Table
Deltabildung
über MINUS
Table
4
LogFile
Logminer
Table
Queue
5
LogFile
Streams
Queue
Table
6
LogFile
Golden Gate
Queue
Table
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
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)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
107
Einlesetechniken Vorsysteme
EBCDIC
ASCII
Database Link
Transportable TS
Datapump
Oracle
ODBC
JDBC
Gateway
Non
Oracle
AP I
Applikation
z. B.
SAP R/3
SQL-Loader
External Table
API CALL
Direct Save
SQL
SQL
BS Copy
BS Copy
SQL
SQL
SQL
SQL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Oracle
DWH
Die Quellen
 Nur die Daten laden, die gebraucht
Selektieren
statt
kopieren
werden
 Keine 1:1 Kopien in die
Integrations-Schicht
 Nach Möglichkeit vor Eintritt in die
Datenbank Prüfungen durchführen
 Bereits geprüfte Daten nicht mehr
prüfen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Nicht so ....sondern
Data Integration
Layer
Data Integration
Layer
1:1
T
1:1
1:1
1:1
CTAS
T
T
T
T
T
Warum?
Logik so früh wie möglich
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Techniken für Data Marts / User View Layer
Viele verstecke Aufwende
Verlagerung von IT in die
Fachabteilungen
Redundanzen
Ursache vieler nicht
abgestimmter Kennzahlen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Minimales Bewegen
Große unveränderte Tabellen
liegen lassen
Enterprise Information
Layer
D
Zugriff auf beide Schichten
Security mit Bordmittel anstatt
durch Kopieren lösen
User View
Layer
F
B
B
D
PEL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D
D
Kennzahlen
Kennzahlen nur als
Materialized Views
User View Layer
Automatisches Refresh anstatt
ETL
Standardisierte und stimmige
Kennzahlen
Wiederverwenden von bereits
aggregierten Daten
L1
L2
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
L3
L4
Der Weg in die BI-Tools
User View Layer
Millionen von Sätzen
So viel wie möglich in der DB
vorbereiten
Verhindert unnötiges Kopieren
Keine Verlagerung von
Pseudo-ETL in die BI-Tools
Standardisierte Kennzahlen
User View Layer
Oder so
WenigeSätze
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
BI-Tool Server + Caches
So
Weitere Einflussfaktoren und Techniken
• Parallelisierung -> abhängig von Hardware
-> direktes Steuern über Hints
• Aktuelle Statistiken
-> Source Tabellen
-> auch während des ETL-Laufes
• Ausnutzen des
Cache-Effektes
-> Organisieren der Abarbeitungsreihenfolge
-> Eventuell Query-Result-Cache nutzen
• Vermeiden von großen
Join-Tabellen
-> eventuell kleine Join-Tabelle
mit wenigen Spalten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Weitere Einflussfaktoren und Techniken
• Schnelle mengen-basierte Prüfungen kommen zuerst,
teuere Prüfungen (Feld-Prüfungen) zuletzt durchführen
• Möglichst viel Hauptspeicher für Join-Operationen
mit großen Tabellen
• Sort-Area-Size hoch setzen
• Blocksize auf 16 bzw. 32 K
• PCTfree auf Null setzen
• Partition Change Tracking (PCT) für inkrementelles
Refresh der MAVs
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Keine unnötige Daten-Transporte ...
Vorsystem mit
Vorrechner
Vorsystem
Data
Integration
Layer
Enterprise
Information
Layer
1:1
User View
Layer
1:1
1:1
1:1
1:1
Externe ETL-Server
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
User View
Layer
User View
Layer
... sondern kurze Wege
Vorsystem
Data Integration Layer
Freie
Wahlmöglichkeit
für Ort und Art des ETL
Enterprise Information Layer
User View Layer
Process neutral / 3 NF
Ein-Datenbank-Server
Externe ETL-Server
(Hauptsächlich zu Dokumentationszwecken)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Zusammenfassung der wichtigsten Techniken
Eine zusammenhängende Datenbank
Data Integration
Layer
CTAS
T
CTAS
T
T
T
Enterprise Information
Layer
20% R R S S S
PEL
B
B
PEL
User View
Layer
D
D
F
D
D
PEL
Vorgelagerte
Prüfungen
SQL-Mengenbasierte
Prüfungen
Vorbereitete
temporäre
Tabellen
Konzentration aller Prüfungen
CTAS : Create Table As Select
Partition
Exchange
Partitionierte
Tabellen
A
80%
Partition
Exchange
Aggregatbildung
durch Materialized
Views
Denormalisierung (Joins)
und Aggregate
PEL : Partition
Exchange and Load
119
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
R: Referenztabellen
T: Transfertabellen
S: Stammdaten
B: Bewgungsdaten
D: Dimensionen
F: Fakten
A: Aggregate
Prüfungen
Zusammenfassung der Techniken bezogen auf das
Schichten-Modell
Data Integration
Layer
CTAS
CTAS
T
T
T
T
User View
Layer
Enterprise Information
Layer
20% R
R
PEL
S
S
S
D
F
B
B
PEL
D
PEL
D
D
PCT
A
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Kennzahlensysteme mit
Materialized Views
Fast Refresh mit
Partition Change
Tracking (PCT)
R: Referenztabellen
T: Transfertabellen
S: Stammdaten
B: Bewgungsdaten
D: Dimensionen
F: Fakten
A: Aggregate
Partitionierte
Tabellen
Prüfungen
Lade-Transaktionssteuerung innerhalb der
Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
121
122
Aufgabenstellung der Lade-Transaktion
• Betrachten des kompletten Ladelaufs als eine zusammenhängende
Transaktion
– Entweder alle Sätze oder keine geladen
• Wie können abgebrochene Ladeläufe wieder rückgängig gemacht
werden?
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
123
Transaktionssteuerung / -rücksetzung
• Markieren von Sätzen eines Ladelaufs in zusätzlichen Feldern
3
– Ladelauf-Nummer, Ladelauf-Datum, ...
– Zurückrollen durch langsames Einzel-DELETE
• Arbeiten mit Partitioning
– Aufbau einer neuen Partition unabhängig von der Zieltabelle
– Schnelles DROP PARTITION im Fehlerfall
– Einfachste und schnellste Variante
2
• Flashback Database / Table / Query
– Transaktions-genaues Zurückrollen
– Flashback DB benötigt zusätzlichen Plattenplatz
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
1
Flashback
• Steuerung über
– SCN ( Sequence Change Number / Log Archiving)
– Zeit (Timestamp)
– Restore Point
ETL / ODI
Flashback Recovery Area
Zeit
Log
SCN
Restore Point
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
124
Flashback Technologie
in der Datenbank
• Flashback Table
• Flashback Drop
• Flashback Query
• Flashback Versions Query
• Flashback Transaction Query
• Flashback Database
• Flashback Data Archive
Flashback table x to scn 16552768;
SELECT * FROM employees AS OF TIMESTAMP
TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'Chung';
SELECT versions_startscn, versions_starttime,
versions_endscn, versions_endtime,
versions_xid, versions_operation,
last_name, salary
FROM employees
VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS') WHERE
first_name = 'John';
SELECT xid, operation, start_scn,
commit_scn, logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = HEXTORAW('000200030000002D');
Flashback Database to scn 16552768;
Flashback Database AS OF TIMESTAMP
TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Flashback Database
• Flashback Database
–
–
–
–
–
Erstellen der Fast (Flash) Recovery Area
Restart Database ( mount exclusive, wenn DB <11.2)
SQL> ALTER DATASE FLASHBACK ON;
SQL> ALTER SYSTEM SET db_flashback_retention_target = <number_of_minutes>;
SQL> ALTER DATABASE OPEN;
• Restore Points (ab 11.2 im laufenden Betrieb)
– create restore point PRE_LOAD;
– create restore point PRE_LOAD guarantee flashback database;
(impliziert das Anlegen von Flashback Logs)
– drop restore point PRE_LOAD;
• Anwendung eines Restores nur im DB Mount-Status
– flashback database to restore point PRE_LOAD;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Monitoring in der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
127
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
128
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Restricted
129
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
130
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Restricted
131
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Restricted
132
Herunterladen