SELECT * FROM - DWH Community

Werbung
Oracle Data Warehouse Technik im Fokus
Praxis-Seminar, Mai 2015
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Die Themen
Data Warehouse – Architekturen
für effiziente Informationsverarbeitung
Partitionierung
Schlüssel und Indizierung im Data Warehouse
Partitionierung und Indizierung im Data Warehouse
Star Query Transformation
Komprimierung im Data Warehouse
Query-Optimizer und System-Statistiken im Data Warehouse
Speicher-Hierarchie – Beispiel Flash
Automatische Verwaltung von Daten im
Data Warehouse (Heat Map)
Information Lifecycle Management
Parallelisierung
Query Result Cache
Materialized Views und Kennzahlenkonzepte
Automatische Aktualisierung von Materialized Views
Konzepte rund um Materialized Views
Automatisches “Query Rewrite”
Materialized Views und Hierarchisierung von Dimensionen
Hilfsmittel bei der Verwaltung von Materialized Views
Analytische SQL-Funktionen
In-Memory Database im Data Warehouse
Wo und wie macht In-Memory im Data Warehouse Sinn und was ändert sich?
Laden und Updaten im Data Warehouse mit Bordmitteln der Datenbank
ETL-Performance-Techniken in der Datenbank
Set-Based ETL-Prüf- und –Transformations Techniken in der Datenbank
Umgang mit Schlüssel im Verlauf des Ladens
Lade-Transaktionssteuerung innerhalb der Datenbank
Lade-Tools ausserhalb der Datenbank
Security und Mandantensteuerung im Data Warehouse
Multi-strukturierte Daten mit JSON
Big Data Analysen im Data Warehouse mit Big Data SQL
R als universelles Analyse-Mittel
Notwendige Dinge, die niemand macht:
Metadatenverwaltung im Data Warehouse
Die optimale Hardware für das Data Warehouse
Cluster-Einsatz
Monitoring Data Warehouse
Zusammenfassung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
2
Data Warehouse – Architekturen
für effiziente Informationsverarbeitung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Immer wieder auf den Punkt bringen!
Ein unternehmensweites DWH muss mehr leisten:
1
Zentral und
Unternehmensweit
Zusammenführen von Daten aus allen Geschäftsprozessen
Ermöglichen einer integrierten Sicht auf das ganze
Unternehmen und nicht nur einzelner Abteilungen
Integration bedeutet die Harmonisierung verschiedner
Sichten
3
Historisierung
 Aufgrund der Vergangenheit Trends der Zukunft erkennen
 Nur wer die Geschichte kennt, kann die Zukunft verstehen
 Nicht nur aktuelle Realtime- sondern vor allem historische
Daten sind dafür nötig
2
Erklärende Mehrwerte
 Für alle, auch sachfremde Mitarbeiter verständliche Daten
 Zusätzliche Referenzdaten von außerhalb des Unternehmens
 Erklärungen statt Codes
4
Entkopplung von
op. Systemen
 Nur in separierten Systemen
 simulieren
 Neue Daten-Kombinationen schaffen
 Realtime-freie zeitbezogene Messpunkte schaffen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Evolution des Data Warehouse
DWH-Systeme werden zunehmend auch in einem operativen Sinn genutzt
Hochvolumig / granular
Überschaubar / aggregiert
Operativ
überschaubar
Taktisch
DWH
Strategisch
Jahr/Quartal/Monat
Woche/Tag
Komplexe InformationsAusarbeitung und Analysen
Periodische Berichte
Stunde/Minute/Sekunde/Realtime
oft und schnell
wiederholbare Einzel-informationen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
5
Was geschieht in einem Data Warehouse wirklich
Service
Servicekunde
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
Referenzdaten (extern) (10%)
Stammdaten (10%)
Bewegungsdaten / Transaktionen (80%)
Logistik
Logistikaufwand
Controlling
Marketingsicht
Sozialsituation
Kundenhistorie
Profitabilität
Profitabilität
Einkauf
Kunde
Produkte&Trends
Vertrieb
Kundenhistorie
Marketing
Marketingsicht
Logistikaufwand
für einen Kunden
Produkte&Trends
User View
Layer
GeschäftsObjekte
Kennzahlen
Es geht um
Gesamtsichten
Top 5 Geschäftsfelder
Profitabilität eines Kunden
Multidimensionale
Sichten
Profitabilität eines Produktes
über den gesamten
Lebenszyklus
Themenbezogene
Sichten
Bedarfsprognose von sozialen
Gruppen
Servicekunde
Top 100
unternehmensweite
Kennzahlen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Aktualität und Entwicklung
des eigenen Portfolios
Eigene Marktstärke im
Vergleich zu den
Wettbewerbern
DATA WAREHOUSE
Informationsbeschaffung organisieren
• Integration Layer (Stage)
– Zusammenführen von Daten aus unterschiedlichen Vorsystemen
– Prüfen, harmonisieren, brauchbar machen
• Enterprise Layer (DWH-Kernschicht)
– Zentrale Ablage aller Informationen des Data Warehouse
– Prozess- /Referenz, Stammdaten
– Langlebig, strategisch
• User View Layer (Data Marts)
– Nach Sachgebieten sortierte analysefähiger Ausschnitt von Daten der
Kernschicht
– Endbenutzerverständlich
– Analysezeitraum- und Projekt-bezogen, taktisch
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Die 3-Schichten-Architektur
Schlagwörter:
• Stabilität
Das Ziel der 3-Schichten-Architektur ist der
Entwurf einer möglichst umfassenden,
mehrere Unternehmens- und Themenbereiche
abdeckenden stabilen Informationsablage, die
in kurzer Zeit konsolidierte Berichte und
Analysen für alle (!) Zielgruppen des
Unternehmens bereitstellt.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
• Kurze Lieferzeit
• Konsolidiert
• Alle Zielgruppen
DATA WAREHOUSE
Normalisieren / Denormalisieren
Grundprinzip der Warehouse-Modellierung / Granularisierung als Lösung
Operative
Daten
PRODUKTDATEN
PD4711
AMKLB
9987865234
7769
0000000
KLABAUTER
IIO
???
EERWEERW
883466
888750000
888000
EU-Wert
735328567353654
i8886345
7746
Müll, Altlast,
unverständliche
Daten
Neu sortierte
Daten
Normalisierte
Daten (DWH)
Produktsparten
Spartenname
Produktdaten
Spartennr
Produktname
Produktgruppen
Produktenr
Gruppenname
Einzelpreis
Gruppennr
Gruppenname
Gruppennr
Produkte
Spartenname
Produktname
Spartennr
Produktenr
Einzelpreis
Granulare Daten
Im DWH
Verständliche
Information
(denormalisiert)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
9
Ein vollständiges Bild über relevante Geschäftsobjekte
Service
Integration
Layer
Servicekunde
Enterprise Layer
Core - DWH / Info Pool
Referenzdaten (extern) (10%)
Stammdaten (10%)
Bewegungsdaten / Transaktionen (80%)
Logistik
Logistikaufwand
Marketingsicht
Sozialsituation
Kundenhistorie
Profitabilität
Controlling
Profitabilität
Einkauf
Produkte&Trends
Kunde
Vertrieb
Kundenhistorie
Marketing
Marketingsicht
Log Files
Web-Clicks
Mails
Call-Center
Verträge
Berichte
HDFS / NoSQL
Logistikaufwand
für einen Kunden
Produkte&Trends
User View
Layer
GeschäftsObjekte
Kennzahlen
Top 5 Geschäftsfelder
Profitabilität eines Kunden
Multidimensionale
Sichten
Profitabilität eines Produktes
über den gesamten
Lebenszyklus
Themenbezogene
Sichten
Bedarfsprognose von sozialen
Gruppen
Servicekunde
Multi-strukturierte Daten
Es geht um
Gesamtsichten
Top 100
unternehmensweite
Kennzahlen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Aktualität und Entwicklung
des eigenen Portfolios
Eigene Marktstärke im
Vergleich zu den
Wettbewerbern
DATA WAREHOUSE
Flexibilität und schnelles Bereitstellen
Service
Integration
Layer
Servicekunde
B
B
T
Einkauf
B
Kundenhistorie
Log Files
Web-Clicks
Mails
Call-Center
Verträge
Berichte
HDFS / NoSQL
Logistikaufwand
für einen Kunden
Produkte&Trends
D
D
F
D
F
D
D
Kunde
Vertrieb
D
F
D
B
Produkte&Trends
D
Marketingsicht
Sozialsituation
Kundenhistorie
Profitabilität
T
Profitabilität
B
User View
Layer
Servicekunde
GeschäftsObjekte
Multi-strukturierte Daten
Kennzahlen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Zusammenhängender
Abfragebereich
Controlling
R S S S
B
T
Logistikaufwand
Marketingsicht
Core - DWH / Info Pool
R
Logistik
Marketing
Enterprise Layer
Es geht um
Gesamtsichten
„Breite“ der
Datenmodelle
DATA WAREHOUSE
Flexibilität und schnelles Bereitstellen
Service
Integration
Layer
Servicekunde
Controlling
T
Profitabilität
T
Einkauf
B
Produkte&Trends
Vertrieb
R S S S
B
T
Logistikaufwand
B
D
B
Strategische
Daten
Rolle der zentralen
Schicht
D
D
• Sich aus
Informationsvorat bedienen
F
D
• Schneller
reagieren können
F
D
• Synchronisierung
von „User Views“
F
D
D
D
Taktische
Daten
Log Files
Web-Clicks
Mails
Call-Center
Verträge
Berichte
HDFS / NoSQL
User View
Layer
B
B
Kundenhistorie
Marketingsicht
Core - DWH / Info Pool
R
Logistik
Marketing
Enterprise Layer
Multi-strukturierte Daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
• Vermeiden von
Redundanzen
• Historische Sicht
DATA WAREHOUSE
Die Rolle multidimensionaler Sichten
Buchhaltung: Es fehlen Daten
Warum sind die Spediteursrechnungen so hoch?
Sind alle Bestellungen korrekt bezahlt worden?
Wie hoch sind die Versandkosten pro Lieferung?
Was wurde storniert?
Controlling:
Vergleichbarkeit fehlt
Marketing: Absatzzahlen
sind nicht aussagefähig
Wie viele Kunden gibt es?
Lohnt die Kundenkarte?
Welche Segmentierung gibt es?
Vertrieb: wünscht leichtere
Auswertungen
Was sind wichtige Produkte?
Was sind rentable Sparten?
Hat sich der Servicebereich
gelohnt?
SERVICE GmbH
Vertrieb
Marketing
Management
Buchhaltung
Was sind rentable Sparten?
Wie rentabel sind einzelne
Produkte?
Was kosten Produkte im
Einkauf?
 Wie teuer wurden Produkte
verkauft?
Management:
Kennzahlen fehlen
 Wie hoch sind die
liquiden Mittel?
 Wie hoch sind die
Außenstände?
Controlling
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
13
Die Rolle multidimensionaler Sichten
Buchhaltung: Es fehlen Daten
Warum sind die Spediteursrechnungen so hoch?
Sind alle Bestellungen korrekt bezahlt worden?
Wie hoch sind die Versandkosten pro Lieferung?
Was wurde storniert?
Kunden
Kundenkarte
Segmentierung
Umsatz /
Nicht-Umsatz
Marketing: Absatzzahlen
sind nicht aussagefähig
Vertrieb: wünscht leichtere
Auswertungen
Was sind wichtige Produkte?
Was sind rentable Sparten?
Hat sich der Servicebereich
gelohnt?
Unternehmensbereiche
SERVICE GmbH
Vertrieb
Marketing
Management
Bestellung
Controlling:
Vergleichbarkeit fehlt
Wie viele Kunden gibt es?
Lohnt die Kundenkarte?
Welche Segmentierung gibt es?
Produkte
Sparten
Lieferung
Buchhaltung
Sparten
Was sind rentable Sparten?
Wie rentabel sind einzelne
Produkte?
Produkte
Was kosten Produkte im
Einkauf?
Einkauf/
 Wie teuer wurden Produkte
verkauft?
Verkauf
Management:
Kennzahlen fehlen
 Wie hoch sind die
liquiden Mittel?
 Wie hoch sind die
Außenstände?
Geldflüsse
Gebundene Werte
Controlling
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
14
Referenzdaten
Stammdaten
Wohnkategorien
Wohnart_ID
Wohnart
Lieferanten
Lieferanten_Art
Bildung und
Berufe
Lieferant
Produktart_ID
Berufs_GRP
Produktart
Kundenstamm
Kunderart
Eink_GRP_ID
KD_Karten_ID
Einkomm_GRP
PrivatKD_Art
Skonto_Proz
Gr_Haushalt
Land
Fam_Stand
Kreis
Geb_Dat
Ort
Kanal_ID
Internet,
Baumarkt,
Partner,
Kette ....
Produktarten
Berufs_GRP_ID
Regionen
Kanal
Lieferant_ID
Bildungs_GRP
Einkommenskategorien
Vertriebskanäle
Vermittlung,
Handelsware
Geschäftssegmente
Segement_ID
Segment
Dienstleistungen
Vermittl_Art_ID
Vermittl_Art
Finanzleistung
Handwerksleistung
IT-Ware,
Baumarktware
Produkte
Pref_Liefer_ID
Produktgruppen
Name
Produktgrp_ID
Kunden_ID
Produktgruppe
Computer,
Haushaltsware,
KFT...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
VK_Preis
Produkt
Produkt_ID
DATA WAREHOUSE
15
D_Kunden
Alle_Kunden
Land
D_Zeit
Kreis
Alle_Zeiten
Ort
Jahr
Kunderart
Quartal
Wohnart_ID
Monat
Wohnart
Monats_i_Jahr
KD_Karten_ID
Tag_i_Jahr
PrivatKD_Art
Tages_ID
F_Einkaeufe
D_Lieferanten
Mitarbeiter_ID
Alle_Lieferant
Produkt_ID
Land
Lieferanten_ID
Kreis
D_Produkt
EK_Preis
Ort
Alle_Produkte
Menge
Lieferanten_Art
Kanal
Lieferzeit_ID
Lieferant
Zeit_ID
Lieferant_ID
Y
Berufs_GRP_ID
Segment
Beruf&
Bildung
Merkmal
Familie
Geb_Dat
Einkomm_GRP
Segement_ID
F_Verkaeufe
Vermittl_Art_ID
Vermittl_Art
Produkt_ID
Produktgrp_ID
Menge
Segmentierung
nach Einkommen
VK_Wert
Discout_Proz
Name
Kunden_ID
Kunden_ID
Filial_ID
Vermittlung,
Handelsware
IT-Ware,
Baumarktware
Segment
Zeiit_Id
Positions_ID
Fam_Stand
Eink_GRP_ID
Produktart_ID
Kauf_ID
Berufs_GRP
Gr_Haushalt
Kanal_ID
Produktart
Skonto_Proz
Bildungs_GRP
Internet, Baumarkt,
Partner, Kette ....
Sicht auf
- Geschäftsobjekte
- Sicht auf Kennzahlen
- Drillpfade
- Synchronisierungselemente
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Finanzleistung
Handwerksleistung
Computer,
Haushaltsware, KFT...
Produktgruppe
Pref_Liefer_ID
VK_Preis
Produkt
Produkt_ID
DATA WAREHOUSE
16
Multidimensionales Modell (Star Schema)
Status
V1
V2
V3
V4
Einstiegspunkte
für Anwender-Abfragen
Artikel
A1
A2
A3
A4
Art1
Art2
Art3
Art4
Star Schema
• Flexibel
• Graphisch auch für
Business-User
verständlich
17
Verkäufe
Farbe
Blau
Gelb
Rot
Lila
Maier
Müller
Schmid
Engel
1:n
A1
A2
A3
A4
R1
R2
R3
R4
R1
R2
R3
R4
Nord
Sued
West
Ost
Z1
Z2
Z3
Z4
P
F
P
F
1
:
n
V1
V2
V3
V4
Kunde
4
4
9
8
Zeit
n:1
n
:
1
Schwach
Mittel
Hoch
Schwach
Wohndichte
Z1
Z2
Z3
Z4
6.7.09
7.7.09
8.7.09
9.7.09
Q3
Q3
Q3
Q3
Regionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Multidimensionales Modell (Star Schema)
Status
V1
V2
V3
V4
A1
A2
A3
A4
Dimensionen
Star Schema
• Flexibel
• Graphisch auch für
Business-User
verständlich
18
(Kontext)
Verkäufe
Farbe
Art1
Blau
Art2
Gelb
Art3
Rot
(Kontext)
Art4
Lila
P
F
P
F
Dimensionen
Einstiegspunkte
für Anwender-Abfragen
Artikel
Maier
Müller
Schmid
Engel
1:n
1
:
n
Kennzahlen
4
A1 R1 Z1 V1
4
A2 R2 Z2 V2
9
A3 (Numerische
R3 Z3 V3
8
A4 Messungen)
R4 Z4 V4
R1
R2
R3
R4
Kunde
Zeit
n:1
n
:
1
Schwach
Nord
Mittel
Sued
Hoch
West
(Kontext)
Schwach
Ost
Z1
Z2
Z3
Z4
6.7.09
Q3
7.7.09
Q3
8.7.09
Q3
9.7.09
(Kontext)
Q3
Dimensionen
Dimensionen
Wohndichte
Regionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Levelschlüssel
Dim_Artikel
Artikelsparte_Langname
Artikelsparte
Sparte
Artikelgruppe_Langtext
Levelschlüssel
Künstlicher
Dimension Key
Aggregation
Parent
Aggregation
Artikelgruppe
Artikel_Langtext
Artikel
Artikel_Schlüssel
Dim_Schlüssel
Fakten (Umsatz)
19
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Konsolidierungslevel
Levelschlüssel/
Objektname
Business Key
Parent
Betrachtungslevel
Hierarchie
Dimensionen
DATA WAREHOUSE
Unbalanced
Hierarchy
Star Schema-Design - Modellierungstechniken
Produkt
Lieferanten
Zeit
Factless Fact
Teile
Parent
Teil von
Benutzte
Teile
Count
Produkte
Sparte
Gruppe
Produkt
Region
Fakt
Gelieferte
Teile
Bestellkosten
Lieferant
Ort
Kreis
Land
Region
Verkauf
Fakten
Conformed
Dimension
Lieferant
Intersection- Table
(Degenerated Fact)
Verkäufer
Verkaufsanteil
Kunde
Segment
Alter
Bildung
Verkäufer
1:1
KD_CRM
Anschrift
Kontakt
Ja-Umsatz
Fakt Umsatz
pro
Verkäufer
Bonusgruppe
Bonusprogramm
Degenerated
Dimension
Ausgelagerte
Dimension
Zeit
Conformed
Dimension
20
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Varianten von Analyseprozessen
1. Kennzahlen-gesteuertes Event-Processing
2. Klassisches Standard-Berichtswesen
x
Operativer Prozess
DWH
3. Interaktives Ad-Hoc-Analysen
4. Analyse-Cycle
Problem
Definition
Data
Preparation
Model
Building
Deployment
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Anforderungen aus den Analyseprozessen
Modell
form
Nähe zu
Operativen
Prozessen
1. Kennzahlen-gesteuertes
Event-Processing
Keine
Vorgaben
eng
Sekunden
2. Klassisches
Standard-Berichtswesen
Keine
Vorgaben
weit
Bis zu
24 Std.
3. Interaktives
Ad-Hoc-Analysen
multidimensional
weit
Bis zu
24 Std.
Flach,
maschinen-lesbar
Sehr weit
4. Analyse-Cycle
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Dauer der
AnalysePhase
Wochen
bis zu
mehreren
Jahren
DATA WAREHOUSE
22
Anforderungen aus den Analyseprozessen + Technologie
Modell
form
Nähe zu
Operativen
Prozessen
Dauer der
AnalysePhase
1. Kennzahlen-gesteuertes
Event-Processing
Keine
Vorgaben
eng
Sekunden
2. Klassisches
Standard-Berichtswesen
Keine
Vorgaben
weit
Bis zu
24 Std.
3. Interaktives
Ad-Hoc-Analysen
Multidimensional
weit
Bis zu
24 Std.
Sehr weit
4. Analyse-Cycle
Flach,
maschinenlesbar
Wochen
bis zu
mehreren
Jahren
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Technologie
Materialized Views
als vorbereitete Profile
(event. noSQL)
Materialized Views in Verbindung
mit ETL
Star Schema -> In-Memory / event. Views
Flexibilität für interaktive Analysen ,
Alle ausgewählten Felder sind schnell
analog OLAP - Würfel
Mining Tabellen -> In-Memory
Die Mining-tabellen werden für den jeweiligen
Analyse-Prozess einzeln und gezielt In-Memory
geladen
DATA WAREHOUSE
23
Allgemeine Regeln für das
Star Schema
• Star Schema einfach halten
• Überfrachtete Dimensionen
aufspalten
– Für Endbenutzer überschaubarer
– Nicht mit zu vielen Dimensionsattributen überfrachten
– Bei sehr oft genutzten Selektionskriterien
• Code-Attribute vermeiden
– Attribute mit beschreibenden Inhalten verwenden
– Sprechende Columnnamen verwenden
– Level-bezogene Präfixe verwenden
• Operativ genutzte Daten in
separate Tabellen auslagern
– Bei zu vielen Attributen
• Dimensionen mit nur einem
Attribut in die Faktentabelle
verlagern
• Keine Snowflakes nutzen
– 1:1-Beziehung zu Dimensionen
• Star Schema = VirtualisierungsKandidat bei In-Memory
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
24
User View Layer (Faktentabellen)
• So granular wie möglich aufbauen
– Performance-Thematik separat lösen
– Keine eigene Faktentabelle bilden, nur um eine höhere Aggregations-Ebene zu
erhalten
– Keine separate Faktentabelle aus Performance-Gründen
• “Verwandte” Faktentabellen schaffen
– Über gemeinsam genutzte Dimensionen (Conformed Dimensions)
• Die Faktentabelle besitzt keinen eigenen PK
– Zugriff nur über die Foreign Key-Felder
– Sätze müssen nicht eindeutig sein
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Integration Layer
• Arbeitsschicht für alles, was der technischen Bearbeitung unterliegt
• Überprüfung von
– Syntaktischer Korrektheit (Typ, Länge, NULL)
– Vollständigkeit der Daten und Mengenverhältnisse
– Gültige Wertebereichen
– Vorhandensein von Referenzdaten
– Eindeutigkeit (optional)
– Eliminierung von NULL-Werten
– .....
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Integration Layer
• Zusammenführung operativ getrennter Daten
• Bilden neuer Informationsobjekte mit dem Ziel der einfacheren
Weiterverarbeitung (optional)
 Stage ist leer,
wenn nicht geladen wird
• Waisen-Management (optional)
• Bildung von Daten-Deltas (optional)
• Keine 1:1-Kopien
• Keine besonderen Datenmodell-Strukturen
• Wenn möglich, bereits beim Extrahieren Prüfungen und Wandlungen von
Daten vornehmen
• Keine Indizes verwenden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Enterprise Layer (DWH Kerndatenschicht)
• In Richtung 3. Normalform (3 NF) tendierend
• In Teilbereiche (Subject Areas) gegliedert aber
sachgebietsübergreifend zusammenhängend
• Anwendungs- und Geschäftsprozess-neutral
– Dieselben Objekte werden in mehreren Geschäftsprozesse
benötigt
– Daten müssen tauglich genug sein,
Datenarten
um sie in allen Anwendungen zu
– Stammdaten (historisiert)
verwenden
– Referenzdaten – externe / interne, allgemeine
– Eindeutigkeit aller Objekte und Namen
Sammlungen
– Bewegungsdaten / Transaktionslevel (angesammelt)
– Redundanzfreiheit aller Informationen
– Langlebigkeit der Daten (Historisierung)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Regeln einer effizienten Data Warehouse Architektur
• Permanente Orientierung an den Informationsbedürfnissen der Benutzer
• Technisches und fachliches Monitoring von Inhalten und System
• Kompaktes Schichtenmodell schaffen
– Wege verkürzen
– Redundanzen in unterschiedlichen Schichten vermeiden
– Berechnungen / Aggregate so früh wie möglich durchführen
• Zusammenhängende Data Mart-Schicht
– Mehrfachnutzung von Dimensionen / Conformed Dimensions
– Geschickter Umgang mit sehr großen Faktentabellen / Vermeiden unnötiger Kopien
– Eher granulare Informationen auch in den Fakten-Tabellen
• Data Marts eventuell virtualisieren
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
29
Regeln einer effizienten Data Warehouse Architektur
• Granularisierte 3NF-DWH Schicht schafft
– Neutralität gegenüber Vorsystemen
– Flexibilität bei der Bereitstellung neuer Abfragemodelle
– Über Data Mart-Grenzen hinweg gemeinsam genutzte Berechnungen
Aggregationen usw. so früh wie möglich umsetzen
• Alle Schichten in einem DB-Raum
– Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege
• In-Database-Aktivitäten (Prüfen/Laden)
– Ein zusammenhängender DB-Server-Cluster zum Verhindern unnötiger Wege
• 1:1 Kopien verhindern
– Bereits beim Lesen in die Vorsysteme einfache Prüf- und Filteraktivitäten
– Updates und einzelne Deletes vermeiden
– ETL wiederholbar aufbauen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
30
Szenario DWH - Gesamtsicht
OLTP
Systeme
In Memory
Temporäre
Daten
T
T
Enterprise Layer
Core - DWH / Info Pool
Referenzdaten
Stammdaten
R
R
R
S
S
S
User View
Layer
(teils virtuell)
• Dimensionen als Views
• Fakten als In-Memory-Variante
von Core-Transaktionen
• Kennzahlen-MAVs
physikalisch
• R-Objekte physikalisch
• JSON-Objekte physikalisch
Partitionierte
Transaktionsdaten
nur wenn sie
abgefragt werden
Vorberechnete
Kennzahlen
I n t e r n e
D a t e n
Disk-Daten
Integration
Layer
Embedded Meta-Layer
C
Q
A
A
L
MJ
Operational Data
JSON Unstructured
E x t e r n e
(virtuell)
JSON Data
JSON
HDFS / NoSQL
Unstructured Data
JSON
Data Mining
Statistikdaten
Oracle R
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Grenzfälle: Wo Wünsche nach Verbesserungen entstehen
Integration
Layer
• Schichtenmodell ist Blaupause für
Verantwortlichkeiten
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
DWHAdmin
• Fehlendes ganzheitliches
Informationsmanagement
– Redundanzen, wenig Wiederverwendung,
– fehlende Synchronisation bei zusammenhängenden
Themen
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
DWHAdmin
User View
Layer
User View
Layer
User View
Layer
• Fehlende sachgebietsübergreifende Breite beim Informationsangebot
• Zu hohe Latenz-Zeiten
• Zu geringe Flexibilität und Schnelligkeit in den Projekten bei der
Umsetzung neuer Informations-Bedarfe
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
32
Die Rolle der zentralen Schicht
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
?????????
• End-Anwender benötigen
diese Schicht nicht!
• Aber: Sie hat eine strategische und taktische Bedeutung
– Historisches Wissen (strategisch)
– Sachgebiets-übergreifende Zusammenhänge (Enterprise-View, strategisch)
– Projekt-taktische und Maintenance Aspekte:
• schnelles Erzeugen neuer Strukturen
• Integriertes Datenmodell verhindert Redundanzen
• Leichtere Organisation des Gesamt-ETL-Ablaufs:
Einfacheres Normalisierung / Denormalisierungs-Schema
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
33
Zugriff von Endbenutzern auf die zentrale Schicht
• Nicht akzeptiert werden Gründe wie
•
•
•
•
Security-Gründe
Hoheits-Denken des DB-Administrators
Performance-Gründe
Überkommene und unreflektierte Standard-Architekturen
„So haben wir das immer schon gemacht“,
“Das steht in unserem Architektur-Blueprint”
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
?????????
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
34
Partitionierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitioning unterstützt viele Aufgaben
Große Tabellen
Query Performance
Partition Pruning
Beschleunigung
des Ladeprozesses
Unterstützung ILM
(Information Lifecycle
Management)
Leichterer Umgang mit
Indizierung
Unterstützung im
Backup-Prozess
Steuerung der
Komprimierung
Tablespace
Tablespace
Tablespace
Tablespace
Tablespace
Tablespace
Feld für PartitionierungsKriterium nach fachlichen oder
organisatorischen
Gesichtspunkten
ausgewählt
36
Range
List
Hash
Unterstützung bei der Aktualisierung von Materialized Views
(Partition Change Tracking)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Hochverfügbarkeit auch
während des Ladens und
Maintenance
DATA WAREHOUSE
Verschiedene Varianten
• Partitioning-Typen
– Range
– List
– Hash
– Reference
– Interval
– Interval-Reference
– System
– Virtual Column
37
• Subpartitioning-Typen
• Range - Hash
• Range - List
• Range - Range
• List - Range
• List - Hash
• List - List
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitioning ist transparent
• Gesamte Tabelle selektieren
SELECT * FROM orders;
Alle Partitionen werden selektiert
Jan 2007
Feb 2007
• Abfrage nur auf eine Partition
Mär 2007
SELECT * FROM orders
Partition Pruning:
WHERE order_dat
between
Automatische
Beschränkung
to_date
('2007-01-01')
AND
to_date
('2007-01-31');
SQL-Abfrage
ist von
Partitionierung
unabhängig
auf
betroffene
Partition
Apr 2007
Mai 2007
Jun 2007
38
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Range Partitioning - Partitionierung nach Wertebereichen
• Partitionierung nach Wertebereichen
– Für sortierte Wertebereiche
– LESS THAN:
Angabe eines maximalen Wertes pro Partition
CREATE TABLE F_Umsatz (
Artikel_ID
number,
Kunden_ID
number,
Zeit_ID
DATE,
Region_ID
number,
Umsatz
number,
Menge
number
) PARTITION BY RANGE (Zeit_ID) (
PARTITION M1 VALUES LESS THAN
(to_date('2007-02-01','YYYY-DD-MM')),
PARTITION M2 VALUES LESS THAN
(to_date('2007-03-01','YYYY-DD-MM')),...
40
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Jan 2007
Feb 2007
Mär 2007
Apr 2007
Mai 2007
Jun 2007
DATA WAREHOUSE
Interval Partitioning
• Erweiterung der Range-Partitionierung
• Automatisierung für gleichgroße
Range-Partitionen
• Partitionierung wird als
Metadaten-Information abgelegt
April
März
Februar
• Sobald neue Daten hinzukommen
werden Segmente allokiert
Januar
Maidaten
?
Aprildaten
April
Märzdaten
März
Februardaten
Januardaten
• Lokale Indizes werden automatisch
mitgepflegt
Produkte
– Start-Partition ist dabei persistent
Mai
Februar
Januar
Kunden
• Partition Key muss NUMBER oder DATE sein
• Partition-Typ muss RANGE sein
41
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Interval Partitioning Syntax
CREATE TABLE "BESTELLUNG" (
"BESTELLNR"
NUMBER(10) NOT NULL,
"KUNDENCODE"
NUMBER(10),
"BESTELLDATUM"
DATE,
"AUFTRAGSART" VARCHAR2(30))
PARTITION BY RANGE ("BESTELLDATUM")
INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) (
PARTITION "Jan07"
VALUES LESS THAN (TO_DATE(' 2007-01-31 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',
'NLS_CALENDAR=GREGORIAN')) TABLESPACE "TS_PAR„
,.............)
;
CREATE TABLE „POSITION" (
"POSITIONSNR" NUMBER(10) NOT NULL,
"BESTELLNR"
NUMBER(10)
"ARTIKELNUMMER"
NUMBER) contraint FK_BEST FOREIGN KEY (BESTELLNR) REFERENCES
BESTELLUNG PARTITION BY REFERENCE (FK_BEST);
42
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Interval Partitioning – Nachträgliches Ändern der Zyklen
• Range-partitionierte Tabellen können umgestellt werden
• Einfaches Metadaten Kommando
• Investitionsschutz
Table F_Umsatz_Interval
...
...
2005
Q1 2006
Q2 2006
...
Oct 2006
Bisherige Range Partition Table
Neue monatliche
Interval Partitions
ALTER TABLE F_Umsatz_Interval SET INTERVAL(NUMTOYMINTERVAL(1,'month');
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
List Partitioning
AMER
• Für diskrete, unsortierte Werte
EMEA
• Angabe einer Werteliste pro Partition
• VALUES (DEFAULT) für “alles andere”
APAC
– Verhalten wie MAXVALUE in der Range-Partitionierung
CREATE TABLE bestellung (
bestellnr number,
auftragsart varchar2(40),
land varchar2(2)
)
PARTITION BY LIST (land) (
PARTITION EMEA VALUES ('DE','FR',[..]),
PARTITION AMER VALUES ('US','CA',[..]),
PARTITION APAC VALUES ('JP','CN',[..]),
PARTITION OTHERS VALUES (DEFAULT)
)
44
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hash Partitioning - Gleichverteilung der Daten
• Partitionierung nach Hash-Wert des Partition Key
– Schlüsseltypen:
Alle built-in Datentypen außer ROWID, LONG, LOB
– Ziel: Gleichverteilung der Daten
– Anzahl Partitionen: als Potenz von 2 empfohlen
CREATE TABLE F_Umsatz_HASH (
Artikel_ID
number,
Kunden_ID
number,
Zeit_ID
DATE,
Region_ID
number,
Umsatz
number,
Menge
number
) PARTITION BY HASH (Zeit_ID)
PARTITIONS 4
45
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Reference Partitioning
• Anwendung im DWH eher selten
• Beispiel abhängige Faktentabellen
• Bondaten (Kopf- / Positionsdaten)
PK
BestellNr
KundenNr
BestellDatum
PK
FK
April
März
Februar
Januar
Bestellungen
BestellNr
ArtikelNr
Menge
PosNr
FK
April
BestellNr
LieferNr
März
PosNr
April
Februar
März
Januar
Februar
Bestell_Positionen
Januar
Auslieferungen
46
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zuweisen unterschiedlicher Tablespaces
ALTER TABLE Bestellung
ADD PARTITION "DEZ08"
VALUES LESS THAN
(to_date('2008-12-31 00:00:00','SYYYY-MM-DD HH24:MI:SS',
'NLS_CALENDAR=GREGORIAN'))
TABLESPACE "TS_PAR"
DEPENDENT TABLES (Best_Position(PARTITION DEZ08_Child TABLESPACE TS_DEZ08_Child));
48
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Virtual Column Partitioning
• Anwendung im DWH
eher selten
• IM ETL-Prozess würde
man stattdessen eine
zusätzliche Spalte
erstellen
Partitionierung einer
Bestelltabelle nach den
Produktgruppen.
Die Nummer der Produktgruppen
ist allerdings Bestandteil
der Produktnummer
(5.- 9. Stelle).
Produktnummer
Menge
Preis
4711GBEMP9147
370
32,50
....
2385GBEMP1239
579
22,10
....
0801GBEMP1138
120
16,30
....
4711LEERM9147
750
89,50
....
2385LEERM1239
589
12,70
....
0801LEERM1138
121
11,20
....
4721UAGBM9147
837
39,50
....
1385UAGBM1039
599
17,10
....
0901UAGBM1338
578
17,70
....
Abnehmer
P1
P2
P3
substr(Produktnummer,4,5)
• Für alle Partitioning-/Subpartitioning-Varianten einsetzbar
49
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Composite Partitioning
• Range ...
– Range – Range
– Range – Hash
– Range - List
• List ...
– List - Range
– List - Hash
– List - List
50
JAN 07
FEB 07
MAR 07
Produkt
Service
Storno
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
ARTIKEL_ID
FK
KUNDEN_ID FK
ZEIT_ID
FK
REGION_ID
FK
KANAL_ID
UMSATZ
FK
MENGE
UMSATZ_GESAMT
Partitionierung im Star
Range-Partitioning
nach Zeit
Mehr als 80 % aller
Partitionierungen sind
so aufgebaut.
F_UMSATZ
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
51
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
ARTIKEL_ID
FK
KUNDEN_ID FK
ZEIT_ID
FK
REGION_ID
FK
KANAL_ID
UMSATZ
FK
MENGE
UMSATZ_GESAMT
Partitionierung im Star
Range-Partitioning
nach Zeit
List-Partitioning
nach Vertriebskanal
Mehr als 80 % aller
Partitionierungen sind
so aufgebaut.
F_UMSATZ
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
52
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel Range-List
CREATE TABLE f_umsatz_range_list
(ARTIKEL_ID
NUMBER(10),
KUNDEN_ID
NUMBER(10),
ZEIT_ID
DATE,
REGION_ID
NUMBER(10),
KANAL_ID
NUMBER(10),
UMSATZ
NUMBER(10),
MENGE
NUMBER(10),
UMSATZ_GESAMT
NUMBER(10) )
PARTITION BY RANGE (ZEIT_ID)
SUBPARTITION BY LIST (KANAL_ID) SUBPARTITION
TEMPLATE
(
SUBPARTITION kanal1 VALUES (1),
SUBPARTITION kanal2 VALUES (2),
SUBPARTITION kanal3 VALUES (3),
SUBPARTITION kanal4 VALUES (4),
SUBPARTITION kanal5 VALUES (5),
SUBPARTITION kanal6 VALUES (6),
SUBPARTITION kanal7 VALUES (7)
)
(
PARTITION jan10 VALUES LESS THAN (TO_DATE('2010-02-01','SYYYY-MM-DD')),
PARTITION feb10 VALUES LESS THAN (TO_DATE('2010-03-01','SYYYY-MM-DD')),
PARTITION nov11 VALUES LESS THAN (TO_DATE('2011-12-01','SYYYY-MM-DD')),
PARTITION dec11 VALUES LESS THAN (TO_DATE('2012-01-01','SYYYY-MM-DD')),
PARTITION next_month VALUES LESS THAN (MAXVALUE));
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel List-List
Beispiel für die nachfolgende
Systemabfrage
54
CREATE TABLE "BESTELLUNG"
(
"BESTELLNR" NUMBER(10) NOT NULL,
"KUNDENCODE" NUMBER(10),
"BESTELLDATUM" DATE,
"LIEFERDATUM" DATE,
"BESTELL_TOTAL" NUMBER(12, 2),
"AUFTRAGSART" VARCHAR2(30),
"VERTRIEBSKANAL" NUMBER
)
PARTITION BY LIST ("VERTRIEBSKANAL")
SUBPARTITION BY LIST ("AUFTRAGSART")
SUBPARTITION TEMPLATE
(
SUBPARTITION Produkt VALUES ('ARTIKEL','TAUSCHWARE'),
SUBPARTITION Service VALUES ('SERVICE','REISE'),
SUBPARTITION Storno VALUES ('RETOURE','KOMMISSION'),
SUBPARTITION Andere VALUES (default)
) (
PARTITION Telefon
VALUES (1,2,3),
PARTITION Aussendienst VALUES (4,5),
PARTITION Web
VALUES (6,7),
PARTITION PARTNER
VALUES (8,9,10) );
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Systemabfragen
col subpartition_name format a15
col partition_name format a15
col SUBPARTITION_POSITION format 99999999
SELECT table_name, partition_name,
subpartition_name, subpartition_position
FROM user_tab_subpartitions;
TABLE_NAME
-------------------BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
BESTELLUNG
55
PARTITION_NAME
--------------Jan08
Jan08
Jan08
Jan08
Feb08
Feb08
Feb08
Feb08
Mar08
Mar08
Mar08
SUBPARTITION_NA SUBPARTITION_POSITION
--------------- --------------------Jan08_ANDERE
4
Jan08_STORNO
3
Jan08_SERVICE
2
Jan08_PRODUKT
1
Feb08_ANDERE
4
Feb08_STORNO
3
Feb08_SERVICE
2
Feb08_PRODUKT
1
Mar08_ANDERE
4
Mar08_STORNO
3
Mar08_SERVICE
2
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitionwise Join im DWH
• Das Partitionieren von Dimensionen ergibt heute oft nur eingeschränkt
einen Sinn
– Oft zu klein im Vergleich zu einer Faktentabelle
– Fachlich ist meist kein gleiches Partitionierungskriterium zu finden
• Ausnahmen
– Abfragen über 2 große Tabellen z. B. große Faktentabellen
Bonköpfe
Zahlungen
Leistungen
1:n
Bonpositionen
56
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verwaltung von Partitionen
• ADD PARTITION
• DROP PARTITION
• TRUNCATE PARTITION
• MOVE PARTITION
• SPLIT PARTITION
• MERGE PARTITION
• EXCHANGE PARTITION
• Verändern der Default-/ realen Attribute
• Partition Exchange Loading
57
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Add / Rename / Truncate Partition
• Add Partition (Globale und lokale Indizes bleiben “USABLE”)
ALTER TABLE BESTELLUNG
ADD PARTITION "NOV08"
VALUES LESS THAN (to_date('2008-11-30 00:00:00','SYYYY-MM-DD HH24:MI:SS',
'NLS_CALENDAR=GREGORIAN'))
TABLESPACE "TS_PAR"
• Umbenennen einer Partition
ALTER TABLE Bestellung RENAME PARTITION Andere TO Bestellung_Rest;
• Truncate einer Partition
ALTER TABLE Bestellung TRUNCATE PARTITION Service DROP STORAGE;
• Ändern des Tablespace einer Partition (Wirkt sich nur auf künftige Partitionen aus)
ALTER TABLE BESTELLUNG
MODIFY DEFAULT ATTRIBUTES FOR PARTITION "Jan08"
TABLESPACE TS_PAR_JAN ;
58
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
CREATE TABLESPACE TS_PAR_Archiv DATAFILE ‚
D:\o11\oradata\o11\TS_PAR_Archiv.f' SIZE 10m REUSE;
Moving Partition
ALTER TABLE BESTELLUNG
MOVE PARTITION "Jan08"
TABLESPACE TS_PAR_Archiv;
• Fragmentierung beheben
• Umziehen in einen anderen Tablespace
CREATE TABLESPACE TS_PAR_Archiv_Jan DATAFILE
'D:\o11\oradata\o11\TS_PAR_Archiv_Jan.f' SIZE
10m REUSE;
• Komprimierung der Daten einer Partition
ALTER TABLE BESTELLUNG
MOVE SUBPARTITION "Jan08_STORNO"
TABLESPACE TS_PAR_Archiv_Jan;
TS_Einzel_1
TS_Gesamt
59
P1 sub
sub
sub
P2 sub
sub
sub
P3 sub
sub
sub
P4 sub
sub
sub
P5 sub
sub
sub
P6 sub
sub
sub
P7 sub
sub
sub
sub
TS_Einzel_2
• Transparente MOVE PARTITION ONLINE
Operation
• Gleichzeitig DML und Abfragen möglich
• Index Pflege für lokale und globale Indizes
sub
TS_Archiv
sub
sub
sub
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Split und Merge von Partition
ALTER TABLE Bestellung
SPLIT PARTITION "Jan08"
AT (to_date('15-JAN-2008','DD-MON-YYYY'))
INTO (PARTITION Jan08_1, PARTITION Jan08_2)
UPDATE GLOBAL INDEXES;
SELECT table_name, partition_name, high_value
FROM user_tab_partitions
WHERE table_name = 'BESTELLUNG ';
ALTER TABLE BESTELLUNG
MERGE SUBPARTITIONS TELEFON_STORNO, TELEFON_ANDERE
INTO SUBPARTITION TELEFON_OBJEKTE
TABLESPACE TS_PAR;
sub1
subX
sub2
Par1
• Verschmolzen wird immer eine Liste von
Partitionen / Subpartitionen
ParX
Par2
• Nicht für Reference / Hash Partitioned
Tables anwendbar
• Indizes werden UNUSABLE gesetzt
60
• Die neue Partition darf noch nicht existieren
• Funktioniert auch für Reference Partitioning,
d.h. MERGE-Operation auf Parent Table wirkt
sich auch auf die abhängige Tabelle aus
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Erweiterte Partitionspflege Operationen
• Ein Operation bezieht sich auf mehrere Partitionen
• Parallelisiert
• Transparente Pflege lokaler und globaler Inidizes
ALTER TABLE orders
MERGE PARTITIONS Jan2009, Feb2009, Mar2009
INTO PARTITION Quarter1_2009 COMPRESS FOR ARCHIVE HIGH;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ändern von Werten bei List Partitioning
SQL> ALTER TABLE Bestellung
2 MODIFY PARTITION Produkt
3 ADD VALUES ('WARE');
Tabelle wurde geändert.
SQL> ALTER TABLE Bestellung
2 MODIFY PARTITION Storno
3 DROP VALUES ('KOMMISSION');
Tabelle wurde geändert.
SQL> SELECT partition_name, tablespace_name, high_value
2 FROM user_tab_partitions
3 WHERE table_name = 'BESTELLUNG';
PARTITION_NAME
-------------------------------PRODUKT
'WARE'
SERVICE
STORNO
ANDERE
62
TABLESPACE_NAME
HIGH_VALUE
-----------------------------------------------------------
USERS
'ARTIKEL', 'TAUSCHWARE', 'PRODUKT',
USERS
USERS
USERS
'SERVICE', 'REISE'
'RETOURE'
default
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Erstellen einer Tabelle aus einer Partition EXCHANGE
SQL> CREATE TABLE Bestellung_Produkte AS
2 SELECT * FROM bestellung WHERE 1=2
SQL> /
Tabelle wurde erstellt.
SQL> ALTER TABLE Bestellung
2 EXCHANGE PARTITION Produkt
3 WITH TABLE Bestellung_Produkte;
TS_Gesamt
63
P1 sub
sub
sub
P2 sub
sub
sub
P3 sub
sub
sub
P4 sub
sub
sub
P5 sub
sub
sub
P6 sub
sub
sub
P7 sub
sub
sub
 Die Zieltabelle muss existieren
Tabelle X
Allgemeine Syntax:
ALTER TABLE <Tabellen-Name>
EXCHANGE PARTITION <Partition-Name>
WITH TABLE <neue Tabelle>
<including | excluding> INDEXES
<with | without> VALIDATION
EXCEPTIONS INTO <Schema.Tabellen-Name>;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Data Dictionary
64
DBA_PART_TABLES
Table-Level
DBA_TAB_PARTITIONS
DBA_TAB_SUBPARTITIONS
Partition-/Subpartition-Level
DBA_PART_KEY_COLUMNS
DBA_SUBPART_KEY_COLUMNS
Partition-/Subpartition- KeyInformationen
DBA_PART_COL_STATISTICS
DBA_SUBPART_COL_STATISTICS
Statistiken und Histogramme per
Partition / Subpartition
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Wo und wie wird im DWH partitioniert
Lade-Aktivitäten
Partitioning und Ladesteuerung laufen oft synchron
Parallelisierung
Lese-Aktivitäten
Partition Pruning
Parallelisierung
Data Integration Layer
User View Layer
Enterprise Information Layer
R: Referenztabellen
T
20%
T
PEL
R
R
S
S
S
D
T: Transfertabellen
D
S: Stammdaten
B: Bewgungsdaten
F
B
T
80%
D: Dimensionen
D
F: Fakten
D
B
ILM
Backup
Vorbereitung
Temporäre
Tabellen
(Prüfungen etc)
65
Bewegungsdaten sind
Partitioniert (80/20 – Prinzip)
Faktentabellen
und Würfel
können partitioniert
sein
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Wo wird Partitioning wieder vorkommen
• Indizierung
• Bessere Verwaltung großer Tabellen
• Materialized Views
• Verbesserung der Verfügbarkeit und
Performance
• Partition Exchange and Load
• Parallelisierung
• Life Cycle Management /
Storage Management
• Ressourcen werden geschont und geben
Rechenkapazitäten frei
• Transparente Anwendung, d.h. Nutzung ohne
Änderung an der Applikation
• Ermöglicht Information Lifecycle
Management: Nutzung unterschiedlicher
Storage-Klassen, je nach Zugriffshäufigkeit ->
Einsparung von Storagekosten
66
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Schlüssel und Indizierung im
Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Warum künstliche Schlüssel verwenden?
• Gründe für den zusätzlichen Aufwand künstlicher Schlüssel sind:
– Integration
• In mehreren Vorsystemen gibt es unterschiedliche Schlüssel
– Stabilität
• Natürliche Schlüssel können sich ändern
• Geschäftsbereiche können sich ändern
DWH langlebiger als operative Anwendungen
Künstliche Schlüssel bedeuten Performance für das Star Schema
68
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Umschlüsselung
Anwendung 1
Verkaufsregion
Einkommensgruppe
Wohnart
Data Warehouse
Berufsgruppe
Verkaufsregion
Anzahl Kinder
Einkommensgruppe
Alter
Wohnart
Name
...
Kunden_NR
PLZ
Ort
Anwendung 2
Kunden_NR
Tel
Partnernummer
PLZ
Dim_Kd_NR
Neuer Schlüssel
Ort
Strasse
Partnernummer
69
Sequence
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Regeln für künstliche Schlüssel in Dimensionen
• Schlüssel sind einfach zu benutzen und kurz, um
– Speicherplatz zu sparen
– Fehler zu vermeiden
• Nach Möglichkeit keine zusammengesetzten Schüssel
– Erfordert beim Zugriff unnötig viel Vorwissen zu den einzelnen
Schlüsselbestandteilen
– Schlüsselbestandteile können leicht NULL-Wert annehmen,
die Eindeutigkeit ist gefährdet
• Keine Felder wählen, die NULL werden können
• Spaltenwerte sollten stabil sein und sich nicht mehr ändern
70
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
B*Tree Index – 4 Zugriffe bis zum Wert
1
2
Clustering
Factor
Zugriff über die
RowID
3
4
71
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Bitmap – Zugriff auf Werte per Bit Stream
Rowid
Name
Abschluss
Rating
AAAHfVAAJAAAKOKAAA
Meier
Klasse_10
5
AAAHfVAAJAAAKOKAAB
Schubert
Abitur
5
AAAHfVAAJAAAKOKAAC
Klaus-Gustav
Abitur
5
AAAHfVAAJAAAKOKAAD
Schmidt
Diplom
5
AAAHfVAAJAAAKOKAAE
Langbein
Doktor
5
AAAHfVAAJAAAKOKAAF
Hund
Klasse_10
5
AAAHfVAAJAAAKOKAAG
Vogel
Abitur
5
AAAHfVAAJAAAKOKAAH
Messner
Abitur
5
Abschluss=
Klasse_10
SELECT Name
FROM KD_Table
WHERE Abschluss=‘Diplom‘;
72
Abschluss=
Abitur
Abschluss=
Diplom
Abschluss=
Doktor
AAAHfVAAJAAAKOKAAA
1
0
0
0
AAAHfVAAJAAAKOKAAB
0
1
0
0
AAAHfVAAJAAAKOKAAC
0
1
0
0
AAAHfVAAJAAAKOKAAD
0
0
1
0
AAAHfVAAJAAAKOKAAE
0
0
0
1
AAAHfVAAJAAAKOKAAF
1
0
0
0
AAAHfVAAJAAAKOKAAG
0
1
0
0
AAAHfVAAJAAAKOKAAH
0
1
0
0
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Platzverbrauch im Vergleich
CREATE TABLE I_Kunde
(KD_NR
Name
Geb_Dat
Bildungsgruppe
KR_Rating_1_bis_Variabel
Tests mit unterschiedlicher
Kardinalität
number,
varchar2(30),
date,
varchar2(30),
number);
SELECT index_name,index_type blevel, leaf_blocks, distinct_keys FROM
user_indexes;
Anzahl
Sätze
Bildungsgruppe
Bildungsgruppe
Geb_Dat
KR_Rating_1_bis_Variabe
KD_NR
73
100000
100000
100000
100000
100000
Distinct
Werte Prozent
5
100
14575
43211
100000
Leaf_
Blocks
BTree
0.005
0.1
14.575
43.211
100
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
271
192
265
220
222
Leaf_
Blocks
bitmap
11
34
97
179
348
DATA WAREHOUSE
Aktualisieren von Indexen
• OLTP-Option: Rebuild Index Operation
ALTER INDEX index_name REBUILD [ NOLOGGING ];
• Schneller als DROP / CREATE
– NOLOGGING-Klausel
• Fragmentierung wird beseitigt
• Wenig hilfreich im DWH
– Änderungen aber oft als Batch-Lauf durchgeführt
 Zunächst DROP INDEX (beschleunigt den Batch-Lauf)
Dann Neuerstellen des Index
Oder 1. INDEX auf Unusable setzen [Alter index index_name usable]
2. ETL-Massen-Load
3. INDEX Rebuild [Alter index index_name rebuild]
74
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Indexed-organized Tabellen
Index organized Tables (IOT)
Heap Tables
Blöcke sind entsprechend einer Btree-artigen Organisation abgelegt
Blöcke sind nach einem Heap-Mechanisums abgelegt
(Zufallsverfahren)
Jeder Leaf-Block speichert sowohl Werte eines Schlüssel und von
nicht-Schlüssel-Feldern
Schlüsselwerte sind zusätzlich in einer Btree-Indey-Struktur
abgelegt
-Schneller Random – Zugriff (Einzelsatzlesen)
- Schneller Range-Scan weil die Daten bereits geclustert sind
- Spart Platz, weil kein Platz für separaten Index benötigt wird
Alle Zugriffe in der Regel über einen separaten Index
• Relevanz für das DWH gering
– Zwingt zur Eindeutigkeit der Sätze
– Erfordert bei Massen Import eine Orientierung an der Index-Struktur und
Constraintprüfung -> bremst aus
– Ausnahmen: sehr große Dimensionstabellen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitionierung und Indizierung im
Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partitioning und Indizes
• Lokale Indizes
• Nicht-partitionierte oder partitionierte globale Indizes
• USABLE oder UNUSABLE Index Segmente
– Nicht-persistenter Index Status
– Losgelöst von der Tabelle
• Partielle lokale und globale Indizes
– Erwirkt spezielle Metadaten auf [Sub]Partitionsebene
– Interagiert mit dem USABLE/UNUSABLE Status für lokale Indizes
– Indizierung jederzeit anpassbar
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Prefixed / Non Prefixed Indexes
Local Index
Indiziert nach
Bestelldatum
Einfacher
Index
Im DWH relevante Variante
78
Indiziert nach
Bestelldatum,
Kundennummer
Non-Prefixed
Indiziert nach
Auftragsart
Auftragsart
Kundennummer
Bestelldatum
Partition Key
Bestelldatum
Partitionierte
Tabelle
“Bestellung”
Prefixed local
Index
Gut für
Management
der Partitionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Gut für nicht Part-Key
gesteuerte Abfragen
DATA WAREHOUSE
Globale Indexe
CREATE TABLE f_umsatz_range
(ARTIKEL_ID NUMBER(10),
KUNDEN_ID NUMBER(10),
ZEIT_ID
DATE,
REGION_ID NUMBER(10),
KANAL_ID
NUMBER(10),
UMSATZ
NUMBER(10),
MENGE
NUMBER(10),
UMSATZ_GESAMT
NUMBER(10)
)
PARTITION BY RANGE (ZEIT_ID) (
PARTITION jan10 VALUES LESS THAN (TO_DATE('2010-02-01','SYYYY-MM-DD')),
PARTITION feb10 VALUES LESS THAN (TO_DATE('2010-03-01','SYYYY-MM-DD')),
PARTITION mar10 VALUES LESS THAN (TO_DATE('2010-04-01','SYYYY-MM-DD')),
- - - - - - - - - - - - - - - - - - - - - - - - - PARTITION dec11 VALUES LESS THAN (TO_DATE('2012-01-01','SYYYY-MM-DD')),
PARTITION next_month VALUES LESS THAN (MAXVALUE));
CREATE INDEX idx_UMSATZ_RANGE on f_umsatz_range (Kunden_id)
GLOBAL
PARTITION BY RANGE (Kunden_id) (
PARTITION index100 VALUES LESS THAN (100),
PARTITION index500 VALUES LESS THAN (500),
PARTITION index1000 VALUES LESS THAN (1000),
PARTITION index_MAX VALUES LESS THAN (MAXVALUE) );
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lokale Indizes
CREATE INDEX idx_Artikel_id ON
F_Umsatz_range (Artikel_id) LOCAL;
CREATE TABLE f_umsatz_range
(ARTIKEL_ID NUMBER(10),
KUNDEN_ID
NUMBER(10),
ZEIT_ID
DATE,
REGION_ID
NUMBER(10),
CREATE INDEX idx_region_id
KANAL_ID
NUMBER(10),
F_Umsatz_range (region_id)
UMSATZ
NUMBER(10),
MENGE
NUMBER(10),
UMSATZ_GESAMT
NUMBER(10)
)
PARTITION BY RANGE (ZEIT_ID) (
PARTITION jan10 VALUES LESS THAN (TO_DATE('2010-02-01','SYYYY-MM-DD')),
PARTITION feb10 VALUES LESS THAN (TO_DATE('2010-03-01','SYYYY-MM-DD')),
PARTITION mar10 VALUES LESS THAN (TO_DATE('2010-04-01','SYYYY-MM-DD')),
- - - - - - - - - - - - - - - - - - - - - - - - - PARTITION dec11 VALUES LESS THAN (TO_DATE('2012-01-01','SYYYY-MM-DD')),
PARTITION next_month VALUES LESS THAN (MAXVALUE));
80
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ON
LOCAL;
DATA WAREHOUSE
Indizes anzeigen lassen
• Welche Indexe gibt es für eine Tabelle
SELECT index_name, partitioned
FROM user_indexes
WHERE table_name = 'BESTELLUNG_RANGE';
INDEX_NAME
PAR
------------------------------ --PK_DATE_BESTELL
YES
• Auflistung von Index-Partitionen
SELECT ip.index_name, ip.composite, ip.partition_name, ip.high_value
FROM user_ind_partitions ip, user_indexes ui
WHERE ip.index_name = ui.index_name
AND ui.table_name = 'BESTELLUNG';
INDEX_NAME
-----------------------------BEST_DAT
BEST_DAT
BEST_DAT
BEST_DAT
- - - - - - - - - - - - - - - - -
81
COM
--NO
NO
NO
NO
- -
PARTITION_NAME
-----------------------------Feb07
Jan07
Mar07
Apr07
- - - - - - - - - - - - - - - - -
HIGH_VALUE
-------------------TO_DATE(' 2007-02-28
TO_DATE(' 2007-01-31
TO_DATE(' 2007-03-31
TO_DATE(' 2007-04-30
- - - - - - - -
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partielle lokale und globale Indizes
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Operationen auf lokale Indizes
• Änderungs-Operationen wie ADD, DROP, SPLIT, MERGE werden von der
Tabelle auf den Index übertragen
• Rebuild Partiton Index
ALTER TABLE <table_name>
MODIFY PARTITION <partition_name>
REBUILD UNUSABLE LOCAL INDEXES;
• Rebuild Subpartiton Index
ALTER TABLE <table_name>
MODIFY SUBPARTITION <subpartition_name>
REBUILD UNUSABLE LOCAL INDEXES;
• Verschieben auf einen
anderen Table
83
ALTER INDEX <index_name>
REBUILD PARTITION <partition_name>
TABLESPACE <new_tablespace_name>;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Asynchrone Global Index Pflege
• Nach DROP oder TRUNCATE PARTITION bleibt der globale Index auch
ohne Index Pfege valide
• Betroffene Partitionen sind intern bekannt und werden während des
Zugriffs herausgefiltert
• Verzögerte Global Index Pflege
– Anstoß durch ALTER INDEX REBUILD|COALESCE
– Automatisierbar in einem Datenbank-Job
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Star Query Transformation
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_KUNDE
Beispiel Star Schema
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
ORTNR
ORT
KREISNR
KREIS
LANDNR
LAND
REGIONNR
REGION
86
PK
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
PK
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
KUNDEN_ID
PK
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
ANREDE
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
ORTNR NUMBER,
BERUFSGRUPPE
STATUS
STRASSE
TELEFON
TELEFAX
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
HAUSNUMMER
PLZ
ORT
KUNDENKARTE
ZAHLUNGSZIEL_TAGE
TOTAL
TOTAL_NR
DATA WAREHOUSE
Star Query Transformation
Optimierung für Joins mit großen Faktentabellen
SELECT sum(summe) FROM
F_Umsatz
1.000.000
65
12.834
U,
D_Artikel A,
D_Region R,
3.074
1.029
D_Zeit Z,
D_Kunde K
WHERE
U.FK_Kunden_ID
= K.Kunden_ID
AND
U.FK_Datum_ID
AND
U.FK_Ort_ID
= R.Ort_ID
AND
U.FK_Artikel_Nummer
= A.Nummer
= Z.Datum_ID
AND Z.JAHR_NUMMER
= 2008
AND A.GRUPPE_NR
= 3
AND K.KUNDENART
= 8
AND R.REGION_Name IN ('MITTE','SUED','NORD');
87
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
STAR_TRANSFORMATION_ENABLED=FALSE;
Abgelaufen: 00:00:03.48
-------------------------------------------------------------------------------------| Id
| Operation
| Name
Rows |Bytes |Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
1 |
50 |1057
|
1 |
SORT AGGREGATE
|
1 |
50 |
|
|
2 |
NESTED LOOPS
|
|
|
|
|
3 |
|
12 |
600 |1057
(2)| 00:00:13
|*
4 |
|
31 | 1209 |1026
(2)| 00:00:13
|*
5 |
|
121 | 3993 |1022
(2)| 00:00:13
|*
6 |
TABLE ACCESS FULL
| D_ZEIT
152 | 1216 |
7
(0)| 00:00:01
|*
7 |
HASH JOIN
|
2459 |61475 |1015
(2)| 00:00:13
|*
8 |
TABLE ACCESS FULL
| D_KUNDE
|
9 |
TABLE ACCESS FULL
| F_UMSATZ
|* 10 |
|* 11 |
|* 12 |
NESTED LOOPS
HASH JOIN
HASH JOIN
TABLE ACCESS FULL
INDEX UNIQUE SCAN
3 |
1010K|
18 |
(2)| 00:00:13
9
(0)| 00:00:01
18M|1001
(2)| 00:00:13
| D_ARTIKEL
16 |
96 |
3
(0)| 00:00:01
| PK_REGION
1 |
|
0
(0)| 00:00:01
1 |
11 |
1
(0)| 00:00:01
TABLE ACCESS BY INDEX ROWID| D_REGION
----------------------------------------------------------------------------------------
88
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
STAR_TRANSFORMATION_ENABLED=TRUE;
Abgelaufen: 00:00:00.76
-----------------------------------------------------------------------------------------------| Id | Operation
| Name
|Rows | Bytes| Cost (%CPU)| Time|
------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
19 |199(2)| 00:00:03 |
|
1 | SORT AGGREGATE
|
|
1 |
19 |
|
|
|
2 |
TABLE ACCESS BY INDEX ROWID | F_UMSATZ
| 14 | 268 |199(2)| 00:00:03 |
|
3 |
BITMAP CONVERSION TO ROWIDS|
|
|
|
|
|
|
4 |
BITMAP AND
|
|
|
|
|
|
|
5 |
BITMAP MERGE
|
|
|
|
|
|
|
6 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 7 |
TABLE ACCESS FULL
| D_KUNDE
|
3 |
18 | 9(0)| 00:00:01 |
|* 8 |
BITMAP INDEX RANGE SCAN| IDX_FK_KUNDEN_ID_BM
|
|
|
|
|
|
9 |
BITMAP MERGE
|
|
|
|
|
|
| 10 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 11 |
TABLE ACCESS FULL
| D_ARTIKEL
| 16 |
96 | 3(0)| 00:00:01 |
|* 12 |
BITMAP INDEX RANGE SCAN| IDX_FK_ARTIKEL_NUMMER_BM |
|
|
|
|
| 13 |
BITMAP MERGE
|
|
|
|
|
|
| 14 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 15 |
TABLE ACCESS FULL
| D_ZEIT
| 152 | 1216 | 7(0)| 00:00:01 |
|* 16 |
BITMAP INDEX RANGE SCAN| IDX_FK_DATUM_ID_BM
|
|
|
|
|
| 17 |
BITMAP MERGE
|
|
|
|
|
|
| 18 |
BITMAP KEY ITERATION
|
|
|
|
|
|
|* 19 |
TABLE ACCESS FULL
| D_REGION
|5069 |55759 | 69(0)| 00:00:01 |
|* 20 |
BITMAP INDEX RANGE SCAN| IDX_FK_ORT_ID_BM
|
|
|
|
|
------------------------------------------------------------------------------------------------
89
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Star Query Transformation
1. Zugriff auf die Faktentabelle und Lookup mit den Filterkriterien auf
Dimension 1 zur Erzeugung eines Bitmap entsprechend der Primary
Keys
2. Wiederholen für alle Dimensionen
3. AND-Verknüpfung der Bitmaps und Suchen nach den FaktentabellenRow IDs
4. Zugriff mit gefundenen Row IDs auf die Faktentabelle
5. Evtl. Join-back auf die Dimensionen für die restlichen Spalten, die
benötigt werden.
 Es findet zu keinem Zeitpunkt ein Full Table Scan auf der Faktentabelle statt
90
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Bedingungen für die Star-Transformation
• STAR_TRANSFORMATION_ENABLED=TRUE
• Keine Bind Variable im SELECT Statement, kein CONNECT BY und kein START
WITH verwenden
• Die Faktentabelle
–
–
–
–
Muss mehr als 15000 Sätze haben (Stand 10g)
Kann keine View sein
Kann keine Remote-Tabelle sein
Muss mehr als 2 Bitmap Indizes haben
• Die Foreign Key Felder müssen als Bitmap Index definiert sein (Faktentabelle)
• Ein Foreign Key Constraint als solches muss nicht definiert sein
91
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
D_KUNDE
Indizierung im Star
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
ORTNR
ORT
KREISNR
KREIS
LANDNR
LAND
REGIONNR
REGION
92
PK
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
PK
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
KUNDEN_ID
PK
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
ANREDE
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
ORTNR NUMBER,
BERUFSGRUPPE
STATUS
STRASSE
TELEFON
TELEFAX
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
HAUSNUMMER
PLZ
ORT
KUNDENKARTE
ZAHLUNGSZIEL_TAGE
TOTAL
TOTAL_NR
DATA WAREHOUSE
Werden Index immer gebraucht?
• Im DWH gibt es eine grundsätzlich andere Verwendung von
Indexen
OLTP
DWH
Einzelne Selects
Selects über Datenbereiche
Einzelne Inserts
Massen-Inserts
Oft Verwaltung über Contraints (z. B.
Unique Key)
Möglichkeiten im Verlauf des ETLProzesses
alter index PK_BESTELLNR_PART_RANGE_HASH monitoring usage
SELECT INDEX_NAME, TABLE_NAME, MONITORING, USED FROM SYS.V$OBJECT_USAGE
• => Im DWH eher Bitmap-Indexe als Btree
• Usage-Monitor zeigt, ob ein Index wirklich genutzt wurde
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Wo und wie wird im DWH indiziert
Lade-Aktivitäten
Lese-Aktivitäten
Data Integration Layer
Enterprise Information Layer
User View Layer
Process neutral / 3 NF
Keine Indexe
B*tree für Eindeutigkeit
und als Primary Key
Bitmaps
Bitmaps
B*tree für Primary Keys
In den Dimensionen
Tabellen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Komprimierung im Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Bedingungen im Data Warehouse  Kompressionskonzept
• Komprimierung besonders wichtig, da große Datenmengen
• Besonders krasser Unterschied zwischen
– Daten, die häufig gelesen werden  Sehr wenige
– Daten, die selten bis kaum gelesen werden  Sehr viele
• Lese- und Schreib-Operationen sind bestimmbar
– Massen-Schreibaktionen können explizit auch zum Komprimieren genutzt
werden
– Updates kommen seltener vor
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
96
Das Datenwachstum beherrschen
Komprimieren: Verwaltung und Kosten reduzieren
Kompressions Typ:
Einsatz für:
Faktor
Basic Compression
Read only Tabellen und Partitionen in Data Warehouse
Umgebungen oder “inaktive” Daten-Partitionen in OLTP
Umgebungen.
Aktive Tabellen und Partitionen in OLTP und Data Warehouse
Umgebungen.
Non-relational Daten in OLTP und Data Warehouse Umgebungen.
2-4
Index Compression
Indizes auf Tabellen in OLTP und Data Warehouse Umgebungen.
2
Backup Compression
Alle Umgebungen.
2
Hybrid Columnar
Compression –
Data Warehousing
Read only Tabellen und Partitionen in Data Warehouse
Umgebungen.
8-12
“Inaktive” Daten Partitionen in OLTP und Data Warehousing
Umgebungen.
10-40
OLTP Compression
SecureFiles Compression
Hybrid Columnar
Compression – Archival
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
2-4
2-4
DATA WAREHOUSE
97
Anwendung für Komprimierung
• In der DB EE für
– Indizes
– Strukturierte Daten in Tabellen
(bzw. Partitionen) mit DIRECT Load
• Mit der Option Advanced Compression auch für
–
–
–
–
–
Unstrukturierte Datentypen (SecureFiles)
Konventionelles DML (OLTP Compression)
DataPump Daten und RMAN
Redo Traffic mit Data Guard
SQLNET
Redo Logs
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Standby
DATA WAREHOUSE
Backups
98
OLTP Tabellen Kompression
• Block-Level Batch Komprimierung
leerer
Block
initial
unkomprimierter
Block
komprimierter
Block
teilweise
komprimierter
Block
komprimierter
Block
Legende
Header Daten
unkomprimierte Daten
Freier Platz
komprimierte Daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
99
Tabellen-Komprimierung in 11g
• Komprimierungseinstellung durch
– CREATE TABLE beim Neuanlegen
– ALTER TABLE MOVE COMPRESS bei existierenden Daten
– ALTER TABLE MOVE PARTITION COMPRESS bei Partitionen
• Beispiel – Syntax
CREATE TABLE sales_history(…) COMPRESS FOR BASIC | OLTP
• Im Enterprise Manager
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
100
Hybrid Columnar Compression (HCC)
• Neue Kombination der Anordnung nach Spalten und Zeilen
 höhere Compression Ratio möglich
• Verschiedene Level der Verdichtung möglich
• Designed für Daten, die nicht häufig verändert werden
• Komprimierung nur während Bulk Loads!
• Verfügbar für Storage wie Exadata, ZFS oder Pillar
Logical Compression Unit (CU)
BLOCK HEADER
BLOCK HEADER
BLOCK HEADER
BLOCK HEADER
CU HEADER
C1
C2
C3
C4
C5
C5
C6
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
C7
C8
DATA WAREHOUSE
Compression Advisor
Welchen Komprimierungsfaktor kann ich erwarten?
• Einsatz des Package DBMS_COMPRESSION ab 11gR2
• Ohne zusätzliche Installation
• Unterstützt partitionierte/nicht partitionierte Tabellen
• Funktionen:
– Erstellt temporäre Objekte um Komprimierungsratio zu berechnen
– Analysiert Zeilen auf Komprimierungstyp
– Einsatz auch für HCC Komprimierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Syntaxänderung in 12c
• Änderungen für Basic, OLTP und HCC Compression
• BASIC
CREATE TABLE sales_history(…)
ROW STORE COMPRESS BASIC;
• OLTP
CREATE TABLE sales_history(…)
ROW STORE COMPRESS ADVANCED;
• Beispiel für HCC
CREATE TABLE sales_history(…)
COLUMN STORE COMPRESS FOR QUERY HIGH;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Erweiterungen in 12c
• Aufhebung des 255 Spalten Limits
• DBMS_COMPRESSION Advisor jetzt auch für Securefile LOBs
begin
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
SCRATCHTBSNAME
=> 'USERS',
TABOWNER
=> 'SH',
TABNAME
=> 'BASIC_LOB',
LOBNAME
=> 'TEXT',
PARTNAME
=> '',
COMPTYPE
=> 128,
…
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Online Operationen in 12c
• Online Operationen für MOVE PARTITION
• Weniger Sperren
• Grundlage für ILM Operationen
• Beispiele
SQL> ALTER TABLE sales_big MOVE PARTITION sales_q4_2001
ROW STORE COMPRESS ADVANCED ONLINE;
SQL> ALTER TABLE sales_big MOVE PARTITION sales_q4_2001
TABLESPACE example ONLINE;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zusammenfassung
• Anwendung der Komprimierung
– Bei Tabellen mit grösstem Speicherplatzverbrauch
• Speicherplatzeinsparung immer abhängig von
– den Daten und
– dem Ladevorgang
• Komprimierungsratio (Quotient aus unkomprimierten und komprimierten
Daten) variiert
• Bessere Ratio durch:
– Verwendung von größeren DB Blöcken
– Erhöhung der Daten-Redundanz z.B. durch Laden von sortierten Daten
• Daten werden erst in der SGA beim Zugriff entpackt -> Bessere
Ausnutzung von I/O
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Query-Optimizer und System-Statistiken im
Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Statistiken sammeln
• Regelmäßig aktuelle Statistiken sind wichtig für gute Ausführungspläne
• Ständiges Aktualisieren belastet das System
• Best Practice im DWH
– Statistiken in Verbindung mit dem ETL-Prozesse aktualisieren.
– Nur diejenigen Tabellen, Partitionen und Indexe aktualisieren, die aktuell geladen
bzw. verändert wurden.
– => Automatisiertes Aktualisieren sollte genau überlegt werden
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>);
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>,
Partname=><PARTITION_NAME>, GRANULARITY=>'PARTITION');
DBMS_STATS.GATHER_INDEX_STATS(Ownname=><OWNER>,Indexname=><TABLE_NAME>);
108
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Sammeln von Statistiken
• Tabellen -> GATHER_TABLE_STATS
• Indexe
EXEC DBMS_STATS.GATHER_TABLE_STATS (
'PART','BESTELLUNG_PART_RANGE',
estimate_percent=>100);
EXEC dbms_stats.gather_schema_stats(
ownname => 'PERF',
estimate_percent => 5,block_sample => TRUE)
-> GATHER_INDEX_STATS
• Schema -> GATHER_SCHEMA_STATS
Begin
dbms_stats.gather_schema_stats(
ownname
=> 'PERF'
,options
=> 'GATHER AUTO'
,estimate_percent => 5
,block_sample
=> TRUE);
end;
• Automatisiertes Sammeln für ein Schema
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(
'OE',DBMS_STATS.AUTO_SAMPLE_SIZE);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Sammeln von Column-bezogenen Statistiken (Histogramme)
• Sinnvoll bei komplexen where-Bedingungen und starker UngleichVerteilung der Werte innerhalb einer Spalte
begin
DBMS_STATS.GATHER_TABLE_STATS(Ownname=>'DWH',
Tabname=>'F_UMSATZ' ,
METHOD_OPT =>
'FOR COLUMNS SIZE AUTO KUNDEN_ID,ARTIKEL_ID,ZEIT_ID, REGION_ID, KANAL_ID’);
end;
begin
DBMS_STATS.GATHER_TABLE_STATS(Ownname=>'DWH',
Tabname=>'F_UMSATZ' ,
METHOD_OPT =>
'FOR COLUMNS SIZE 20 KUNDEN_ID,ARTIKEL_ID,ZEIT_ID, REGION_ID’);
end;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Abfrage der Art Histogramme
• HEIGHT BALANCED: Aufteilung aller Werte in n-Gruppen
– Hier kann der Grenzwert der jeweiligen Gruppen abgefragt werden
• FREQUENCY: Auflistung der Menge pro vorkommenden Wert
SELECT column_name, num_distinct, num_buckets, histogram
FROM user_tab_col_statistics
WHERE table_name = 'F_UMSATZ';
COLUMN_NAME
NUM_DISTINCT NUM_BUCKETS HISTOGRAM
------------------------------ ------------ ----------- -ARTIKEL_ID
129
20 HEIGHT BALANCED
KUNDEN_ID
1031
20 HEIGHT BALANCED
ZEIT_ID
6001
20 HEIGHT BALANCED
REGION_ID
7020
20 HEIGHT BALANCED
KANAL_ID
7
7 FREQUENCY
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Warum Histogramme?
• Histogramme sinnvoll
– Wenn Spalten ungleichmäßig verteilte Werte haben und in der WHERE-Klausel
von Abfragen vorkommen
– Spalten die seltener abgefragt werden, und daher keine Indexe haben
• Histogramme nicht anlegen bei
– Gleich verteilten Spaltenwerten
– Nicht für alle Spalten einer Tabelle  zu viel Overhead
– PKs oder indizierten Spalten
– Spalten, die nicht abgefragt werden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Dynamic
Sampling
• Zusätzliche Hilfen für
den Optimizer
– Werte von 1 – 10
(Default 2)
• Setting
– alter system set optimizer_dynamic_sampling=4;
– Manuelles Setzen ist sinnvoll wenn SQL seriell
– System wählt automatisch den Einstellwert bei Parallelisierung
• Testen
• Sinnvoll bei komplexen WHERE-Klauseln
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Inkrementelles Statistiksammeln (11g)
• 11g: Incremental Global Statistics
– Synopsis Struktur in SYSAUX Tablespace
– Sehr schnelles Erzeugen der globalen Statistiken ohne die komplette Tabelle zu lesen
DBMS_STATS.SET_TABLE_PREFS(<OWNER>, <TABLE_NAME>, 'INCREMENTAL', TRUE);
• Inkrementelles Aktualisieren einschalten
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>,
DEGREE=><DESIRED_DEGREE>);
• Initiales einmaliges Sammeln
DBMS_STATS.GATHER_TABLE_STATS(Ownname=><OWNER>, Tabname=><TABLE_NAME>,
Partname=><SUBPARTITION_NAME>, GRANULARITY=>'SUBPARTITION',
DEGREE=><DESIRED_DEGREE>);
• Inkrementelles Sammeln geschieht automatisch über
EXEC DBMS_STATS.GATHER_TABLE_STATS(‚DWH1','UMSATZ');
114
Oracle Database Performance Tuning Guide 11g Release
2 / Chapter 13 - Managing Optimizer Statistics
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/stats.htm
DATA WAREHOUSE
Anwendung im DWH bei partitionierten Tabellen
• Globale Statistiken regelmäßig
sammeln
Partition Tag 1
Partition Tag 2
– Z.B. einmal im Monat
• Einschalten des ‚Incremental‘- Modus für die
entsprechende Tabelle:
Partition Tag 3
Partition Tag 4
Partition Tag 5
Partition Tag 7
Globale
tatistiken
• Nach jedem Laden einer neuen Partition, die
Statistiken aktualisieren:
Partition Tag 8
Partition Tag 9
Partition Tag 10
ETL
115
Partition Tag n
– EXEC
DBMS_STATS.SET_TABLE_PREFS(‚DWH',‘UMSATZ,
'INCREMENTAL','TRUE');
Neu hinzugefügte
Partiton verfälscht
Statistiken
– EXEC
DBMS_STATS.GATHER_TABLE_STATS('DWH','UMSATZ
');
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Empfehlungen
• Dynamic Sampling auf einen höheren Wert setzen (z. B. 4)
• Bei großen partitionierten Tabellen mit
„Inkrementellem Statistik-Sammeln“ arbeiten.
• Histogramme gezielt für Spalten mit ungleich verteilten Werten
verwenden, wenn sie oft abgefragt werden.
• Große Tabellen in dem Kontext des ETL-Prozesses aktualisieren
-> ETL-Gesamt-Konzept
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Speicher-Hierarchie – Beispiel Flash
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Datennutzung und Speicherhierarchieen
10000
mal
schneller
Memory
< 10% aller Daten
Flash
Technology
60% aller
Abfragen
SAS drives
35% aller Abfragen
SATA drives
5% aller Abfragen
Off-line Data
Archives
< 50% aller
Daten
100-200
mal
schneller
100% aller
Daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Flash Cache – Transparente Erweiterung des Buffer Caches
Hot Data
16 GB
SGA Memory
120 GB
Flash Cache
Extended Buffer Cache
Warm Data
Install Flash Drive in the Host Server
• Set two init.ora parameters:
• db_flash_cache_file = <filename>
•
Specifies the path to the flash disk
• db_flash_cache_size=<size>
•
Cold Data
360 GB
Magnetic Disks
119
Specifies the amount of flash disk to use
•Flash Disks oder Cards in den Server-Maschinen
•SSD wirken als Level 2 Cache
(SGA ist Level 1)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hausgemachte Engpässe und Lösungen
Hauptspeicher / RAM
Internal Bus
CPUs
Sinnvolle Positionierung von
Flash-Speicher
• Direkt adressierbar durch Server-CPUs
• Für die Datenbank sichtbar
• „Dynamischer Flash-Index“
Internal Bus
Public-SAN
Controller
Controller
Controller
Controller
Flash-Speicher
Disk-Arrays
Physikalische Grenzen
• Drehgeschwindigkeit von Platten
• Anzahl Platten pro Controller
• Distanz und Remote-Netz-Topologie
120
SSD
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
SSD
SSD
SSD
DATA WAREHOUSE
Automatische Verwaltung von Daten im
Data Warehouse (Heat Map)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Heat Map – Datenzugriff tracken
HOT
Active
Frequent
Access
Occasional
Access
Dormant
Actively
updated
Infrequently
updated,
Frequently
Queried
Infrequent
access for
query and
updates
Long term
analytics &
compliance
COLD
• Ebenen
– Auf Segment Ebene
• Welche Tabellen und Partitionen werden verwendet?
– Auf Block Ebene
• Welche Veränderung auf Block Ebene liegen vor?
• Umfassend
– Verfolgung von Lese- und Schreib - Operationen
– Unterscheidet zwischen Lookups und Full Table Scans
– Schließt Operationen wie Statistiksammeln, DDLs oder Tabellen
Redefinition aus
• Performant
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
122
Heat Map
Enterprise Manager
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
124
Heat Map für Tabellen und Partitionen
“Segment” Level Tracking
OR
• Welche Tabellen und Partitionen werden wie
verwendet?
RS
DE
• Aktueller Ausschnitt aus
DBA_HEAT_MAP_SEG_HISTOGRAM
OWNER
---------SH
SCOTT
SCOTT
SCOTT
SCOTT
SCOTT
SCOTT
OBJECT_NAME
----------------------CUSTOMERS_PK
DEPT
EMP
EMP
EMP
PK_EMP
PK_EMP
TRACK_TIME
---------------25.06.2013 22:48
25.06.2013 12:48
26.06.2013 12:30
25.06.2013 12:48
24.06.2013 11:47
26.06.2013 22:30
25.06.2013 22:48
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
WRI
--NO
NO
YES
NO
NO
NO
NO
FUL
--NO
YES
YES
YES
YES
NO
NO
DATA WAREHOUSE
LOO
-YES
NO
NO
NO
NO
YES
YES
126
Heat Map für Blöcke
“Row” Level Tracking
O
S
ER
D
R
• Letzte Änderung auf Block Ebene
• Beispiel: Letzte Änderung an Tabelle
CUSTOMERS mit DBMS_HEAT_MAP
TABLESPACE
FNO
BLOCK_ID WRITETIME
---------- ---------- ---------- --------------USERS
6
347 25.06.2013 14:45
USERS
6
348 25.06.2013 14:45
USERS
6
349 25.06.2013 14:45
USERS
6
350 25.06.2013 14:45
USERS
6
351 25.06.2013 14:45
…
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
127
Heat Map
• Einschalten über Initialisierungsparameter HEAT_MAP
SQL> ALTER SYSTEM SET heat_map = 'ON' | 'OFF';
SQL> ALTER SESSION SET heat_map = 'ON' | 'OFF';
• Voraussetzung für Automatische Daten Optimierung
• Administration und Monitoring über
– V$Views
– Data Dictionary Views
– Packages
• Graphische Implementierung im Enterprise Manager
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
128
Heat Map für Daten Komprimierung
Weniger Speicherplatz und Vorteile durch Komprimierung
Hot Data
Warm Data
Archive Data
1110101010101010
10101010111010100110101110
0110101010101101
00010100010110111010101001
0001011011000110
01001001000010001010101101
1001010000010011
00101101001110000101001001
1000101010110100
01000010010000100010101011
1011010010110001
10011010
0100100111110010
0100001000101010
1101000
1010101011101010
0110101110000101
0001011011101010
1001010010010000
1000101010110100
1011010011100001
0100100101000010
0100001000101010
1101001
1010101011101010
0110101110000101
0001011011101010
1001010010010000
1000101010110100
1011010011100001
0100100101000010
0100001000101010
1101001
3X
10X
15X
Columnar Query Compression
Columnar Archive Compression
Advanced Row Compression
1010101011101010011010111000010100010110111
0101010010100100100001000101010110100101101
0011100001010010010100001001000010001010101
11001101110011000111010
1010101011101010011010111000010100010110111010101
0010100100100001000101010110100101101001110000101
0010010100001001000010001010101110011011100
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
129
Zeilenkomprimierung auf Basis der Nutzung
“Background Row Compression”
OR
RS
E
D
ALTER TABLE EMPLOYEE
ILM ADD POLICY
ROW STORE COMPRESS ADVANCED ROW
AFTER 1 DAY OF NO MODIFICATION
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
131
Automatic Data Optimization
Storage-Tiering – how it works
SQL> ALTER TABLE employee ILM ADD POLICY
TIER TO LOW_COST_TABLESPACE
1. Tables grow in size ILM policies
compress data
2. Tablespace containing
partitions reaches ILM tiering
threshold
3. Partitions are moved to
different tablespace on lower
spec disk group
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
134
Automatische Daten Optimierung
OLTP
Reporting
10x komprimiert
Im Quartal
Advanced Row
Compression
für OLTP
Im Jahr
Columnar Query
Compression für
schnelle Analysen
Compliance & Reporting
15x komprimiert
Automatische
ONLINE
Konvertierung
Jahre zuvor
Columnar Archive Compression
für max. Kompression
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
135
Backup & Recovery
OLTP
Reporting
Compliance & Reporting
10x compressed
Read / Write
Tablespace
15x compressed
Read-mostly Daten verlagert
zu READONLY Tablespace
Online Move zu READ
ONLY Tablespace
=> Einmaliges Backup
erforderlich
READONLY
TBS
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
136
Parallelisierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
138
Parallele Ausführung
• Ressourcen
– Parallel Execution Query Coordinator (QC)
– Parallel Execution Server Pool (PS)
– Messages
• Einteilung der Arbeitsmenge in kleinere Einheiten (Granules)
• Partitionen von Tabellen oder Indizes können diese Granules bilden
• Erfahrungswerte:
– Datenobjekte < 200 MB sollten keine Parallelisierung nutzen
– Objekte < 200 MB > 5 GB = Parallelisierungsgrad (DOP) 4
– Objekte > 5 GB = DOP 32
 Angaben variieren nach Systemauslastung und Hardware Konfiguration
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
139
SQL Parallel Execution Plan
SELECT c.cust_name, s.purchase_date, s.amount
FROM sales s, customers c
WHERE s.cust_id = c.cust_id;
Query Coordinator
ID
Operation
0
SELECT STATEMENT
1
PX COORDINATOR
2
PX SEND QC {RANDOM}
3
4
Name
HASH JOIN
PX RECEIVE
TQ
IN-OUT
Q1,01
P->S
Q1,01
PCWP
Q1,01
PCWP
5
PX SEND BROADCAST
Q1,01
P->P
6
PX BLOCK ITERATOR
Q1,01
PCWP
Q1,01
PCWP
Q1,01
PCWP
Q1,01
PCWP
7
8
9
TABLE ACCESS FULL
CUSTOMERS
PX BLOCK ITERATOR
TABLE ACCESS FULL
SALES
PQ Distribution
BROADCAST
Parallel Server leisten die Hauptarbeit
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
140
Execution Plan
ID
Operation
0
SELECT STATEMENT
1
PX COORDINATOR
2
PX SEND QC (RANDOM)
“Partition Hash All” über dem Join &
Einfaches PQ Set bezeichnet Partition-wise Join
Name
Pstart
Pstop
:TQ10001
TQ
PQ Distrib
Q1,01
QC (RAND)
3
SORT GROUP BY
Q1,01
4
PX RECEIVE
Q1,01
5
PX SEND HASH
6
SORT GROUP BY
7
8
9
10
:TQ10000
Q1,00
HASH
Q1,00
PX PARTITION HASH ALL
1
128
HASH JOIN
Q1,00
Q1,00
TABLE ACCESS FULL
Customers
1
128
Q1,00
TABLE ACCESS FULL
Sales
1
128
Q1,00
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
141
Parallelisierung und Skalierung
Parallelisierbare Operationen
• Abfragen
– SELECT
serial
100%
CPU
I/O
CPU
I/O
SQL
– Join Operationen
50%
– Sort Operationen
– GROUP BY
• DDL
– CREATE TABLE/MV
– CREATE INDEX
– Online Index Rebuild
parallel
100%
SQL
50%
• DML
– INSERT
– UPDATE / DELETE
– MOVE / SPLIT PARTITION
Ein SQL Statement wird vom Optimizer in kleinere
Arbeitsschritte aufgeteilt und läuft skalierbar ab
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
142
Voraussetzungen für Parallelisierung
• Hardware-Architektur
– Symmetric Multiprocessors (SMP)
– Clusters (RAC, Grid Computing)
– Massively Parallel Processing (MPP)
• Ausreichend I/O-Bandbreite
• Geringe oder mittlere CPU-Auslastung
– Systeme mit CPU-Auslastungen von weniger als 30%
• Genügend Hauptspeicher für speicherintensive Prozesse
– Sortierung
– Hashing
– I/O-Puffer
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
143
Funktionen für Parallelisierung
• Automated Degree of Parallelism (DOP)
– Anpassung über Schwellwert und Systemressourcen
• Parallel Statement Queuing
– Zwingend parallel auszuführende Statements werden „geparkt“
– Bei genügend freien Ressourcen wird das Statement automatisch „aufgeweckt“
und parallel ausgeführt
• In-Memory Parallel Execution = weniger Disk I/O
– Im RAC werden Daten aus den Buffer Caches genutzt
 Optimale Systemauslastung
 Mehr Parallelisierung, weniger Aufwand = Performance
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
144
Degree of Parallelism (DOP)
• Automatic Degree of Parallelism
– PARALLEL_DEGREE_POLICY = AUTO
• Degree of Parallelism manuell festlegen
– ALTER TABLE sales PARALLEL 8;
– ALTER TABLE customers PARALLEL 4;
• Default Parallelism
– ALTER TABLE sales PARALLEL;
SI : DOP =
PARALLEL_THREADS_PER_CPU x CPU_COUNT
RAC: DOP =
PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
145
Parallel Degree Policy
Ausführungsplan
---------------------------------------------------------Plan hash value: 4226669230
----------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
----------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
7 |
371 | 81975
(9)| 00:00:03 |
|
1 | VIEW
|
|
7 |
371 | 81975
(9)| 00:00:03 |
|
2 |
WINDOW SORT
|
|
7 |
196 | 81975
(9)| 00:00:03 |
|
3 |
HASH GROUP BY
|
|
7 |
196 | 81975
(9)| 00:00:03 |
|* 4 |
HASH JOIN
|
|
51M| 1367M| 76249
(2)| 00:00:03 |
|
5 |
TABLE ACCESS FULL| D_ARTIKEL |
129 | 2709 |
3
(0)| 00:00:01 |
|
6 |
TABLE ACCESS FULL| F_UMSATZ |
51M|
341M| 75998
(2)| 00:00:03 |
-----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
--------------------------------------------------4 - access("U"."ARTIKEL_ID"="A"."ARTIKEL_ID")
Note
----- automatic DOP: Computed Degree of Parallelism is 1
Note
----- automatic DOP: skipped because of IO calibrate statistics are missing
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
146
Automatischer Parallelisierungsgrad
• Bisher erfolgt das Tunen der Parallelisierung manuell
– Nur einen DOP zu haben ist nicht für alle Queries geeignet
– Zuviel Parallelisierung kann das System überlasten
• Automated Degree of Parallelism entscheidet automatisch,
– Ob ein Statement parallel ausgeführt wird oder nicht
– Welchen DOP das Statement nutzt
• Der Optimizer leitet den passenden DOP von den nötigen Ressourcen
des Statements ab
– Kosten aller Scan-Operationen
– Maximales Limit der Parallelisierung wird berücksichtigt
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
147
Automatischer Parallelisierungsgrad
• Wie funktioniert das?
SQL
Statement
Statement wird geparsed
Optimizer ermittelt den
Execution Plan
Geschätzte Ausführung
dauert länger als
Schwellwert
Optimizer bestimmt den
idealen DOP
PARALLEL_MIN_TIME_THRESHOLD
(default =10s)
Tatsächlicher DOP = MIN(PARALLEL_DEGREE_LIMIT, idealer DOP)
Geschätzte
Ausführung dauert
nicht länger als
Schwellwert
Statement wird
seriell ausgeführt
PARALLEL_DEGREE_LIMIT
(default =CPU)
Statement wird parallel
ausgeführt
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
148
Parallel Statement Queuing
• Mit Automatic Degree of Parallelism können mehr Statements parallel arbeiten
– ABER: Potentielle Systemüberlastung
• Parallel Statement Queuing entscheidet automatisch, ob ein Statement sofort
ausgeführt werden kann oder nicht
• Sobald ein paralleles Statement startet wird geprfüt, ob genügend Parallel Server
(Parallel Query Slaves) vorhanden sind
– Wenn nicht, wird das Statement in die Queue geschoben
– Sobald genügend Parallel Server verfügbar sind, wird das Statement aus der Queue geholt und
ausgeführt
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
149
Parallel Statement Queuing
• Wie funktioniert das?
SQL
Statements
Wenn zu wenig Parallel
Server vorhanden sind,
landet das
Statement wird geparsed
Oracle ermittelt automatisch
den DOP
64
32
64
16
32
128
16
FIFO Queue
Wenn wieder genügend
Parallel Server vorhanden
sind, wird erste Statement
aus der Queue geholt und
ausgeführt
Wenn genügend Parallel Server
vorhanden sind, wird das
Statement sofort ausgeführt
8
128
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
150
In-Memory Parallel Execution
• Data Warehouse-Umgebungen haben große Hauptspeicher, die nicht immer genutzt
werden
• Ein Algorithmus plaziert Objektfragmente (Partitionen) in den Hauptspeicher der
verschiedenen Knoten
– Mehr Daten im Hauptspeicher bei Einsatz von Kompression
– Parallel Servers (PQ Slaves) arbeiten auf den jeweiligen Knoten
• Automatic Degree of Parallelism erforderlich
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
151
In-Memory Parallel Execution
SQL
Statement
Die Größe der angeforderten
Tabelle wird bestimmt
Tabelle ist sehr klein
Die Tabelle eignet sich für InMemory Parallel Execution
Fragmente der Tabelle
werden in den Buffer Cache
jedes einzelnen Knotens
gelesen
Tabelle ist sehr
groß
In den Buffer Cache
irgendeines Knotens lesen
Immer direkt von Disk
lesen
Nur Parallel Server auf
demselben RAC-Knoten
werden auf die einzelnen
Fragemente zugreifen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
152
Parameter für Parallel Query
Oracle DB 11.2
• Neue Parameter
–
–
–
–
–
parallel_degree_limit = 'CPU'
parallel_degree_policy = MANUAL
parallel_force_local = FALSE
parallel_min_time_threshold = AUTO
parallel_servers_target = 8
(CPU|IO|integer)
(MANUAL|LIMITED|AUTO)
(FALSE|TRUE)
(AUTO|integer)
(0 - max_servers)
• Parameter
–
–
–
–
–
–
–
parallel_adaptive_multi_user = TRUE
parallel_execution_message_size = 2148
parallel_instance_group = ' '
parallel_max_servers = 20
parallel_min_percent = 0
parallel_min_servers = 0
parallel_threads_per_cpu = 2
(TRUE|FALSE)
(2148 – 65535)
()
(0 - 3600) pro Instanz
(1 - 100) %
(0 - max_servers)
(1 - 4|8) pro core
• Veraltete Parameter
– parallel_automatic_tuning = FALSE
– parallel_io_cap_enabled = FALSE
(FALSE|TRUE)
(FALSE|TRUE)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
153
Parameter für Parallel Query
Oracle DB 11.2
• Parameter
–
–
–
–
–
–
–
–
–
–
–
–
parallel_degree_limit = 'CPU'
parallel_degree_policy = MANUAL
parallel_force_local = FALSE
parallel_min_time_threshold = AUTO
parallel_servers_target = 8
parallel_adaptive_multi_user = TRUE
parallel_execution_message_size = 2148
parallel_instance_group = ' '
parallel_max_servers = 20
parallel_min_percent = 0
parallel_min_servers = 0
parallel_threads_per_cpu = 2
(CPU|IO|integer)
(MANUAL|LIMITED|AUTO|ADAPTIVE)
(FALSE|TRUE)
(AUTO|integer)
(0 - max_servers)
(TRUE|FALSE)
(2148 – 65535)
()
(0 - 3600) pro Instanz
(1 - 100) %
(0 - max_servers)
(1 - 4|8) pro core
• Veraltete Parameter
– parallel_automatic_tuning = FALSE
– parallel_io_cap_enabled = FALSE
(FALSE|TRUE)
(FALSE|TRUE)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
154
Query Result Cache
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
155
Konzept und Einsatz des Result Cache
• Eigener Cache im Shared Pool
• Keine Installation notwendig
• Automatischer Refresh bei Datenänderungen
• Einfaches Setup und Monitoring der Cache-Nutzung
• Der Query Result Cache ist anwendbar für
– SQL-Abfragen
– PL/SQL-Funktionen
156
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Implementierung und Nutzung
• Anwendung steuerbar über Initialisierungsparameter
RESULT_CACHE_MODE
• Falls RESULT_CACHE_MODE=MANUAL gesetzt ist, dann einen Hint im
Statement einfügen wie z.B.
SELECT /*+ result_cache */ count(*) FROM sales
• Falls RESULT_CACHE_MODE=FORCE gesetzt ist, dann erfolgt ein
automatisches Einfügen des Hints im Root-SELECT
SELECT count(*) FROM sales
157
...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Parameter zum Result Cache
RESULT_CACHE_MAX_RESULT
RESULT_CACHE_MAX_SIZE
RESULT_CACHE_MODE
RESULT_CACHE_REMOTE_EXPIRATION
5 (%)
abhängig vom OS
MANUAL/FORCE
0 (min)
• RESULT_CACHE_MAX_SIZE: Gesamtgröße des reservierten Bereichs für den Result Cache im Shared Pool
• RESULT_CACHE_MAX_RESULT: Prozentualer Anteil am gesamten Result Cache für die einzelnen
Ergebnisse
• RESULT_CACHE_REMOTE_EXPIRATION: Zeitdauer bei Remote Objekt-Nutzung, wie lange das Resultat in
Minuten im Cache verbleibt
158
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel mit Hints
SQL> SELECT /*+ result_cache */ COUNT(*), SUM(salary)
FROM hr.bigemp group by department_id
ORDER BY department_id;
...
------------------------------------------------------------------------------------------------| Id
| Operation
| Name
| Rows
| Bytes | Cost (%CPU)| Time
------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
| 91myw5c1bud0mcn64g3d0ykdhm |
|
2 |
|
3 |
RESULT CACHE
SORT GROUP BY
|
TABLE ACCESS FULL| BIGEMP
|
11 |
55 |
2229
(2)| 00:00:34
|
|
|
11 |
55 |
2229
(2)| 00:00:34
|
|
876K|
4280K|
2201
(1)| 00:00:34
Statistics
----------------------------------------------------------------------------0
recursive calls
0
db block gets
0
consistent gets
0
physical reads
0
redo size
696
bytes sent via SQL*Net to client
419
bytes received via SQL*Net from client
2
SQL*Net roundtrips to/from client
0
sorts (memory)
0
sorts (disk)
12
159
rows processed
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
V$RESULT_CACHE_OBJECTS
SQL> SELECT name, type, row_count, invalidations, scan_count
FROM v$result_cache_objects;
NAME
TYPE
ROW_COUNT INVALIDATIONS SCAN_COUNT
-------------------- ---------- ---------- ------------- ---------HR.GET_DATUM
Dependency
0
0
0
SCOTT.EMP
Dependency
0
0
0
HR.BIGEMP
Dependency
0
1
0
1
0
1
12
0
4
"HR"."GET_DATUM"::8. Result
"GET_DATUM"#27dda668
fe0cf492 #1
SELECT /*+ result_ca Result
che */ COUNT(*),
SUM(salary)
FROM hr.bigemp group
by department_id OR
DER BY department
160
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Materialized Views und Kennzahlenkonzepte
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
161
Prinzip und Aufgabenstellung - Summentabellen
Basistabelle
Summentabelle
Complete Refresh
Incremental Refresh
?
Änderungen
162
stale
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Aufgaben der Materialized Views (MAVs)
• Erleichtern das Management von Summentabellen
– Wegfall von Erstellungsprozeduren
– Einfache Steuerung des Zeitpunktes zur Aktualisierung
– Eventuell Beschleunigung der Aktualisierung
(inkrementelles Refresh)
• Abfrage-Performance optimieren
• Variable Kennzahlensysteme aufbauen
– Mehrstufige MAVs
• Abfragegruppen zusammenfassen (Kategorisierung)
– Geschäftsobjekt-bezogene MAVs
163
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
MAV-Erstellung und erstmaliges Füllen
• Parameter des create Befehles I/II:
• BUILD IMMEDIATE (direkt bei der Erstellung, default)
– Problematisch bei großen Basistabellen und im Rahmen von Entwicklung / Test
• BUILD DEFERRED (Erstellung beim ersten Refresh)
– Sinnvoll bei erster Überführung neuer MAV-Definitionen in die
Produktionsumgebung
• ON PREBUILD
– Sinnvoll, wenn es separate Erstellungroutinen gibt, die ihr Ergebnis nur in einer
Tabelle ablegen können, man aber die Rewrite-Vorteile der MAVs nutzen will
– Kopie von normalen Views (analog zum vorigen Punkt)
164
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Refresh-Funktionen
• Parameter des create Befehles II/II:
• Refresh wie:
• COMPLETE
– Immer vollständiges Neuladen aus den
Basistabellen
• FAST (inkrementell)
– Nur bei vorhandenem MAV Log auf der
Basistabelle
• FORCE (inkrementell oder komplett,
default)
• NEVER
– Vorhalten historischer Bestände
oder bei separater Prozedur
• Refresh wann :
• ON COMMIT (oft bei OLTP)
– Commit einer Transaktion auf der
Basistabelle
• ON DEMAND (sinnvoll im DWH,
default)
– Je nach der zu erwartenden Refresh-Dauer
165
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Star Schema zum Testen
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
D_REGION
REGION_ID
ORT_ID
ORT_NAME
KREIS_ID
KREIS_NUMMER
KREIS_NAME
LAND_NAME
LAND_ID
LAND_NUMMER
REGION_NAME
REGION_NUMMER
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
D_KUNDE
KUNDEN_ID
VORNAME
NACHNAME
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
EINKOMMENSGRUPPE
ORTNR
BERUFSGRUPPE
STATUS
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
PLZ
ORT
DATA WAREHOUSE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
166
Beispiel einer Materialized View
CREATE MATERIALIZED VIEW MV_Standard
BUILD IMMEDIATE
REFRESH COMPLETE
ON DEMAND
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer
Jahr,
z.monat_desc
Monat,
sum(u.umsatz)
Summe,
a.artikel_id
ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc, a.artikel_id;
167
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Data Dictionary Views für MAVs
• Weitreichende Informationen über Zustand der MAVs und ihrer
dazugehörigen Basistabellen
– ALL_MVIEWS
– DBA_MVIEWS
– USER_MVIEWS
– USER_MVIEW_DETAIL_RELATIONS
– USER_MVIEW_DETAIL_SUBPARTITION
• Mit 11g wurde der Detailgrad in diesen Views erhöht, vor allem bei
partitionierten Tabellen (Staleness etc.)
168
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Testen und Ablaufbedingungen für MAV
set autotrace on;
-- Anzeige des Ausführungsplans
show parameter query
query_rewrite_enabled
query_rewrite_integrity
TRUE
STALE_TOLERATED
-----
erlaubt das Query Rewrite
erlaubt Query Rewrite, auch wenn
die Daten in der Basistabelle
nicht mehr aktuell sind
query_rewrite_integrity
TRUSTED
-----
auch deklarierte
Basis-Informantionen gelten
als korrekt (z. B. Views oder
prebuild)
query_rewrite_integrity
ENFORCED
-- Daten müssen stimmen
-- Ändern der Parameter mit
ALTER SESSION SET query_rewrite_enabled=TRUE;
ALTER SESSION SET query_rewrite_enabled=FALSE;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatische Aktualisierung von
Materialized Views
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
170
DBMS_MVIEW (Refresh-Funktion)
Aufeinander
Aufbauende
M-Views
• Refresh-Funktionen
– DBMS_MVIEW.REFRESH()
Umsatz Prod. Gr und Jahr
– DBMS_MVIEW.REFRESH_ALL_MVIEW()
SUM/Jahr
U Prod.A
U Prod B
SUM/Monat
JOIN
BasisTabellen
– DBMS_MVIEW.REFRESH_DEPENDENT()
D_Zeit
FAKT
D_PROD
• Refresh-Methoden (optional)
• COMPLETE (C)
• FAST
(F)
• FORCE (default)
(?)
• PARTITIONED (P)
• Transaktionsverhalten (optional)
• ATOMIC_REFRESH
• REFRESH_AFTER_ERRORS
• NESTED
Bsp.: EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD‘,'C');
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
DBMS_MVIEW (Refresh-Funktion)
• ATOMIC_REFRESH => TRUE | FALSE
– Refresh vollzieht sich in einer Transaktion
– Im Fehlerfall wird die Transaktion zurückgerollt
• REFRESH_AFTER_ERRORS => TRUE | FALSE
– Refresh von mehreren Materialized Views läuft weiter bzw. bricht ab, wenn bei einer MAV ein
Fehler aufgetreten ist
• NESTED
– Eine Materialized View und alle von ihr abhängigen MAVs werden aktualisiert
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD‘,'C');
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',atomic_refresh=>TRUE);
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',atomic_refresh=>TRUE,
nested => TRUE);
EXECUTE DBMS_MVIEW.REFRESH('MV_STANDARD',nested=>TRUE);
172
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Fast Refresh-Varianten
Aktualisierung über MAV Logs
MAV1
MAV2
Aktualisierung über Partition Change Tracking
(PCT)
MAV3
komplett
Partition 1
MAV1
Partition 2
MAV2
Partition 3
Partition 4
inkrementell
Partition 5
Partition 6
MAV Log
173
Basistabelle
Basistabelle
• WITH ROWID
• Join Dependency Expression
• SEQUENCE
• Partition Key
• INCLUDING NEW VALUES
• Partition Marker
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Fast Refresh mit MAV Log
--- MAV Log auf Tabelle D_Artikel
DROP MATERIALIZED VIEW LOG ON d_artikel;
CREATE MATERIALIZED VIEW LOG ON d_artikel
WITH ROWID, SEQUENCE
(dimension_key, nummer, artikel_name, artikel_id, gruppe_nr, gruppe_name,
sparte_name, sparte_nr)
INCLUDING NEW VALUES;
--- MAV Log auf Tabelle D_Zeit
DROP MATERIALIZED VIEW LOG ON d_zeit;
CREATE MATERIALIZED VIEW LOG ON d_zeit
WITH ROWID, SEQUENCE
(datum_id, datum_desc, tag_des_monats, tag_des_jahres, woche_des_jahres, monats_nummer,
monat_desc, quartals_nummer, jahr_nummer)
INCLUDING NEW VALUES;
--- MAV Log auf Tabelle F_Umsatz
DROP MATERIALIZED VIEW LOG ON f_umsatz;
CREATE MATERIALIZED VIEW LOG ON f_umsatz
WITH ROWID, SEQUENCE
(umsatz, menge, umsatz_nach_rabatt, rabatt_wert_firmenkunde,
Rabatt_wert_privatkunde, bestell_datum, artikel_id, kunde_id, region_id, zeit_id)
INCLUDING NEW VALUES;
174
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Fast Refresh mit MAV Log
CREATE MATERIALIZED VIEW MV_Standard_Fast_Refresh
BUILD IMMEDIATE
REFRESH FAST
ON DEMAND
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr, z.monat_desc Monat, sum(u.umsatz) Summe,
a.artikel_id ID, count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
SQL> SELECT mview_name, update_log, stale_since, staleness
GROUP BY
2 FROM user_mviews where mview_name = 'MV_STANDARD_FAST_REFRESH';
z.jahr_nummer,
MVIEW_NAME
UPDATE_LOG
STALE_SI
STALENESS
z.monat_desc,
------------------------------ ------------------------------ ------------a.artikel_id;
-MV_STANDARD_FAST_REFRESH
FRESH
175
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh mit Partition Key
• Der Partitioning Key der Basistabelle ist in dem SELECT- und eventuell in dem
GROUP BY-Teil, aber nicht in der WHERE-Klausel der MAV enthalten
• Führt zur Aggregierung
auf der Ebene des
Partitioning Keys
• Höhere Datenmenge als
ohne PCT
SQL> SELECT count(*)
2 FROM MV_Standard_PCT_Richtig;
COUNT(*)
---------41492
176
CREATE MATERIALIZED VIEW
MV_Standard_PCT_Richtig
AS SELECT
u.bestell_datum,
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
u.bestell_datum, z.jahr_nummer,
z.monat_desc, a.artikel_id;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh Join Dependency Expression
• Partitioning Key kommt in der Join Condition vor und eine Spalte der
Basistabelle im SELECT-Teil der MAV
CREATE MATERIALIZED VIEW
MV_Standard_PCT_Falsch
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id and
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
177
CREATE MATERIALIZED VIEW
MV_Standard_PCT_Richtig
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id and
u.bestell_datum = z.datum_desc
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh mit Partition Marker
• Die Partitionmarker-Funktion liefert pro Partition einen Wert, der beliebige Level für
die Aggregationen in der MAV erlaubt
SQL> SELECT count(*) FROM
MV_Standard_PCT_Par_MARKER;
COUNT(*)
---------2869
178
CREATE MATERIALIZED VIEW MV_Standard_PCT_Par_MARKER
AS SELECT
dbms_mview.pmarker(u.rowid) AS pmark,
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz_Par u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id and
u.bestell_datum = z.datum_desc
GROUP BY
z.jahr_nummer,z.monat_desc,a.artikel_id,
dbms_mview.pmarker(u.rowid) ;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
PCT Refresh und MAV Log Refresh
• Fast Refresh über MAV Logs funktioniert nicht, wenn Partitionen
hinzukommen oder gelöscht werden
• Für bestimmte MAVs funktioniert das Log-Verfahren nicht, z.B.
Verwendung der RANK-Funktion
• PCT Refresh ist schneller, wenn viele Änderungen pro Partition gemacht
wurden
• PCT Refresh lässt sich parallelisieren
• MAVs können bei PCT trotz “Staleness” mancher Partitionen für Query
Rewrite genutzt werden
179
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Refresh Performance Tipps
• Optimizer-Statistiken immer aktuell halten
– Nach jedem Laden aktualisieren
– DBMS_STATS auch über MAVs laufen lassen
• ATOMIC_REFRESH auf FALSE setzen
• PCT nutzen, wo es geht
– Auch die MAV kann partitioniert werden (bringt zusätzliche Performance beim Refresh)
• Parallele Ausführung verwenden
• Mit REFRESH_ALL arbeiten
– DB organisiert sich die Abarbeitung selbst und parallelisiert automatisch bei Bedarf
– Berücksichtigt auch Abhängigkeiten zwischen einzelnen MAVs
180
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Nutzenpotenziale durch MAV heben
• Wartbarkeit und Wiederverwendbarkeit
• Konzept erstellen als Grundlage für MAVs
• Komplexität reduzierne der einzelnen SQL
• Keine MAV für einzelne Abfrage
• Einfache Pflege
• Aufeinander aufbauende MAV
• Einsatz der Automatismen prüfen (refresh)
• Verwendung der MAV mit System Views prüfen
• Performance im ETL
• Trennung von unterschiedlichen Aufgaben (Join, Aggregation)
• Abhängige Elemente nutzen
• Effiziente Nutzung
• Unterstützende Elemente nutzen (Dimensionen)
• Partitionierung prüfen
181
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Konzepte rund um Materialized Views
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
182
Prinzip: Nested Materialized Views
Umsatz aggregiert auf Jahreslevel
Umsatz aggregiert auf Monatslevel
sum / count
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
183
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Prinzip: Nested Materialized Views
CREATE MATERIALIZED VIEW MV_Umsatz_Monat
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,a.artikel_id;
184
CREATE MATERIALIZED VIEW MV_Umsatz_Jahr
ENABLE QUERY REWRITE
AS SELECT
Jahr,
sum(summe) Summe,
ID artikel_id,
count(summe)
FROM
MV_Umsatz_Monat
GROUP BY
jahr,ID;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Vorteil: Minimierung von Komplexität
“Liefere die Artikel mit dem größten Umsatz im November 2006”
CREATE MATERIALIZED VIEW MV_Umsatz_Komplex
ENABLE QUERY REWRITE
AS SELECT
a.artikel_name, sum(u.umsatz)
FROM
f_umsatz u, d_artikel a
WHERE
a.artikel_id = u.artikel_id
GROUP BY
a.artikel_name
HAVING sum(u.umsatz)
--> kein Fast Refresh möglich
IN (SELECT max(u.umsatz)
FROM f_umsatz u, d_zeit z
WHERE u.zeit_id = z.datum_id AND
z.monat_desc = 'November' AND
z.jahr_nummer = '2006'
GROUP BY u.artikel_id);
185
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Vorteil: Minimierung von Komplexität
• Minimierung von Komplexität
“Liefere die Artikel mit dem größten Umsatz im November 2006”
CREATE MATERIALIZED VIEW MV_Umsatz_KOMBINATION
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS
SELECT artikel, umsatz_summe FROM MV_Umsatz_Komplex_SUB1
WHERE umsatz_summe IN (SELECT umsatz_max FROM MV_Umsatz_Komplex_SUB2);
CREATE MATERIALIZED VIEW
MV_Umsatz_Komplex_SUB1
ENABLE QUERY REWRITE
AS
SELECT a.artikel_name Artikel,
sum(u.umsatz)umsatz_summe,
count(u.umsatz), count(*)
FROM f_umsatz u, d_artikel a
WHERE a.artikel_id = u.artikel_id
GROUP BY a.artikel_name;
186
CREATE MATERIALIZED VIEW
MV_Umsatz_Komplex_SUB2
ENABLE QUERY REWRITE
AS
SELECT u.artikel_id,
max(u.umsatz) umsatz_max
FROM f_umsatz u, d_zeit z
WHERE u.zeit_id = z.datum_id AND
z.monat_desc = 'November' AND
z.jahr_nummer = '2006'
GROUP BY u.artikel_id;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Kennzahlen standardisieren
Umsatz Prod. Gr B relativ zum Gesamtjahresumsatz
Summierung/Jahr
Umsatz Prod.Gr A
Umsatz Prod.Gr B
Summierung/Monat
Aufwändige
Join-Operation
DIM_Zeit
187
FAKT_Umsatz
Materialized View
Level 4
Materialized View
Level 3
Materialized View
Level 2
Materialized View
Level 1
DIM_Produkte
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Basistabellen
DATA WAREHOUSE
Kennzahlen standardisieren
• Kennzahlen nur als Materialized Views
• Automatisches Refresh anstatt ETL
• Standardisierte und stimmige
• Kennzahlen
User View Layer
• Wiederverwenden von
• bereits aggregierten Daten
L1
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
L2
L3
L4
DATA WAREHOUSE
Beispiel
Mv_EA_Finanz_Kum_Gruppe_Monat
Level 4
Produktgruppen-Sicht
Finanz-Sicht / Berechnungen
Level 3
LFD_Bestands_Wert / Produkt / Monat
LFD_Saldo / Produkt / Monat
Kumulierter EK / Produkt
Kumulierter VK / Produkt
Kumuliertes Saldo
Mv_EA_Finanz_Kum_Monat
Jahres-Sicht
Bestands-/Lager-Sicht / Berechnungen
Mav_Einkauf_Verkauf_Diff_Jahr
LFD_Bestands_Menge / Produkt / Monat
VK_Menge / Produkt / Monat
EK_Menge / Produkt / Monat
Kumulierte EK Menge / Produkt
Kumulierte VK Menge / Produkt
Mv_EA_Menge_Kum_Monat
Level 2
Mav_Produkt_Monat_einkaeufe
F_EINKAEUFE
Level 1
Mav_Produkt_Monat_Verkaeufe
F_POSITION
F_KAUF
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
EA: Einkauf/Verkauf
Kum: kumuliert
DATA WAREHOUSE
Der Weg in die BI-Tools
User View Layer
So viel wie möglich in der
DB vorbereiten
Millionen von Sätzen
Verhindert unnötiges
Kopieren
Keine Verlagerung von
Pseudo-ETL in die BI-Tools
Standardisierte Kennzahlen
User View Layer
Oder so
BI-Tool Server + Caches
So
WenigeSätze
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Konzept zur Verteilung von Materialized im Star Schema
MAV_Region_Zeit_Artikel_Umsatz
MAV_Region_Artikel_Umsatz
MAV_Region_Umsatz
D_REGION
F_UMSATZ
D_ZEIT
MAV_Zeit_Umsatz
D_KUNDE
D_ARTIKEL
MAV_Artikel_Umsatz
MAV_Kunde_Umsatz
MAV_Region_Zeit_Umsatz
MAV_Kunde_Zeit_Umsatz
191
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zugriffspfade planen
Sprechende Name
Übersichtliche Darstellung
Ziele:
Keine MAV für spezielle Abfrage von Herrn M
Abfragestatistiken verwenden
Nutzung überwachen (siehe Systemtabellen)
Architektur auch für Pflege optimieren
...
192
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatisches “Query Rewrite”
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
193
Rewrite Prüfung – Abarbeitungsreihenfolge
• Textvergleich der SELECT-Liste
– Reihenfolge spielt dabei keine Rolle
– Auflösung von möglichen Berechnungen
• Vergleich der Join-Bedingung
• Vergleich der GROUP BY-Klausel
194
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel-MAV für die folgenden Abfragen
CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz)Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc, a.artikel_id;
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
195
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA
DATAWAREHOUSE
WAREHOUSE
Exaktes Text-Matching
• Umstellen der Spalten und avg() anstelle von sum()
SELECT
z.jahr_nummer Jahr,
sum(u.umsatz)Summe,
a.artikel_id ID,
z.monat_desc Monat
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
196
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
sum / count
SELECT
z.jahr_nummer Jahr,
avg(u.umsatz) Schnitt,
a.artikel_id ID,
z.monat_desc Monat
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id;
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Prinzip Aggregate Rollup
SELECT
z.jahr_nummer Jahr, --> Bezugsgröße in MAV ist Monat
sum(u.umsatz) Summe,
a.artikel_id ID,
count(u.umsatz)
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, a.artikel_id;
• Abfragen lässt sich alles, was in der GROUP BY-Klausel der MAV zu finden ist
197
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Join Back-Methode
SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
a.artikel_name Artikel,
sum(u.umsatz) Summe
Ist nicht in der
MAV-Definition
enthalten
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc, a.artikel_Name;
• Join Back-Tabelle muss einen Primary Key nutzen
198
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Ausführungsplan Join Back-Methode
Ohne Join Back
---------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
| 3511 |
246K|
172
(5)| 00:00:03 |
|
1 | HASH GROUP BY
|
| 3511 |
246K|
172
(5)| 00:00:03 |
|* 2 |
HASH JOIN
|
|
100K| 7031K|
168
(3)| 00:00:03 |
|
3 |
TABLE ACCESS FULL | D_ZEIT
| 3074 | 55332 |
8
(0)| 00:00:01 |
|* 4 |
HASH JOIN
|
|
100K| 5273K|
159
(2)| 00:00:02 |
|
5 |
TABLE ACCESS FULL| D_ARTIKEL |
65 | 2860 |
3
(0)| 00:00:01 |
|
6 |
TABLE ACCESS FULL| F_UMSATZ |
100K|
976K|
155
(2)| 00:00:02 |
----------------------------------------------------------------------------------
Mit Join Back
-------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
65 | 5785 |
15 (14)| 00:00:01 |
|
1 | HASH GROUP BY
|
|
65 | 5785 |
15 (14)| 00:00:01 |
|* 2 |
HASH JOIN
|
| 6363 |
553K|
14
(8)| 00:00:01 |
|
3 |
TABLE ACCESS FULL
| D_ARTIKEL
|
65 | 2860 |
3
(0)| 00:00:01 |
|
4 |
MAT_VIEW REWRITE ACCESS FULL| MV_UMS_ART_ZEIT | 6363 |
279K|
10
(0)| 00:00:01 |
--------------------------------------------------------------------------------------------------
199
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einfache Join-Bedingungen in MAVs Grundlage für
flexiblere Abfragen
Einfache Join-Bedingung
CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit_Join
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
a.artikel_id ID,
u.umsatz Umsatz
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id;
200
SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id AND
z.jahr_nummer = '2007'
GROUP BY
z.jahr_nummer, z.monat_desc;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Materialized Views und Hierarchisierung von
Dimensionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
201
Dimensionale Tabelle als Optimizer-Hilfe
• Abfragen über alle Spalten der Dimensionstabelle
• Eine Definition für Dimensionen festlegen
CREATE DIMENSION d_artikel
LEVEL artikel IS d_artikel.artikel_id
LEVEL gruppe IS d_artikel.gruppe_nr
LEVEL sparte IS d_artikel.sparte_nr
HIERARCHY h_art
(artikel CHILD OF gruppe CHILD OF
sparte)
ATTRIBUTE att_artikel LEVEL artikel
DETERMINES d_artikel.artikel_name
ATTRIBUTE att_gruppe LEVEL gruppe
DETERMINES d_artikel.gruppe_name
ATTRIBUTE att_sparte LEVEL sparte
DETERMINES d_artikel.sparte_name;
CREATE TABLE d_artikel
(
dimension_key NUMBER(3) NOT NULL,
nummer
NUMBER(8),
artikel_name VARCHAR2(50),
artikel_nummer NUMBER(3),
gruppe_nr
NUMBER(3),
gruppe_name
VARCHAR2(50),
sparte_name
VARCHAR2(50),
sparte_nr
NUMBER(3));
202
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
sum / count
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Dimensionale Tabelle als Optimizer-Hilfe
Abfrage auf Spartenebene
Definition auf Artikelebene
CREATE MATERIALIZED VIEW MV_UMS_ART_Dim
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
a.artikel_id ID,
sum(u.umsatz) Umsatz
FROM
f_umsatz u, d_artikel a
WHERE
a.artikel_id = u.artikel_id
GROUP BY
a.artikel_id;
203
D_ZEIT
DATUM_DESC
TAG_DES_MONATS
WOCHE_DES_JAHRES
JAHR_NUMMER
QUARTALS_NUMMER
MONATS_NUMMER
MONAT_DESC
DATUM_ID
sum / count
SELECT
a.sparte_name Sparte,
sum(u.umsatz) Summe
FROM
f_umsatz u, d_artikel a
WHERE
a.artikel_id = u.artikel_id
GROUP BY
a.sparte_name;
F_UMSATZ
ARTIKEL_ID
ZEIT_ID
KUNDE_ID
REGION_ID
UMSATZ
MENGE
BESTELL_DATUM
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
D_ARTIKEL
SPARTE_NAME
SPARTE_NR
GRUPPE_NAME
GRUPPE_NR
ARTIKEL_NAME
ARTIKEL_ID
DATA WAREHOUSE
Dimensionale Tabelle als Optimizer-Hilfe
Ohne Rewrite auf Basis einer dimensionalen Tabelle
--------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
28 |
163
(5)| 00:00:02 |
|
1 | HASH GROUP BY
|
|
1 |
28 |
163
(5)| 00:00:02 |
|* 2 |
HASH JOIN
|
|
100K| 2734K|
158
(2)| 00:00:02 |
|
3 |
TABLE ACCESS FULL| D_ARTIKEL |
65 | 1430 |
3
(0)| 00:00:01 |
|
4 |
TABLE ACCESS FULL| F_UMSATZ |
100K|
585K|
154
(1)| 00:00:02 |
---------------------------------------------------------------------------------
Mit Rewrite auf Basis einer dimensionalen Tabelle
-------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
1 |
48 |
7 (29)| 00:00:01 |
|
1 | HASH GROUP BY
|
|
1 |
48 |
7 (29)| 00:00:01 |
|
2 |
MERGE JOIN
|
|
63 | 3024 |
6 (17)| 00:00:01 |
|
3 |
TABLE ACCESS BY INDEX ROWID | D_ARTIKEL
|
65 | 1430 |
2
(0)| 00:00:01 |
|
4 |
INDEX FULL SCAN
| PK_ART_ID
|
65 |
|
1
(0)| 00:00:01 |
|* 5 |
SORT JOIN
|
|
63 | 1638 |
4 (25)| 00:00:01 |
|
6 |
MAT_VIEW REWRITE ACCESS FULL| MV_UMS_ART_DIM |
63 | 1638 |
3
(0)| 00:00:01 |
--------------------------------------------------------------------------------------------------
204
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Prüfen der Stimmigkeit einer Dimension
ATTRIBUTE-Klausel
HIERARCHY-Klausel
SPARTE_NAME
SPARTE_NR
funktionale
Abhängigkeit
GRUPPE_NAME
GRUPPE_NR
funktionale
Abhängigkeit
ARTIKEL_NAME
ARTIKEL_ID
funktionale
Abhängigkeit
1 : n-Beziehung
1 : n-Beziehung
205
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Prüfen der Stimmigkeit einer Dimension
\ora-home\RDBMS\ADMIN\utldim.sql
SQL> desc dimension_exceptions
Name
------------------------------STATEMENT_ID
OWNER
TABLE_NAME
DIMENSION_NAME
RELATIONSHIP
BAD_ROWID
 Legt Tabelle DIMENSION_EXCEPTIONS an
DBMS_OLAP.VALIDATE_DIMENSION
-- Prüfen der Dimension mit:
variable stmt_id varchar2(30);
execute :stmt_id := 'CUST_DIM_VAL';
execute dbms_dimension.validate_dimension ('MAV.D_ARTIKEL',FALSE,TRUE,:stmt_id );
-- Fehlermeldungen abfragen mit:
SELECT distinct owner, table_name, dimension_name, relationship
FROM dimension_exceptions
WHERE statement_id = :stmt_id;
206
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hilfsmittel bei der Verwaltung von
Materialized Views
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
207
EXPLAIN_MVIEW – Auswertung
start D:\O11\db11\RDBMS\ADMIN\utlxmv.sql
SQL> desc MV_CAPABILITIES_TABLE;
Name
Null?
----------------------------------------- -------STATEMENT_ID
MVOWNER
MVNAME
CAPABILITY_NAME
POSSIBLE
RELATED_TEXT
RELATED_NUM
MSGNO
MSGTXT
SEQ
208
Typ
--------------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
CHAR(1)
VARCHAR2(2000)
NUMBER
NUMBER(38)
VARCHAR2(2000)
NUMBER
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_MVIEW-Routine
• Zeigt auf, welche Funktionen für die jeweilige MAV genutzt werden
kann
EXECUTE dbms_mview.explain_mview(_
'SELECT sum(u.umsatz),a.artikel_name _
FROM f_umsatz u, d_artikel a _
WHERE a.artikel_id = u.artikel_id _
GROUP BY a.artikel_name');
209
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_MVIEW-Routine
SELECT capability_name, possible p, substr(related_text,1,20) obj, substr(msgtxt,1,100)
erklaerung FROM mv_capabilities_table;
CAPABILITY_NAME
-----------------------------PCT
REFRESH_COMPLETE
REFRESH_FAST
REWRITE
PCT_TABLE
PCT_TABLE
REFRESH_FAST_AFTER_INSERT
REFRESH_FAST_AFTER_INSERT
REFRESH_FAST_AFTER_ONETAB_DML
REFRESH_FAST_AFTER_ONETAB_DML
REFRESH_FAST_AFTER_ONETAB_DML
P
N
Y
N
Y
N
N
N
N
N
N
N
CAPABILITY_NAME
-----------------------------REFRESH_FAST_AFTER_ONETAB_DML
REFRESH_FAST_AFTER_ANY_DML
REFRESH_FAST_PCT
P OBJ
ERKLAERUNG
- --------------------------------------------------------------------N
SUM(expr) ohne COUNT(expr)
N
Siehe Grund, warum REFRESH_FAST_AFTER_ONETAB_DML deaktiviert ist
N
PCT bei keiner der Detail-Tabellen in der Materialized
View m÷glich
Y
Y
Y
N
Allgemeines Neuschreiben nicht m÷glich oder PCT bei keiner
der Detail-Tabellen m÷glich
N F_UMSATZ
Relation ist keine partitionierte Tabelle
N D_ARTIKEL
Relation ist keine partitionierte Tabelle
REWRITE_FULL_TEXT_MATCH
REWRITE_PARTIAL_TEXT_MATCH
REWRITE_GENERAL
REWRITE_PCT
PCT_TABLE_REWRITE
PCT_TABLE_REWRITE
210
OBJ
ERKLAERUNG
------------------------------------------------------------------------
F_UMSATZ
D_ARTIKEL
MAV.F_UMSATZ
MAV.D_ARTIKEL
SUM(U.UMSATZ)
Relation ist keine partitionierte Tabelle
Relation ist keine partitionierte Tabelle
Detail-Tabelle enthΣlt kein Materialized View-Log
Detail-Tabelle enthΣlt kein Materialized View-Log
SUM(expr) ohne COUNT(expr)
Siehe Grund, warum REFRESH_FAST_AFTER_INSERT deaktiviert ist
COUNT(*) ist in SELECT-Liste nicht vorhanden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_REWRITE-Routine
Angabe der Bedingungen für Query Rewrite
@D:\app\aths\product\11.1.0\db_1\RDBMS\ADMIN\utlxrw.sql
SQL> desc rewrite_table
Name
Null?
----------------------------------------- -------STATEMENT_ID
MV_OWNER
MV_NAME
SEQUENCE
QUERY
QUERY_BLOCK_NO
REWRITTEN_TXT
MESSAGE
PASS
MV_IN_MSG
MEASURE_IN_MSG
JOIN_BACK_TBL
JOIN_BACK_COL
ORIGINAL_COST
REWRITTEN_COST
FLAGS
RESERVED1
RESERVED2
211
Typ
--------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
NUMBER(38)
VARCHAR2(4000)
NUMBER(38)
VARCHAR2(4000)
VARCHAR2(512)
VARCHAR2(3)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
VARCHAR2(4000)
NUMBER(38)
NUMBER(38)
NUMBER(38)
NUMBER(38)
VARCHAR2(10)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
EXPLAIN_REWRITE-Routine
MAV-Definition
CREATE MATERIALIZED VIEW MV_UMS_ART_Zeit_Join
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
a.artikel_id ID,
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id;
select mv_name, message from rewrite_table;
MV_UMS_ART_ZEIT_JOIN
QSM-01150: Abfrage wurde nicht umgeschrieben
DBMS_MVIEW.EXPLAIN_REWRITE
begin
dbms_mview.explain_rewrite('
SELECT
z.jahr_nummer Jahr,
z.monat_desc Monat,
sum(u.umsatz) Summe,
a.artikel_id ID
FROM
f_umsatz u,
d_artikel a,
d_zeit z
WHERE
a.artikel_id = u.artikel_id AND
u.zeit_id = z.datum_id
GROUP BY
z.jahr_nummer, z.monat_desc,
a.artikel_id', 'MV_UMS_ART_Zeit_Join');
end;
MV_UMS_ART_ZEIT_JOIN
QSM-01082: Materialized View, MV_UMS_ART_ZEIT_JOIN, kann nicht mit Tabelle, F_UMSATZ,
verknüpft werden
MV_UMS_ART_ZEIT_JOIN
QSM-01102: Materialized View, MV_UMS_ART_ZEIT_JOIN, erfordert Join zurück zu Tabelle, F_UMSATZ,
in Spalte, UMSATZ
212
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Analytische SQL-Funktionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
213
Analytische Funktionen
• Einsatz bei dem Aufbau von festen, bekannten Kennzahlen
• Ideal in dem Zusammenspiel mit Materialized Views
• Lösung könnte auch mit reinem SQL erfolgen
aber
– Analytische Funktionen machen die Abfrage schlanker
– Sie sind in der Regel schneller, weil man Mehrfachlesen von Tabellen verhindert
– Sie liefern mehr Flexibilität weil mit Gruppierungen gezielter umgegangen werden kann
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel
Star Schema
D_KUNDE
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
ORTNR
ORT
KREISNR
KREIS
LANDNR
LAND
REGIONNR
REGION
215
PK
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
PK
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
PK: Btree Index
FK: Bitmap Index
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
KUNDEN_ID
PK
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
ANREDE
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
ORTNR NUMBER,
BERUFSGRUPPE
STATUS
STRASSE
TELEFON
TELEFAX
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
HAUSNUMMER
PLZ
ORT
KUNDENKARTE
ZAHLUNGSZIEL_TAGE
TOTAL
TOTAL_NR
DATA WAREHOUSE
Gruppierungen auf unterschiedlichen Leveln
Over Partition By
• Allgemeines Format
Function(arg1,..., argn) OVER ( [PARTITION BY <...>]
[ORDER BY <....>] [<window_clause>] )
• Beispiel
Beispiel:
sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einfaches Beispiel
Mit nur einer Tabelle
select
Artikelname,
Artikelgruppe,
Wert,
sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert
from Artikel ;
Beispieltabelle:
create table Artikel (
Artikelname
Artikelgruppe
wert
varchar2(10),
varchar2(10),
number);
insert into Artikel values('Schraube','Beschlag',1);
insert into Artikel values('Winkel','Beschlag',2);
insert into Artikel values('Mutter','Beschlag',1);
insert into Artikel values('Kabel','Elektro',6);
insert into Artikel values('Lampe','Elektro',5);
insert into Artikel values('Klemme','Elektro',2);
....................
ARTIKELNAM
---------Schraube
Winkel
Mutter
Winkel
Schraube
Mutter
Winkel
Schraube
Mutter
Kabel
Kabel
Lampe
Klemme
Klemme
Lampe
Kabel
Lampe
Klemme
ARTIKELGRU WERT GRUPPENGESAMTWERT
---------- ---- ----------------Beschlag
2
12
Beschlag
2
12
Beschlag
1
12
Beschlag
2
12
Beschlag
1
12
Beschlag
1
12
Beschlag
2
12
Beschlag
1
12
Beschlag
1
12
Elektro
6
39
Elektro
6
39
Elektro
5
39
Elektro
2
39
Elektro
2
39
Elektro
5
39
Elektro
6
39
Elektro
5
39
Elektro
2
39
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Abgrenzung gegenüber GROUP BY / Aggregationen
• Bei der GROUP BY – Lösung müssen aller Felder in dem SELECT-Teil auch unter
GROUP BY aufgelistet werden
SQL> select sum(wert),
artikelname,
artikelgruppe
from
artikel
group by
artikelname;
ERROR at line 1:
ORA-00979: not a GROUP BY expression
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verhindern von Mehrfachlesen
Mit analytischen Funktionen
select Artikelname,
Artikelgruppe,
Wert,
sum(wert) over (partition by Artikelname) Artikelgesamtwert,
sum(wert) over (partition by Artikelgruppe) Gruppengesamtwert,
round(((sum(wert) over (partition by Artikelname))/(sum(wert) over (partition by
Artikelgruppe))*100),0) Prozent from Artikel ;
Ohne analytische Funktionen
select
wert_art,
art.artikelname,
wert_gr,
art.artikelgruppe,
round((art.wert_art/gr.wert_gr*100),0) Prozent
from
(select sum(wert) wert_art, artikelname,ARTIKELGRUPPE from artikel group by
artikelname,ARTIKELGRUPPE) art,
(select sum(wert) wert_gr, ARTIKELGRUPPE from artikel group by ARTIKELGRUPPE) gr
where
art.ARTIKELGRUPPE = gr.ARTIKELGRUPPE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mit analytischen Funktionen
Ohne analytische Funktionen
ARTIKELNAM
---------Kabel
Kabel
Kabel
Klemme
Klemme
Klemme
Lampe
Lampe
Lampe
Mutter
Mutter
Mutter
Schraube
Schraube
Schraube
Winkel
Winkel
Winkel
ARTIKELNAM
---------Kabel
Kabel
Kabel
Klemme
Klemme
Klemme
Lampe
Lampe
Lampe
Mutter
Mutter
Mutter
Schraube
Schraube
Schraube
Winkel
Winkel
Winkel
ARTIKELGRU
WERT ARTIKELGESAMTWERT GRUPPENGESAMTWERT
PROZENT
---------- ---------- ----------------- ----------------- ---------Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
5
15
39
38
Elektro
5
15
39
38
Elektro
5
15
39
38
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
2
6
12
50
Beschlag
2
6
12
50
Beschlag
2
6
12
50
ARTIKELGRU
WERT ARTIKELGESAMTWERT GRUPPENGESAMTWERT
PROZENT
---------- ---------- ----------------- ----------------- ---------Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
6
18
39
46
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
2
6
39
15
Elektro
5
15
39
38
Elektro
5
15
39
38
Elektro
5
15
39
38
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
1
3
12
25
Beschlag
2
6
12
50
Beschlag
2
6
12
50
Beschlag
2
6
12
50
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verhindern von Doppellesen
Mit analytischen Funktionen
------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
18 |
342 |
5 (40)| 00:00:01 |
|
1 | WINDOW SORT
|
|
18 |
342 |
5 (40)| 00:00:01 |
|
2 |
WINDOW SORT
|
|
18 |
342 |
5 (40)| 00:00:01 |
|
3 |
TABLE ACCESS FULL| ARTIKEL |
18 |
342 |
3
(0)| 00:00:01 |
-------------------------------------------------------------------------------
Ohne analytische Funktionen
-------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
9 |
423 |
9 (34)| 00:00:01 |
|* 1 | HASH JOIN
|
|
9 |
423 |
9 (34)| 00:00:01 |
|
2 |
VIEW
|
|
2 |
40 |
4 (25)| 00:00:01 |
|
3 |
HASH GROUP BY
|
|
2 |
24 |
4 (25)| 00:00:01 |
|
4 |
TABLE ACCESS FULL| ARTIKEL |
18 |
216 |
3
(0)| 00:00:01 |
|
5 |
VIEW
|
|
9 |
243 |
4 (25)| 00:00:01 |
|
6 |
HASH GROUP BY
|
|
9 |
171 |
4 (25)| 00:00:01 |
|
7 |
TABLE ACCESS FULL| ARTIKEL |
18 |
342 |
3
(0)| 00:00:01 |
-------------------------------------------------------------------------------Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel
Mit mehreren Tabellen
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
PK
Wieviel Prozent machen der
Gesamtumsatzes pro Artikel an dem Gesamtumsatz der zugehörigen
Gruppe aus?
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
Gesamtumsatz Einzelartikel im Vergleich zu
durchschnittlichem Artikelumsatz pro Gruppe
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lösung 1 – ohne analytische Funktion
select Artikel, Artikel_Gesamt, Gruppe_Gesamt,
round((Artikel_Gesamt/Gruppe_Gesamt*100),0) Prozent from
(
with artikel_summe AS
(SELECT a.artikel_name, sum(u.umsatz) Wert_p_Artikel
FROM
f_Umsatz U,
D_artikel a
WHERE
U.artikel_id
= a.artikel_id
group by a.artikel_name)
SELECT distinct a.artikel_name Artikel,
s.Wert_p_Artikel Artikel_Gesamt,
sum(u.umsatz) over (partition by a.GRUPPE_NAME) Gruppe_Gesamt
FROM
f_Umsatz U,
D_artikel a,
artikel_summe s
WHERE
U.artikel_id
= a.artikel_id and
a.ARTIKEL_NAME = s.ARTIKEL_NAME);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lösung 2 – mit sum() OVER (PARTITION...)
select artikel,
umsatz_pro_Artikel,
gruppe,
sum(umsatz_pro_Artikel) over (partition by Gruppe) Gruppe_Gesamt,
round(umsatz_pro_Artikel/(sum(umsatz_pro_Artikel) over (partition by Gruppe))*100,0)
Prozent
from
(
SELECT a.artikel_name Artikel,
a.GRUPPE_NAME Gruppe,
sum(u.umsatz) umsatz_pro_Artikel
FROM
f_Umsatz U,
D_artikel a
WHERE
U.artikel_id
= a.artikel_id
group by a.artikel_name, a.GRUPPE_NAME
)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Analog: Vergleiche mit Durchschnittsmengen
Gesamtumsatz Einzelartikel im Vergleich zu
select artikel,
durchschnittlichem Artikelumsatz pro Gruppe
umsatz_pro_Artikel,
gruppe,
avg(umsatz_pro_Artikel) over (partition by Gruppe) Gruppe_Gesamt,
round(umsatz_pro_Artikel/(avg(umsatz_pro_Artikel) over (partition by Gruppe))*100,0) Prozent
from
(
SELECT a.artikel_name Artikel,
a.GRUPPE_NAME Gruppe,
sum(u.umsatz) umsatz_pro_Artikel
FROM
f_Umsatz U,
D_artikel a
WHERE
U.artikel_id
= a.artikel_id
group by a.artikel_name, a.GRUPPE_NAME
)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Year-To-Date Analysen
- Auflistung von Umsatz pro Monat und Jahr
- Kumulierung der Monatsumsätze von Jahresbeginn an
select
z.Jahr_nummer Jahr,
z.MONAT_DESC Monat,
sum(u.umsatz) Umsatz,
sum(sum(u.umsatz)) over (PARTITION by z.Jahr_nummer order by z.MONATS_NUMMER) year_to_date
from
D_ZEIT
f_umsatz u,
DATUM_ID
TAG_DES_MONATS
d_zeit z
TAG_DES_JAHRES
where
WOCHE_DES_JAHRES
MONATS_NUMMER
z.zeit_id = u.zeit_id
F_UMSATZ
MONAT_DESC
group by
QUARTALS_NUMMER
ARTIKEL_ID
JAHR_NUMMER
KUNDEN_ID
z.Jahr_nummer,
ZEIT_ID
ZEIT_ID
z.MONATS_NUMMER,
REGION_ID
KANAL_ID
z.MONAT_DESC
UMSATZ
/
MENGE
UMSATZ_GESAMT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ausführungsplan
• Alle Tabellen werden nur einmal gelesen
• Ausführung der Kumulation am Ende kurz vor der Ausgabe
------------------------------------------------------------------------------|Id | Operation
| Name
|Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
| 1153 | 42661 |
190
(4)| 00:00:03 |
| 1 | WINDOW BUFFER
|
| 1153 | 42661 |
190
(4)| 00:00:03 |
| 2 |
SORT GROUP BY
|
| 1153 | 42661 |
190
(4)| 00:00:03 |
|* 3 |
HASH JOIN
|
|97384 | 3518K|
186
(2)| 00:00:03 |
| 4 |
TABLE ACCESS FULL| D_ZEIT | 5844 |
142K|
13
(0)| 00:00:01 |
| 5 |
TABLE ACCESS FULL| F_UMSATZ| 100K| 1171K|
171
(1)| 00:00:03 |
--------------------------------------------------------------------------------
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Rank() Over Partition
Ranking / Reihenfolgen
Was ist das umsatzstärkste Quartal pro Jahr
select * from
(select sum(u.umsatz) Umsatz,
z.Jahr_nummer Jahr
,z.Quartals_nummer "Top-Quartal",
RANK() OVER (PARTITION by z.Jahr_nummer ORDER BY sum(U.umsatz) ASC ) AS Rangfolge
D_ZEIT
from
DATUM_ID
f_umsatz u,
TAG_DES_MONATS
d_zeit z
TAG_DES_JAHRES
WOCHE_DES_JAHRES
where
MONATS_NUMMER
F_UMSATZ
z.zeit_id = u.zeit_id and
MONAT_DESC
QUARTALS_NUMMER
ARTIKEL_ID
z.Jahr_nummer between 2006 and 2011
JAHR_NUMMER
KUNDEN_ID
group by z.Jahr_nummer,z.Quartals_nummer)
ZEIT_ID
ZEIT_ID
REGION_ID
where Rangfolge = 1
KANAL_ID
order by Jahr;
UMSATZ
MENGE
UMSATZ_GESAMT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ranking ohne Partition
Die 10 umsatzstärksten Artikel
SELECT *
FROM
(SELECT
D_ARTIKEL
Artikel_Name as Artikel,
ARTIKEL_NAME
sum(U.umsatz) AS Umsatz,
GRUPPE_NR
RANK() OVER (ORDER BY sum(U.umsatz) DESC ) AS Rangfolge
GRUPPE_NAME
SPARTE_NAME
from
SPARTE_NR
F_umsatz U,
ARTIKEL_ID
PK
D_Artikel A
WHERE U.artikel_id = a.artikel_id
F_UMSATZ
group by a.artikel_name)
Rangfolge-Feld
ARTIKEL_ID
WHERE rownum < 11;
wird mitgeliefert
ARTIKEL
UMSATZ RANGFOLGE
--------------------------------------- ---------Wandspiegel 50x60
1723790
1
Kehrschaufel
1703263
2
Waschbecken 40x60
1697755
3
Badewannenfaltwand 50x50x50
1694115
4
Duschbecken 70
1687618
5
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
FK
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
DATA WAREHOUSE
Alternative Version für Ranking ohne analytische Funktion
select * from
(SELECT *
FROM
(SELECT
Artikel_Name as Artikel,
sum(U.umsatz) AS Umsatz
from
F_umsatz U,
D_Artikel A
WHERE U.artikel_id = a.artikel_id
group by a.artikel_name)
order by Umsatz desc)
where rownum < 11 ;
2 geschachtelte Sub-Selects
weil die Klausel
„where rownum < 11“
erst nach der
Klausel
„ORDER BY UMSATZ“
wirken soll.
Es fehlt das Rangfolgenfeld.
Das müßte man jetzt zusätzlich noch
Konstruieren.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ranking
Die 5 umsatzstärksten Bundesländer
F_UMSATZ
D_REGION
REGION_ID
ORTNR
ORT
KREISNR
KREIS
LANDNR
LAND
REGIONNR
REGION
ARTIKEL_ID
KUNDEN_ID
ZEIT_ID
REGION_ID
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
SELECT *
FROM
(SELECT
R.land as
Land,
sum(U.umsatz) AS Umsatz,
RANK() OVER (ORDER BY sum(U.umsatz) DESC ) AS
Rangfolge
from
F_umsatz U,
D_REGION R
WHERE U.REGION_ID = r.region_id
group by r.land)
WHERE rownum < 6;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ranking
• RANK
– Plätze werden aufsteigend vergeben
– Bei 2 gleichen Position bleibt der darauf folgende frei
• 1 2 3 3 5 6 7 8 8 10
• DENSRANK
– Plätze werden aufsteigend vergeben
– Bei 2 gleichen Position wird die darauf folgende Position belegt
• 1 2 3 3 4 5 6 7 8 8 9
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Gruppierungen auf unterschiedlichen Leveln und Ranking auf Level-Ebene
Partition By
- Sortierung der Umsätze nach Top Artikel pro
Artikelgruppe
- Bilden der Rangfolge innerhalb einer Gruppe
(SELECT artikel_name Artikel,
gruppe_name Prod_Grp,
sum(U.Umsatz) AS Umsatz,
RANK() OVER (PARTITION by a.gruppe_name ORDER BY sum(U.umsatz) DESC )
AS Rangfolge
FROM f_umsatz U, d_artikel A
D_ARTIKEL
WHERE U.artikel_id
= a.artikel_id
ARTIKEL_NAME
GROUP by a.gruppe_name,a.artikel_name
GRUPPE_NR
GRUPPE_NAME
ORDER by a.gruppe_name)
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
PK
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
FK
REGION_ID
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
DATA WAREHOUSE
Gruppierungen auf unterschiedlichen Leveln und Ranking auf Level-Ebene
Partition By
- Sortierung der Umsätze nach Top 3 Artikel pro
Artikelgruppe
-Bilden der Rangfolge innerhalb einer Gruppe
SELECT * FROM
(SELECT artikel_name Artikel,
gruppe_name Prod_Grp,
sum(U.Umsatz) AS Umsatz,
RANK() OVER (PARTITION by a.gruppe_name ORDER BY sum(U.umsatz) DESC )
AS Rangfolge
FROM f_umsatz U, d_artikel A
F_UMSATZ
WHERE U.artikel_id
= a.artikel_id
D_ARTIKEL
ARTIKEL_ID
GROUP by a.gruppe_name,a.artikel_name
ARTIKEL_NAME
KUNDEN_ID
GRUPPE_NR
ORDER by a.gruppe_name)
ZEIT_ID
FK
GRUPPE_NAME
REGION_ID
WHERE Rangfolge < 4;
SPARTE_NAME
SPARTE_NR
PK
ARTIKEL_ID
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
FK
FK
FK
FK
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
DATA WAREHOUSE
(Zeit-) Reihenvergleiche
- Sortierung der Umsätze nach Monaten
LAG()
- Anzeigen des Vorjahresmonats
select
z.Jahr_nummer Jahr,
z.MONAT_DESC
Monat,
sum(u.umsatz) Umsatz,
LAG(sum(u.umsatz), 12) OVER (ORDER BY z.MONAT_DESC) Vorjahresmonat,
from
f_umsatz u,
d_zeit z
where
D_ZEIT
F_UMSATZ
z.zeit_id = u.zeit_id
DATUM_ID
ARTIKEL_ID
TAG_DES_MONATS
group by
TAG_DES_JAHRES
z.Jahr_nummer,z.MONATS_NUMMER,z.MONAT_DESC KUNDEN_ID
ZEIT_ID
WOCHE_DES_JAHRES
REGION_ID
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
DATA WAREHOUSE
Summenzeilen ausgeben
GROUP BY ROLLUP / CUBE
SELECT
artikel_name Artikel,
gruppe_name Prod_Grp,
sum(U.Umsatz) AS Umsatz
FROM
f_umsatz U, d_artikel A
WHERE
U.artikel_id = a.artikel_id
GROUP by ROLLUP
(a.gruppe_name,a.artikel_name)
ORDER by
a.gruppe_name
• ROLLUP
– Summenzeilen entsprechend
der Felder unter GROUP BY
SchraubenschluesselSet
Stichsaege
Wasserwaage_1m
Abschleppseil
Aufkleber_D
Autatlas
ErsteHilfekoffer
Fahrradhalter
Felgenkappen
Gluebirnen_Set
Hydraulik_Wagenheber
KaelteSet
Oelfilter
Poliermittel
Reinigungsfilter
Reinigungstuecher
Sitzauflage
Universal_Wagenheber
Zusatzlicht_Front
Heimwerker
Heimwerker
Heimwerker
Heimwerker
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
1559999
1519724
1586078
24997230
1611334
1581215
1577793
1468262
1606904
1654885
1609519
1491170
1490092
1582112
1561724
1640785
1495886
1539511
1511483
1552300
24974975
199802537
137 rows selected.
• CUBE
– Summenzeilen für alle
Kombinationen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ausgeben zusätzlicher „Steuerinformation“ für „programmiertes“ Auslesen des
Ergebnisses
SELECT
artikel_name
AS
Artikel,
gruppe_name
AS
Gruppe ,
sparte_name
AS
Sparte ,
sum(U.Umsatz) AS
Umsatz ,
GROUPING(Artikel_name) AS
Art_g ,
GROUPING(gruppe_name) AS Grp_g ,
GROUPING(Sparte_name) AS Spr_g ,
GROUPING_ID(artikel_name ,gruppe_name,sparte_name ) AS grouping_id
FROM
f_umsatz U, d_artikel A
WHERE
U.artikel_id = a.artikel_id
GROUP by CUBE
(a.sparte_name, a.gruppe_name,a.artikel_name)
HAVING
GROUPING(Artikel_name) = 1 OR
GROUPING(gruppe_name) = 1 OR
GROUPING(Sparte_name) = 1
ORDER by
GROUPING(Artikel_name),GROUPING(gruppe_name),GROUPING(Sparte_name)
/
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel
ART_G
GRP_G
SPR_G G
ROUPING_ID
---------- ---------- ---------- ----------0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
0
1
0
2
• Kombinationen von 0 und 1 werden genutzt um entsprechende Summenwerte
anzuzeigen
• Grouping_ID sortiert die Kombinationsvarianten durch
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
In-Memory Database im Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
239
Datenbank wahlweise
im Hauptspeicher
Keine Änderung der
Anwendung
Spaltenorientiert
Komprimiert
2-20 fach
Parallelisierung
Nutzt bestehende
DB-Architektur und
Funktionalität
Auf jeder Hardware
möglich
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Dual Format Database
Memory
Memory
F_UMSATZ
F_UMSATZ
Row
Format
Column
Format
•
Beides Row- und Column- Format für
dieselbe Tabelle
•
Tabellen, Materialized Views,
Partitionen
•
Gleichzeitiges Lesen und Updaten, gesicherte
Transaktionen
•
Updates direkt persistiert
•
Optimizer wählt optimalen Zugriff
•
Analytics & Reporting können In-Memory
Column-Format
nutzen
•
OLTP-Anwendungen mit umfangreicher
Satzverarbeitung nutzen bewährtes Row
Format
•
Laden durch Hintergrundprozesse
•
Bei erstmaligem Lesen oder Datenbank-Start
•
ORA_W001_orcl / INMEMORY_MAX_POPULATE_SERVERS
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
241
Es ist nur ein Schalter!! – Kein Migrationsprojekt
D_KUNDE
D_ARTIKEL
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
SPARTE_NR
ARTIKEL_ID
PK
D_ZEIT
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
ZEIT_ID
PK
D_REGION
REGION_ID
PK
ORTNR
ORT
KREISNR
KREIS LANDNR
LAND
REGIONNR
REGION
F_UMSATZ
FK
ARTIKEL_ID
FK
KUNDEN_ID
ZEIT_ID
FK
REGION_ID
FK
KANAL_ID
FK
UMSATZ
MENGE
UMSATZ_GESAMT
50 Mio
Sätze
D_VERTRIEBSKANAL
PK
KANAL_ID
VERTRIEBSKANAL
KANALBESCHREIBUNG
VERANTWORTLICH
KLASSE
PK: Btree Index
FK: Bitmap Index
PK
KUNDEN_ID
KUNDENNR
GESCHLECHT
VORNAME
NACHNAME
TITEL
ANREDE
GEBDAT
BRANCHE
WOHNART
KUNDENART
BILDUNG
ANZ_KINDER
EINKOMMENSGRUPPE
ORTNR NUMBER,
BERUFSGRUPPE
STATUS
STRASSE
TELEFON
TELEFAX
KONTAKTPERSON
FIRMENRABATT
BERUFSGRUPPEN_NR
BILDUNGS_NR
EINKOMMENS_NR
WOHNART_NR
HAUSNUMMER
PLZ
ORT
KUNDENKARTE
ZAHLUNGSZIEL_TAGE
TOTAL
TOTAL_NR
• Laden in den InMemory-Speicher:
Einfaches Markieren
• Danach einmal anfassen
Alter
Alter
Alter
Alter
Alter
Alter
table
table
table
table
table
table
F_UMSATZ INMEMORY;
D_ZEIT
INMEMORY;
D_VERTRIEBSKANAL INMEMORY;
D_REGION INMEMORY;
D_KUNDE INMEMORY;
D_ARTIKEL INMEMORY;
CREATE TABLE F_UMSATZ ……
PARTITION BY RANGE ……
(PARTITION p1 ……
INMEMORY NO MEMCOMPRESS
PARTITION p2 ……
INMEMORY MEMCOMPRESS FOR DML,
PARTITION p3 ……
INMEMORY MEMCOMPRESS FOR QUERY,
:
PARTITION p200 ……
INMEMORY MEMCOMPRESS FOR CAPACITY
);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
In-Memory im Data Warehouse
• Komplexe Abfragen auf viele Daten
–
–
–
–
mit mehreren Joins
Sub-Selects
Groupings
Analytische Funktionen
Keine repräsentative Hardware: Laptop mit Intel i5-3320M 2,6 GHz CPU und 4 GB In-Memory-Storage
Beispielabfrage
Subselect
Ohne In-Memory
Analytic
Grouping
Functions
P1
P4
Mit In-Memory
P1
P4
#Joins
#Where
Condition
Umsatz pro Region, Zeit,
Vertriebskanal, , Berufsgruppe
Sortiert nach Kriterien (Abf. 2)
5
5
-
1
1
14,35
27,00
1,10
0,53
Stärkster Umsatzmonat pro
Bundesland in 2010 (Abf. 8)
3
2
1
3
2
26,66
35,03
1,00
0,54
Top 10 Artikel bezogen auf
Umsatz in einem Jahr pro
Bundesland in 2010 (Abf. 10)
4
3
1
4
3
23,14
32,03
3,02
1,55
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Kompressions-Varianten
NO MEMCOMPRESS
MEMCOMPRESS FOR DML
The data is not compressed.
MEMCOMPRESS FOR QUERY LOW
This method results in the best query performance.
This method compresses IM column store data more than MEMCOMPRESS FOR
DML but less than MEMCOMPRESS FOR QUERY HIGH.
This method is the default when the INMEMORY clause is specified without a
compression method in a CREATE or ALTER SQL statement or when
MEMCOMPRESS FOR QUERY is specified without including either LOW or HIGH.
MEMCOMPRESS FOR QUERY HIGH
This method results in excellent query performance.
This method compresses IM column store data more than MEMCOMPRESS FOR
QUERY LOW but less than MEMCOMPRESS FOR CAPACITY LOW.
MEMCOMPRESS FOR CAPACITY LOW
This method results in good query performance.
This method compresses IM column store data more than MEMCOMPRESS FOR
QUERY HIGH but less than MEMCOMPRESS FOR CAPACITY HIGH.
This method is the default when MEMCOMPRESS FOR CAPACITY is specified
without including either LOW or HIGH.
MEMCOMPRESS FOR CAPACITY HIGH
This method results in fair query performance.
This method compresses IM column store data the most.
This method optimizes the data for DML operations and compresses IM column
store data the least (excluding NO MEMCOMPRESS).
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
244
Oracle In-Memory Advisor
• New In-Memory Advisor
• Analysiert bestehenden DB
Workload über AWR & ASH
Repository
• Liefert eine Liste von Objekten,
die am meisten von InMemory-Column-Storage
profitieren
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Vektor-Scans
Memory
REGION
Example:
Finde alle Verkäufe
In der Region CA
• SIMD Vektor Instruktionen
CPU
Vector Register
CA
Load
multiple
region
values
• Jeder CPU Kern liest einzelne
In-Memory Columns
CA
CA
Vector
Compare
all values
an 1 cycle
• Milliarden von
Sätzen/Sekunde/Core
CA
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
246
Join-Verfahren: Bloom-Filter
Example: Find all orders placed on Christmas eve
LINEORDER
Amount
Datekey is
24122013
DateKey
DateKey
Date
DATE_DIM
• Erstellen von Filtertabellen
(Bloom-Filter)
Type=d.d_date='December 24, 2013'
Sum
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
247
In-Memory Aggregation
Example: Report sales of footwear in outlet stores
Products
In-Memory
Report Outline
Sales
• Dynamisches Erstellen von In-
Memory Aggregat-Objekten
Footwear
Stores
Outlets
Outlets
Footwear
$
$$
$
$$$
Sales
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
248
Wo und wie macht In-Memory im Data
Warehouse Sinn und was ändert sich?
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zunächst ein wichtiges Prinzip:
Verteilung von Tabellendaten über die Speicherhierarchie
Umsatzdaten
DISK
SSD
Flash
In Memory
Juni 14
Juni 14
Mai 14
Mai 14
April 14
April 14
März 14
März 14
Februar 14
Februar 14
Januar 14
Januar 14
Dezember 13
Dezember 13
November 13
November 13
Oktober 13
Oktober 13
September 13
September 13
August 13
August 13
Juli13
Juli13
Juni 13
Juni 13
April 13
April 13
März 13
März 13
Februar 13
Februar 13
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
250
An welchen Stellen macht In-Memory Sinn
OLTP
Systeme
Disk-Daten
In Memory
Integration
Layer
Temporäre
Daten
T
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
In-Memory
Alle Dimensionen
Referenzdaten
R
R
R
Bei sehr großen
Dimensionen nur die
am häufigsten genutzten
Spalten
Stammdaten
S
S
S
Die aktuellen
Partitionen
T
Partitionierte
Transaktionsdaten
nur wenn sie
abgefragt werden
Vorberechnete
Kennzahlen
C
Q
A
A
L
MJ
Data Mining
Statistikdaten
Operational Data
Oracle R
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Enge Verzahnung von OLTP und DWH wird möglich
OLTP
Systeme
Disk-Daten
In Memory
Integration
Layer
Temporäre
Daten
T
T
Ermöglichen von
Realtime-Reporting und Realtime-ETL
• Kein expliziter Ladevorgang für Transaktionsdaten
• Gelesen wird die In-Memory-Version während
das OLTP-System klassisch die Disk-Version der
Daten beschreibt
• Operational Data Stores entfallen, wenn sie nur
OLTP-Daten 1:1 bereitstellen.
(Wenn machbar können operative Daten direkt gelesen werden)
Operational Data
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Sind Star Schemen noch sinnvoll?
User View
Layer
• Ja, natürlich!
• Star-Schemen hatten auch schon vor In Memory
ihre Aufgabe als „Performance-Bringer“ verloren
• Star Schemen stellen Kennzahlen (FAKT) in ihrem
fachlichen Kontext (DIMENSION) dar.
Vorberechnete
Kennzahlen
C
Q
A
Kunden
Zeit
Welches Kundensegment macht in
welcher Region in
welcher Zeit mit
welchem Produkt am
meisten Umsatz
A
L
MJ
Data Mining
Statistikdaten
Produkt
Region
Oracle R
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Sind Materialized Views noch sinnvoll?
User View
Layer
• Nicht als reine Performance-Objekte
• Aber:
– Bis zu 80% aller BI-Auswertungen sind vorhersehbar
und sollten in der Datenbank vorberechnet werden
– Berechnung in der Datenbank ist wesentlich schneller
– Die Berechnung von Kennzahlen wird standardisiert
– Sie verhindern, das jeder BI-Benutzer Kennzahlen individuell
berechnet
Vorberechnete
Kennzahlen
C
Q
A
A
L
• Materialized Views bilden fixe Kennzahlensysteme
im Warehouse ab
MJ
Data Mining
Statistikdaten
• Mit In-Memory sind sie noch schneller
Oracle R
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Klassisches Vorgehen
• Redundanz wegen
• Denormalisierung
• Bereitstellung
physischer
Tabellen wg.
Star Query
• Vorberechnung
von Kennzahlen
in Form von MAVs
Enterprise Layer
Core - DWH / Info Pool
Referenzdaten
Stammdaten
User View
Layer
R R R
S
S
S
Physikalische Dimension
Stammdaten
Mav
KZ
F
Physikalische
Fakten
Bewegungsdaten
auf
Transaktionslevel
der operativen Systeme
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Zusätzlich Bitmap
Indexe
DATA WAREHOUSE
255
Mögliches Vorgehen: Virtualisierung User View Layer
• Dimensionale
Modelle
simulieren
• Vorberechnung
von Kennzahlen
on-the-fly
Enterprise Layer
Core - DWH / Info Pool
Referenzdaten
Stammdaten
User View
Layer
R R R
Dimension als View auf
In-Memory
Stammdaten
Mav
KZ
S
S
S
Bewegungsdaten
auf
Transaktionslevel
der operativen Systeme
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Nur aktuelle Partitionen
Und nur die wichtigsten
Spalten
Kleine Dimensionen
Im klassischen Buffer Cache
DATA WAREHOUSE
256
Mögliches Vorgehen : Virtualisierung User View Layer
Enterprise Layer
• Im Enterprise Layer
– Dimensionsschlüssel müssen bereits
existieren
– Historisierung
• Historisierung
• Kaum physikalische Persistenz auf
den Festplatten
• Zugewinn
REGION
REGIONNR
REGIONNR
LAND
LANDNR
LANDNR
KREISNR
KREIS
User View Layer
REGION
REGIONNR
LAND
LANDNR
KREISNR
KREIS
ORTNR
ORT
REGION_ID
Dimension als View auf
In-Memory
Stammdaten
VW_ORT
KREISNR
ORTNR
ORT
REGION_ID
– Flexiblere und schneller Bereitstellung
multidimensionaler Strukturen
– Weniger Plattenplatz weil weniger Redundanz
im Schichtenmodell
– Mehr Performance
Mav
KZ
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NR
GRUPPE_NAME
SPARTE_NR
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NR
SPARTE_NAME
VW_ARTIKEL
SPARTE_NR
SPARTE_NAME
ZEIT_ID
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
Kleine Dimensionen
Im klassischen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
257
Herausforderungen
Enterprise Layer
• Durch Wegfall von Tabellen
– Fehlende Orientierung bzgl.
Hierarchisierung und mögliche Drill-Pfade
• Welche normalisierten Tabellen
lassen sich zu Dimensionen
formen?
• Lösung:
– Dokumentation über Metadaten-Layer
REGION
REGIONNR
REGIONNR
LAND
LANDNR
LANDNR
KREISNR
KREIS
User View Layer
REGION
REGIONNR
LAND
LANDNR
KREISNR
KREIS
ORTNR
ORT
REGION_ID
Dimension als View auf
In-Memory
Stammdaten
Mav
KZ
VW_ORT
KREISNR
ORTNR
ORT
REGION_ID
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NR
GRUPPE_NAME
SPARTE_NR
ARTIKEL_ID
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NR
SPARTE_NAME
VW_ARTIKEL
SPARTE_NR
SPARTE_NAME
ZEIT_ID
DATUM_ID
TAG_DES_MONATS
TAG_DES_JAHRES
WOCHE_DES_JAHRES
MONATS_NUMMER
MONAT_DESC
QUARTALS_NUMMER
JAHR_NUMMER
Kleine Dimensionen
Im klassischen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
258
Metadaten – Basis für schnelles Agieren
• Zusammenhänge von
Hierarchie-Leveln
– Hierarchisierung von Attributen
• Zusammenhänge von
Dimensionen und Fakten
• Zusammenhänge von
Fakten und Kennzahlen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
259
Konsequenzen
• Auflösung der Schichtengrenzen Enterprise/End User –
Layer
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
– Trennung nur noch logisch bzgl. der Modellart
• Physikalische Nähe von Enterprise/End User – Layer
– Keine separate Datenhaltung für Data Marts
– Keine Datenkopien für Fachabteilungen
• Zugriffe von Endbenutzer auf zentrale Schicht
• Datenzentriertes Security-Modell
• Virtuelle Dimensionen (z. B. als Views)
• Neuer Umgang mit Faktentabellen
– Wegfall von Bitmap-Indizierung
– Selektiver Umgang mit Spalten
– Eventuell Ersatz von Faktentabellen durch In-Memory-MAVs
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
260
Jeder wird profitieren, der wichtige DWH-Prozesse in die
Datenbank verlagert
• Komplette Schichten-Architektur
in einer Datenbank, auf einem Server
• Advanced Analytics in der Datenbank
– InPlace-Data Mining
– R-Objekte + R-Skripte in der Datenbank
Single Point +
In-Memory-fähig
– Vorberechnete Kennzahlen
– Generieren von Graphiken
• Zentrale Security-Verwaltung
mit Bordmittel der Datenbank
• ETL-Strecken mit Native-SQL in der
Datenbank
Vorberechnete
Kennzahlen
Zentrales Security
in der Datenbank
R-Objekte
Data Quality
Analysen
Alle Schichten
in einer Datenbank
ETL-Strecken
mit Native SQL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
In Place
Data Mining
DATA WAREHOUSE
261
Fehlentwicklungen
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
1
2
BI Plattform
Cache
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
Analytische Datenbank
In Memory
In Memory
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
262
Fehlentwicklungen
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
1
!
1:1 Kopie
!
2
BI Plattform
 Verlängerung des Gesamtbeschaffungsprozesses
 Zusätzliche versteckte IT-Aufwende in den Fachabteilung
 Gefahr nicht abgestimmter Kennzahlen
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
Cache
Analytische Datenbank
User View
Layer
!
1:1 Kopie
In Memory
In Memory
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
!
Separate Hardware +
Maintenance
DATA WAREHOUSE
263
Mit In-Memory
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
1
User View
Layer
In Memory
BI Plattform
Cache
Kompakte Analyse-Umgebungen profitieren am
meisten von In-Memory direkt in der Datenbank
2
Integration
Layer
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
Analytische Datenbank
In Memory
In Memory
In Memory
Eine Datenbank, ein Server
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
264
Mit In-Memory
Integration
Layer
3
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
Virtuelle
Strukturen
BI Plattform
Cache
Virtualisierung des User View Layers
- Mehr Flexibilität
- Schnellere Weiterentwicklung / Reagieren
- Weniger Redundanz von Daten
- Volle multidimensionale Sicht
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
265
Sekundenschnelle Antworten des Systems unterstützen
ein intuitives Analysieren
Click and Think
• Das Analysesystem behindert nicht mehr den Gedankenfluss.
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
Click and Think
• Benutzer starten mehr
Abfragen in der gleichen Zeit
• Benutzer haben mehr Mut
für komplexere Abfragen
• Reaktionszeiten verkürzen sich
- Schlagzahl wird erhöht
• Mehr Resultate ->
mehr Aktionen ->
mehr Nutzen aus den Daten
1
Der Informationsvorrat der Systeme
ist schneller erschöpft
2 Bedarf nach vielfältigeren Daten und
komplexeren Datenmodellen
Noch mehr Daten aus unterschiedlichen
3 Bereichen werden zusammenhängend
abgefragt
4 Noch intensivere Nutzung
der Warehouse-Systeme
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
266
Ist In-Memory nur etwas für große Systeme?
• Nein
• Vor allem auch kleinere
Umgebungen profitieren
Ohne Inmemory
Mit Inmemory
Potenzielles Leistungsvermögen
200 MB / Sec / Core = 1,6 GB / Sec
PARALLEL 4 optimal
Potenzielles Leistungsvermögen
200 MB / Sec / Core = 1,6 GB / Sec
PARALLEL 16 optimal
• Sie haben oft kein eigenes
Storage-System, sondern
hängen am SAN und
konkurrieren mit vielen OLTPAnwendungen
• Das SAN wirkt oft als
„IO-Bremse“
• Mit In-Memory machen sich
kleinere Systeme
IO-unabhängig!
> 5 GB / Sec
In Memory
Column Store
700 MB / Sec
700 MB / Sec
Andere
OLTP
Anwendungen
SAN
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Andere
OLTP
Anwendungen
SAN
DATA WAREHOUSE
267
Noch einmal zum Schluss
• Die Ansprüche der Anwender werden wachsen und damit
die Datenmengen und
die Datenvielfalt
• Architekturen werden kompakter
– BI Caches wandern zurück in die Datenbank
– Direkt lesende BI-Werkzeuge haben Vorteile
– Analytische Datenbanken werden überflüssig
• In-Database-Prozesse sind auf dem Vormarsch
– In-Database Data Mining
– In-Database ETL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA
DATAWAREHOUSE
WAREHOUSE
268
Laden und Updaten im Data Warehouse mit
Bordmitteln der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
269
Ziele und Aufgaben
• Bereitstellen von Daten in adäquater
Weise
– Zeitlich passend
– Richtige Form
– Passende Inhalte
• Daten so ablegen, dass man sie
wiederfindet
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?
– Dokumentation
• Sind die zu ladenden Daten in einem
• Daten-Ressourcen ökonomisch speichern brauchbaren Zustand?
– Berücksichtigung von Plattenplatz
– Welche Anforderungen sind an Quelldaten zu
stellen?
– Wer definiert die Anforderungen?
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
270
ETL-Prozess planen und Lade-Aufwand minimieren
•
Ladeläufe orientieren sich an den Daten, die man braucht

1. Erst die Datenstrukturen und Schichten entwerfen
2. Ladelauf planen
•
Zur Orientierung hilft das 3-Schichten-Modell:
Data Integration Layer
R
S
T
S
S
B
T
B
B
User View Layer
Enterprise Information Layer
R
T
ETL: Kosten
pro Kunde
B
B
B
D
ETL: Kosten
pro Kunde
F
ETL: Kosten
pro Kunde
D
D
D
ETL: Kosten
pro Kunde
D
F
D
F
D
D
Die frühest mögliche Stelle für Transformationen finden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
271
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
Möglichst viele
Kennzahlen
in die
Datenbank
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. |
DATA WAREHOUSE
272
Lade-Aktivitäten an Schichtübergängen
Integration
Flüchtige Daten
Clearing-Verfahren,
technisches, logisches,
semantisches Prüfen
Generische
Datenstrukturen
(isolierte Tabellen,
teil-ausgeprägte Datentypen)
Keine Constraints
Kopieren
Selektieren
273
Mengenbasiertes
Prüfen ohne
Constraints
Enterprise
User View
Persistent
Kopien / teilpersistent
dynamisch
Normalisieren
Historisieren
(Granularisieren)
Denormalisieren
z.T. Aggregieren
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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
Beknnte
Kennzahlen
in die DB
weniger
Koipien in
BI-Tools
DATA WAREHOUSE
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. |
DATA WAREHOUSE
Deltadaten-Erkennung
Einmaliger Initial - Load
SRC
Table
1:1 Kopie
SRC
Table
1:1 Kopie
TGT
Table
Regelmäßiges Laden
SRC
Table
1:1 Kopie
SRC
Table
(neu)
merge into TGT Table
select * from
((select ...from SRC_TABLE_neu)
minus
select * from SRC_TABLE_alt))
TGT
Table
SRC
Table
(-1)
276
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Datenbank-Trigger
• Werden nur im Quellsystem angelegt
• Beeinflusst Performance des Quellsystems
• Eher als Notlösung anzusehen
– Wenn es kein Änderungsdatum in der Quelltabelle gibt
– Zum Triggern
Message-basierter CREATE OR REPLACE TRIGGER Bestellung
BEFORE DELETE OR INSERT OR UPDATE ON Bestellung
oder
FOR EACH ROW
Event-gesteuerter
WHEN (new.Bestellnr > 0)
Ladeläufe
DECLARE
sal_diff number;
BEGIN
INSERT INTO log_Bestellung
(Alte_Bestell_Nr,Neue_Bstell_Nr)
VALUES(old.Bestellnr,new.Bestellnr);
END;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
277
Einlesetechniken Vorsysteme
EBCDIC
ASCII
Database Link
Transportable TS
Datapump
Oracle
Non
Oracle
API
Applikation
z. B.
SAP R/3
SQL-Loader
External Table
Direct Save
SQL
SQL
BS Copy
BS Copy
ODBC
JDBC
Gateway
SQL
SQL
SQL
API CALL
SQL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Oracle
DWH
DATA WAREHOUSE
SQL*Loader
• Loader Modes
– Convential Path
• INSERT von Daten / UPDATE von Indizes /
Auslösen von Triggern
• Auswertung von Constraints
– Direct Path
• Formatieren der Daten in Blöcken und
direktes Einfügen in die Datafiles
• Keine SGA-Operationen / kein INSERT auf
SQL-Level
– Parallel Direct Path
• Parallele SQL*Loader-Aufrufe
Empfehlungen:
• Direct Path Load nutzen
• Alle Integrity Constraints ausschalten
– NOT NULL, Unique und Primary Key Constraints
• Verhindern von Index-Aktualisierungen
• UNRECOVERABLE Option wählen
• Partitionen nach und nach laden
– Andere Partitionen bleiben für andere Benutzer im
Zugriff
• Parallel laden, wenn es möglich ist
– Nutzung paralleler Schreib-Threads
– Alternativ parallele Jobs starten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
279
Beispiel - Control File
OPTIONS (SKIP=1, BINDSIZE=50000, ERRORS=50, ROWS=200, DIRECT=TRUE,
PARALLEL=TRUE, READSIZE=65536, RESUMABLE=TRUE,
RESUMABLE_TIMEOUT=7200)
UNRECOVERABLE LOAD DATA
CHARACTERSET WE8MSWIN1252
INFILE 'C:\orte.csv'
BADFILE 'orte.bad'
DISCARDFILE 'orte.dis‚
INTO TABLE dwh.tb_orte WHEN ort_id != BLANKS
APPEND
REENABLE DISABLED_CONSTRAINTS
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'"
(orte_nr POSITION(1) INTEGER EXTERNAL ,
ort CHAR ,
plz CHAR ,
bundesland CHAR ,
region CHAR ,
nummernfeld INTEGER EXTERNAL )
280
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Aufruf des SQL*Loaders
sqlldr userid=DWH/DWH control=c:\orte.ctl log=C:\orte.log
orte.ctl
Control
File
281
orte.csv
Daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
TB_ORTE
DATA WAREHOUSE
Data Pump Architektur
Quelle: http://www.dbazine.com/blogs/blog-cf/chrisfoot/blogentry.2006-05-26.3042156388
282
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle Data Pump
• Höhere Performance als bei IMP / EXP oder anderen Entlade-Verfahren
• Daten und / oder Metainformationen von DB Objekten
• Größere Steuerungsmöglichkeit, d.h. mehr Parameter und Kontrolle der Datenextraktion
• Leichtere Einbindung der Datenflüsse über Rechnergrenzen hinweg
• Parallelisierung in RAC-Umgebungen Instanz-übergreifend
• Kompression u. Verschlüsselung nach Bedarf
• Legacy Mode zur Weiterverwendung von Ex-/Import Controls
• Wiederanlauffähig
Release 2
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
283
Vereinfachte Verfahrensdarstellung
DWH
OLTP
Export mit Data
Pump (expdp)
284
FTP
Import mit
Data Pump
(impdp)
Schema OLTP
Schema DWH
Besondere GRANTs
Delta-Load
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Export der Daten
• Optional Flashback zum Absichern des
Entlade-Zeitpunktes nutzen
• Remote-Export möglich (per
NETWORK_LINK)
– Wegfall von separatem FTP-Aufruf
• Einschränkung durch Query-Bedingung
– Damit Zugriff z. B. auf „Last Update-Sätze“
DWH
OLTP
Export mit Data
Pump (expdp)
FTP
Import mit
Data Pump
(impdp)
• Default Export Location
– D:\o11\admin\o11\dpdump\EXPDAT
.DMP
Schema OLTP
Schema DWH
Besondere GRANTs
Delta-Load
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
285
Ablauf des Exports / Imports
expdp dwh/dwh@o11 parfile=Para_EX.txt
• Export über Parameter-Datei
• Export auch mit Remote-Zugriff
• Einschränkung der Datenmenge durch
QUERY
impdp dwh2/dwh2@o11 DIRECTORY=DP_OUT
DUMPFILE=EXP1.DMP
LOGFILE=DP_OUT:imp_log
REMAP_SCHEMA=DWH:DWH2
286
• Bei dem Import: REMAP auf das Schema
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Interaktiver Modus von Data Pump
• CTRL-C zum Starten des interaktiven Modus
• ADD_FILE
– Das Hinzufügen eines neuen Dump-Files ist möglich
• KILL_JOB
– Prozess kann abgebrochen werden
• STOP_JOB
– Aktueller Job wird beendet
• PARALLEL
– Einstellung des Parallelisierungsgrads
• Eingabe von „continue_client“ führt zur normalen Monitor-Ausgabe zurück
287
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
External Tables
TEXT
DATA PUMP
HDFS
HIVE
• Datei wird als normale Tabelle behandelt
DROP TABLE Gemeinde_EX;
CREATE TABLE Gemeinde_EX (
Gemeinde_Nr
VARCHAR2(8),
Gemeinde
VARCHAR2(50) )
• Nur lesend zugreifbar
ORGANIZATION EXTERNAL
• RMAN sichert nicht die Daten
(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‚))
• Tabelle, die eine Datei referenziert
• Bulk-Loading Operationen, wie
insert... select
• Mehr Transformationsoptionen
als im SQL* Loader
• Parallelisierbares Schreiben
• Alternative zum SQL*Loader
288
CREATE DIRECTORY Exttab AS
'D:\Szenario\Exttab';
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Konzept für variable Directories oder Dateinamen
Szenario: Z. B. sich täglich ändernde Dateinamen
Datum im Dateinamen
Lieferantenname im Dateinamen
ABC120109
ABC130109
ABC140109
ABC150109
alter table ex_orte
default directory
LC_Texte_2;
DWH
create or replace directory LC_TEXTE
AS 'D:\Szenario\Testdaten';
alter table ex_orte
location
('ORTE_Y.CSV');
create or replace directory LC_TEXTE_2
AS 'D:\Szenario\Testdaten';
289
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Preprocessing für External Tables
CREATE TABLE sales_transactions_ext
(PROD_ID NUMBER, CUST_ID NUMBER
...)
ORGANIZATION external (TYPE oracle_loader
DEFAULT DIRECTORY data_file_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
PREPROCESSOR exec_file_dir:'gunzip' OPTIONS '-C'
BADFILE log_file_dir:'sh_sales.bad_xt'
LOGFILE log_file_dir:'sh_sales.log_xt'
FIELDS TERMINATED BY "|" LDRTRIM
( PROD_ID, CUST_ID, TIME_ID DATE(10) "YYYY-MM-DD",
CHANNEL_ID, PROMO_ID, QUANTITY_SOLD, AMOUNT_SOLD,
UNIT_COST, UNIT_PRICE))
location ('sh_sales.dat.gz'))
REJECT LIMIT UNLIMITED;
290
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
External Tables mit Data Pump
DWH
OLTP
EX_T
EX_T
FTP
select * from EX_Bestellung_2
291
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Vorteile der Kombination
• Leichte Handhabung
– Syntax der beiden Typen sehr ähnlich
• Hohe Performance
– Data Pump-eigenes Format ist für schnellen Ex-/Import ausgelegt
– Parameter von Data Pump zusätzlich nutzen, um die zu extrahierende
Datenmenge auf das Wesentliche zu reduzieren
• Verbleiben innerhalb der SQL-Sprache
– Durch CREATE TABLE AS SELECT lassen sich sowohl WHERE-Filter als auch
Joins während des Extrahierens verarbeiten
292
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Transportable Tablespaces
• Höchste Performance beim Austausch von Vorgehensweise
1. Anlegen des Tablespaces im Quellsystem
Oracle zu Oracle
– Daten werden als komplettes File oder File Set
bewegt
• Austausch zwischen unterschiedlichen
Betriebssystemen möglich
– Konvertierung kann mit RMAN erfolgen, z.B.
von BigEndian nach LittleEndian
2. Zuweisung der zu kopierenden Daten des Tablespace
– Alle Daten sind dem Tablespace zugeordnet (Indizes etc.)
3. Ändern des Tablespaces auf Read-Only
4. Export der Metadaten mit Data Pump (EXPDP)
5. Eventuell Konvertierung des Tablespace Datafiles
– Über die RMAN CONVERT Function
• Nützlich beim Bewegen der Daten
zwischen Quellsystem und Staging Area 6. Kopieren des Tablespace Datafiles und der
Metadaten
sowie zwischen den anderen Schichten im
7. Import der Metadaten in der Zielumgebung
Warehouse
8. Ändern des Tablespaces auf Read-Write
293
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Transportable Tablespaces
1
CREATE TABLE temp_jan_umsatz
NOLOGGING
TABLESPACE ts_temp_umsatz
AS
SELECT * FROM ?????????
WHERE time_id BETWEEN '31-DEC-1999' AND '01FEB-2000';
5
IMP TRANSPORT_TABLESPACE=y
DATAFILES='/db/tempjan.f'
TABLESPACES=ts_temp_umsatz
FILE=jan_umsatz.dmp
Temp_jan_umsatz
6
2
ALTER TABLESPACE ts_temp_umsatz READ ONLY;
3
Kopieren des Tablespace zur Zielplattform
4
7
ALTER TABLESPACE ts_temp_umsatz
READ WRITE;
ALTER TABLE umsatz ADD PARTITION
umsatz_00jan VALUES
LESS THAN
(TO_DATE('01-feb-2000',
'dd-mon-yyyy'));
ALTER TABLE umsatz
EXCHANGE PARTITION umsatz_00jan
WITH TABLE temp_umsatz_jan
INCLUDING INDEXES WITH VALIDATION;
DATA WAREHOUSE
BS-Copy
EXP TRANSPORT_TABLESPACE=y
TABLESPACES=ts_temp_umsatz
FILE=jan_umsatz.dmp
Daten
Meta
daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
294
ETL-Performance-Techniken
in der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
295
Direct Path / Convential Path
Convential Path
• Reuse Free Space in Blöcken
• Constraint Checks
• Undo Data / Logging
• Daten zunächst immer in SGA Buffer
Direct Path
• Schreiben oberhalb der High Water Marks
• Keine Constraint Checks
• Kein Logging
• Daten nicht in SGA Buffer
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Convential und Direct Path Load
Convential Path
Direct Path
• Konkurriert mit allen anderen Prozessen im BufferManagement
• Baut Column-Array-Struktur auf und gibt
diese direkt an die Load Engine der DB
– Ohne zuvor in Buffer zu schreiben
• Baut SQL-Struktur auf, die dann zu analysieren ist.
• Sucht nach nicht vollständig gefüllten Blöcken und
füllt diese
• Sinnvoll bei:
– Parallel zu anderen Loadvorgängen stattfindenden
Loads
(kein exklusiver Zugriff möglich)
– Bei dem Laden von kleinen Datenmengen in Tabellen
mit großen Indizes
297
• Sinnvoll bei:
– Nicht indizierten Tabellen
(Index würde bei dem Zusammenführen mit
neuen Einträgen kopiert werden. Das kostet
Zeit)
– Beschreiben von indizierten Tabellen
– Bei Tabellen mit Constraints
– Bildet neue Blöcke und schreibt diese direkt
weg
– Nicht mit Constraints (PK/FK) belegten Tabellen
(Constraints werden zunächst ausgeschaltet
und nachträglich wieder aktiviert. Das kann
insgesamt länger dauern)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hinweise zum Direct Path Load
create table tab (a integer);
insert /*+ append */ into tab select rownum from dual;
select * from tab;
FEHLER in Zeile 1:
ORA-12838: Objekt kann nach paralleler Änderung nicht gelesen/geändert
werden
• Zieltabelle ist exklusiv nur für den Ladelauf geöffnet
• Schreibt immer oberhalb der High Watermark
– Bei der Definition der Tabellen PCTFREE klein wählen (abhängig von späteren UPDATEVorgängen)
– Bei der Definition der Tabellen PCTUSED klein wählen
(lässt die Blöcke möglichst voll werden)
298
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Table Functions – Pipeline-Verfahren
Parallelisierung trotz aufwendiger Programmierlogik
tf1
tf2
Quelle
Ziel
tf3
Stage_tabelle
INSERT INTO Ziel SELECT * FROM (tf2(SELECT * FROM (tf1(SELECT * FROM Quelle))))
INSERT INTO Ziel SELECT * FROM tf( SELECT * FROM (Stage_tabelle))
299
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Begriffe im Bereich Table Functions
•
Table Function
• Funktionen, die eine Gruppe von Sätzen (SET) gleichzeitig bearbeitet.
Table Functions wirken wie physische Tabellen. Entsprechend werden sie auch in der FROM Klausel verwendet.
•
Record Type
• Ein komplexer, aus mehreren Feldern zusammengesetzter Datentyp.
•
Nested Table
• Eine Art virtuelle Tabelle (temporäre Tabelle im Speicher). Eine Table Function kann eine solche Tabelle komplett an
das aufrufende Kommando zurückgeben.
•
Ref Cursor
• Eine Art Pointer auf ein Result – Set einer Abfrage. Man übergibt einen Ref Cursor einer Table Function, damit diese
die Sätze des Result – Sets innerhalb der Function abarbeitet.
•
Parallel
• Table Functions können eingehende Sätze parallel bearbeiten, wenn diese als Ref Cursor übergeben werden.
•
Pipelined
• Eine Table Function reicht bereits fertige Sätze an das aufrufende Kommando zur weiteren Verarbeitung weiter,
während sie noch weitere Sätze bearbeitet.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
300
Mengenbasierte Verarbeitung
Trotz Programmierung
INSERT INTO Table
SELECT Feld1, Feld2
Table_Function(
FROM
)
Funktion
Variante 1
Variante 2
Cursor
Fetch
Loop
If a = b...
Update...
Case...
pipe
row(record Type)
• Schnelle Verarbeitung (Pipelined)
• Objekttechnik
• Parallelisierung
• Mehrere Rückgabewerte
und Einzelrückgaben
• Cursor als Input
• Schachtelbar
Return Table
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
301
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);
Definition
Record-Type
Definition
Nested-Table auf
der Basis des
Rekord-Types
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;
302
Definition
Cursor als Typ
des
Übergabeparameters
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Definieren einer
Nested-Table-Struktur
für die spätere Rückgabe.
Lesen aus Cursor
Erweitern Nested-Table um einen
Satz und Überführen eines Satzes in
die Nested-Table
Rückgabe der kompletten Tabelle
an das aufrufende
SELECT-Statement
(Alternative zu PIPE).
303
create or replace function f_Bestellung_X(cur cursor_pkg.refcur_t)
RETURN Bestellung_X_t_table IS
BESTELLNR
NUMBER(10);
Übernahme von
KUNDENCODE
NUMBER(10);
BESTELLDATUM
DATE;
Ausgangssätzen
LIEFERDATUM
DATE;
als Cursor
BESTELL_TOTAL
NUMBER(12,2);
Fehler_Datum
DATE;
ORDER_ID
NUMBER(10);
objset Bestellung_X_t_table := Bestellung_X_t_table();
i number := 0;
begin
LOOP
-- read from cursor variable
FETCH cur into BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,ORDER_ID;
-- ext when last row
EXIT WHEN cur%NOTFOUND;
i := i+1;
if substr(to_char(LIEFERDATUM,'YYYY.MM.YY'),1,4) >2002 then
Fehler_Datum := to_date('9999.12.12','YYYY.MM.DD');
else Fehler_Datum := LIEFERDATUM;
End if;
objset.extend;
objset(i) :=
Bestellung_X_t(BESTELLNR,KUNDENCODE, BESTELLDATUM,LIEFERDATUM,BESTELL_TOTAL,Fehler_Datum);
END LOOP;
CLOSE cur;
Return objset;
END;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispielaufrufe
insert into bestellung_X
select * from
TABLE(f_Bestellung_X(CURSOR(SELECT * from Bestellung)))
select * from
TABLE(f_bestellung(CURSOR(SELECT * from Bestellung)))
select count(*) from
TABLE(f_bestellung(CURSOR(SELECT * from Bestellung))
304
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Partition Exchange Loading (PEL)
Temporäre Tabelle
Financial
Production
Neuer Monat
Human Res.
P1
P2
P3
P4
Store
Supplier
Marketing
Service
4
4
9
8
Zeit
Monat 13
Parallel Direct Path INSERT
(Set Based)
CREATE TABLE AS SELECT
(CTAS)
CREATE Indizes / Statistiken anlegen
EXCHANGE Tabelle
• Unvergleichbar schnell!
305
Z1
Z2
Z3
Z4
Monat 12
Monat 11
Monat 10
DROP
PARTITION
Region
Faktentabelle
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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;
1
2
-- Inhalte laden
INSERT INTO "PART"."BESTELLUNG_TEMP"
(BESTELLNR, KUNDENCODE, BESTELLDATUM, LIEFERDATUM, BESTELL_TOTAL, AUFTRAGSART, VERTRIEBSKANAL)
VALUES ('2', '3', TO_DATE('23.Nov.2008', 'DD-MON-RR'),
3
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;
4
-- Temporäre Tabelle an die Zieltabelle anhängen
ALTER TABLE Bestellung EXCHANGE PARTITION "Nov08“ WITH TABLE Bestellung_temp
INCLUDING INDEXES WITHOUT VALIDATION;
306
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
5
Exchange Partition
Data Integration
Layer
Enterprise Information
Layer
Älteste
Checks
CTAS
Tmp_table
Direct Path
User View
Layer
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. |
DATA WAREHOUSE
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
Oktober
November
Tmp_table
CTAS
Tmp_table
Alter table
exchange partition
Alter table exchange partition
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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
309
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
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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
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
select * from quarterly_sales
unpivot include nulls
(revenue for quarter in (q1,q2,q3,q4))
order by salesrep, quarter ;
310
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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
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
select * from sales_by_quarter
pivot (sum(revenue)
for quarter in ('Q1','Q2','Q3','Q4'))
order by salesrep ;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
311
Aggregate bilden
• Bereitstellung in Form von Materialized Views
– Spart einen separaten ETL-Lauf
– Flexibler, weil nur 1 SQL-Kommando nötig
– Geht zu Lasten der Dokumentation
• Mit Partition Change Tracking die Aktualisierung der MAVs steuern
– Auch andere Refresh-Mechanismen nutzen
312
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Multiple
Inserts
313
INSERT ALL
WHEN STATUS = 'P'‚
THEN INTO WH_TRANS_PRIVAT
(BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS)
VALUES
(BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS)
WHEN STATUS = 'F'‚
THEN INTO WH_TRANS_FIRMA
(BESTELLMENGE,KUNDENCODE,BESTELL_TOTAL,STATUS)
VALUES
(BESTELLMENGE$1,KUNDENCODE$1,BESTELL_TOTAL$1,STATUS)
SELECT WH_TRANSAKTIONEN.BESTELLMENGE BESTELLMENGE$1,
WH_TRANSAKTIONEN.KUNDENCODE KUNDENCODE$1,
WH_TRANSAKTIONEN.BESTELL_TOTAL BESTELL_TOTAL$1,
WH_TRANSAKTIONEN.STATUS STATUS
FROM
WH_TRANSAKTIONEN WH_TRANSAKTIONEN
WHERE
(WH_TRANSAKTIONEN.STATUS = 'P‚ /*SPLITTER.PRIVATKUNDEN*/)
OR
(WH_TRANSAKTIONEN.STATUS = 'F‚ /*SPLITTER.FIRMENKUNDEN*/);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
MERGE-Funktion
• Funktion MERGE dient dem
gleichzeitigen INSERT und UPDATE
• Basierend auf dem Matching des
definierten Schlüssels (ON-Klausel)
• Auch DELETE-Operationen möglich
314
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";
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Set-Based ETL-Prüf- und TransformationsTechniken in der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
315
Es gibt 6 Prüf-Kategorien
Tabellen-über
greifende Regeln
Attribut-bezogene Regeln
1.
2.
Not Null / Pflichtfelder
Formatangaben
numeric
Alphanumerisch
Date
Masken
a)
b)
c)
d)
A
3.
4.
9.
D
B
Abhängigkeiten von Werten in anderen
Attributen desselben Satzes
C
8.
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
E
12.
13.
14.
Referenz-Zusammenhänge
Verweise auf Sätze einer anderen Tabelle (Relation)
Zeitinvariante Inhalte (z. B. Anz. Bundesländer)
Zeitabhängige Veränderungen
Über die Zeit mit anderen Daten korrelierende Feldinhalte
Verteilungs-/Mengen-bezogene Regeln
F
15.
Verteilung
a)
b)
Rekursive Zusammenhänge
Verweise auf andere Sätze derselben Tabelle (Relation)
Ober- Untergrenzen von Summen
Anzahl Sätze pro Intervall usw.
Zeit-/ Zusammenhang-bezogene Regeln
Primary Key / Eindeutigkeit
Aggregat – Bedingungen
a)
b)
Aggregat – Bedingungen
–
Satz-übergreifende Regeln
6.
7.
10.
11.
Ober-/Untergrenzen / Wertelisten
Satz-bezogene Regeln
5.
Child-Parent (Orphan)
Parent-Child
a)
b)
a)
b)
Div. Check Constraint
Wertbereiche
–
Foreign Key
16.
Arithmetische Mittel
Varianz / Standardabweichungen
Qualitätsmerkmale und Mengen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mengen-basierte Prüfungen mit SQL
Attribut-bezogene Regeln
1.
2.
Not Null / Pflichtfelder
Formatangaben
numeric
Alphanumerisch
Date
Masken
a)
b)
c)
d)
A
3.
4.
Div. Check Constraint
Wertbereiche
–
Ober-/Untergrenzen / Wertelisten
Satz-bezogene Regeln
B
5.
Abhängigkeiten von Werten in anderen
Attributen desselben Satzes
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
select
bestellnr,
case
when -- wenn Feld BESTELLNR nicht numerisch
REGEXP_LIKE(BESTELLNR, '[^[:digit:]]')
then 1
else 0
End Num_Check_bestellnr
select
from bestellung;
CASE
WHEN (F1 = 3 and F2 = F3 + F4)
then 1
ELSE 0
end
from fx
insert /*+ APPEND */ into err_non_unique_bestellung
select bestellnr from
(select
count(bestellnr) n,
bestellnr
from bestellung
group by bestellnr)
where n > 1;
Verweise auf andere Sätze derselben Tabelle (Relation)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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. |
DATA WAREHOUSE
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
Prüfen mit oder ohne 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. |
DATA WAREHOUSE
Prüfkonzepte
• Einfach implementierbar
• Fachliche Prüfungen kaum möglich
• Eventuell zusätzliche Prüfungen nötig
• Bessere Performance
• Nur bei aktivierten Constraints
Stage-Tabelle
+ Geprüfte Daten
Kopieren
Statistik
Routine
Date
Number
Varchar2()
Bad
File
320
Statistiken
DML
Error Log
Check
Constraints
Fehlerhafte
Sätze
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Error Logging
• Constraints
– Unique Key / Primary Key
– Foreign Key
– NOT NULL
– Check Constraint
Kunde
INSERT INTO Kunde
VALUES (......)
LOG ERRORS INTO
kunde_err('load_20040802
')
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
Kunde_err
KUNDENNR
VORNAME
NACHNAME
ORTNR
STRASSE
TELEFON
ORA_ERR_NUMBER$
ORA_ERR_MESG$
ORA_ERR_ROWID$
ORA_ERR_OPTYP$
ORA_ERR_TAG$
321
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Check Constraint mit Regular Expressions
CREATE TABLE Check_KUNDE (
KUNDENNR
NUMBER,
GESCHLECHT
NUMBER,
VORNAME
VARCHAR2(50),
NACHNAME
VARCHAR2(50),
ANREDE
VARCHAR2(10),
GEBDAT
DATE,
ORTNR
NUMBER,
STRASSE
VARCHAR2(50),
TELEFON
VARCHAR2(30)
);
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
322
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Wichtiges Hilfsmittel für Einzelfeldprüfungen: CASE
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;
323
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
324
Abarbeitungslogik für Einzelfeldprüfung mit CASE
• Temporäre Tabelle ist optional
– Ist wesentlich übersichtlicher
– Erlaubt Kombination von unterschiedlichen Prüfkriterien
Gepruefte_Daten
Kopieren
Stage-Tabelle
Varchar2()
Feld1
Feld2
Feld3
INSERT INTO
temp_table
SELECT
CASE
....
FROM
Stage_Table
Temp-Tabelle
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()
325
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Abarbeitungslogik für Einzelfeldprüfung 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;
OLTP_Kunden_tmp
Bestellnr
Menge
Summe
Name
Ort
BestDatum
Bestellnr_isNull
Menge_isNumeric
Summe_isNumeric
DATA WAREHOUSE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Summe_isNull
BestDatum_isDate
...
DATA WAREHOUSE
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
from fx
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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. |
DATA WAREHOUSE
6. Eindeutigkeit / PK
BESTELLUNG
BESTELLPOSITION
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
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. |
DATA WAREHOUSE
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_IDFK
FK
ZEIT_ID
REGION_ID FK
KANAL_ID
UMSATZ
MENGE
UMSATZ_GESAMT
ARTIKEL_NAME
GRUPPE_NR
GRUPPE_NAME
SPARTE_NAME
PK
SPARTE_NR
ARTIKEL_ID
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. |
DATA WAREHOUSE
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.
F_Key
Parent
Member Group
_Value
_Value
3
9
12
15
4
17
23
28
0
3
3
3
0
4
4
4
0
4
6
2
0
3
8
1
12
0
0
0
15
0
0
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;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
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. |
DATA WAREHOUSE
9. Foreign Keys
•Anforderung:
Zu jeder Bestellung muss es einen
Kunden geben.
BESTELLUNG
KUNDE
KUNDENNR PK
KUNDENNAME
BERUFSGRUPPE
SEGMENT
KUNDENTYP
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
•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);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
10. Aggregatbedingungen
Anzahl Sätze pro Einheit
•Anforderung:
Anzahl Positionen muss
einen bestimmten Wert haben.
•Lösung: Sub-Select in FROM-Klausel.
BESTELLUNG
BESTELLPOSITION
BESTELLNR
PK
ORTNR
FK
KUNDENNR
BESTELLDATUM
ANZAHLPOS
FK
BESTELLNR
PK
POSITIONSNR
MENGE
FK
ARTIKELNR
DEPOTSTELLE
RABATT
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. |
DATA WAREHOUSE
Umgang mit Schlüsseln im Verlauf des
Ladens
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
335
Bildung künstlicher Schlüssel
Anwendung 1
Verkaufsregion
Einkommensgruppe
Wohnart
Berufsgruppe
Anzahl Kinder
Alter
Name
Kunden_NR
Anwendung 2
Tel
PLZ
Ort
Strasse
Partnernummer
336
Data Warehouse
Verkaufsregion
Einkommensgruppe
Wohnart
...
PLZ
Ort
Kunden_NR
Partnernummer
Dim_Kd_NR
Neuer Schlüssel
Sequence
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Key Lookup
Dimension
Künstl. Schlüssel (Primary Key)
Log.Business Schlüssel (Alternate Unique)
6
5
4
3
KD_66
KD_55
KD_44
KD_33
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
2
1
KD_22
KD_11
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Join Lookup
Log.Business Schlüssel
Satz12
AA
Satz13
DFG
Satz14
erf
Satz15
sdfg
34
dddf
KD_11
1
DFG
64
dloidf
DATA WAREHOUSE
64
dloidf
KD_22
2
DFG
64
dloidf
78
ghzf
KD_33
3
erf
78
ghzf
4456
llkof
KD_44
4
sdfg
4456
llkof
Fakten
Bewegungsdaten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
337
Lookup-Verfahren mit Aktualisierung (Stammdaten)
Join
Bewegungssätze
Zielsätze
Anti –
Join
Referenzdaten
Tmp Table
alle Sätze ohne
Referenz
Insert mit
Dummy –
Schlüssel
Protokoll
338
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Künstl. Schlüssel (Primary Key)
Log.Business Schlüssel (Alternate Unique)
Sequenz
Next Val 7
1. Schritt
7
KD_99
Dummy
Dummy
Dummy
6
KD_66
Stamm Info
Stamm Info
Stamm Info
5
4
3
2
1
KD_55
KD_44
KD_33
KD_22
KD_11
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Stamm Info
Anti - Join
Wenn nicht in Dimension
enthalten dann
Dimension
2. Schritt
Join Lookup
INSERT INTO Dim
SELECT .... FROM Bew, Dim
WHERE Log Key NOT IN Dim
DATA WAREHOUSE
Log.Business Schlüssel
Satz12
XX
567
ddwer
KD_99
7
XX
567
ddwer
34
dddf
KD_11
1
DFG
64
dloidf
Satz12
AA
Satz13
DFG
64
dloidf
KD_22
2
DFG
64
dloidf
Satz14
erf
78
ghzf
KD_33
3
erf
78
ghzf
Satz15
sdfg
4456
llkof
KD_44
4
sdfg
4456
llkof
Bewegungsdaten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Fakten
DATA WAREHOUSE
339
Lade- und Transaktionssteuerung innerhalb
der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
340
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?
341
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Transaktionssteuerung / -rücksetzung
• Markieren von Sätzen eines Ladelaufs in zusätzlichen Feldern
– 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
• Flashback Database / Table / Query
– Transaktions-genaues Zurückrollen
– Flashback DB benötigt zusätzlichen Plattenplatz
342
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Flashback Technologie in der Datenbank
• Flashback Query
• Flashback Table
• Flashback Drop
• Flashback Versions Query
• Flashback Transaction Query
• Flashback Database
• Flashback Data Archive
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel Flashback Table
CREATE TABLE x (Nummer number);
ALTER TABLE x ENABLE ROW MOVEMENT;
INSERT INTO X VALUES (1);
INSERT INTO X VALUES (1);
INSERT INTO X VALUES (1);
COMMIT;
Jetzt erst wird eine SCN erzeugt
Abfrage u. Flashback der letzten Änderungs-SCN
SELECT ora_rowscn FROM x;
SELECT * FROM x AS OF SCN 12555060;
SELECT * FROM x AS OF TIMESTAMP to_timestamp('2012-02-15 10:15:00', 'YYYY-MM-DD HH:MI:SS');
Zurücksetzen
Flashback table x to scn 16552768;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
344
Flashback Database
• Flashback Database
– Erstellen der Fast (Flash) Recovery Area
– Restart Database ( mount exclusive, wenn DB <11.2)
ALTER DATASE FLASHBACK ON;
ALTER SYSTEM SET db_flashback_retention_target =
<number_of_minutes>;
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. |
DATA WAREHOUSE
Flashback Database
• Garantierter Rücksetzpunkt
– Muss explizit gelöscht werden (Achtung FRA-Size!)
– NOLOGGING Operationen sind erlaubt
– Archivelog Modus dennoch zwingend
– Restore nur zum Rücksetzpunkt möglich (keine beliebige SCN), wenn Flashback
Logs nicht explizit aktiviert wurden
346
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lade-Tools außerhalb der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
347
Oracle GoldenGate-Technologie
Datenintegration für alle Anwendungsfälle
Oracle GoldenGate bietet mit geringer Belastung Capture, Routing, Transformation und Delivery von Datenbank-Transaktionen in
heterogenen Umgebungen in Echtzeit
Alleinstellungsmerkmale
Performanz
Erweiterbarkeit
& Flexibilität
non-intrusiv, niedrige Belastung, Latenzzeit von Sekundenbruchteilen
Offene, modulare Architektur - Heterogene Quellen & Ziele
DATA WAREHOUSE
Zuverlässig
348
Erhält transaktionale Integrität – Robust gegen Störungen und Fehler
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
348
Oracle GoldenGate Architektur
Capture: Auslesen der committed Transaktionen (optional
gefiltert) wie sie im Transaktionslog erscheinen.
Trail files: Speichern der Daten für Weiterleitung.
Pump: Datendistribution zu mehreren Zielen.
Route: Daten können für Übertragung verschlüsselt werden.
Delivery: Anwenden mit Transaktionsintegrität, Transformationen wie benötigt.
DATA WAREHOUSE
Pump
Capture
LAN / WAN /
Internet
Source Trail
Pump
QuellDatenbank
Target Trail
Delivery
(TCP/IP)
Target Trail
Source Trail
Delivery
Capture
ZielDatenbank
Bidirektional
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
349
GoldenGate Heterogene Plattformen
Datenbanken
O/S und Plattform
Capture:
 Oracle
Windows 2000, 2003, XP, Windows7
DB2
 Microsoft SQL Server
 Sybase ASE
 Teradata
 Enscribe
 SQL/MP
 SQL/MX
Linux

Sun Solaris
HP NonStop
HP-UX
HP TRU64
HP OpenVMS
IBM AIX
Delivery:
IBM z/OS
 Alle wie oben, und zusätzlich:
HP Neoview, Netezza, Greenplum und beliebige
kompatible Datenbanken
 ETL-Produkte
 JMS Message Queues
 MySQL
TimesTen

350
ODBC
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle ETL/ELT-Tool-Suite für unterschiedliche
Anforderungen
Oracle Data Integrator
Oracle Warehouse Builder
DWH
OLTP
A‘
A
DWH
OLTP
A‘
A
PL/SQL
Insert into A‘
Select * from A
Set Based
Code
Template
Select
Java
based
Agent
Java
based
Agent
Row+Set Based
Code
Template
Insert
Oracle Golden Gate
OLTP
Log
Source Trail
Capture
DWH
Target Trail
Delivery
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Log
DATA WAREHOUSE
Security und Mandantensteuerung im Data
Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
352
Sicherheit in der Datenbank
Service
Servicekunde
Integration
Layer
BI-Anwendungen werden im Schnitt alle 4 Jahre ausgetauscht
Oft laufen mehrere BI-Anwendungen parallel
Enterprise Layer
Core - DWH / Info Pool
User View
Layer
BI Plattform
Referenzdaten (extern) (10%)
Stammdaten (10%)
Bewegungsdaten / Transaktionen (80%)
Logistik
Logistikaufwand
Controlling
Marketingsicht
Sozialsituation
Kundenhistorie
Profitabilität
ODBC
Vorberechnete
Kennzahlen
Profitabilität
C
Einkauf
Q
Kunde
A
MJ
Produkte&Trends
Vertrieb
Kundenhistorie
A
L
Logistikaufwand
für einen Kunden
Produkte&Trends
Data Mining
Statistikdaten
Servicekunde
Oracle R
Marketing
Marketingsicht
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zwei Level des Zugriffs-Monitoring
1) Standard Auditing
2) Fine Grained Auditing
Statement
level. all
statements
in a sessions
any objects
Granting
Priviliges
activities
Object
level
(update, insert
delete, select)
By session
X
X
X
By access
X
Monitoring of all activities by
User by session, by object.
- Action based auditing
(e. g. analysing the predicate
example: value > 100000)
- all detailed commands
- Timestemps
-trials and successes
- Additional triggers
- notifications and other actions
DATA WAREHOUSE
Audit select on F_UMSATZ;
X
X
EXECUTE DBMS_FGA.ADD_POLICY(
object_schema => 'DWH‘
,
object_name
=> 'F_UMSATZ’,
policy_name
=> 'Chk_F_Umsatz', statement_types => 'SELECT’
, enable
=> TRUE);
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
354
sondern so...
Nicht so...
Mandant 1
Mandant 2
Mandant 3
Mandant4
Mandant 5
Mandant 6
Channels
Kunde
Channels
Kunde
Channels
Kunde
Channels
Kunde
Umsatz
Channels
Kunde
Umsatz
Channels
Kunde
Umsatz
Umsatz
Zeit
Produkte
Umsatz
Zeit
Produkte
Umsatz
Zeit
Produkte
Zeit
Produkte
Zeit
Produkte
Zeit
Produkte
Channels
Kunde
Alle Mandanten
in einer Tabelle
Umsatz
Zeit
Produkte
DATA WAREHOUSE
Nur einmal pflegen und verwalten!
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
355
Fine Grained Security on Row level
Zu lesenden Objekte
Zugreifende Users
User: DataMart1
User_Table
Context
User 2
User 3
Set User Context
Set User Context
select
sum(UMSATZ)
from umsatz;
select
sum(UMSATZ)
from umsatz;
Build Predicate Procedure
Partner
Catalog
Channels
Internet
Direct Sales
Kunde
Umsatz
Zeit
Predicate
Add / DROP Policy
Sieht nur
Partner-Umsatz
Sieht nur
Katalogwaren-Umsatz
Produkte
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA
DATAWAREHOUSE
WAREHOUSE
356
Auf der Seite des zu lesenden Objektes
Auf der Seite des zugreifenden Users
Definieren der Policy
Logon-Trigger
create or replace package channel_security as
function channelnum_sec (A1 VARCHAR2, A2 varchar2)
return varchar2;
end;
/
create or replace package body channel_security as
function channelnum_sec (A1 VARCHAR2, A2 varchar2)
return varchar2
is
d_predicate varchar2(2000);
v_channel_id number;
begin
select sys_context('channel_info','channel_num') into v_channel_id from DUAL;
d_predicate := 'SALES.CHANNEL_ID = '||v_channel_id||' or '||v_channel_id||' = 10';
return d_predicate;
end;
end;
/
Aktivieren der Policy
exec dbms_rls.drop_policy('AREA1','SALES','CHANNEL_POLICY');
exec dbms_rls.add_policy('AREA1','SALES','CHANNEL_POLICY','AREA1',
'channel_security.channelnum_sec','SELECT');
CREATE OR REPLACE TRIGGER vpd_init_trig AFTER LOGON ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'DROP CONTEXT channel_infostr';
EXECUTE IMMEDIATE 'CREATE CONTEXT channel_info using user_context';
system.User_context.select_user_Channel;
EXCEPTION
WHEN NO_DATA_FOUND THEN null;
end;
Erstellen des Kontextes
create or replace package User_context as
Procedure select_user_Channel ;
end;
/
Create or replace Package Body User_context as
Procedure select_user_Channel is
Channelnum number;
begin
select channel_id into Channelnum from area1.user_table where
upper(User_name) = sys_context('USERENV', 'SESSION_USER');
dbms_session.set_context('channel_info', 'channel_num',Channelnum);
end;
end;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA
DATAWAREHOUSE
WAREHOUSE
357
Multi-strukturierte Daten mit JSON
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
JSON (Java Script Object Notation)
• Standardisiertes Format
– ECMA-404 (JSON Data Interchange Format)
– ECMA-262 (ECMAScript Language Specification, third edition)
• Leichteres Format als XML
– Weniger Datenmenge /Overhead
– Einfacher Umgang
• Besonders beliebt bei noSQL-DB- Java – Entwicklern
• Im Hadoop-Umfeld weit verbreitet
• Ab Oracle 12.1.0.2 direkt in der Datenbank
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
359
Multi-Strukturierte Informationen
INSERT INTO Web_Log_array
VALUES (SYS_GUID(),
SYSTIMESTAMP,
'{"wl_rec_id" : 1600,
"wl_ip_Adr" : "168.192.1.10",
"wl_dns"
: "MP-AM5643",
"wl_start_date" : "11-08-2014:23:21",
"wl_end_date" : "11-08-2014:25:18",
"wl_ses_id" : "77763576423",
"wl_Ses_anz_sec" : "10",
"wl_status" : "ACK"}');
1
2
INSERT INTO Web_Log_array
VALUES (SYS_GUID(),
SYSTIMESTAMP,
'{"wl_rec_id" : 1600,
"wl_ip_Adr" : ["168.192.1.10","168.192.1.11"],
"wl_dns"
: "MP-AM5643",
"wl_start_date" : "11-08-2014:23:21",
"wl_end_date" : "11-08-2014:25:18",
"wl_ses_id" : "77763576423",
"wl_Ses_anz_sec" : "10",
"wl_status" : "ACK"}');
3
INSERT INTO Web_Log_array
VALUES (SYS_GUID(),
SYSTIMESTAMP,
'{"wl_rec_id" : 1600,
"wl_ip_Adr" : {"ip" : "168.192.1.10", "sub" : "255.255.255.0"},
"wl_dns"
: "MP-AM5643",
"wl_start_date" : "11-08-2014:23:21",
"wl_end_date" : "11-08-2014:25:18",
"wl_ses_id" : "77763576423",
"wl_Ses_anz_sec" : "10",
"wl_status" : "ACK"}');
SQL> select wa.Log_Record.wl_ip_Adr from Web_Log_array wa;
WL_IP_ADR
-----------------------------------------------------------------"168.192.1.10"
["168.192.1.10","168.192.1.11"]
{"ip":"168.192.1.10","sub":"255.255.255.0"}
SQL> select wa.Log_Record.wl_ip_Adr.sub from Web_Log_array wa;
WL_IP_ADR
--------------------------------------------------------------"255.255.255.0"
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
360
Beispiel
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
361
An welcher Stelle passen JSON-Objekte in das
Data Warehouse ?
• Daten für Auswertungen?
Integration
Layer
User View
Layer
Enterprise Layer
Core - DWH / Info Pool
• Daten zur Aufbewahrung?
• JSON – Format als Vorstufe vor
Einführung von Big Data
JSON
HDFS / NoSQL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
JSON
JSON
Unstructured Data
DATA WAREHOUSE
Big Data Analysen im Data Warehouse mit
Big Data SQL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Hadoop Services und Projekte
• Besteht aus 2 Key Services
– Hadoop Distributed File System (HDFS)
– MapReduce – Frame Work
• Weitere Projekte basierend auf dem Kern-Hadoop-Konzept
–
–
–
–
–
–
–
Hive: SQL auf Hadoop
Pig: Relationale komplexe Logik und Algorithmen auf Hadoop
Sqoop: Datenaustausch zwischen zwischen Hadoop und relationalen Datenbanken
Hbase: nicht-relationale verteilte Database
Flume: sammeln und aggregieren von verteilten Daten und laden in zentralen Datenbestand
Oozie: Workflow + Scheduling für Hadoop
… und andere mehr
©2014 Oracle – All Rights
Reserved
Copyright ©
2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Business Mehrwerte über Technologie Innovation
Die passende Technologie für entsprechende Aufgaben UND
Technologien im Verbund nutzen
Hadoop
Neue Geschäftsmodelle und
Optionen
Relational
NoSQL
Scale the Business
Run the Business
 Schneller Daten bereitstellen
 Integration von Systemen
 Wettbewerbern zuvor kommen
 Herausforderung “Mobility”
 Kritische Geschäftsprozesse
 Vollständige Informationsketten
 Ökononisch sinnvolle Skalierung
 Investitionsschutz
 Neu Paradigmen nutzen
 Eingespielte Verfahren und
Know how
 Neue Analysearten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
365
Die Schwierigkeiten bei der Adaption neuer Technologien
INTEGRATION
Big Data in
bestehende
Architekturen
einbinden und die
Systeme
beherrschen
SKILLS
Noch fehlen
sinnvolle Tools
und das Know
how um Big Data
– Daten direkt
auszuwerten
SECURITY
Keine klare
Sicherheitsstrategie erkennbar
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
366
Die Schwierigkeiten bei der Adaption neuer Technologien
Oracle’s - Weg
INTEGRATION
SKILLS
SECURITY
SQL
Engineered
Systems
SQL auf
allen Daten
Database
Security auf
allen Daten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
367
Was wäre, wenn das alles mögliche wäre…
• Alle Datenarten für alle Datenbank-Anwendungen verfügbar machen
• Die volle Bandbreite der Oracle SQL Query Language nutzen
• Mit allen Security-Features von Oracle 12c
• Ohne Daten zwischen dem Hadoop-Cluster und der Datenbank hin und
her zu kopieren
• Eine sehr hohe Query Performance erreichen
• Das bestehende Wissen (SQL-Skills) nutzen
• Und dennoch immer die aktuellsten Hadoop-Neuerungen nutzen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
368
Oracle Big Data SQL – Eine neue Architektur
• Mächtiges und hoch-performantes SQL auf Hadoop
– Alle Oracle SQL Möglichkeiten auf Hadoop
– SQL query Processing auf den lokalen Hadoop Knoten
• Einfache Daten-Integration von Hadoop und Oracle Database
– Single SQL – Zugriffspunkt auf alle Daten
– Skalierbare Joins zwischen Hadoop und RDBMS-Data
• Optimierte Hardware
– High-speed Infiniband Netzwerk zwischen Hadoop und Exadata
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
369
Standardisierte Metadaten: Übernahme Hive Metadaten in
den Oracle Datenbank-Katalog
Oracle Catalog
Hive Metastore
Hive metadata
CREATE TABLE movieapp_log_json
(click VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE
DEFAULT DIRECTORY DEFAULT_DIR
)
REJECT LIMIT UNLIMITED;
External Table
External Table
Exadata
Big Data Appliance
+
Oracle Database
+
Hadoop/NoSQL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
370
Abfragen auf Hadoop ausführen
Hive metadata
I/O und Smart Scan
ausführen
• Auswahl der Zeilen
und Spalten
Select
,
,
From
,
where
and
c_customer_id
c_customer_last_name
ca_county
customers
customer_address
c_customer_id = ca_customer_id
ca_state = ‘CA’
Oracle Catalog
Hive metadata
HDFS
Name Node
External Table
HDFS
Data Node
External Table
HDFS
Data Node
Nur relevante Daten bewegen
• relevante Zeilen
• relevante Spalten
HDFS
Data Node
HDFS
Data Node
“Tables”
Join mit Daten
aus der relationalen
Datenbank
• 1 block = 256 MB
• Example File = 40 blocks
• InputSplits = 40  mögliche Parallelsisierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
371
Big Data SQL Minimizes Data Movement
Big Data SQL Server
1.
2.
3.
Hadoop Smart Scan
Apply filter predicates
Apply column projections
Apply row-level functions
• JSON Parsing
1.
2.
External Table Services
Read using Hadoop Classes
Convert to Oracle Data
Stream
Data Node
• Direktes Arbeiten auf den Daten
– Scans and serializations from Hadoop classes
– Transformation into Oracle data stream
• Smart Scan: Nur relevante Daten werden
werden weitergeleitet
– Apply filter predicates
• Include complex predicates, e.g. JSON_EXISTS
• Bloom filters for faster joins
• Score Data Mining models
– Project columns
• Include projections from nested structures
Disk
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
372
Hadoop / HDFS - Knoten
1
Datenbank Maschine / Linux
SELECT * FROM movielog WHERE rownum < 20;
5
1 SELECT f.click.custId, m.title, m.year, m.gross, f.click.rating
5
FROM movielog f, movie m
WHERE f.click.movieId = m.movie_id
AND f.click.rating > 4;
create or replace directory
ORACLE_BIGDATA_CONFIG as '/u01/bigdatasql_config';
create or replace directory "ORA_BIGDATA_CL_bigdatalite" as '';
Beispiel: Log-File JSON -Format
hadoop
fs -tail /user/oracle/moviework/applog_json/movieapp_3months.log
4
CREATE TABLE movielog
2
(click VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_HDFS
DEFAULT DIRECTORY DEFAULT_DIR
LOCATION ('/user/oracle/moviework/applog_json/')
)
REJECT LIMIT UNLIMITED;
[oracle@bigdatalite ~]$ hadoop fs -tail /user/oracle/moviework/applog_json/movieapp_3months.log
,"recommended":"Y","activity":2}
{"custId":1135508,"movieId":240,"genreId":8,"time":"2012-10-01:02:04:15","recommended":"Y","activity":5}
{"custId":1135508,"movieId":1092,"genreId":20,"time":"2012-10-01:02:10:23","recommended":"N","activity":5}
{"custId":1135508,"movieId":4638,"genreId":8,"time":"2012-10-01:02:10:54","recommended":"N","activity":7}
{"custId":1135508,"movieId":4638,"genreId":8,"time":"2012-10-01:02:16:49","recommended":"N","activity":7}
{"custId":1135508,"movieId":null,"genreId":null,"time":"2012-10-01:02:24:00","recommended":null,"activity":9}
{"custId":1135508,"movieId":240,"genreId":8,"time":"2012-10-01:02:31:12","recommended":"Y","activity":11,
"price":2.99}
{"custId":1191532,"movieId":59440,"genreId":7,"time":"2012-10-01:03:11:35","recommended":"Y","activity":2}
{"custId":1191532,"movieId":null,"genreId":null,"time":"2012-10-01:03:15:29","recommended":null,"activity":9}
{"custId":1191532,"movieId":59440,"genreId":7,"time":"2012-10-01:03:19:24","recommended":"Y","activity":11,
"price":3.99}
create public database link BDSQL$_bigdatalite
using 'extproc_connection_data';
create public database link BDSQL$_DEFAULT_CLUSTER
using 'extproc_connection_data';
/BigDataConfig
/BigDatalite
3
Files mit Pfadangaben
zu HDFS, Hive,
JavaClass etc
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Zugriff über Hive Metastore
Datenbank Maschine / Linux
Hadoop / HDFS – Knoten / Hive Metabeschreibung
CREATE EXTERNAL TABLE `movieapp_log_json`(
`custid` int COMMENT 'from deserializer',
`movieid` int COMMENT 'from deserializer',
`genreid` int COMMENT 'from deserializer',
`time` string COMMENT 'from deserializer',
`recommended` string COMMENT 'from deserializer',
`activity` int COMMENT 'from deserializer',
`rating` int COMMENT 'from deserializer',
`price` float COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://bigdatalite.localdomain:8020/user/oracle/moviework/applog_json'
TBLPROPERTIES (
'last_modified_by'='oracle',
'last_modified_time'='1408613969',
'transient_lastDdlTime'='1408613969')
CREATE TABLE movieapp_log_json (
custId INTEGER ,
movieId INTEGER ,
genreId INTEGER ,
time
VARCHAR2 (20) ,
recommended VARCHAR2 (4) ,
activity NUMBER,
rating INTEGER,
price
NUMBER
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_HIVE
DEFAULT DIRECTORY DEFAULT_DIR
)
REJECT LIMIT UNLIMITED;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
374
Automatisierung: Oracle Data Modeler
Übernahme der Hive Definitionen in
das Modell
Generieren Oracle DDL für die
importierten Tabellen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
375
Neue Daten-Quellen für Oracle External Tables
CREATE TABLE movielog
(click VARCHAR2(4000))
ORGANIZATION EXTERNAL
( TYPE ORACLE_HIVE
DEFAULT DIRECTORY Dir1
ACCESS PARAMETERS
(
com.oracle.bigdata.tablename logs
com.oracle.bigdata.cluster mycluster)
)
REJECT LIMIT UNLIMITED
• Neue Eigenschaften
– ORACLE_HIVE und ORACLE_HDFS Access Driver
– Identifizuierung Hadoop Cluster, Data Source Objects, Column
Mapping, Error Handling, Overflow Handling, Logging
• Neue Tabellen Metadaten werden von Oracle DDL zu
den Hadoop Lese-Routinen zur Query-Zeit geschickt
• Auf Erweiterung hin entwickelt
– StorageHandler wird künftig auch weitere Quellen-Arten lesen
können
– Z. B.: MongoDB, HBase, Oracle NoSQL DB
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
376
Big Data Appliance X4-2
Hardware:
•
•
•
•
18 Knoten (mit je 2 * 8 Kerne)
1152 GB RAM (erweiterbar)
864 TB Plattenkapazität
40 Gb/s InfiniBand
Integrierte Software:
•
•
•
•
•
•
Oracle Linux
Oracle Java VM
Cloudera Distribution of Apache Hadoop (CDH)
Cloudera Manager
Oracle R Distribution
NoSQL Database Community Edition (falls gewünscht)
Die integrierte Software (außer NoSQL DB CE) wird als Teil von Premier Support für Systeme bzw. Premier Support für
Betriebssysteme unterstützt
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Komplettes Set des Oracle SQL über alle Daten hinweg nutzen
Ausschnitt Oracle SQL Analytische Funktionen
•
Ranking functions
•
– rank, dense_rank, cume_dist, percent_rank, ntile
•
•
•
•
Statistical Aggregates
•
Linear regression
– Fitting of an ordinary-least-squares regression line to a set of number
pairs.
Hypothesis Testing
– Student t-test , F-test, Binomial test, Wilcoxon Signed Ranks test, Chi-square, Mann
Whitney test, Kolmogorov-Smirnov test, One-way ANOVA
– Correlation, linear regression family, covariance
•
Cross Tabs
– Enhanced with % statistics: chi squared, phi coefficient, Cramer's V, contingency
coefficient, Cohen's kappa
Reporting Aggregate functions
– Sum, avg, min, max, variance, stddev, count, ratio_to_report
•
Correlations
– Pearson’s correlation coefficients, Spearman's and Kendall's (both nonparametric).
LAG/LEAD functions
– Direct inter-row reference using offsets
•
– DBMS_STAT_FUNCS: summarizes numerical columns of a table and returns count,
min, max, range, mean, stats_mode, variance, standard deviation, median,
quantile values, +/- n sigma values, top/bottom 5 values
Window Aggregate functions (moving and cumulative)
– Avg, sum, min, max, count, variance, stddev, first_value, last_value
Descriptive Statistics
•
Distribution Fitting
– Kolmogorov-Smirnov Test, Anderson-Darling Test, Chi-Squared Test, Normal,
Uniform, Weibull, Exponential
– Frequently combined with the COVAR_POP, COVAR_SAMP, and CORR
functions
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
next = lineNext.getQuantity();
}
Pattern Matching mit Oracle SQL
if (!q.isEmpty() && (prev.isEmpty() || (eq(q, prev) && gt(q, next)))) {
state = "S";
return state;
}
Ticker
Ausschnitt Oracle SQL Analytische Funktionen
if (gt(q, prev) && gt(q, next)) {
state = "T";
return state;
}
if (lt(q, prev) && lt(q, next)) {
state = "B";
return state;
}
10:00 10:05 10:10 10:15 10:20 10:25
if (!q.isEmpty() && (next.isEmpty() || (gt(q, prev) && eq(q, next)))) {
state = "E";
return state;
}
Simplified,
sophisticated,
standards
based syntax (W-Form)
Beispiel
finden von Mustern
in Aktien-Markt-Bewegung
if (q.isEmpty() || eq(q, prev)) {
state = "F";
return state;
}
return state;
}
private boolean eq(String a, String b) {
if (a.isEmpty() || b.isEmpty()) {
return false;
}
return a.equals(b);
}
private boolean gt(String a, String b) {
if (a.isEmpty() || b.isEmpty()) {
return false;
}
return Double.parseDouble(a) > Double.parseDouble(b);
}
private boolean lt(String a, String b) {
if (a.isEmpty() || b.isEmpty()) {
return false;
}
return Double.parseDouble(a) < Double.parseDouble(b);
}
public String getState() {
return this.state;
}
}
BagFactory bagFactory = BagFactory.getInstance();
@Override
public Tuple exec(Tuple input) throws IOException {
long c = 0;
String line = "";
String pbkey = "";
V0Line nextLine;
V0Line thisLine;
V0Line processLine;
V0Line evalLine = null;
V0Line prevLine;
boolean noMoreValues = false;
String matchList = "";
ArrayList<V0Line> lineFifo = new ArrayList<V0Line>();
boolean finished = false;
250+ Lines of Java UDF
SELECT first_x, last_z
FROM ticker MATCH_RECOGNIZE (
PARTITION BY name ORDER BY time
MEASURES FIRST(x.time) AS first_x,
LAST(z.time) AS last_z
ONE ROW PER MATCH
PATTERN (X+ Y+ W+ Z+)
DEFINE X AS (price < PREV(price)),
Y AS (price > PREV(price)),
W AS (price < PREV(price)),
Z AS (price > PREV(price) AND
z.time - FIRST(x.time) <= 7 ))
12 Lines of SQL
DataBag output = bagFactory.newDefaultBag();
if (input == null) {
return null;
}
if (input.size() == 0) {
return null;
}
Object o = input.get(0);
if (o == null) {
return null;
}
379
Copyright
2014, Oracle
//Object
o = ©
input.get(0);
if (!(o instanceof DataBag)) {
int errCode = 2114;
20x mal weniger Code
and/or its affiliates. All rights reserved.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
R als universelles Analyse-Mittel
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
R: Brücke zwischen
den Welten
 Statistik
 Data / Text Mining
 Modellierung
 SocialMedia Connect
 Komplexe Graphik
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ORAAH Einsatzbereiche
• Direktes Arbeiten mit HDFS Objekte
– Vollen Zugriff auf HDFS-Objekte (Command line interfaces)
HDFS.LS()
– Analyse von HDFS Objekten
• Verschieben von Daten
– HDFS Dateien In-Memory R Objekte, lokale Dateien, HIVE-Objekte and Oracle Datenbank
• Arbeiten mit R auf HIVE Tabellen
– HIVE SQL Funktionalität mittels ORE-like transparent Layer
– Overloading R Funktionen auf ore.frame Objekte die im Hintergrund auf HIVE Tabellen/views “gemappt” werden
• Native advanced analytics Funktionen
– Allgemeine statistische Funktionen (z. B. table()) und Predictive Analytics Techniken (z. B. Lineare Regression)
• Starten von MapReduce Jobs ohne Java programmieren zu müssen
– Aus einer R-Session heraus
– Map und reduce Funktionen sind in in R geschrieben
– Testen von MapReduce Jobs im “Single Threaded Mode” mit orch.dryrun / Hadoop Verarbeitung wird simuliert
Arbeiten in einer R Client – Umgebung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Oracle R Enterprise
Database Server Maschine
User R Engine
Oracle R Packages (ORE)
Oracle Database
SQL
Lineare Modelle
R-Skripte Clusterung
Segmentierung
Neuronale Netze
R  MapReduce
R  Hive
CSV
R  sqoop/OLH
HCache
R  HDFS
Hadoop Abstraction Layer
Excel
R
Results
Results
JSON
R Engine(s) managed by Oracle DB
MapReduce
Nodes
HDFS
Nodes
R Engine
Other R
packages
Oracle R Enterprise packages
JSON
{CRAN
packages}
Hadoop Cluster (z. B. BDA)
ORD
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
HDFS API – Funktionen
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ORAAH Analytics Functions
Function
Description
orch.cor
Correlation matrix computation
orch.cov
Covariance matrix computation
orch.kmeans
Perform k-means clustering on a data matrix stored as an HDFS file. Score data using orch.predict.
orch.lm
Fits a linear model using tall-and-skinny QR (TSQR) factorization and parallel distribution. The function computes the
same statistical parameters as the Oracle R Enterprise ore.lm function. Score data using orch.predict.
orch.lmf
Fits a low rank matrix factorization model using either the jellyfish algorithm or the Mahout alternating least squares
with weighted regularization (ALS-WR) algorithm.
orch.neural
Provides a neural network to model complex, nonlinear relationships between inputs and outputs, or to find patterns in
the data. Score data using orch.predict.
orch.nmf
Provides the main entry point to create a nonnegative matrix factorization model using the jellyfish algorithm. This
function can work on much larger data sets than the R NMF package, because the input does not need to fit into
memory.
orch.princomp
Principal components analysis of HDFS data. Score data using orch.predict.
orch.sample
Sample HDFS data by percentage or explicit number of rows specification
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispiel zur Nutzung von Hive mit OREhive
ore.connect(type="HIVE")
ore.attach()
# create a Hive table by pushing the numeric
# columns of the iris data set
IRIS_TABLE <- ore.push(iris[1:4])
# Create bins based on Petal Length
IRIS_TABLE$PetalBins =
ifelse(IRIS_TABLE$Petal.Length < 2.0, "SMALL PETALS",
+
ifelse(IRIS_TABLE$Petal.Length < 4.0, "MEDIUM PETALS",
+
ifelse(IRIS_TABLE$Petal.Length < 6.0,
+
"MEDIUM LARGE PETALS", "LARGE PETALS")))
#PetalBins is now a derived column of the HIVE object
> names(IRIS_TABLE)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length"
[4] "Petal.Width" "PetalBins"
# Based on the bins, generate summary statistics for each group
aggregate(IRIS_TABLE$Petal.Length,
by = list(PetalBins = IRIS_TABLE$PetalBins),
+
FUN = summary)
1
LARGE PETALS
6 6.025000 6.200000 6.354545 6.612500
2 MEDIUM LARGE PETALS
4 4.418750 4.820000 4.888462 5.275000
3
MEDIUM PETALS
3 3.262500 3.550000 3.581818 3.808333
4
SMALL PETALS
1 1.311538 1.407692 1.462000 1.507143
Warning message:
ORE object has no unique key - using random order
©2014 Oracle – All Rights
Copyright ©Reserved
2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
6.9
5.9
3.9
1.9
0
0
0
0
Notwendige Dinge, die niemand macht:
Metadatenverwaltung im Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
388
Informations-Repository
Beispiele für Informations-Bedarfe
• Aufstellung zu allen ermittelten und formulierten Informationsanforderungen der Endbenutzer
• Abgestimmte, sachgebietsübergreifende Informationskataloge zu allen Tabellen und Spalten
(bereinigt um Synonyme und Homonyme)
• Ein zusätzliches Klassifizierungsverfahren zum Verhindern von Synonymen und Homonymen
• Nachweis darüber, welcher Benutzer welche Daten nutzt
• Dokumentation der über Materialized Views aufgebauten Kennzahlen-Hierarchien ->
Kennzahlenbäume
• Dokumentation aller Dimensionen sowie ihrer Hierarchien und die hierüber selektierbaren Felder
• Dokumentation der Kennzahlen in den Fakten-Tabellen
• Datenqualitätsregeln in dem Integration Layer mit Bezug zu den fachlichen Anforderungen
• Ein standardisierendes Schlagwortverzeichnis zu allen Fachbegriffen könnte noch hinzugefügt
werden
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ein zentrales Metadaten-Repository für eine
integrierte Informations-Verwaltung
Business Process
Modeling
Reporting Model (BI)
Logical
Data Model
Operative Prozesse
Metadaten Repository
Data Mapping Model (ETL)
Mesures Model
(Kennzahlenäume)
Informaton Delivery Process
Organization Model
Data Catalogue
(Database)
Data Quality Standards
Information-Standards
(Glossars, Terms,Definitions)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Ein Meta-Information-Modell für das Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Metadaten Repository for Free
Information Catalogue – APEX - Anwendung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Die optimale Hardware für das
Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
393
Optimale („Balanced“) Konfiguration
• Anzahl CPU‘s
• ~200 MB Datendurchsatz pro CPU
• Anzahl CPU = Max. Durchsatz in MB/s / 200
• Größe des Speichers in GB = 2 * Anz. CPUs
• Größe des
Hauptspeichers
• Anzahl Platten
• Trennung von Storage für
OLTP und DWH-Systeme !!
• Schnelle Platten nutzen (15000 U/min)
• Eher mehr, kleine Platten nutzen,
als wenige große Platten nutzen
• Flash-Speicher in Betracht ziehen
• ASM in Betracht ziehen
•
Einfaches und DB-optimiertes Verwalten
Anzahl Disk Controller =
Max. Durchsatz in MB/s
Controllerdurchsatz in MB
Controllerdurchsatz in MB =
70% * Herstellerangaben in Gbit/s
8
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
394
Die Hardware Umgebung – Storage
• Trennung von Storage für OLTP und DWH-Systeme
• Schnelle Platten nutzen (15000 U/min)
• Eher mehr, kleine Platten nutzen,
als wenige große Platten nutzen
• Flash-Speicher in Betracht ziehen
• ASM in Betracht ziehen
– Einfaches und DB-optimiertes Verwalten
395
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Messung von IO-Durchsatz
• Einfache Schätzmethode
• Calibrate_IO
– Read-only Test
– Wenige Test-Optionen -> leicht anwendbar
– > 11g
• Orion (ORacle IO Numbers)
– Read / Write – Tests (Achtung schreibt auf Platten)
– Viele Test-Optionen
– OLTP + DWH Workload
– Ab 11.2 im BIN-Verzeichnis der DB
– www.oracle.com/technology/software/tech/orion/index.html
396
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einfache Schätzmethode zur Lesegeschwindigkeit
Blockgröße
feststellen
select tablespace_name, block_size from dba_tablespaces;
Anzahl Blöcke/
Anzahl Bytes
SELECT table_name, num_rows, blocks,
blocks*8 KB,blocks*8/1000 MB,blocks*8/1000000 GB FROM user_tables;
Messen der
Lesegeschwindigkeit
Berechnung des
Durchsatzes
select count(*)
from bestellung_part_Range_4; -- liest komplette Tabelle
COUNT(*)
TABLESPACE_NAME
BLOCK_SIZE
------------------------------ ---------MON_G
8192
MON
8192
MON_D
8192
MON_E
8192
MON_F
8192
TABLE_NAME
NUM_ROWS
BLOCKS
KB
MB
GB
------------------------------ ---------- ---------- ---------- ---------- ---------BESTELLUNG_PART_RANGE
163840000
962355
7698840
7698,84
7,69884
BESTELLUNG_PART_RANGE_4
163840000
962355
7698840
7698,84
7,69884
---------163840000
Abgelaufen: 00:00:31.32
select 7.7/31 from dual;
SQL>
Ergibt ~0,25 GB pro Sekunde Lesegeschwindigkeit
(Achtung Blöcke eventuell nicht voll, daher geringer )
7.7/31
---------,248387097
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
397
Calibrate_IO
• Einfaches Tool
• Bestandteil des
Ressourcen
Managers
• Wird aus der DB
heraus aufgerufen
SET SERVEROUTPUT ON
DECLARE
lat INTEGER;
iops INTEGER;
mbps INTEGER;
BEGIN
-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>,
iops, mbps, lat);
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat);
DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);
dbms_output.put_line('max_mbps = ' || mbps);
end;
/
max_iops = 73
latency = 12
max_mbps = 20
398
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Orion (ORion IO Numbers)
Physical
Disks
trace
Luns
Random small reads (8k)
Random large reads (1M)
Writes
Orion
MBPS
IOPS
lat
orion -run simple -testname laufwerk -num_disks 6
orion -run advanced -testname ' laufwerk' -size_large 1024 -num_large 1
-num_small 8 -type seq -num_disks 6 -num_streamIO 2
(LUN: Logical Unit Number, logische Storage-Einheit, virtuelle Platte)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Summary
DATA WAREHOUSE
399
Cluster-Einsatz
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
400
Oracle‘s Entwicklung für intelligenten
Umgang mit Massendaten
-> R8
R9
R10/11
RAC
R11 -> Rxx
RAC
ASM
SAN
401
RAC
ASM
SAN
Oracle Storage / Exadata
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
InMemory
Parallel Execution
Oracle Storage / Exadata
DATA WAREHOUSE
Mit Leichtigkeit skalieren
• Lineare Skalierung jeweils bei Server und Storage
• Keine Änderung der Datenstrukturen
• Ohne Downtime
• Minimale Administration
Faktor n
Real Application Clusters
Automatic Storage Management
Oracle
Clusterware
Faktor n
402
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatic Storage Management (ASM)
Hotspot
Dynamisches Zuschalten im Online-Betrieb
403
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ASM
• Verwalten ganzer Gruppen von Platten
– Keine Einzelaktionen
• DBA übernimmt die Storage-Verwaltung
– Gewohnte Kommandos… SQL Create…
• SAME in der DB
– Verlagern des Striping and Mirroring Everything in die Verantwortung der Datenbank
• Automatische Verteilung der Daten über alle Platten
– Verhindert von Hotspots
– Messung von IO-Zugriffen über DB-Statistiken (ist klassischen RAID-Verfahren überlegen)
• Bequemes Hinzufügen /Wegnehmen von Platten
• Verhindert Fragmentierung der Platten
• Einführung von ASM kann bis 25% verbessertes IO-Verhalten liefern
• Performance kommt an Raw Devices heran
404
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ASM Architektur
• ASM Disks
– Partitionen oder LUNs, die über das Betriebssystem bereitgestellt werden
•
Ab 11 sind einfache Partitionen, RAW Devices oder auch NFS-Dateien möglich
• ASM Disk Groups
• ASM Files
– Files, die in den Disk Groups abgelegt sind, ohne
dass man deren physischen Ort bestimmt
– Die ASM-Files entsprechen den sonst üblichen
Datenbank-Files (1:1 Mapping)
– Eine oder mehrere ASM Disks
– ASM verteilt diese Files über mehrere physische Bereiche (Platten)
– Logical Volumes – logische Einheit von Speicherplatz
– Die logischen Konzepte wie Extents, Segmente
oder Tablespaces bleiben erhalten
– Eine DB kann mehrere Disk Groups haben
• ASM Failure Groups
– Ensemble von ASM Disk Groups, die als 2 oder 3-Wege-Spiegel
arbeiten
• ASM instance
ASM Disk
ASM Disk
ASM Disk
ASM Disk
ASM Disk
– Ähnlich einer DB-Instanz aber ohne datafiles
– Muss hochgefahren und auch über eine SID ansprechbar sein
405
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Intelligent Data Placement
• Intelligent Placement
• Häufig genutzte Daten werden automatisch auf die äußeren Spuren der Platten gelegt
• Weniger häufige auf die inneren
• Minimiert Verwaltungsaufwand und steigert die Performance um bis zu 50 %
• Bereitstellung der Plattenkapazität
• nicht an dem benötigten Volumen messen sondern an der Performance
• Platten müssen
nicht komplett
Mehr Daten erreichbar bei
gefüllt werden
gleicher Drehzahl
-> häufig genutzte Daten
Weniger Daten erreichbar
bei gleicher Drehzahl
-> seltener genutzte Daten
406
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Options: RAC
Der physische Aufbau einer RAC-Umgebung
Öffentliches Netzwerk
Privates Netzwerk
(Interconnect)
CPU
CPU
CPU
Knoten 1
CPU
CPU
Knoten 2
CPU
CPU
Instanz 1
CPU
Instanz 2
Speichernetzwerk
Daten
407
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Options: RAC
Oracle Cluster-Umgebung –
Real Application Clusters und Automatic Storage Management
Öffentliches Netzwerk
RAC
Privates Netzwerk
(Interconnect)
CPU
CPU
Knoten 1
CPU
Instanz 1
Oracle
Clusterware
CPU
CPU
Knoten 2
CPU
CPU
CPU
Instanz 2
Speichernetzwerk
ASM
408
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Architektonische Vorteile RAC und ETL
• Voraussetzung ETL in der Datenbank
– Nur dieses bringt Last auf die RAC-Knoten
• Verteilung der Datenbank-basierten ETL-Jobs auf unterschiedliche Knoten
• Laufen keine ETL-Jobs
– Knoten frei für andere Datenbank-Aufgaben
• Geringere Hardware-Anschaffungskosten
• Wegfall Backup-Rechner
• Wegfall Netzlast
– Direkter ETL-Zugriff auf Daten der eigenen Datenbank und über schnelle Leitungen
410
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Allgemeine Aufbauempfehlungen - RAC aus ETL-Sicht
• Die Knoten nicht zu klein wählen
– Sollten so stark sein, dass sie zusammenhängende ETL-Jobs auch alleine bewältigen können. (Z. B. 4
CPUs pro Knoten)
• RAC und ETL
– Das System sollte nicht darauf angewiesen sein, über die Knoten hinweg parallelisieren zu müssen, um
zu skalieren.
– Skalierung gelingt über die gezielte Steuerung zusammenhängender Lade-Jobs auf die
unterschiedlichen Knoten.
• Durchsatz für Interconnect 1-2 Gbit / Sec
• Hauptspeicher 4 GB pro CPU
• Durchsatz für das Speichernetzwerk:
pro CPU mindestens 100 MB/Sec
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
411
Monitoring Data Warehouse
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
412
Performance und Systemzustand überwachen / Hilfsmittel
• 2) Perfstat
• 1) Alerts
• 3) AWR (EE, Diagnostic Pack)
• ADDM (EE, Diagnostic Pack)
analog
Polling
Tracing
• SQL Tuning
• ASH
413
Beginn-Zeitpunkt
Ende-Zeitpunkt
Permanente
Betrachtung
Protokolldatei
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Umgang mit Alerts
• Unvorhergesehene Vorgänge
– Statefull Alerts:
Entstehen durch
Überschreiten von Schwellwerten
– Stateless Alerts:
Unvorhergesehene Vorgänge
select metrics_name,
warning_value,
critical_value,
object_type,
object_name,
status
From dba_thresholds
• Z. B. zu wenig Recovery Area Space
414
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Mit OEM
415
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Automatic Database Diagnostic Monitor (ADDM) und AWR
Statistics_level
TYPICAL -> ON
BASIC -> OFF
1
AWR-Report
stündlich
AWR
ADDM
use
MMONProcess
User 1
sysaux
User 2
Findings
1……nn%
2……nn%
3……nn%
…….
2
Recommendations
3
Action
- Hardware
- Init-Parameter
- Space Konfig.
- Performance
Advisor
8 Tage lang
Undo Advisor
416
OEM
Addmrpt.sql
DBMS_ADVISOR Package
SQL Tuning Advisor
Segement Advisor
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
4
Rationale
DATA WAREHOUSE
AWR (Analytic Workload Repository)
• Regelmäßiges Sammeln von einer Vielzahl von System-generierten
Statistiken
– Mit Hintergrundprozessen (MMON)
– Gespeicherte Statistiken des MMON in SYSAUX Tablespace
– Vorkonfiguriert generiert AWR alle 60 Minuten Snapshots
• Parameter STATISTICS_LEVEL (Basic/Typical/All)
– Basic schaltet das Sammeln aus
– Retention-Time (Default 8 Tage)
– DBA_HIST_* - Views zur Auswertung
• Manuell starten
– execute dbms_workload_repository.create_snapshot(‘ALL‘);
• Auswerten mit Awrrpt.sql OEM
417
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verwaltung von AWR
• Prozeduren
– MODIFY_SNAPSHOT_SETTINGS
• Rentention / Vorhaltezeit der Snapshots
• Interval / Zeitabstand zwischen den Snapshots
• Topnsql / Menge der erfassten SQL-Statements (Default 30/Typical)
• Feststellen der eingestellten Intervalle
– Select * from dba_hist_wr_control;
• Feststellen Platzverbrauch
– @/Ora-home/Rdbms/admin/awrinfo.sql
– Oder V$SYSAUX_OCCUPANTS abfragen
• Select occupant_name, space_usage_kbytes from V$SYSAUX_OCCUPANTS where
occupant_name = 'SM/AWR‚
• Auflistung der bestehenden Snapshots
•
418
Select SNAP_ID, STARTUP_TIME, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME, FLUSH_ELAPSED,SNAP_LEVEL from dba_hist_snapshot;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
ADDM (Automatic Database Diagnostic Monitor)
• Automatic Database Diagnostic Monitor (ADDM)
– Gezielte Auswertung von AWR Daten
– Liefert Informationen zu
•
•
•
•
•
Besonders teuere SQL-Statements
I/O – Performance
Locking-Situationen
Ressourcen-Engpässe (Speicher, CPU bottlenecks)
Exzessive Logon/Logoff-Aktivitäten
– Manuelle Berichtserstellung: ADDMRPT.SQL
419
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
AWR über OEM modifizieren / einstellen
420
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
OEM Beispiel - Bericht
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
421
Automatic Database Diagnostic Monitor (ADDM)
• Läuft automatisch nach jedem AWR Snapshot
– Kann zusätzlich nach Alerts gestartet werden
– Bericht kann auf einen Zeitraum eingeschränkt werden
– Festlegen von Interval + Retention-Periode
• Aktivierung über Init-Parameter
– control_management_pack_access
– statistics_level
SQL> Show parameter control_managem
NAME
TYPE
VALUE
------------------------------------ ----------- -------control_management_pack_access
string
DIAGNOSTIC+TUNING
SQL> show parameter statistics_
NAME
TYPE
VALUE
------------------------------------ ----------- -------statistics_level
string
TYPICAL
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
422
Art der Information
• „Intelligente“ selbständige Analyse von Zuständen und Vorkommnissen in der
DB
• „Findings“
– Basierend auf Erfahrungswerte und Best-Practises
– Sortiert nach der Schwere und dem Grad der Beeinflussung
• „Recommendations“
– Allgemeine Empfehlung mit einer Abschätzung über die prozentuale Gewichtung der
Verbesserung der Situation
(nn% benefits)
– Konkreter „Action“-Vorschlag
– „Rationale“ Vorschlag: Sonstige, damit in Verbindung stehende Massnahmen.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
425
Trace einer Session
Identifizierung einer zu prüfenden Session
select sid,serial#,terminal,program,module from v$session;
*** 2011-09-05 08:08:53.468
=====================
PARSING IN CURSOR #1 len=62 dep=0 uid=0 oct=47 lid=0 tim=33718840968 hv=3081195784 ad='34ab52dc' sqlid='2bqy8r6vufn88'
BEGIN dbms_monitor.session_trace_enable(135,181,false); END;
END OF STMT
EXEC #1:c=0,e=1082,p=0,cr=0,cu=0,mis=1,r=1,dep=0,og=1,plh=0,tim=33718840965
135
177 ASCHLAUC
sqlplus.exe
sqlplus.exe
Aktivieren des SQL-Trace
execute dbms_monitor.session_trace_enable(135,177,true);
-- TRUE / FALS mit bzw. Ohne waits und zusätzliche Analysen
*** 2011-09-05 08:09:02.890
CLOSE #1:c=0,e=45,dep=0,type=0,tim=33728275300
=====================
PARSING IN CURSOR #3 len=41 dep=0 uid=0 oct=3 lid=0 tim=33728275601 hv=1078826809 ad='34ab4260' sqlid='2b69gpx04v5tt'
select count(*) from dwh.wh_transaktionen
END OF STMT
PARSE #3:c=0,e=63,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3695442063,tim=33728275598
EXEC #3:c=0,e=43,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3695442063,tim=33728275918
FETCH #3:c=0,e=792,p=0,cr=49,cu=0,mis=0,r=1,dep=0,og=1,plh=3695442063,tim=33728276801
STAT #3 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=49 pr=0 pw=0 time=0 us)'
STAT #3 id=2 cnt=4216 pid=1 pos=1 obj=86150 op='TABLE ACCESS FULL WH_TRANSAKTIONEN (cr=49 pr=0 pw=0 time=8940 us cost=16 size=0 card=4216)'
FETCH #3:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=3695442063,tim=33728277502
Deaktivieren
execute dbms_monitor.session_trace_disable(135,181);
*** 2011-09-05 08:09:15.453
CLOSE #3:c=0,e=28,dep=0,type=0,tim=33740829401
=====================
PARSING IN CURSOR #2 len=57 dep=0 uid=0 oct=47 lid=0 tim=33740830066 hv=208267310 ad='34bc4a1c' sqlid='faaagm066mu1f'
BEGIN dbms_monitor.session_trace_disable(135,181); END;
END OF STMT
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
426
Auswertung Trace-Dateien
• TKPROF
– tkprof orcl_ora_4488.trc c:\abc.txt explain=sys/sys sort=fchqry
• Trace Analyzer (TRCA)
– Download über Doc 224270.1
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
427
DWH-bezogene Monitoring-Aktivitäten
• ASH-Report
• SQL-Monitoring (OEM)
• Informationsbedarf Endanwender
• Messung Platzverbrauch
• Lesestatistiken über tatsächlich genutzte Daten
• Ressourcen-Manager
• ETL-Monitoring
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
428
Beobachten des Informationsbedarfs
• Regelmäßige Teilnahme an Gremien
– Abstimmung / Feedback / Planung mit Fachabteilungen und DWH-Nutzern
• Statistiken über DWH-Nutzung
– Benutzerzahlen / Session-Statistik
– Datenmengen / Platzverbrauch
– Segment-Reads
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
432
Messung tatsächlich belegter Plattenplatz
• Häufig gibt es nur Zahlen über den allokierten Speicher
– Oft genannt von der Storage-Abteilung, die nicht in die Dateien hineinschauen kann
• Manchmal werden Zahlen genannt, die auch die gespiegelten Daten beinhalten oder
den Backup-Storage umfassen
• Plattenplatz im DWH wird oft ähnlich organisiert wie Plattenplatz im OLTP-Umfeld
– Zu große Free-Space-Bereiche, obwohl die Zugänge zeitlich und mengenmäßig gut kalkulierbar sind
Gibt kein realisitisches Bild über den tatsächlichen Bedarf und Kosten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
433
Messung belegter Plattenplatz pro Tablespace
Tablespace Name
-----------------DWH1
DWH1
DWH1
EXAMPLE
PERFSTAT
PERFSTAT
SYSAUX
SYSTEM
TEMP
TEST
TEST_ALERT
TEST_ALERT
UNDOTBS1
USERS
avg
sum
Filename
FILE_ID
FILESIZE
USED Pct. Used
--------------------------------------------- ---------- ---------- --------D:\ORA\ORADATA\ORCL\DWH1.DBF
7
52428800
25100288
47
D:\ORA\ORADATA\ORCL\DWH1_1
8 209715200
32178176
15
D:\ORA\ORADATA\ORCL\DWH1_2
9 2726297600
23068672
0
D:\ORA\ORADATA\ORCL\EXAMPLE01.DBF
5 104857600
82247680
78
D:\ORA\ORADATA\ORCL\PERFSTAT01.DBF
6 104857600 102498304
97
D:\ORA\ORADATA\ORCL\PERFSTAT2
12 209715200
1048576
0
D:\ORA\ORADATA\ORCL\SYSAUX01.DBF
2 723517440 679608320
93
SELECT /*+ ordered */ 99
D:\ORA\ORADATA\ORCL\SYSTEM01.DBF
1 734003200 729874432
d.tablespace_name
tablespace
D:\ORA\ORADATA\ORCL\TEMP01.DBF
1
20971520
18874368
90
, d.file_name
filename
D:\ORA\ORADATA\ORCL\TEST.DBF
10
3145728
1048576
33
, d.file_id
file_id
, d.bytes
filesize
D:\ORA\ORADATA\ORCL\TEST_ALERT.DBF
11
3145728
2097152
66
, NVL((d.bytes - s.bytes), d.bytes)
used
D:\ORA\ORADATA\ORCL\TEST_ALERT2
13
3145728
3145728
100 - s.bytes) , d.bytes)) / d.bytes)
, TRUNC(((NVL((d.bytes
FROM
sys.dba_data_files
d
D:\ORA\ORADATA\ORCL\UNDOTBS01.DBF
3
52428800
33816576
64
, v$datafile v
D:\ORA\ORADATA\ORCL\USERS01.DBF
4
5242880
4325376
82
, ( select file_id, SUM(bytes) bytes
---------- -----------------from sys.dba_free_space
GROUP BY file_id)
s
62
WHERE
4953473024 1738932224
(s.file_id (+)= d.file_id)
SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY
OFF
COLUMN tablespace FORMAT a18
COLUMN filename
FORMAT a50
COLUMN filesize
FORMAT 999.999,999,999,999
COLUMN used
FORMAT 999.999,999,999,999
COLUMN pct_used
FORMAT 999
BREAK ON report
COMPUTE SUM OF filesize ON report
COMPUTE SUM OF used
ON report
COMPUTE AVG OF pct_used ON report
434
HEADING
HEADING
HEADING
HEADING
HEADING
'Tablespace Name'
'Filename'
'File Size'
'Used (in bytes)'
'Pct. Used‚
AND (d.file_name = v.name)
UNION
SELECT
d.tablespace_name
, d.file_name
, d.file_id
, d.bytes
, NVL(t.bytes_cached, 0)
, TRUNC((t.bytes_cached / d.bytes) * 100)
FROM
sys.dba_temp_files d
, v$temp_extent_pool t
, v$tempfile v
WHERE
(t.file_id (+)= d.file_id)
AND (d.file_id = v.file#)
/
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
* 100)
tablespace
filename
file_id
filesize
used
pct_used
DATA WAREHOUSE
pct_used
Einzelne Messungen
-- total amount of allocated datafile size
select sum(bytes)/1024/1024 "Meg" from dba_data_files;
-- Size of all temp files
select nvl(sum(bytes),0)/1024/1024 "Meg" from dba_temp_files;
-- Size of on-line redo-logs
select sum(bytes)/1024/1024 "Meg" from sys.v_$log;
-- all together Datafile size, temp files, on-line redo-logs;
select a.data_size+b.temp_size+c.redo_size "total_size"
from ( select sum(bytes) data_size
from dba_data_files ) a,
( select nvl(sum(bytes),0) temp_size
from dba_temp_files ) b,
( select sum(bytes) redo_size
from sys.v_$log ) c;
435
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einzelne
Messungen
-- freespace report
col "Database Size" format a20
col "Free space" format a20
select round(sum(used.bytes) / 1024 / 1024 ) || ' MB'
"Database Size"
,
round(free.p / 1024 / 1024) || ' MB' "Free space"
from (select bytes from v$datafile
union all
select bytes from v$tempfile
union all
select bytes from v$log) used
,
(select sum(bytes) as p from dba_free_space) free
group by free.p
/
-- used space over all
SELECT SUM(bytes)/1024/1024 "Meg" FROM dba_segments;
-- used / free space in temp
SELECT tablespace_name, SUM(bytes_used), SUM(bytes_free)
FROM
V$temp_space_header
GROUP BY tablespace_name;
436
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Einzelne Messungen
-- true used / free space in temp
SELECT
mb_free
FROM
A.tablespace_name tablespace, D.mb_total,
SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_used,
D.mb_total - SUM (A.used_blocks * D.block_size) / 1024 / 1024
v$sort_segment A,
(
SELECT
B.name, C.block_size, SUM (C.bytes) / 1024 / 1024
mb_total
FROM
v$tablespace B, v$tempfile C
WHERE
B.ts#= C.ts#
GROUP BY B.name, C.block_size
) D
WHERE
A.tablespace_name = D.name
GROUP by A.tablespace_name, D.mb_total;
437
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Welche Daten werden wirklich genutzt?
10 – 50 Tabellen
500 – 1000 Tabellen
Große Tabellen
Partitioniert
Namentlich bekannt
> 70 % des Datenvolumens
438
KleineTabellen
Nicht Partitioniert
Unkenntliche Masse
< 30 % des Datenvolumens
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lesestatistiken für die wichtigsten Tabellen anlegen
• dba_hist…. - Views zum Sammel der Lese-Zugriffe
– dba_hist_seg_stat
– dba_hist_seg_stat_obj
– dba_hist_snapshot
• dba_hist_sqlstat
• dba_hist_sqltext
• Achtung:
– Views werden nur aktualisiert wenn
• Auch tatsächlich gelesen wurde
• Ein AWR-Snapshot gezogen wurde
– Zähler fällt auf 0, wenn die DB durchgestartet wird
• Aufbau einer eigenen Statistik-Tabelle mit
– Tab-Name, Snap-ID, Datum/Uhrzeit, Physical Reads
– Aktualisieren immer nachdem ein AWR-Snapshot gezogen wurde
439
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Lesestatistiken für die wichtigsten Tabellen anlegen
Select distinct * from
(select
to_char(begin_interval_time,'dd.mm.yyyy:hh24:MI') Zeit,
logical_reads_total log_rd,
logical_reads_delta log_rd_delta,
physical_reads_total phy_rd,
physical_reads_delta phy_rd_delta
from
dba_hist_seg_stat
s,
dba_hist_seg_stat_obj o,
dba_hist_snapshot
sn
where
o.owner = 'DWH1'
and
s.obj# = o.obj#
and
sn.snap_id = s.snap_id and
object_name = 'UMSATZ')
order by zeit;
440
ZEIT
LOG_RD LOG_RD_DELTA
PHY_RD PHY_RD_DELTA
---------------- ---------- ------------ ---------- -----------06.09.2010:22:00
3357520
3357520
3355361
3355361
06.09.2010:23:00
4030816
673296
4028177
672816
07.09.2010:12:32
8060160
4029344
8054609
4026432
07.09.2010:15:50
688© 2014 Oracle and/or its affiliates. All688
1 DATA WAREHOUSE
1
Copyright
rights reserved. |
Zugriffsdaten auf Tabellen über SQL sammeln
• SQL-Statements pro User analysieren
– From-Klausel parsen
– Zugriffe auf Tabellen
• System-Zugriffe ausschließen
– Wegen der Menge
• Historien-Tabelle aufbauen
– Mit aus der FROM-Klausel herausgefilterten Tabellennamen
– Zuordnung zu USER, Zeit und SQL-Statement
441
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Beispielabfrage
select
to_char(s.begin_interval_time,'mm-dd hh24') c1,
sql.sql_id
c2,
t.SQL_TEXT
C9,
sql.executions_delta
c3,
sql.buffer_gets_delta
c4,
sql.disk_reads_delta
c5,
sql.iowait_delta
c6,
sql.apwait_delta
c7,
sql.ccwait_delta
c8
from
dba_hist_sqlstat
sql,
dba_hist_snapshot
s,
dba_hist_SQLTEXT
t
where
s.snap_id = sql.snap_id
and
sql.PARSING_SCHEMA_NAME = 'DWH1' and
t.SQL_ID = sql.SQL_ID
and
sql.sql_id = '01978kjxb5yd2' and
to_char(s.begin_interval_time,'mm-dd hh24') = '09-12 13'
order by c1, c2;
col
col
col
col
col
col
col
col
col
c1
c2
c3
c4
c5
c6
c7
c8
c9
heading
heading
heading
heading
heading
heading
heading
heading
heading
‘Begin|Interval|time’
‘SQL|ID’
‘Exec|Delta’
‘Buffer|Gets|Delta’
‘Disk|Reads|Delta’
‘IO Wait|Delta’
‘Application|Wait|Delta’
‘Concurrency|Wait|Delta’
'SQL-Text'
format
format
format
format
format
format
format
format
format
a8
a13
9,999
9,999
9,999
9,999
9,999
9,999
a50
break on c1
Auszug
`Begin
`Buffer `Disk
Interval `SQL
`Exec
Gets
time'
ID'
SQL-Text
Delta' Delta' Delta‘
-------- ------- ------------------------------------------- ------ ------- ------ ---------09-12 13 01978kj Select * from (select Produkt, sum(U.summe)... AS Wert, 1
8,573 8,390
7448344
----- ------------------------------------------------ ------ ------- ------ ---------- -------01978k2 Select * from (select Produkt, sum(U.summe) ... AS Wert, 1
8,573 8,390
7494081
442
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verwendungsinformationen speichern
User
Tabelle DWH-Zugriffshistorie
Tabname
443
Gelesen_Von_User
Anzahl_Read_IO
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Lese_Datum
DATA WAREHOUSE
Aufgabenstellungen beim ETL-Monitoring
• Laufzeit-Kontrolle / ETL-Monitoring
– Gelesene/Geschriebene Sätze
– Ressource-Verbrauch (IO und Memory)
– Laufzeit
– Historischen Verlauf dokumentieren
– Trends ableiten
• Zuwachsmenge pro Tabelle
– Historischen Verlauf dokumentieren
• Mengen-Kontrolle
– Beobachtung des tatsächlichen Platzverbrauchs im DWH
– Alerts
444
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Verbrauchsdaten sammeln
• Mess-Aufruf in der
aktuellen
ETL-Job-Session
als letzten
Aufruf einbauen
• Ergebnis-Daten in
Historien-Tabelle
eintragen
SELECT
/*+ use_nl (e s) ordered */
s.sql_id, s.plan_hash_value,
to_char(s.hash_value),
rawtohex(s.address),
s.sql_text,
s.disk_reads,
s.buffer_gets,
s.executions,
s.sharable_mem,
s.parsing_user_id,
s.sorts,
s.parse_calls,
s.command_type,
s.child_number,
s.parsing_schema_id,
s.rows_processed,
e.username dbuser,
u.name parsing_user,
e.sid,
s.module,
s.action,
s.open_versions,
1 current_set
FROM
v$session e, v$sql s, sys.user$ u
WHERE s.address = e.sql_address AND
s.hash_value = e.sql_hash_value AND
s.child_number = e.sql_child_number AND
u.type# != 2 AND
s.parsing_user_id = u.user#
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
445
Zusammenfassung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Szenario DWH - Gesamtsicht
OLTP
Systeme
In Memory
Temporäre
Daten
T
T
Enterprise Layer
Core - DWH / Info Pool
Referenzdaten
Stammdaten
R
R
R
S
S
S
User View
Layer
(teils virtuell)
• Dimensionen als Views
• Fakten als In-Memory-Variante
von Core-Transaktionen
• Kennzahlen-MAVs
physikalisch
• R-Objekte physikalisch
• JSON-Objekte physikalisch
Partitionierte
Transaktionsdaten
nur wenn sie
abgefragt werden
Vorberechnete
Kennzahlen
I n t e r n e
D a t e n
Disk-Daten
Integration
Layer
Embedded Meta-Layer
C
Q
A
A
L
MJ
Operational Data
JSON Unstructured
E x t e r n e
(virtuell)
JSON Data
JSON
HDFS / NoSQL
Unstructured Data
JSON
Data Mining
Statistikdaten
Oracle R
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
Szenario DWH - Gesamtsicht
OLTP
Systeme
In Memory
Temporäre
Daten
T
T
User View
Layer
Enterprise Layer
Core - DWH / Info Pool
Referenzdaten
Stammdaten
R
R
R
S
S
S
(teils virtuell)
• Dimensionen als Views
• Fakten als In-Memory-Variante
von Core-Transaktionen
• Kennzahlen-MAVs
physikalisch
• R-Objekte physikalisch
• JSON-Objekte physikalisch
SQL
Partitionierte
Transaktionsdaten
nur wenn sie
abgefragt werden
Vorberechnete
Kennzahlen
I n t e r n e
D a t e n
Disk-Daten
Integration
Layer
Embedded Meta-Layer
SQL
C
SQL
Q
A
MJ
Operational Data
JSON Unstructured
E x t e r n e
(virtuell)
JSON Data
JSON
HDFS / NoSQL
A
L
Unstructured Data
JSON
Data Mining
Statistikdaten
Oracle R
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATA WAREHOUSE
449
Herunterladen