OWB10gR2_Step_By_Step_V1

Werbung
Oracle Warehouse step-by-step
1/300
Oracle
Data Warehouse
step-by-step
mit
Oracle Warehouse Builder 10gR2/11gR1
Der Praxiseinstieg
Unternehmensdaten integrieren
Auswertebasis bereitstellen
Informationsgewinnung dokumentieren
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
2/300
Version: OWB10gR2_Step_By_Step_V1.doc Stand: September 2006
Version: OWB10gR2_Step_By_Step_V1.doc Stand: Juni 2007
Version: OWB10gR2_Step_By_Step_V1.doc Stand: Feb 2008 (Löschen von Prozessen)
Änderungsnummer 3
Autor: Alfred Schlaucher,
Oracle Deutschland,
ORACLE Deutschland GmbH
Kuehnehoefe 5
22761 Hamburg
Germany
www.oracle.com/de
Die zugehörige OWB-Version ist OWB10G Release 2
Die Software kann über die folgende Oracle-Webseite bezogen werden:
http://www.oracle.com/technology/products/warehouse/index.html
Die Beispieldaten befinden sich auf der CD, mit der dieses Dokument ausgeliefert wurde
(Verzeicnis Demodaten).
Dieses Dokument ist von einer älteren Version zu OWB 9.2 in eine neuere überarbeitet worden. Nicht
alle Kapitel sind fertig geworden. Mit diesen Zeichen °°°° markierte Stellen sind noch nicht fertig.
Vom Autor:
Hier haben sich eine Menge von Fehlern eingeschlichen.
Wen wundert es auch, wenn so ein Text ständig weitergeschrieben und aktualisiert wird.
Wenn Sie Fehler finden, melden Sie diesen bitte an die folgende Mailadresse.
[email protected]
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
3/300
1. step-by-step zum Data Warehouse .................................................... 9
Bloß nicht alles lesen .................................................................................................................... 9
Kleine Helfer am Rand................................................................................................................ 10
Zu dieser neuen Version des step-by-step ................................................................................. 10
Kapitelübersicht: Wo steht was .................................................................................................. 10
2. Das Data Warehouse ........................................................................ 12
Das Warehouse-Prinzip .............................................................................................................. 12
Das Data Warehouse-System – 3-Schichtenarchitektur ............................................................ 13
Daten für Auswertungen aufbereiten: Dimensionale Sichten ..................................................... 14
Typische Analyseschritte eines Warehouse-Benutzers ............................................................. 15
Umsetzung mit technischen Mitteln – relationale Speicherung multidimensionaler Sichten ..... 17
1. Variante Kalkulationstabelle ................................................................................................ 17
2. Variante Relationale Datenbank ......................................................................................... 18
Spielarten des Starschemas ....................................................................................................... 19
Hierarchien .............................................................................................................................. 19
Intersection-Dimension ........................................................................................................... 19
Heterogenious Faktentabelle .................................................................................................. 19
Parallel Faktentabelle.............................................................................................................. 20
Konstellation ............................................................................................................................ 20
Degenerate Facts .................................................................................................................... 20
Degenerate Dimension ........................................................................................................... 20
Das Warehouse ist ein dynamisches und flexibles System ....................................................... 20
3. Erstellung eines Data Marts – Ein Beispiel-Szenario ..................... 23
Ableitung eines Auswertemodells aus Quellstrukturen .............................................................. 23
Das Quelldatenmodell ................................................................................................................ 23
Das Analysemodell ..................................................................................................................... 24
Das Objektmodell ....................................................................................................................... 24
Mögliche Fragestellungen........................................................................................................... 25
Das Abfrageschema modellieren (Starschema) – Abfragemodell ............................................. 25
Denormalisieren (Star und nicht Snowflake)........................................................................... 25
Informationsanreicherung ....................................................................................................... 26
Granularität ............................................................................................................................. 27
Das Mappingmodell .................................................................................................................... 27
Workflow-Modell ......................................................................................................................... 29
4. Die Komponenten des Oracle Warehouse-Kurzübersicht ............. 30
5. Aufbau des Data Warehouse-Systems mit dem Oracle Warehouse
Builder (OWB) .................................................................................. 31
Aus welchen Objekten besteht ein Oracle Warehouse .............................................................. 32
Vorgehensweise bei dem Aufbau eines Warehouse Systems mit dem Warehouse Builder ..... 32
Allgemeine Vorgehensweise im Verlauf eines Lade-Prozesses (ETL) ...................................... 32
Einrichten der OWB Entwicklungsumgebung ................................................ 34
Zusammenspiel mit anderen Komponenten ............................................................................... 34
Einige Warehouse Builder Komponenten (Übersicht) ................................................................ 35
Wo ist die Dokumentation zu OWB 10g zu finden? ................................................................... 36
Systemanforderungen ................................................................................................................ 36
Die Installationsschritte des Warehouse Builders in der Übersicht ............................................ 36
Übersicht zu den angelegten Benutzern .................................................................................... 37
Hilfsscripte zum Erstellen der Demo-User .............................................................................. 38
Einlesen der Demodaten für die step-by-step-Einführung (ausgelieferte Dump-Datei) ............. 38
Unterschiedliche Repository-Benutzer einrichten ................................................................... 40
Die Installationsschritte des OWB im Einzelnen ........................................................................ 40
Voraussetzungen zur Installation: ........................................................................................... 40
Umschalten der Sprache vor der Installation: ......................................................................... 40
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
4/300
Die Datenbank für die Installation vorbereiten ........................................................................ 40
Schritt 1: Software installieren: ............................................................................................... 41
Schritt 2: Repository Assistant ............................................................................................... 42
Anmeldung .............................................................................................................................. 48
Workflow Installation ............................................................................................................... 49
Erste Schritte ..................................................................................................... 52
Die Ausgangsituation nach der Installation ................................................................................ 52
OWB starten ............................................................................................................................... 52
Englische Bedienerführung einschalten? ................................................................................... 54
Eine erste Übersicht ................................................................................................................... 55
Project-Explorer ...................................................................................................................... 55
Connection Explorer ................................................................................................................ 55
Global Explorer ....................................................................................................................... 55
OMB*Plus ................................................................................................................................ 55
Der Project Explorer ................................................................................................................... 56
Module ordnen das Projekt ......................................................................................................... 56
Quell- oder Zielmodul? ........................................................................................................... 58
Ohne Locations – läuft nichts ..................................................................................................... 58
Schemadaten, Hostname, Port, Service-Name ...................................................................... 59
Die Beschreibung des ersten Quellsystems ................................................... 60
Commit aller Änderungen ........................................................................................................... 61
Definieren eines Source-Moduls für eine Oracle-Datenbankquelle ........................................... 61
Auslesen von Tabellenbeschreibungen (Metadaten) aus einer Quelldatenbank ....................... 62
Ein zweites Modul für die Warehouse-Tabellen erstellen .......................................................... 64
Exkurs 1: Ein genauer Blick auf Module und Locations ............................................................. 64
Exkurs 2: Woher kommen oder wie entstehen die Warehouse Tabellen? ................................ 65
Ein erstes Mapping erstellen ............................................................................ 66
Eine „Rundtour“ durch den Mapping-Editor ................................................................................ 66
Der Explorer (1) ....................................................................................................................... 67
Mapping (5) ............................................................................................................................. 67
Birds Eye View (3) ................................................................................................................... 68
Data Viewer (6) ....................................................................................................................... 69
Properties Inspector (2)........................................................................................................... 69
Generation Results (7) ............................................................................................................ 69
Palette (4) ................................................................................................................................ 69
Das Mapping aufbauen............................................................................................................... 70
Wechselspiel logisch/physisch oder Mapping / Modul ............................................................... 72
Das erste Deployment – Das Control Center ............................................................................. 75
Locations registrieren .............................................................................................................. 76
Die Tabelle generieren ............................................................................................................ 76
Ein Mapping generieren .......................................................................................................... 76
Leserechte .............................................................................................................................. 77
Connectors und Database-Links ............................................................................................. 77
Intelligenter Generierungsmechanismus ................................................................................ 78
Smart-Code Generation .......................................................................................................... 79
Ein erster Blick in das Repository über HTML-Browser ................................ 80
Aufruf des Repository Browsers ............................................................................................. 80
Design-Repository Browser .................................................................................................... 83
Impact- / Lineage-Analyse direkt aus OWB heraus ................................................................ 84
Nützliche Hilfsmittel: ......................................................................................... 87
Validate: ...................................................................................................................................... 87
Ad Hoc-Generierungen im Mapping-Editor ................................................................................ 88
Kopieren von Metaobjekten ........................................................................................................ 89
Schnelles Generieren und Deployen auch ohne Control Center ............................................... 89
Die Operatoren – Teil 1...................................................................................... 90
Mehrere Tabellen über JOIN verbinden und einlesen – Join Operator
............................... 90
Display Set .............................................................................................................................. 90
In mehrere Zieltabellen schreiben - Splitter-Operator
Stand/letzte Änderung 13.05.2016
(in Arbeit)
.......................................................... 94
75875104
Oracle Warehouse step-by-step
5/300
Exkurs: Multiple-Inserts in einem Kommando ............................................................................ 95
Exkurs: Wie viele Tabellen passen in ein Mapping und wie werden sie kombiniert .................. 96
Filter und Bedingungen (Where Operator) ................................................................................. 98
Exkurs: Zieltabellen automatisch leeren - Truncate ................................................................. 100
Beliebige Ausdrücke in einem SQL-Kommando - Der Expression-Builder
...................... 101
CASE Strukturen im Expression Builder .................................................................................. 104
2. Beispiel .............................................................................................................................. 106
Deduplicator Operator (DISTINCT Option)
Aggregieren von Daten (SUM, AVG)
....................................................................... 106
................................................................................. 107
Lookup Tabellen lesen
...................................................................................................... 110
Eine nachträgliche Änderung in ein Mapping einbauen ....................................................... 110
NULL-Werte verhindern ........................................................................................................ 113
Set Operator (UNION, UNION ALL, MINUS, INTERSECT)
.............................................. 114
Pivoting mit SQL Mitteln - Der Pivot-Operator
................................................................... 115
Unpivoting mit SQL Mitteln - Der Unpivot-Operator
......................................................... 119
Unternehmensdaten integrieren – Teil 1 (Textdateien) ................................ 120
Integrieren von Textdateien ...................................................................................................... 120
Wie werden EBCDIC-Dateien eingelesen? .......................................................................... 123
Wie werden Dateien z. B. auf Unix-Servern eingelesen? ..................................................... 123
Einlesen von Textdateien über External Tables
................................................................ 123
Erstellen einer External Table aus einer Textdatei-Definiton................................................ 124
Erzeugen einer Directory-Definition in der Datenbank ......................................................... 124
Generieren von Directory-Objekten für External Tables ....................................................... 125
Test der External Table Definition ......................................................................................... 126
External Tables in einem Mapping benutzen
................................................................. 127
Einlesen von Dateien mit dem SQL Loader ............................................................................. 127
Die Operatoren - Teil2: Generische und wiederverwendbare Komponenten
und Text-Output ............................................................................................... 129
Verwenden von Funktionen und Prozeduren – Die erweiterbare Funktionsbibliothek
..... 129
Anlegen einer Funktion ......................................................................................................... 130
Syntax-Check und Code-Debugging .................................................................................... 132
Verwenden einer Funktion .................................................................................................... 133
Verwenden von Aufrufparametern
.................................................................................... 134
Parametereingabe und Aufruf des Mappings ....................................................................... 134
Schreiben von Textdateien ....................................................................................................... 135
XML-Dateien erzeugen ......................................................................................................... 137
Selbsterstellte Schreibroutinen ............................................................................................. 138
Wiederverwendbare Mapping-Bausteine – Pluggable Mappings
..................................... 138
Anwendungsszenario „Generisches Protokoll“......................................................................... 140
Zu dem ersten Punkt – flexible Input-/Output-Schnittstelle................................................... 141
Zu dem zweiten Punkt – Erzeugen zusätzlicher Sätze (z. B. Kopfzeilen) ............................ 141
Zu dem dritten Punkt (Kommunikation mit dem aufrufenden Mapping) ............................... 143
Der Sort-Operator ..................................................................................................................... 144
Unternehmensdaten integrieren – Teil 2 ....................................................... 145
Einlesen von ODBC-Quellen .................................................................................................... 145
Verwenden von ODBC-Quellen über den Warehouse-Builder ............................................ 147
Einlesen von XML-Dateien ....................................................................................................... 147
Einlesen von SAP-R/3-Daten mit dem SAP-Integrator ............................................................ 147
Messagebasiertes Einlesen von Nachrichten über Advanced Queuing .................................. 148
Generierungsstrategien .................................................................................. 149
Set based versus Row based ................................................................................................... 149
Der Code für die Set based Variante: ................................................................................... 150
Der Code für die Row based Variante: ................................................................................. 150
Der Code für die Row based (Target only) Variante ............................................................. 152
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
6/300
Der Code für die Set Based failover to Row based Variante ................................................ 152
Der Code für die Set Based failover to Row based (Target only) Variante .......................... 153
Steuerung der Generierungsvarianten.................................................................................. 153
Mit der Set-Based-Variante performante Mappings erzeugen ................................................. 153
2 Klassen von Mappings – Mappings organisieren .............................................................. 153
Geschickte SQL-Anwendung ................................................................................................ 153
Inhaltliche Prüfungen ............................................................................................................ 154
Null / NOT Null - Prüfung ...................................................................................................... 154
Prüfung Numerisch / nicht Numerisch .................................................................................. 155
Prüfung auf Ist-Datum / Ist Nicht Datum ............................................................................... 155
Summenabgleiche ................................................................................................................ 156
Komplexere Lösungen - Mit temporären Zwischentabellen arbeiten ................................... 156
Ausnahmen, die nur mit Row Based generierbar sind ......................................................... 158
Den Schreibmodus ändern - Insert – Update – Delete ............................................................ 158
Updates - Updates / Insert .................................................................................................... 158
None ...................................................................................................................................... 160
Truncate/Insert ...................................................................................................................... 160
Delete/Insert .......................................................................................................................... 160
Runtime Kontrolle ........................................................................................... 161
Laufzeitergebnisse betrachten Runtime Audit Browser ........................................................ 161
Laufzeitverhalten ändern – Mapping Configuration .................................................................. 161
Zugriff auf die Laufzeitdaten des Repositories ......................................................................... 163
Zusätzliches Fehlerlogging – Error Trigger .............................................................................. 165
Debugger verwenden ...................................................................................... 168
Erzeugen von Auswertemodellen in einem Data Mart (Star Schema,
Snowflake, OLAP-Würfel) ............................................................................... 174
Moduleinteilung und zusammenhängende Informationen .................................................... 174
Wozu werden Dimensionen gebraucht ..................................................................................... 174
Aus welchen Teilen besteht eine Dimension ............................................................................ 174
Business Key - Surrogate Key ............................................................................................ 175
Der Primary Key der Dimensionen ........................................................................................... 175
Dimensionen über den Star Schema Wizard erstellen ............................................................ 176
Dimension Artikel .................................................................................................................. 176
Mapping zum Erstellen der Dimension ................................................................................. 180
Dimension Regionen ............................................................................................................. 182
Dimension Kunde .................................................................................................................. 183
Die Zeitdimension ................................................................................................................. 185
Die Faktentabelle .................................................................................................................. 190
Das Füllen der Faktentabelle ................................................................................................ 192
Vermeiden von Fehlern beim Schreiben der Faktentabelle.................................................. 198
6. Automatisieren der Ladeprozesse-Workflow und Scheduling .... 200
Ladeläufe müssen flexibel sein ................................................................................................ 200
Struktur des Ladeprozesses ................................................................................................. 200
Erstellen von Prozessen ........................................................................................................... 201
Das erste Beispiel – einfache Workflows .............................................................................. 203
AND und FORK
............................................................................................................ 204
Schleifen bilden ..................................................................................................................... 205
Wechselspiel von Variablen und Parameter ......................................................................... 208
Parameterübergabe von Mapping zu Mapping ..................................................................... 209
Umgang mit Dateien - File Exists Aktivität
........................................................................ 210
Umgang mit externen Aufrufen Dateien File Exists Aktivität
............................................. 212
Security von externen Aufrufen freischalten ......................................................................... 213
Aufrufen von SQL Plus aus einem Prozess
.................................................................... 214
Parameterübergabe an SQL Plus ......................................................................................... 216
Aufrufen von Prozessen und Mappings – Scheduling .............................................................. 218
Scheduling mit OWB-fremden Schedulern ........................................................................... 218
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
7/300
Scheduling mit OWB ............................................................................................................. 219
Stoppen von laufenden Workflow-Prozessen über SQL*Plus.................................................. 222
Herausfinden von laufenden Prozessen: .............................................................................. 222
Beenden der laufenden Prozesse: ........................................................................................ 222
Beenden der laufenden Prozesse: ........................................................................................ 222
7. Aufbauen von Skripten zum automatisierten Ändern der Modelle
(OMB Plus – Scriptsprache) ........................................................... 223
8. Metadatenmanagement im Data Warehouse ................................ 230
Metadaten ................................................................................................................................. 230
Java API ................................................................................................................................ 231
Metadata Dependancy Managers ......................................................................................... 231
Diagramme ausdrucken ........................................................................................................ 234
Auswertungen mit Application Express ................................................................................. 235
Leichtes Austauschen von Metadaten zwischen verschiedenen Repositories (MDL-Files) .... 239
Versionierung von Modellen und Modellteilen .......................................................................... 242
Change Manager – Zurückholen einer alten Version ............................................................... 244
9. Die Verbesserung der Datenqualität.............................................. 245
10. Experts ......................................................................................... 246
11. Implementierung des Starschemas in der Datenbank Oracle 10g247
Summentabellen / Materialized Views ........................................................... 249
Voraussetzungen für Query Rewrite ........................................................................................ 252
Parallelverarbeitung ........................................................................................ 255
Partitionierung ................................................................................................. 256
Partition Pruning ....................................................................................................................... 257
Join über 350.000 Faktsätze ohne Partition ......................................................................... 258
Partition-wise Join ..................................................................................................................... 258
Parallelisierungsgrad und Anzahl Partitions ............................................................................. 259
Zusammenfassende Empfehlung zur Partitionierung .............................................................. 259
Schnelles Laden von Daten mit Transportable Tablespace ........................ 260
Bitmap-Indizierung .......................................................................................... 261
Bitmap-Join-Index ..................................................................................................................... 261
Empfehlungen zum Optimieren von Ladeläufen .......................................... 263
NOLOGGING ........................................................................................................................ 263
In Teilschritten arbeiten ......................................................................................................... 263
CTAS ..................................................................................................................................... 263
Ohne Constraints arbeiten (Aus/Einschalten) ....................................................................... 263
Analyze.................................................................................................................................. 264
Bitmap ................................................................................................................................... 264
Analytische Funktionen in der Datenbank .................................................... 265
Rank Top 10 ............................................................................................................................. 265
Ranking innerhalb von Gruppen ............................................................................................... 265
Top 3 Artikel pro Artikelgruppe ................................................................................................. 266
Anteile an einer Gruppe ............................................................................................................ 267
Kumulierte Anteile ..................................................................................................................... 268
Segmentieren von Gruppen (Kunden) ...................................................................................... 269
Moving Average ........................................................................................................................ 270
Mehrfachverarbeitung innerhalb eines Kommandos – Reporting Aggregate Functions .......... 271
Vorjahresvergleiche .................................................................................................................. 272
Rollup-Option ............................................................................................................................ 275
Cube-Option ............................................................................................................................. 276
Grouping Sets ........................................................................................................................... 276
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
8/300
Komplexeres Beispiel ............................................................................................................... 277
12. Testdatengenerator ..................................................................... 279
Die Funktionen .......................................................................................................................... 279
Beschreibung ............................................................................................................................ 281
Die Flat Files und die dazu passenden EXTERNAL Table Definitionen .................................. 283
13. Anhang mit Sonderthemen ......................................................... 285
Aufruf eines Mapping im Batch zu Testzwecken ...................................................................... 285
Tabellen im Speicher vorhalten ................................................................................................ 285
Nützliche Zeitfunktionen zum Erstellen einer Zeitdimension .................................................... 285
Rumpffunktion zu schnellen Erstellen einer Funktion .............................................................. 286
Prüfen auf Vorhandensein von Referenzsätzen oder Stammdaten ......................................... 286
Beispiel: Zugriff auf das Runtime-System: ............................................................................... 287
Sinnvolle Namenskonventionen ............................................................................................... 288
Wie mach ich was: Tips und Tricks .......................................................................................... 289
Mengenberechnungstabelle ..................................................................................................... 290
Table Functions ........................................................................................................................ 290
Table Functions und Warehouse Builder .............................................................................. 293
Polling ....................................................................................................................................... 294
Neu-kompilieren von Sourcen in der Datenbank ...................................................................... 295
Testdaten (CSV-File) ................................................................................................................ 295
Literaturliste (kommentiert) ....................................................................................................... 296
Aufrufparameter für OWB-Client setzen: .................................................................................. 298
Testhilfen und hilfreiche Kommandos für SQL*Plus Tests ....................................................... 298
Formatierungen der Ausgaben in SQLPLUS: ....................................................................... 298
Schnelles Erstellen einer CSV-Datei .................................................................................... 298
Hintergrund - Erstellen einer Tabelle mit Parameteraufruf ................................................... 298
Hilfskommandos zum Unterdücken des Outputs im Betriebssystemfenster: ....................... 299
Beispiel-Init.Ora-Datei für eine Installation von OWB und Oracle-Datenbank auf einem(!)
Rechner. ................................................................................................................................... 299
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
9/300
1. step-by-step zum Data Warehouse
Die besten Data Warehouse-Systeme kommen nicht von der Stange, also starten Sie ein Data
Warehouse-Projekt mit dem Ziel ein neues Data Warehouse zu bauen. Es entsteht nach den ganz
speziellen Vorstellungen der späteren Benutzer und der spezifischen Situation des Unternehmens.
Jedes Unternehmen ist anders, hat andere Ziele, hat eine andere Geschichte, andere Mitarbeiter und
andere Gewohnheiten. Es wäre fatal, wenn ausgerechnet das Werkzeug das die Strategie- und
Zukunftsplanung unterstützen soll über eine „0815“-Standard-Analyseanwendung gemeistert wird.
Doch schon entstehen Ängste:
o „Wird das neue Warehouse-Projekt zu einem Erfolg?“
o „Wer liefert die nötige Erfahrung?“
Denn ein Warehouse wird in einem Unternehmen meist nur einmal erstellt, und dann sollte es da
sein. Erfahrungen im eigenen Unternehmen sind Mangelware.
Hinzu kommen spezielle Herausforderungen die meist nur in Warehouse-Systemen auftreten:
 es sind Faktoren und Techniken zu berücksichtigen, die bei operativen Systemen nicht bekannt
sind:
o Dimensionale Modellierung.
o Wechselspiel von Normalisierung und Denormalisierung
o Hohe Ressourcenanforderungen bzgl. Mengen und Performance.
o Flexibilität von Informationsstrukturen.
o Strukturieren und Beschaffen von Informationen von denen man noch nicht weiß, wer sie
wie braucht.
o Fehlende Spezifikationen usw.
 Warehouse-Projekte sind Integrationsprojekte, d. h. es treffen sehr unterschiedliche operative
Systeme aufeinander. Die Daten daraus sind zu harmonisieren.
Diese step-by-step-Unterlage soll Ihnen helfen Aufwand in einem Warehouse-Projekt zu minimieren.
Sie ist eine Sammlung von vielen Details und Hilfestellungen, die Sie sonst mühsam zusammen
sammeln müssten. Außerdem ist sie eine Anleitung, die wie ein roter Faden durch Techniken
und Tools des Oracle-Warehouse führt.
Es ist kein Lehrbuch „Wie erstelle ich ein Warehouse“ und auch kein Syntaxnachschlagewerk. Hierzu
gibt es genügend Fachbücher und auch Software-Dokumentation. Besonders empfehlenswert ist der
Oracle 10g Warehouse-Guide, entweder als PDF-File oder Buch. (Literaturlisten und Bezugsquellen
über den Autor im Anhang.)
Bei der Erstellung des Papiers war dennoch wichtig, alle Code-Beispiele auch vollständig
abzudrucken. Es sind immer Beispiele, die schon mal an anderer Stelle erfolgreich liefen. Sie sind mit
Cut/Paste in das Dokument kopiert worden.
Dieses Dokument ist kein offizielles Dokument von Oracle, es kann auch fehlerhaft sein. Diese sind
sicher in einer Folgeversion korrigiert. Die Produkte sind nicht vollständig beschrieben. Den vollen
Umfang der genannten Funktionen und Werkzeuge sollten Sie immer in der jeweiligen Dokumentation
bzw. Online Hilfe nachlesen. An manchen Stellen sind Platzhalter für künftige Erweiterungen
angebracht. An dem Dokument wird immer noch ständig ergänzt. Korrekturen und Ergänzungen
können Sie dem Autor gerne mitteilen.
Es gibt nicht zu allen Aktivitäten Bilder und Screencopies. D. H. es macht Sinn das Dokument zu lesen
während Sie die Beispiele mit den jeweiligen Werkzeugen durchspielen. Sie brauchen hierzu eine
Oracle Datenbank (9.2 aufwärts) und Oracle Warehouse Builder. Passende Beispieldaten sollten
zusammen mit diesem Dokument ausgeliefert worden sein.
Dieses Dokument wird wohl immer eine Baustelle bleiben. Neue Funktionen, neue Releases und auch
neue Erfahrungen mit Beispielen aus Projekten fließen ständig ein. Deshalb Nachsicht, wenn was
nicht 100% ausformuliert und fertig ist.
Bloß nicht alles lesen
Springen Sie in dem Text. Lesen Sie das Inhaltsverzeichnis, und suchen Sie sich die Stellen heraus,
die Sie brauchen. Es ist nicht nötig kontinuierlich Seite für Seite zu lesen. Dafür haben Sie sicher
keine Zeit. Wenn Sie z. B. längst wissen, wie ein Warehouse im Prinzip funktioniert, dann
überspringen Sie die ersten Kapitel. Wenn Sie nur wissen wollen, wie WAREHOUSE BUILDER
bedienen, dann springen Sie direkt in diese Kapitel. Wenn Sie das alles schon kennen und nur den
Testdatengenerator bedienen lernen wollen, dann springen Sie dorthin. Allerdings sind in die Beispiele
in dem Kapitel 5 aufeinander aufbauend
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
10/300
Kleine Helfer am Rand
An den verschiedenen Textstellen sind zur besseren Orientierung Hinweismarkierungen angebracht.
Diese
sind:
Besondere Tips:
Praktische Hinweise aufgrund schon mal irgendwann vorher gemachter Erfahrungen
Vorsicht Falle:
Hier gibt es besondere Tips oder hier laufen Sie leicht Gefahr einen Fehler zu machen.
Demodaten:
Hier brauchen Sie etwas von außen z. B. Beispieldaten, die man Ihnen überlassen hat.
Aufgabenstellung:
Eine zu lösende Aufgabenstellung wird formuliert.
Fragen an den Experten:
Bestimmte Fragestellungen treten immer wieder auf. Hier sind weitergehende Hinweise,
besondere Lösungswege, typische Verfahren gekennzeichnet. Es sind meist Lösungswege
aus der Praxis bzw. aus Warehouse-Projekten, die man übernehmen kann.
Infos am Rand bzw. hinter den Kulissen
Manches Hintergrundwissen kann helfen bestimmte Dinge zu verstehen.
Zu dieser neuen Version des step-by-step
Nachdem der Warehouse Builder 10gR2 sehr lange auf sich waren lies und dann das Ende der BetaPhase sehr überraschend kam, musste dieses step-by-step Dokument sehr schnell von der alten
Version in diese neue überführt. Was ist neben der Anpassung auf das neue Release anders und neu:
 Die Beispiele in Kapitel 5 sind durchgängig aufeinander aufbauend. Damit entsteht am Ende
von Kapitel 5 ein zusammenhängendes Übungsbeispiel, in dem fast alle wichtigen Operatoren
eingesetzt werden.
 Weil der Funktionsumfang des Workflows gewachsen ist, wurde ihm mehr Platz eingeräumt.
Die wichtigsten Techniken im Umgang mit dem Workflow sind erklärt.
Was fehlt noch und kommt in der nächsten Fassung:
 Das Data Profiling-Thema ist nicht aufgenommen worden. Das Thema ist zu umfangreich. Um
dem Thema gerecht zu werden, muss man es zusammen mit den anderen
Datenqualitätstechniken darstellen also Match/Merge und Metadatendokumentation.
 Experts. Für dieses neue Thema gibt es noch zu wenig Erfahrungen.
Außerdem gibt es Dinge die unbedingt noch ausgebaut, vertieft und systematischer dargestellt werden
müssten:
 Konzepte und Anwendungsbeispiele rund um das Metadatenmanagement
 Ein Betriebskonzept, also der Einsatz von OWB in Entwicklung, Test und Produktion
Zu all den fehlenden Themen gibt es beim Autor bereits Material. Also, wer hier Informationen
benötigt, der kann sie dort bekommen.
Kapitelübersicht: Wo steht was
1.
step-by-step zum Data Warehouse
Diese Einleitung. Hinweise zur Bearbeitung.
2.
Das Data Warehouse
Hier finden Sie allgemeine Hinweise zu dem
Thema Data Warehouse. Was ist es, und wer
braucht es. Viele kennen das Thema schon,
wenn Sie dazu gehören, überspringen Sie das
Kapitel.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
11/300
3.
Erstellung eines Data Marts - Am Beispiel
4.
Die Komponenten des Oracle Warehouse
- Kurzübersicht
5.
Aufbau des Data Warehouse-Systems
mit dem Oracle Warehouse Builder
(OWB10g)
6.
Automatisieren
der
LadeprozesseWorkflow und Scheduling
7.
Skriptsprache
8.
Metadatenmanagement
Warehouse
9.
Dataquality Management
10.
Experts (Templates)
11.
Implementierung des Starschemas in der
Datenbank Oracle 10g
12.
Testdatengenerator
Stand/letzte Änderung 13.05.2016
im
Data
Hier stehen Erklärungen zu dem Fallbeispiel
dieser step-by-step Unterlage. Außerdem sind
Modelle vorgestellt, wie sie in einem WarehouseProjekt zum Einsatz kommen.
Dieses kurze Kapitel listet die Tool-Komponenten
des Oracle Warehouses auf.
In diesem Kapitel ist die Bedienung des Oracle
Warehouse Builders sehr detailliert erklärt. Hierzu
gehören die Installation, der Aufbau der
Entwicklungsumgebung und das Durchspielen
des Fallbeispiels. Für die Einarbeitung in OWB ist
dieses Kapitel mit das wichtigste. Wer dieses
Kapitel durchgearbeitet hat, sollte danach bereits
gut mit OWB arbeiten können.
Der Workflow ist in dem OWB10g Release
umfangreicher geworden. Die Beschäftigung mit
dem Workflow ist daher lohnender und zu
empfehlen.
Hier sind Beispiele für die Durchführung von
Arbeiten mit Skripten. Dies ist ein weiterführendes
Thema und vor allem für diejenigen interessant,
die OWB nach einem Projektabschluss im
Echtbetrieb einsetzen wollen.
Hier sind praktische Tips im Umgang mit dem
Metadaten-Browser
und
der
MDL-Datei
vorgestellt.
(Dieses Kapitel fehlt hier noch, es wird
nachgeliefert.) Enthalten sind Data Profiling,
Match Merge, Data Quality Auditing.
(Dieses Kapitel fehlt hier noch, es wird
nachgeliefert.) Enthalten ist der Aufbau von
Experts (Templates).
Die Oracle 10g Datenbank unterstützt ganz
besonders
das
Starschema.
Partitioning,
Materialized Views, Bitmap-Indizierung
und
andere Techniken kommen zum Einsatz.
Der Testdatengenerator ist eine Warehouse
Builder-Anwendung. Wenn Sie die Funktionen
geladen haben, steht Ihnen ein sehr hilfreiches
Zusatz-Utility zur Verfügung
(in Arbeit)
75875104
Oracle Warehouse step-by-step
12/300
2. Das Data Warehouse
Das Data Warehouse gehört mittlerweile in vielen Unternehmungen zu den Standardsystemen. Es
unterstützt die Kontrolle, die Planung und die strategische Ausrichtung von Unternehmensaktivitäten,
beginnend bei der operativen Ebene bis hin zur Chefetage.
Das Warehouse-Prinzip
In operativen Anwendungen der Unternehmen (Bestellwesen, Buchhaltung, CRM, Lieferanten...) sind
Unternehmensdaten in der Regel nach den Online-Bedürfnissen des Tagesgeschäfts organisiert:
Solche Daten, die DV-Anwendungen oft zusammenhängend bearbeiten, sind
auch
zusammenhängend und damit performant in der Datenbank gespeichert. Allerdings sind diese Daten
für die Analysezwecke von Controllern, Strategen, Marketingplaner meist unbrauchbar.
Ein Beispiel:
Es ist 10 Uhr morgens, und Sie müssen jetzt eine Entscheidung treffen, die erheblichen Einfluss auf
Ihre Produkt- und Verkaufsstrategie der nächsten Monate hat. Sie wissen, dass die benötigten
Informationen irgendwo in den verschiedensten Systemen zu finden sind, auf die Sie mit Ihrem PC
oder über das Netzwerk zugreifen können. Sie wissen aber auch, dass Sie keine Möglichkeit haben,
diese Informationen in der verbleibenden Zeit zu sammeln und in einen Zusammenhang zu bringen.
Sie kapitulieren vor der Flut der Daten, auf die Sie zwar physisch zugreifen können, aber aufgrund der
riesigen Menge, der Zersplitterung und der Redundanzen der Daten oder der fehlenden
Dokumentation resigniert aufgeben.
Studien zufolge sammeln wir in den Jahren 2003 bis 2006 in unseren Systemen mehr Daten, als die
Menschheit bis dahin in den letzten Jahrtausenden davor. Die Speicherindustrie unterstützt uns dabei
mit immer billigeren Plattenstapeln und steigender Plattenkapazität.
Das mühsame Durchsuchen von Bergen von Listen ist oft der letzte Ausweg; aber ist ein solches
Vorgehen eine vernünftige Planungs- und Entscheidungsgrundlage? Trotz aller Investitionen in
Hardware, Software, Netzwerke und Betriebssysteme werden nicht die Informationen geliefert, die
wirklich zur Entscheidungsfindung erforderlich sind.
Aber nicht nur die Menge und die Zersplitterung stellen uns vor Herausforderungen. Auch einige
bestehende Berichtswesenvarianten erschweren uns das Auffinden von Informationen und sie
produzieren zudem noch unnötig Kosten:
Weitere Beispiele:
Fall 1
Ein großes Speditionsunternehmen erzeugt monatlich fünf Berichtsmappen mit zusammen 700
Einzelberichten. Sieben Mitarbeitern aus mehreren Abteilungen erstellen diese Berichte zum Teil von
Hand. Diese 700 festen Berichte sollte das Unternehmen auf weniger als 50 generische Berichte
reduzieren und sie automatisch und zeitgesteuert herstellen lassen um die Handarbeit zu ersetzen.
Fall2
Ein Automobilhersteller zählt 15000 Einzelberichte. Verständlich, denn es gibt viele Abteilungen, und
jede Abteilung besteht auf ihren individuellen Berichten. Ein zentraler Informationspool könnte eine
Menge redundanter Berichte beseitigen, auch wenn diese optisch oder strukturell sehr unterschiedlich
aufgebaut sind.
Fall 3
Ein Controller einer Sparkasse stöhnt, weil er 80% seiner Arbeitszeit, damit verbringt 30
Datenbestände (Dateien, Excel-Sheets usw.) zusammen zu tragen. Die verbleibenden 20 % benötigt
er dann dafür, die fertigen Berichte per Email oder zu Fuß zu den Kollegen in den anderen Büros zu
transportieren. Automatisiertes Konsolidieren der Daten (was meist möglich ist) würde für die
eigentliche Arbeit des Controllers freie Zeit schaffen.
Fall 4
Eine TV-Gesellschaft muss IT-Personal abstellen, um Fachanwendern zu helfen, die komplexen
Datenmodell des bestehenden Auswertesystems zu verstehen. Ein einfaches intuitives Datenmodell,
wie das weiter unten beschriebene Starschema-Modell, könnte auch hier helfen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
13/300
Die meisten Datenbestände in einem Unternehmen sind darauf ausgerichtet sind, den Ansprüchen
der operativen Systeme zu genügen. Ein reibungsloser Ablauf des Tagesgeschäfts ist zu
gewährleisten. . Ihre Daten sind sehr detailliert und haben sehr oft keine Verbindung zueinander. Aber
die Anforderungen an operative Systeme unterscheiden sich grundsätzlich von den Anforderungen
eines Anwenders, der strategische Entscheidungen zu treffen hat. Hierfür. Ist es notwendig, die Daten
der operativen Systeme in einen inhaltsbezogenen, nach Sachthemen sortierten, historisch zu
betrachtetem Zusammenhang zu bringen, die der Sichtweise eines Entscheiders oder Analysten
entspricht.
Für diese Zwecke extrahiert man Daten aus den operativen Systemen und überführt sie in ein Data
Warehouse (ETL-Prozess, Extraction-Transition-Load). In dem Warehouse liegen die Daten meist in
einer feinen, granularen, einmaligen und konsistenten Form vor. Sie sind durch zusätzliche sog.
Referenzdaten oder auch externe Daten angereichert. Ständiges Nachladen der operativen Daten
führt zur Historisierung. So ist es möglich zeitabhängige Veränderungen festzustellen, Trends sind
erkennbar. Die Folge ist eine neue Qualität von Entscheidungen für alle Unternehmensbereiche - der
Grundstein für einen langfristigen Unternehmenserfolg. Das Warehouse bildet die Grundlage für
Auswertungen durch Analysten, Controller oder andere Warehouse-Benutzer, entweder direkt oder
über eine weitere Warehouse-Schicht den Data Marts (kleine auf Benutzerbedürfnisse hin
ausgerichtete Auswertedatenhaltung).
Das Warehouse ist ein zentraler Datenpool, in dem alle entscheidungsrelevanten Informationen des
gesamten Unternehmens gespeichert und für jeden autorisierten Mitarbeiter an jedem Ort zur
Verfügung stehen.
Das Data Warehouse-Prinzip – aus Daten Informationen machen!
Das Data Warehouse-System – 3-Schichtenarchitektur
Anders als klassische Reportingsysteme, die oftmals „stand alone“ und isoliert in separaten
Abteilungen eingesetzt waren, besteht ein Data Warehouse-System aus mehrere Ebenen (Schichten)
in denen die Informationen des Produktionsbetriebes Stück für Stück zunächst konsolidiert und
letztlich für Auswertungsbelange neu aufbereitet werden.
Das Ziel ist eine möglichst umfassende, dabei mehrere Unternehmens- und Themenbereiche
abdeckende Informationsablage zu erhalten, die in kurzer Zeit konsolidierte Berichte und
Analysen für alle (!) Zielgruppen des Unternehmens bereitstellt.
Um das zu erreichen, isoliert man die eigentlichen Warehouse-Daten von den operativen Daten der
Quellsysteme, aber auch von den Auswertedaten der späteren Benutzer.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
14/300
Die wesentlich umfassendere Warehouse-Schicht
ist sachthemenorientiert und integriert
bereichsübergreifende Fragestellungen (in der Regel 3. Normalform). Sie ist besonders gut für
Konsolidierungszwecke geeignet, da sich Daten in der 3 Normalform sehr leicht sortieren und
vergleichen lassen. Die Data Marts dagegen sind auf die einzelnen Zielgruppen mit ihren speziellen
Fragestellungen zugeschnitten. Sie sind meist denormalisiert als sog. Dimensionale Modelle oder
Würfel (Cube) aufgebaut .
Das gesamte System kann durch eine Staging Area von den Vorsystemen (OLTP-Systeme) getrennt
sein (Pufferschicht), damit sich die beiden Bereiche z. B. durch Performanceverluste nicht gegenseitig
behindern. Außerdem können die aus unterschiedlichen Vorsystemen stammenden Daten in der
Staging Area validiert und zurecht geschnitten werden. Sie ist das Eintrittstor aller Daten in das
Warehouse.
Zum Versorgen der verschiedenen Ebenen des Data Warehouse müssen Daten fließen. Es beginnt
bei der Extraktion aus den Quellsystemen, mit Flat Files, Mainframesysteme, ERP-Systeme oder
Dateien aus der Officewelt. Prüfungen und Umwandlungen machen Informationen vergleich- und
kombinierbar. Zusätzliche Schlüsselbeziehungen sind aufzubauen. In weiteren Ladeschritten
gelangen die Daten in die Warehouse– und letztlich in die Data Mart-Schicht.
Das 3-Schichtenmodell sorgt für Flexibilität im Warehouse: Reichen die Informationen im Data Mart
(oftmals als Starschema realisiert) für den Benutzer nicht mehr aus, dann kann die umfassendere
Warehouse-Schicht solche Informationen nachliefern. Sehr schnell lassen sich neue Strukturen in der
Data Mart-Schicht aufbauen.
Mehrschichtenmodell eines Warehouse – Flexibilität und Skalierung schaffen!
Daten für Auswertungen aufbereiten: Dimensionale Sichten
Data Warehouse-Systeme halten Daten in einer Form vor, die für Fachmitarbeiter leicht auswertbar
und leicht verstehbar ist. Diese Form muss zwei Ansprüchen genügen:
1. Sie muss für die Benutzer (Business-User) verständlich und intuitiv sein.
Der Benutzer soll „seine Daten wiederfinden“.
2. Die Warehouse-Daten müssen mit vertretbarem Aufwand technisch gut verwaltet werden
können. Wir brauchen eine flexible Struktur, um schnell auf neue Informationsanforderungen
reagieren zu können. Gerade in einem Data Warehouse-System ändern sich die
Informationsanforderungen ständig und es kann nicht immer ein neues Entwicklungsprojekt
gestartet werden, um neue Daten zu liefern.
Um diese Anforderungen zu erfüllen, hat sich die Modellierungstechnik des Starschemas
durchgesetzt. Die meisten Warehouse-Systeme nutzen in ihrem Kern heute eine Variante dieses
bewährten Prinzips in der Data Mart-Schicht. Daher ist hier eine kurze Zusammenfassung und
Herleitung der Prinzipien eines Starschemas dargestellt.
In der folgenden Liste sind typische Analyse-Vorgehensweisen eines Benutzers aufgeführt. Danach
folgt die technische Darstellung zunächst mit Hilfe einer Spreadsheet-Darstellung und schließlich mit
einer relationalen Datenbank wie Oracle. Schnell erkennen Sie die Limitierung des SpreadsheetAnsatzes und die Vorteile der dimensionalen Modellierung eines Starschemas in einer relationalen
Datenbank.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
15/300
Typische Analyseschritte eines Warehouse-Benutzers
Bildhafte Darstellung
Welche Information
braucht der Benutzer
Beschreibung
Welcher Umsatz wird in
welcher
Zeit erreicht?
Ein einfacher erster Schritt
ist das Betrachten entlang
von
Achsen
eines
Koordinatensystems,
bei
dem
die
Achsen
den
korrespondierenden
Messgrößen entsprechen, z.
B. Zeit und Umsatz. Die
Schnittpunkte der Achsen
bilden einen Zahlenraum –
die
eigentlichen
Analysewerte.
Es können beliebig viele
Messgrößen (Dimensionen)
in die Betrachtung mit
einbezogen
werden
–
theoretisch
unbegrenzt,
praktisch kann auch der
geübte Analyst kaum mehr
als 5 – 6 Sichten sich
bewusst machen.
Dreidimensionale,
visuelle
Hilfsmittel sollen schließlich
die
Vorstellungskraft
unterstützen. Die „vierte“
Sicht (Dimension) wird durch
einen zusätzlichen Würfel
vergegenständlicht.
3 Sichten
Welchen
Umsatz
in
welcher Zeit pro Produkt?
4 Sichten
Welchen
Umsatz
in
welcher Zeit pro Produkt
und Region?
Räumliche Sichten zur
Verbesserung
der
Vorstellungskraft.
Jeder Würfel entspricht
einem „Business View“.
Welchen Umsatz erzielten
die einzelnen Produkte in
den
Regionen
in welcher Zeit?
Welchen Vertriebszyklus
(Zeit) durchliefen welche
Produkte bezogen auf die
einzelnen Regionen?
(Pivoting)
Welchen Umsatz erzielten
die
Produktegruppe XYZ in den
Regionen
in
welcher
Zeit?
Welchen Umsatz erzielten
die Produkte in den
Regionen im 3. Quartal?
(Slice und Dice)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
Durch
Vertauschen
der
Sichten
(Dimensionen)
entstehen Abfragevarianten
bei gleichem Zahlenraum.
Obwohl es sich um die
gleichen
Daten handelt,
entstehen
neue
Sinnzusammenhänge.
Entlang
der
Achsen
(Dimensionen) schränkt man
die
Betrachtung
ein.
Achsenelemente
werden
einzeln betrachtet oder in
Gruppen segmentiert.
In
Gruppen
zusammen
gefasst,
lassen
sich
vergleichbare
Achsenelemente
aggregieren
(Produktgruppen,
Verkaufsgebiete usw.)
75875104
Oracle Warehouse step-by-step
16/300
Welchen Umsatz erzielten
die einzelnen Produkte
aus der Produktgruppe
XYZ in den Regionen in
welcher Zeit? (Drill Down)
Welche Produktgruppen
waren in den Regionen in
welcher
Zeit
am
erfolgreichsten?
(Roll Up)
Aggregation entlang von
Unternehmensleveln.
Drill
to
Detail
auf
Einzelobjekte.
An welchen Produkten
wurde
unter
Berücksichtigung
der
Lieferantenpreise
in
welchen Regionen am
meisten verdient?
Welche
Produkte
verursachten in welchen
Regionen
in
welchen
Zeiten
die
höchsten
Lagerkosten?
(Drill across)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
Die Daten können selbst
bereits Verdichtungen - also
Zusammenfassungen
von
feineren Daten - sein.
Es bilden sich Hierarchien.
Häufig
vorkommende
übliche Hierarchien sind:
- Zeithierarchien (Monat /
Quartal / Jahr)
- Unternehmenshierarchien
(Abt.
/
Sparte)
Unternehmenshierarchien
sind meist nach dem
tatsächlichen
Geschäftsbetrieb
(Produkte, Regionen usw.)
ausgerichtet.
- Produktgruppen
- Regionen
Daten in den Würfeln
können unterschiedlich sein,
aber
dennoch
durch
identische Sichten (Achsen)
vergleichbar sein. In dem
nebenstehenden
Beispiel
sind
Verkaufsund
Einkaufszahlen vergleichbar,
weil sie sich auf die gleichen
Produkte und Zeiteinheiten
(Dimensionen) beziehen.
75875104
Oracle Warehouse step-by-step
17/300
Umsetzung mit technischen Mitteln – relationale Speicherung
multidimensionaler Sichten
1. Variante Kalkulationstabelle
Welche
Produkte
werden
an
welchen
Tagen wie oft verkauft?
Eine
einfache
Variante für eine
zweidimensionale
Sicht ist z. B. eine
Exceltabelle.
Welche
Produkte
werden
an
welchen
Tagen in welcher Stadt
wie oft verkauft?
Bei drei Sichten
müssen Sie bei
dieser
Lösung
bereits
mehrere
Exceltabellen
schachteln.
Welche
Verkäufer
verkauften welche
Produkte
an welchen
Tagen in welcher Stadt
wie oft?
Erreichen wir 4
Sichten, ist ein
ganzer
Block
hinzuzufügen.
Die
Vorgehensweise
ist
zunehmend
unbrauchbar.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
18/300
2. Variante Relationale Datenbank
Die
Darstellung
Verkaufszahlen in
einfachen Tabelle.
geht hier nicht.
Technisch gesehen:
Die zentrale Tabelle nennt man Faktentabelle (Facts) die umliegenden
Dimensionstabellen (Dimensions). Beide Tabellenarten sind über 1:nBeziehungen miteinander verbunden. Die Foreign Keys sammeln sich in
der Faktentabelle. Die Faktentabelle ist lediglich durch diese Foreign
Keys bestimmt. Sie hat keinen eigenen Primary Key. Es können also
Sätze mehrfach vorkommen.
Dimensionstabellen enthalten beschreibende Informationen zu den
Geschäftsobjekten
(Textfelder,
einmalige
Eigenschaften,
Stammdateninformationen).
von
einer
Mehr
Trennen
von
reinen
Produktbeschreibungsdate
n (Dimension oder Sicht)
und den Verkaufszahlen
(Fakten) in zwei über eine
1:n
Beziehung
verbundeneTabellen.
Mit dieser Technik lassen
sich jetzt nach und nach
mehrere Sichten um die
Verkaufszahlen
herum
gruppieren. Wie in dem
oben
dargestellten
Mehrachsendiagramm
bestimmen
jetzt
die
Schlüsselwerte in den 1:n
Beziehungen
den
Zahlenraum
in
der
Verkaufstabelle (Fakten).
Beliebig
viele
Sichten
(Dimensionen) lassen sich
darstellen.
Gleichzeitig
entsteht eine graphische
Darstellung, welche die
Vorstellungskraft auch des
Business-Users
unterstützt.
Die Sichten (Dimensionen)
entsprechen
den
Geschäftsobjekten
der
realen Welt, in der es sich
um Produkte, Regionen,
Verkäufer und Zeiträume
dreht. Gemessen wird der
Erfolg bei dem Umgang mit
diesen Geschäftsobjekten:
Verkäufe oder Umsatz.
Die Dimensionen stellen
dabei Ausgangspunkte für
Geschäftsabfragen dar.
Aber gleichzeitig handelt
es sich hierbei um ein
Datenmodell
das
eine
relationale
Datenbankstruktur
beschreibt. Das Modell ist
in dieser Form z. B. in
einer Oracle Datenbank
umsetzbar.
Es
wird
Starschema genannt.
Faktentabellen beinhalten Felder, mit denen gerechnet werden kann.
Alle
mess-/berechenbare
Fakten,
die
sich
ereignen
(Bewegungsdaten).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
19/300
Spielarten des Starschemas
Damit sind die Grundeigenschaften des Starschemas beschrieben. Die folgende Übersicht skizziert
mögliche Varianten eines Starschemas. In der Mitte steht die zentrale Faktentabelle. Um sie
gruppieren sie sich eine Zeit-, Produkte-, Orte-, Verkäuferdimension. Bis auf die Verkäuferdimension
sind alle über eine 1:n Foreign Key-Beziehung an der Faktentabelle angeschlossen.
Dimensionstabellen können hierarchisiert sein.
Hierarchien
Die Ortedimension besteht z. B. aus den Hierarchieebenen „Ort“, „Kreis“, „Land“. Diese
Hierarchieebenen könnten selbst wieder in separaten Tabellen liegen, die untereinander auch wieder
über Foreign Key-Beziehungen verbunden sind. Entstehen würde eine sogenannte SnowflakeDimension. Von dieser Konstruktion wird hier abgeraten, da bei späteren Abfragen in der Datenbank
zusätzliche Join-Aufwände zu erwarten sind. Außerdem können dann Techniken der Staroptimierung,
wie sie im Folgenden noch besprochen werden, nicht mehr effizient eingesetzt werden. Es sollten also
alle Hierarchien innerhalb einer Tabelle abgebildet sein. Diese ist dann denormalisiert.
Es gibt noch eine zweite Art der Hierarchisierung. Bei der Produktdimension ist eine typische
Stücklistenstruktur dargestellt, d.h. innerhalb einer Tabelle finden sich sog. Parent- und Child-Sätze
einer Hierarchie, die beliebig tief geschachtelt sein kann. Die Tabelle bildet eine Beziehung auf sich
selbst (rekursiv). Diese Art der Speicherung mag praktisch sein, ist aber nicht praktikabel für spätere
Auswertungen. Man stelle sich nur vor, man will die verschiedenen Hierarchieebenen in einem Bericht
mit Gruppenwechseln darstellen, ohne allerdings zu wissen, wie viele Gruppenwechsel vorkommen.
Das Layout des Berichtes ist nicht vorherbestimmbar, also auch nicht automatisierbar. Selbst wenn es
SQL-Mittel gibt, mit denen diese Struktur aufgelöst werden kann (Connect By), sollte sie dennoch
bereits während des Starschema-Designs aufgelöst werden. Man nimmt eine fixe Anzahl von Level
als Platzhalter an, von der man glaubt, dass sie nicht erreicht wird (L1-L10).
Intersection-Dimension
Eine weitere Dimensionsvariante ist für „Verkäufer“ dargestellt. Arbeiten mehrere Verkäufer eines
Unternehmens an einer Verkaufsaktivität, so können die einzelnen Verkäufer nicht direkt den
entsprechenden Faktensätzen zugeordnet werden. Es besteht eine n:m Beziehung zwischen
Verkäufern und Verkaufsaktionen. Hier nutzt man eine Intersection-Tabelle. Die n:m-Beziehung löst
sich also in eine Zwischentabelle mit zwei 1:n-Beziehungen auf.
Heterogenious Faktentabelle
Eine weitere Variante, um das vorgenannte Problem zu lösen, ist das Erstellen einer separaten
Faktentabelle, in der der verkäuferbezogene Umsatz abgelegt ist. Diese neue Faktentabelle
unterscheidet sich von der zentralen Faktentabelle dadurch, dass sie jeweils immer nur einen Teil der
produktbezogenen Umsätze auflistet. Die Art der Fakten ist also die gleiche ( es handelt sich um
Verkaufsumsätze), allerdings sind sie anders berechnet worden.
Starschemen können aus mehreren Faktentabellen bestehen, Dimensionstabellen werden
wiederverwendet, Informationen synchronisiert!
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
20/300
Parallel Faktentabelle
Ein Starschema kann durchaus mehrere Faktentabellen enthalten (auch wenn die Form des Sterns
damit nicht mehr gegeben ist). Hier handelt es sich dann meist um Messwerte, die miteinander in
Bezug gesetzt werden sollen (Drill-Across-Anforderung). In dem Beispiel ist eine separate
Faktentabelle für die Bestellkosten (Lieferkosten, Bezug über Lieferanten) gebildet worden.
Konstellation
Das Entscheidende an dieser „Konstellation“ des Starschemas ist, dass alle drei Faktentabellen
vergleichbare Ergebnisse liefern. Es werden sog. „Conforming Dimensions“ genutzt, in diesem Fall
sind es „Produkte“ und „Zeit“, über die eine Synchronsierung der Faktentabelle garantiert wird. Es sind
z. B. Abfragen möglich, in denen die Lieferkosten und die Verkaufserlöse pro Produkt gegenüber
gestellt werden können, oder es kann die Liquidität bzw. Kostendeckung über einen gewissen
Zeitraum hinweg kontrolliert werden „Wie ist der zeitliche Verlauf
der Differenz von
Einkaufsaufwendungen und Verkaufserlösen?“, „Besteht die Tendenz einer Fehldeckung?“. Den
Gesamtverbund von Faktentabellen über Conforming Dimensions nennt man Konstellation
(Constallation).
Factless Facts
Faktentabellen müssen nicht immer messbare Werte enthalten. Sie können auch lediglich aus den
Foreign Keys der Dimensionen bestehen. Hier soll z. B. festgehalten werden, ob es überhaupt eine
Verkaufsaktivität gegeben hat.
Degenerate Facts
Bei dieser Variante werden eigentlich zu messende Fakten-Informationen als Tabellenspalte in einer
Dimension mit aufgenommen. Z. B. kann ein Artikelpreis eine Column in einer Produktedimension
sein. Im Prinzip könnte dieser Wert auch direkt in einer Faktentabelle stehen, wenn bei verschiedenen
Verkaufsaktionen etwa unterschiedliche Preise bzw. Rabatte genutzt werden. Ist er aber fix, so könnte
er auch in einer Dimension für jedes Produkt einmal aufgelistet werden. Die Faktentabelle, die sehr
groß werden kann, wird dadurch kompakter. Gesamtumsätze pro Verkauf können schließlich auch
berechnet werden aus einer Mengenangabe in der Faktentabelle und dem Preis aus einer
Dimensionstabelle.
Degenerate Dimension
Das Gegenstück sind die „Degenerate Dimensions“. Hier sind Felder, die eigentlich aufgrund ihres
Charakters in einer Dimension gespeichert sein sollten Bestandteile der Faktentabelle geworden. Dies
lohnt sich bei Einzelinformationen, um somit einen zusätzlichen Join zu einer Dimension bei späteren
Abfragen zu sparen.
Durch diese geschickte Art der Speicherung von Dimensionen und Fakten lassen sich Sichten des
Analytikers in eine relationale Datenbank wie Oracle ablegen. Alle oben beschriebenen nötigen
Vorgehensweisen bei der Analyse sind durchführbar:
 Drill up/Down über die Hierarchien der Dimensionen,
 Slice/Dice über Filter bei Abfragen,
 Pivoting über die Reihenfolge der Dimensionen in den Abfragen,
 Drill Across über das gleichzeitige Abfragen zweier Faktentabellen mit einer gemeinsam
genutzten Dimension als Join-Kriterium.
Das Warehouse ist ein dynamisches und flexibles System
Das hier skizzierte Starschema ist ein „Repräsentationsdatenmodell“, weil es Anforderungen der
Warehouse-Anwender realisiert. Es ist aber auch ein wichtiger Baustein in der Kette der
Informationswandlung von den operativen Quellsystemen bis hin zu den Berichten der Endanwender.
Das Data Warehouse ist ein System zur Informationsgewinnung. Das System ist als durchgängiger
Prozess zu verstehen. Dieser Informationsgewinnungs-Prozess sollte möglichst wenig durch
Barrieren gestört werden. D. h. es ist z. B. sehr wichtig rechtzeitig zu garantieren, dass geänderte
Informationsanforderungen der Endbenutzer schnell genug befriedigt werden können.
Meistens ist es Ihnen unmöglich, solch Änderungen vorherzusehen. Wissen Sie immer welcher
Anwender in zwei Wochen oder zwei Monaten oder in einem halben Jahr welche neuen Informationen
braucht?
Bevor in den Frontend- Werkzeugen dafür aufwendige Programmier- und Analysearbeit geleistet wird,
sollte
es
möglich
sein,
fehlende
Informationen
in
den
früheren
Phasen
des
Informationsgewinnungsprozesses bereitzuhalten. Ein Mittel hierfür ist das Starschema. Versuchen n
Sie einen kleinen Test und finden Sie in dem folgenden Starschema die Anzahl der
Kombinationsmöglichkeiten aller Attribute heraus.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
21/300
Wie viele Abfrageoptionen bietet dieses kleine Starschema?
Wahrscheinlich geben Sie auf oder zumindest versuchen Sie einen geschickten Rechenalgorithmus
zu finden, um alle Kombinationsmöglichkeiten zu errechnen. Es sind weit über 100. Die Zahl
vervielfacht sich wenn Sie noch mehr Attribute in die Dimensionen mit aufnehmen oder sogar noch
ganze Dimensionen hinzufügen. Auch wenn manche Abfrage-Optionen unsinnig sind, ist erkennbar,
wie viel Informationspotential in einer so einfachen Datenmodellstruktur enthalten ist. D. h. ob die
Benutzer entsprechende Abfragen bereits parat haben oder nicht, bereits in der Anlage des
Datenmodells liegen Informationen bereit, die potentiell jederzeit nutzbar sind, ohne
zusätzlichen Datenbeschaffungsaufwand zu betreiben.
Wenn dennoch nicht die richtigen Informationen im Starschema vorliegen, bleibt immer noch der Weg
zurück in die granular gehaltene Warehouse-Schicht. Hier sollten Informationen wie in den Regalen
eines Warehauses sortiert vorliegen. Mit wenig Aufwand ergänzen Sie daraus das Starschema mit
den fehlenden Daten.
Und wenn auch das nicht reicht, so sollte der Weg in die Quelldatenbestände vorgezeichnet sein.
Das Starschema ist natürlich noch entsprechend performant in der Oracle-Datenbank zu
implementieren. Die beiden Anforderungen des Benutzers performantes Antwortzeitverhalten und
Flexibilität bei der Vielfältigkeit der möglichen Fragestellungen sind nur durch ein integriertes
Zusammenspiel aller Komponenten des Warehouse-Systems zu erreichen. Sinkt die
Performance bei Abfragen, können entsprechende Optionen in der Datenbankhelfen. (z. B. durch
zusätzliche Materialized Views). Auch solche Optionen sind bei dem Warehouse-Design zu
berücksichtigen. Staging- oder Hilfssummentabellen können bei einem effizienten Ladefluss stören.
Das Datenbanksystem sollte eine große Zahl von ihnen überflüssig machen.
Baupläne sollten den gesamten Informationsgewinnungsprozesse dokumentieren um schnell an den
entscheidenden Stellen eingreifen zu können. In dem Warehouse-System nutzt man das WarehouseModell (Metadaten) um Änderungen vorzunehmen. Das Warehouse-Modell entsteht bei dem Oracle
Warehouse durch den Oracle Warehouse Builder. Die Komponenten des Oracle Warehouse greifen
ineinander und ergänzen sich gegenseitig. Wer das System künstlich trennt z. B. in ETLKomponente, Auswerte-Komponente und Datenbank, der läuft Gefahr, den Warehouse-Prozess nicht
optimal und ohne Brüche zu verwalten.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
22/300
Das Warehouse ist kein starres System, sondern ein ständiger Prozess, der immer(!) passgenaue Information zu
dem Fachanwender liefert!
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
23/300
3. Erstellung eines Data Marts – Ein BeispielSzenario
Ableitung eines Auswertemodells aus Quellstrukturen
Ein Warehouse-System entsteht nicht auf Zuruf, sondern mit Methoden. Sie arbeiten dabei mit Hilfe
von Modellen, die Sie schrittweise nacheinander ableiten. Folgende Modelle spielen eine Rolle:
Modell
Zweck
Quelldatenmodell
Befragungsergebnisse
Geschäftsprozessmodelle
Analysemodell
Stellen die Ausgangssituation dar. Sie
sind
Quellmaterialien und bestimmen die ersten Schritte.
Objektmodell
Auswerte- oder Abfragemodell
(Starschema)
Mappingmodell
Workflow-Modell
Beschreibt den Geschäftsprozess, den es durch
Warehouse-Technik zu unterstützen gilt.
Dokumentiert
die
Geschäftsobjekte
des
Geschäftsprozesses und legt Rahmenbedingungen
und Eigenschaften der Geschäftsobjekte offen.
Spiegelt die Abfragebedürfnisse wider und definiert
die Struktur der Warehouse-Datenbank.
Dokumentiert die Zuordnung von Quell- und
Zielsystem. Herleitungen und Wandlungen. Hinweise
auf Extraktionstechniken.
Regelt die Ablauflogik der einzelnen Komponenten
des Mapping-Modells. Globale Ablauflogik des
Bewirtschaftungsprozesses des Warehouses.
Hilfsmittel,
Werkzeug
OWB, +
Papier
(UML)
Papier
(UML)
OWB
OWB
OWB
Anhand eines praktisches Beispiels können Sie am leichtesten den Zweck und die Funktionsweise
eines Systems erkennen. Die vorliegende step-by-step-Anleitung liefert Ihnen dieses Beispiel. Es ist
überschaubar und klein gehalten. Es nutzt jedoch viele Anforderungen aus der Praxis und behandelt
einen großen Teil der in der Datenmodellierung vorkommenden Entity Relationship-Konstruktionen,
wie Parent/Child - und n:m - Beziehungen. Die Eingrenzung auf einen zusammenhängenden
Geschäftsprozess entspricht einem Data Mart, also einem kleinen Warehouse-Ausschnitt.
Beispieldaten sind Bestellungen, Artikel und Kunden, also Bewegungs- und Stammdaten. Diese sog.
Quelltabellen stellen die Ausgangsdaten des Szenarios dar. Die step-by-step-Anleitung führt Sie
durch das Laden dieser Quelldaten in das Data Warehouse, zeigt Ihnen, wie Sie die Quelldaten
umwandeln und in ein Starschema importieren. Nebenbei erstellen Sie die Struktur des Warehouses,
Zwischentabellen und definieren das Starschema.
Das Ergebnis ist ein mit Daten gefülltes Starschema. Die Speicherung wird über mehrere Techniken in
der Oracle9i Datenbank optimiert. Im letzten Schritt können Sie die neue Struktur mit dem Oracle
Discoverer auswerten bzw. mit Oracle Reports Standard-Berichte erzeugen.
Das Quelldatenmodell
Ein Beispielunternehmen nutzt folgendes Datenmodell um die Bestellungen von Artikel durch Kunden
zu dokumentieren. Eine Bestellung gliedert sich in sogenannte Kopfdaten (Tabelle Bestellung) und
Positionsdaten (Best_Position). Neben einem Bestelldatum ist auch ein Lieferdatum pro Bestellung
erfasst. Zu den Kunden gehören neben Privatkunden auch Firmenkunden. Diese Kundenart kann dem
Feld Status entnommen werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
24/300
Das Datenmodell der Beispieldaten (Quellsystem)
Das Analysemodell
Der Geschäftsprozess, der hinter diesem Datenmodell steht, ist sehr einfach:
Kunden kaufen Artikel und Artikel werden geliefert.
Über eine Geschäftsprozessanalyse entsteht eine Liste von Geschäftsobjekten (in diesem Beispiel
2) die zueinander in eine Art „Interaktion“ treten.
Das Analysemodell des analysierten Geschäftsprozesses
zu dem Beispielszenario
Das Objektmodell
Dennoch birgt dieser einfache Geschäftsprozess viele Details, die über entsprechende
Fragestellungen ermittelbar sind. Das Objektmodell hilft diese Fragen zu finden. Bei näherer
Betrachtung des Geschäftsprozesses sieht das Objektmodell wie folgt aus:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
25/300
Das Objektmodell des Beispielprozesses für das Szenarios
Über dieses Objektmodell erkennen Sie Kontextinformationen zu den Geschäftsobjekten. Eine
wichtige Information sind mögliche Hierarchisierungen:
o Ein Kunde „spezialisiert“ sich in einen Firmenkunden und einen Privatkunden.
o Artikel lassen sich in Gruppen und diese in Sparten zusammenfassen.
o Zwischen Bestellungen und Artikel ist offensichtlich noch eine besondere Auflösung oder
Detaillierung nötig (Intersection-Information bzw. eine Zwischentabelle, das sind die
Bestellpositionen).
o Es kann unterschieden werden zwischen Bewegungsdaten (Bestellung) und mehr festeren
Daten (in diesem Fall die Stammdaten Artikel und Kunde).
Die letzten beiden Punkte stellen Indizien für Faktentabelleninformationen dar, die ersten beiden sind
sicher Kandidaten für Dimensionen.
Mögliche Fragestellungen
Aus dem Objektmodell heraus sind Fragen formulierbar. Diese Fragen können bzw. sollten sich sogar
mit den tatsächlichen Informationsbedürfnissen der Fachabteilung decken aus deren Einsatzbereich
der Geschäftsprozess entstammt. Natürlich ist diese Fachabteilung vor Projektbeginn genau zu
befragen. Das oben dargestellte Datenmodell des operativen Systems und Befragungsergebnisse aus
der Fachabteilung sowie weitere Techniken gehören zu den Mitteln, mit denen man das Analyse- und
Objektmodell erstellt.










Wie ist das Verhältnis von Privat- zu Firmenkunden?
Entspricht dieses Mengen-Verhältnis dem Umsatzverhältnis?
Spielen Kundeneigenschaften wie Berufsgruppe, Wohnsituation, Bildung usw. bei dem
Umsatz eine Rolle? Was sind die Kunden mit den höchsten Umsätzen?
Wie ist der zeitliche Verlauf der Umsatzentwicklung? Gibt es hierbei Verschiebungen bezogen
auf die Kundeneigenschaften?
Können zusätzliche Kundensegmente gebildet werden, wenn z. B. Kundeneigenschaften
zusammengefasst werden?
Gibt es regionale Schwerpunkte bezogen auf Kundenmerkmale?
Gibt es regionale Schwerpunkte bezogen auf Artikel/Artikelgruppen?
Gibt es Zusammenhänge zwischen Kundenmerkmalen und Artikel?
Was sind die umsatzstärksten Artikel? Renner/Pennerlisten?
Gibt es saisonale Einflüssen auf die Umsatzentwicklung in Abhängigkeit von Artikel oder
Kundeneigenschaften?
Das Abfrageschema modellieren (Starschema) – Abfragemodell
Jetzt lässt sich nach dieser Vorarbeit ein Starschema entwerfen.
Denormalisieren (Star und nicht Snowflake)
Eine erste Empfehlung ist das Starschema möglichst eng zu halten, also alle Dimensionsdaten in eine
Tabelle zusammenzufassen: zu denormalisieren. (Ein Starschema im Gegensatz zu einem
normalisiert aufgebauten Snowflake-Schema).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
26/300
Zwei Gründe sprechen dafür:
1. Übersichtlichkeit für die Endanwender
2. Viele performance-optimierende Techniken in der Oracle-Datenbank sind genau auf diese
Modellform abgestimmt
Das bedeutet, dass alle Spezialisierungen von Kunde (Privat und Firma) in einer Tabelle
zusammengefasst sind. Auch Artikel, Artikelgruppe und Artikelsparte sind zusammenzufassen. Was in
dem operativen Modell in drei Tabellen mit 1:n Beziehungen aufgegliedert war, ist in der neuen
Artikeldimension in einer Tabelle zusammengefasst. Zu jedem Artikel sind die zugehörige Gruppe und
die Sparte verzeichnet. Es entstehen Hierarchien innerhalb der Tabelle (Denormalisierung).
Informationsanreicherung
Abfragen nach dem zeitlichen Verlauf oder der Umsatzentwicklung bzw. saisonale Einflüsse fordern
nach einer zusätzlichen „Zeitmeßlatte“, einer Zeitdimension. Die Zeitdimension in diesem Modell ist
vollständig neu. In einem operativen System werden Sie eine solche Tabelle nicht finden. Lediglich
Bestell- und Lieferdatum kommen aus den Bewegungsdaten - der Bestellungs-Tabelle. Die
Zeitdimension ähnelt einem Kalender. Ein Kalender ist hierarchisch aufgebaut und kann zusätzliche
Betrachtungsweisen haben:
Tag > Monat > Quartal > Jahr
Tag > Woche > Jahr
Tag > Quartal > Geschäftsjahr
Tag > Jahreshälfte > Jahr
Auch dies sind denormalisiert in einer Tabelle abgelegte Hierarchien: Zu jedem Tag ist der passende
Monat, das Quartal und das Jahr gespeichert. Die Zeitdimension ist ein gutes Beispiel für mögliche
parallele Hierarchien. Die Reihenfolge Tag > Monat > Quartal > Jahr ist nicht symmetrisch mit der
Reihenfolge Tag > Woche > Jahr, da nicht immer die gleiche Anzahl Wochen in einen Monat passt.
Auch die Zuordnung Geschäftsjahr und Kalenderjahr ist nicht deckungsgleich: ein bestimmter Tag
kann in das Kalenderjahr 2002 aber auch in das Geschäftsjahr 2003 fallen. In diesem Fall redet man
von parallelen Hierarchien.
Das Zielschema des Szenarios (Starschema)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
27/300
Eine weitere Form der Informationsbereicherung stellen Beschreibungstexte dar z. B. die
Beschreibungstexte in der Kundendimension. In operativen Systemen ist oft ein Codewert hinterlegt.
Im Starschema ergänzt man solche Codewerte um sprechende Texte (Branche / Branche_Text).
Auch die Regionen-Tabelle ist neu. Abfragen nach regionalen Schwerpunkten sind oft nur lösbar,
indem man (ähnlich der Zeitdimension) eine Art Regionen-Landkarte im Starschema zusätzlich
aufbaut. Die Tatsache dass ein Kunde in Buxtehude wohnt besagt noch nichts. Erst die Zuordnung zu
einem Landkreis oder sogar Vertriebsgebiet lässt Rückschlüsse zu. Denn solchen globaleren
Einheiten können Sie eindeutigere Eigenschaften zuordnen z. B. Herr Meier ist Vertriebsleiter in
Vertriebsgebiet Region Nord und dort liegt Buxtehude.
Einzelne Werte sind berechnet wie z. B. „Umsatz“. Dies ist nicht der Umsatz pro Bestellung, sonder
der Umsatz pro Artikel pro Bestellposition.
Granularität
Die Granularität der Sätze in der Faktentabelle liegt auf dem Level der Bestellpositionen. Die
Bestellungen selbst sind nicht mehr wieder zu finden. Deswegen muss auch das Feld Umsatz
bezogen auf die Positionen neu berechnet werden. In der Faktentabelle werden meist nur zählbare
Objekte dargestellt, wobei man Abstufungen vorfindet. In dem Beispiel ist der Einzelpreis anders zu
behandeln als der Umsatz. Der Umsatz ist bereits das Ergebnis einer Berechnung aus Preis mal
Menge. Die Summe aller Umsätze pro Artikel pro Tag ergibt folglich ein anderes Ergebnis als die
Summe aller Einzelpreise pro Artikel pro Tag.
Das Mappingmodell
Nachdem das Starschema bzw. Auswertemodell bekannt ist, kann die Suche nach den
Quellstrukturen beginnen. Mit dem Mappingmodell befinden Sie sich schon mitten in der Planung für
den kommenden ETL-Prozess. Die folgende Tabelle stellt eine Art Arbeitsblatt dar. Zunächst listet
man unter Zieltabelle / Objekt alle Zieltabellen auf, in unserem Beispielfall sind das die Tabellen des
Starschemas. Dann sucht man sich die nötigen Quellstrukturen und findet damit auch schon die Art
des technischen Zugriffs. Schließlich legt man die Wandlungsregeln fest. Wenn Sie schon auf der
Suche nach Quelldaten sind, entdecken Sie meist auch Datenmengen und Lade-/Updatezyklen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Quellsystem
Extraktionsart
/
28/300
Objekt/
Tabelle/
Feld 
(Mussfelder)
Kunde
OrtNr
KDNr
Regel
Jeweils nur
Schlüsselfeld
und Textfeld
Lookup
auf
(siehe
rechts)
Nein,
es werden die
Codes
aus
den
Textdateien
übernommen
Textfiles : Orte
D:\Szenario\testdaten
Bestelldatenbank
Oracle
Schema SRC;
Dblink
(Stammdaten)
-
Alle Felder
1:1
Nein
Artikel
Artikelgruppe
Artikelsparte
Join über
alle
Tabellen
Nein,
es werden die
Stammdatennummern
übernommen
-
Prozedur
Create_T
age
Bestelldatenbank
Oracle
Schema SRC;
Dblink
(Stammdaten)
Bestellung
Best_Position
Join

Bestelldatenbank
Oracle
Schema SRC;
Dblink
(Stammdaten)
Textfiles :
Branche,
Berufsgruppe
Ausbildung,
Gehaltsgruppe
Wohnart
D:\Szenario\testdaten
Stand/letzte Änderung 13.05.2016

Umschlüsselung
Zwischen
schritt 
Historisierung
Verfahren
Zieltabelle
Objekt
1:1
Nein
-
Späteres
WarehouseInkrement
Dimension
Kunde
Es wird kein
weiterer
Schlüssel
gebraucht
(in Arbeit)
Tabellen:
Branche
Berufsgruppe
Ausbildung
Gehaltsgruppe
Gehaltsgruppe
Wohnart
Als Referenztabelle in der
Warehouse- Schicht
-

„
Nein
/
Menge /
Anzahl
Zeilen
Ladezyklus
und
Aktion


Ca 1500
Initial +
Jeweils
Nur 10 –
20
Sätze
Täglich
Insert/
Update
Initial
Dimension
Region
Dimension
Artikel
16000
Initial
300
Initial
-
Späteres
WarehouseInkrement
Tabelle
Tage
als
Kalenderreferenztabelle
Im Warehouse
Nein
Dimension
Zeit
4000
(10
Jahre)
Initial
WH_Transaktionen
Nein
Fakten
Umsatz
25000
Initial/
Täglich
Insert
75875104
Oracle Warehouse step-by-step
29/300
Workflow-Modell
Das Workflow-Modell ist das letzte Modell. Hier befinden Sie sich schon fast im Betrieb des Systems.
Wie in einem Projektplan tragen Sie die einzelnen Transformationsroutinen (Mappings) in eine
zeitliche Kette. Alle Abhängigkeiten serialisieren Sie. Parallelläufigkeiten schreiben Sie unter einander.
Checkpunkte und Prüfbedingungen legen den Prozessfortschritt fest.
Solche Modelle lassen sich am grünen Tisch oft nicht bis in letzter Konsequenz erstellen. Sie sind
jedoch ein guter Startpunkt. Der Warehouse Builder bietet für diese Modellart einen optisch
ansprechenden Process-Editor.
b
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
30/300
4. Die Komponenten des Oracle WarehouseKurzübersicht
Die Oracle Datenbank 10g hat sich seit dem Release 7 zur idealen Warehouse-Plattform entwickelt.
Begreifen wir das Warehouse als dynamisches System mit der Notwendigkeit zur Integration vieler
Komponenten, dann unterstützt Oracle 9i mit den vielen integrierten Funktionen diese Anforderung:
 Die Datenbank besitzt eine eigene ETL-Infrastruktur, die das Laden und Bewegen der Daten
innerhalb der Datenbank sehr komfortabel macht. Externe Ladeprogramme sind nicht nötig.
 Die Datenbank besitzt einen eigenen Workflow-Mechanismus um den Warehouse-Prozess zu
automatisieren.
 Komplexe Auswertungen werden durch analytische und statistische Funktionen direkt in der
Datenbank unterstützt.
 Mining ist bei 10g innerhalb der Datenbank möglich.
 Messaging ist integriert um operative Daten auch über Messagingverfahren ins Warehouse zu
laden.
 Die OLAP-Option ermöglichen komplexe Analysen wie Forecasting, Budgetierungen.
 Warehouse Metadaten sind in die Datenbank als neutraler Baustein mit aufgenommen.
 Die Partitioning Option der Datenbank, Bitmap-Indizierung und Materialized Views
unterstützen die Abfrageperformance.
Mit dem Oracle Warehouse Builder (OWB) erstellen Sie ein vollständiges Warehouse–System und
organisieren auch den Betrieb des Systems. Im einzelnen übernimmt OWB:
1. Aufbau des Tabellenwerkes des Warehouses (Create Table/Index/Dimension/Function/Packages
usw.)
2. Bereitstellen der Transformationslogik und Routinen von den Quelldaten aus den operativen
Systemen bis in das Ziel-Data Warehouse hinein (PL/SQL-Routinen).
3. Zugriffslogik auf Quellsysteme (Flat File, ODBC, Gateway).
4. Bereitstellen der Metadaten zur Dokumentation und Beschreibung des Warehouse Systems.
Oracle hat die Abstimmung und Integration der Werkzeuge in den letzten Jahren zunehmend
ausgebaut und verstärkt. Strategisch orientiert sich Oracle an dem CWM-Standard der OMG
(Common Warehouse Metamodel). Durch das Modellieren des Systems mit dem Oracle Warehouse
Builder entstehen Metadaten während Sie das System aufbauen automatisch. Graphisch sind die
Metadaten über eine Weboberfläche allen Warehouse-Benutzern zugänglich. Oracle Workflow
übernimmt die Steuerung der Lade- und Berichtsgenerierung. Der Enterprise Manager erlaubt
Ressourcen Management des gesamten Warehouses. Auch das Kontrollieren des WarehouseBetriebs ist über das Web möglich.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
31/300
5. Aufbau des Data Warehouse-Systems
mit dem Oracle Warehouse Builder (OWB)
Data Warehouse Systeme werden im Regelfall auf der Basis von relationalen Datenbanken
aufgebaut. Oracle ist dabei das meistgenutzte Datenbanksystem.
Daher ist es nur begrüßenswert, dass mit dem Warehouse Builder ein Werkzeug vorliegt, das genau
diese Rahmenbedingungen adressiert:
 Alle benötigten Komponenten arbeiten innerhalb der Datenbank.
 Es wird nur mit Datenbankmitteln gearbeitet (Tabellen, PL/SQL, Indexdefinitionen, Materialized
Views
usw.)
Es sind also keine zusätzlichen Sprachmittel oder Programme außerhalb der Datenbank nötig.
Mit dem Warehouse Builder werden neue Potentiale frei gegeben: Er erlaubt das Erstellen von
PL/SQL-Programm-Code mit graphischen Mitteln und unter Verwendung graphisch angezeigter
Metadaten. Diese Vorgehensweise schafft größere Produktivität bei den Projektmitarbeitern und führt
schneller zu Ergebnissen. Die Übersichtlichkeit der Ergebnisse minimiert den Wartungsaufwand. Der
Oracle Warehouse Builder ist auf allen Ebenen des Warehouse Systems einsetzbar, er kann aus
Quellsystemen extrahieren, er kann Daten prüfen und validieren und sie in beliebigen WarehouseArchitekturen speichern.
Warehouse Life Cycle Management mit WAREHOUSE BUILDER
Warehouse Systeme erstellt man heute inkrementell. Die Projekte bearbeiten nacheinander
Teilbereich für Teilbereich des Unternehmens. Für jedes Inkrement durchläuft ein Projekt dabei
mehrere Phasen:
 Analyse des Informationsbedarfs
 Entwurf/Definition der Warehouse-Struktur (Datenmodelle und Tabellen)
 Erstellen der Ladeläufe zum Befüllen des Warehouses
 Dokumentation des Gesamtsystems (Metadatenkatalog)
(Sehen sie hierzu auch die entsprechenden Vorgehensmodelle für die inkrementelle Warehouse
Entwicklung).
Danach startet der Echtbetrieb des Warehouse-Inkrements und der Wartungsfall beginnt, Änderungen
stellen sich ein und führen zu neuen Versionen. Alle diese Aktivitäten unterstützen der Warehouse
Builder.
Warehouse Life Cycle Management
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
32/300
Aus welchen Objekten besteht ein Oracle Warehouse
Ist das Data Warehouse erstellt so besteht es in der Regel aus folgenden physischen DatenbankObjekten:
 Tabellen, Indexdefinitionen sowie Zuordnung zu Tablespaces mit physischen Parametern
 Views und Materialized Views
 Dimensionstabellen
 Funktionen und Prozeduren (PL/SQL)
 DB-Links
 Sequences
 Loader-Scripte
 External Tables
 Queues
 TCL-Scripte für den Enterprise-Manager
 Oracle Workflow Steuerroutinen
 ....
Vorgehensweise bei dem Aufbau eines Warehouse Systems mit
dem Warehouse Builder
An dieser Stelle schon mal voraus blickend eine Liste mit typische Entwicklungsschritten:
(Schritte 1-3 ohne Warehouse Builder)
1. Analyse der Benutzeranforderungen (Welche Auswertungen benötigt der Fachanwender?)
2. Analyse der Quellsysteme (Wo sind die benötigten Daten?) Bereitstellen des Datenmodelle der
Quellsysteme.
3. Architektur des Warehouses (Es gilt ein System aufzubauen, das einerseits flexible für immer
wieder neue Anforderungen ist, skalierbar für Mengen ist aber auch berichtsübergreifende
Stimmigkeit der Informationen garantiert - siehe die oben genannten Beispielarchitektur)
4. Abbilden der Wunscharchitektur innerhalb des OWB (Definieren der sog. Module, s. u.).
5. Nachdokumentation der Quelldatenstruktur (DB-Kataloge, Flat File Struktur) mit dem OWB
(Import Metadaten).
6. Definition und Aufbau der Zielschemen für Stage/Warehouse (3NF-Modelle)/Data Mart(Star
Schema) je nach Konzept. Die Modelle können natürlich auch alternativ mit
Modellierungswerkzeugen entworfen werden. (Siehe hierzu weiter unten "Exkurs: Woher kommen
oder wie entstehen die Warehouse-Tabellen").
7. Generieren und Anwenden der DDL des Warehouses über den Deployment Manager.
8. Erstellen der sog. Transformationsmappings über die Mapping-Editoren. Bei dem Aufbau des
gesamten Warehouses werden mehrere Mappings entstehen, weil man das Befüllen aller
Tabellen des gesamten Warehouse Systems in mehrere Schritte untergliedert.
9. Generieren und Anwenden der Transformationsroutinen (PL/SQL) mit dem Deployment Manager.
Bei diesem Schritte werden die einzelnen Mappings über Testdatenläufe getestet.
10. Zusammenfassen der einzelnen Mappings zu einem kompletten Ladeszenario. Hierzu erstellen
Sie einen Workflow mit dem Process-Editor.
11. Festlegen des Scheduling.
12. Versorgen von entsprechenden Auswertewerkzeugen mit Metadaten.
Allgemeine Vorgehensweise im Verlauf eines Lade-Prozesses (ETL)
Im Verlauf eines Projektes sind bei der technischen Realisierung des Ladeprozesses immer wieder
ähnliche Schrittfolgen durchzuführen. Diese sind hier zusammengefasst:
1. Entgegennehmen der Quelldaten: Der Extraktvorgang hinterlässt Quelldaten in dem
Eingangsbereich des Data Warehouses (z. B. Stage).
2. Prüfungen auf Vollständigkeit und Richtigkeit der Quelldaten.
a. Anzahl Sätze
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
3.
4.
5.
6.
7.
33/300
b. Gültige Wertebereiche
c. Vorhandensein von Referenzdaten
d. Eventuell Eindeutigkeit
e. ...
Import und Prüfen der Dimensionsdaten
a. Update / Insert / Merge
b. Eventuell Historisierung / Slowly Changing Dimensions
Prüfung der Bewegungsdaten auf Stimmigkeit mit den Dimensionsdaten
a. Anti–Join-Prüfung
b. Event. Fehlertabelle erstellen (zur Nachbearbeitung)
Aufheben der Constraints der Faktentabelle
a. Eventuelles Löschen von Indexeinträgen
b. Eventuelles Aufheben der Fast Refresh Fähigkeit der Materialized Views
Überführung Bewegungsdaten in die Faktentabellen
a. Join mit Dimensionen
Nacharbeiten
a. Aktivierung der Constraints
b. Event. Aktualisierung der Indexe
c. Event. Refresh Materialized Views
d. In Stage-Tabellen diejenigen Sätze entfernen, die geladen wurden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
34/300
Einrichten der OWB Entwicklungsumgebung
Zusammenspiel mit anderen Komponenten
Hier sind alle Komponenten aufgelistet, mit denen der Warehouse Builder zusammenarbeitet:
Sie beginnen mit der Installation des Oracle Warehouse Builder 10g (Teil von Oracle 10g oder als
separate
Software,
die
Sie
als
Download
von
Oracle-OTN
im Web
erhalten
www.oracle.com/otn). Dann können Sie bereits loslegen. Zum Workflow-gesteuerten Ablauf
können Sie den Workflow-Server nachträglich installieren. Oracle Workflow ist eine OracleDatenbank-Komponente, die Sie mit der Datenbank erhalten.
Achten Sie auf die Zertifizierungen, also welche Workflow-Version mit welcher Datenbank-Version
zusammen arbeitet.
Zusätzlich gibt es:
 SQL Loader (optional): Lädt Flat File direkt in die Datenbank (wird seit Oracle 9i durch "External
Tables" ersetzt/ergänzt)
 Gateways (optional): Zu allen gängigen Datenbanken (DB2, SQL Server, Sybase, Informix...)
gibt es sog. Gateways. Diese können über DB-Links mit den Datenbank-Routinen kommunizieren.
 Workflow: Regelt die logische Abfolge der durch den Warehouse Builder erzeugten Mappings.
Innerhalb des WAREHOUSE BUILDER gibt es einen Process-Editor, mit dem Sie einen Workflow
erstellen. Der Workflow läuft dann auf dem Workflow-Server, den Sie bereits mit der Oracle 9i
/10g Datenbank installiert haben.
 Runtime Audit Browser: (Bestandteil des Repository-Browsers). Zur Kontrolle von
stattgefundenen Ladeläufen. Das ist ein Teil des Warehouse Builders, den man über eine Web
Browser aufrufen kann. Hierzu ist keine Installation notwendig. Der Aufruf erfolgt über das
Startmenü des Clients nachdem der OWB Browser Listener zuvor gestartet wurde.
 Repository Browser: (Bestandteil des Repository-Browsers). Dient der Darstellung von
Metadaten im Web. Auch das ist ein Teil des Warehouse Builders, den man über eine Web
Browser aufrufen kann. Hierzu ist keine Installation notwendig. Der Aufruf erfolgt über das
Startmenü des Clients nachdem der OWB Browser Listener zuvor gestartet wurde.
 External Table Technik: Technisches Verfahren in der Datenbank seit dem Release Oracle 9.2
 Steams Verfahren: Message-basiertes Verfahren der Oracle Datenbank seit dem Release Oracle
9.2
 CDC (Change Data Capture): Message-basiertes Verfahren der Oracle Datenbank zum
Auslesen von Oracle-Log-Files seit dem Release Oracle 9.2. Besonders hilfreich bei der
Deltadatenerkennung.
 DataPump: Schnelles Ladeverfahren mit Hilfe von Export/Import (ab Oracle 10g)
 SAP Integrator: Bestandteil des Oracle Warehouse Builder für den SAP R/3 Zugriff über das SAP
R/3-Dictionary.
 Peoplesoft Connector: Bestandteil des Oracle Warehouse Builder für den Peoplesoft-Zugriff
 eBusiness-Suite Connector: Bestandteil des Oracle Warehouse Builder für den PeoplesoftZugriff
 ODBC: Zugriff auf relationale Quellen außerhalb der Oracle Datenbank über einen ODBC-Treiber
 XML-DB: Funktionalität der Oracle Datenbank seit dem Release Oracle 9.2 zum leichten
Bearbeiten von XML-Daten. Wird aus dem Oracle Warehouse Builder heraus angesteuert.
 UTL_File: Technisches Verfahren in der Datenbank zu Beschreiben und Erstellen von Textfiles
 Adapter für Anwendungen wie Peoplesoft, SAP etc: Adapter zum transaktions-basierten
Kommunizieren mit Anwendungen.
 Oracle Data Profiler: Software-gestütztes Analysieren von Datenfehlern (Bestandteil des Oracle
Warehouse Builder)
 (und viele andere Komponenten, die hier nicht erwähnt werden können)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
35/300
Einige Warehouse Builder Komponenten (Übersicht)
Erstellen von
Transformationsmappings
Erkennen von
Strukturabhängigkeiten
mit Hilfe von Metadaten
Anzeigen von
Tabelleninhalten
Aufbau von
Datenflüssen
Starten von Prozessen
Automatisieren von
ETL-Vorgängen
Erkennen von
Datenqualitätsproblemen
Erstellen von
Datenstrukturen
Steuern von
Definieren von
Deployments von
Metadaten-Browser
Qualitätsregeln
Objekten
Einige Editoren des Warehouse Builder zur Durchführung verschiedener Aufgabenstellungen
Versionieren
Komponentenübersicht des Gesamtsystems inkl. Datenbank-Komponenten
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
36/300
Wo ist die Dokumentation zu OWB 10g zu finden?
Auf der Installations-CD befindet sich das Unterverzeichnis PDFDOC. Dort sind die PDF-Dateien:
 OWB10gInstall.pdf
 OWB10gUserGuide.pdf
 OWB10gScriptingReference.pdf (Manual zur Scriptsprache)
 OWB10gTransformationGuide.pdf (Zusammenfassende Beschreibung aller
Transformationen)
 OWB10gDocAddendum.pdf
(Wenn die Dokumentation nicht auf der CD sein sollte, kann sie immer auch von Oracle Technet
(OTN) geladen werden.
Systemanforderungen
(Genaue Angaben in der Installationsanweisung auf der Installations-CD.)
Es wird ca. 700 MB Plattenplatz benötigt.
Ideal ist ein Szenario, bei dem die benötigte Datenbank auf einem separaten Server liegt. Wenn das
der Fall ist, reichen 512 MB bis 1024 MB Hauptspeicher aus (angenehmer sind 1024 MB). Man
bedenke, dass der Warehouse Builder eine Java Entwickler-Oberfläche besitzt, die auch auf anderen
Plattformen laufen kann z. B. Sun Solaris, Linux usw. . Ausreichende Performance in der
Oberflächenbedienung ist bei einem ausreichenden Hauptspeicherausbau gegeben.
Ist die Oberfläche dennoch zu träge, so liegt das in der Regel an zu geringen Speicher-Parameter der
Datenbank. Diese sind zu klein gewählt was oft bei Testinstallationen (und damit gewählter
Standardinstallation) der Fall ist.
Die Client-Software wird auf einem Standard-Windows2000 oder XP-Rechner (Pentium 2 und
aufwärts) (oder SUN-Solaris) installiert. Bzgl. der Datenbank, gibt es keine besonderen
Anforderungen.
Im Verlauf der Installation wird ein Tablespace mit ca. 200 MB Plattenplatz für das MetadatenRepository gebraucht.
Es sollte ein hochauflösender Bildschirm sein, die Größe von 17 oder 19 Zoll ist ideal. Das macht sich
vor allem bei dem Arbeiten in den graphischen Mappings positiv bemerkbar.
Die Installationsschritte des Warehouse Builders in der Übersicht
(Weiter unten gibt es eine detaillierte Installationsbeschreibung.)
Wählen Sie für den Warehouse Builder ein separates Home-Verzeichnis.
Andere Oracle-Werkzeuge sollten nicht gestartet sein, um Fehlermeldungen im Verlauf der Installation
zu vermeiden.
Die Installation (ca. 15 - 30 Min.) besteht aus 5 Schritten die unabhängig von einander durchführbar
sind. Nicht alle Schritte müssen von Beginn an durchgeführt werden:
1. Installation der Software (Setup startet automatisch nach dem Einschieben der CD).
2.
Das Design (Entwicklungs-)Repository. Das wird sinnvollerweise in ein eigenes Oracle-Schema
(z. B. OWB10G) gelegt. Die Installation fragt nach, ob der Benutzer neu angelegt werden soll
oder ein bestehender genutzt wird. In diesem Repository sind sowohl die Design– als auch die
Runtime-Metadaten gespeichert.
 Tip: Während der Repository-Installation werden Datenbankeinstellungen (Init.ora bzw. pfile)
geprüft und Empfehlungen gegeben diese zu korrigieren. Schreiben Sie sich diese Parameter auf und
ändern Sie diese, nachdem Sie die Installation insgesamt beendet haben. Wollen Sie nur üben und
erste Gehversuche mit dem OWB machen, so reichen die Default-Settings aus.
3.
Das Target Schema (auch Repository-User genannt): Das ist das eigentliche WarehouseSchema. D. h. dort werden die Nutzdaten des Warehouses liegen. Den Name dieses Schemas
muss dem Warehouse Builder mitteilen, damit dort z. B. Daten hineingeladen werden können.
Gibt es dieses Schema zum Installationszeitpunkt noch nicht, dann können Sie das Schema
durch die Installationsroutine auch anlegen lassen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
4.
5.
37/300
Workflow Installation (siehe weiter unten).
Optional: Portaleintragungen für die Metadatenauswertungen. Dies ist nur nötig, wenn Metadaten
mittels Web ausgewertet werden sollen. Das kann man praktischerweise in einem späteren
Schritt nach installieren. Die gleichen Informationen erhält man als Entwickler über den
mitgelieferten J2EE-(Java)-Container, der über die Windows-Start-Leiste aufgerufen werden kann
(OWB Browser Listener).
Die Schritte 2-5 können Sie später separat über das Windows-Start-Menu nachfahren.
Achtung: Im Verlauf der System-Installation sollte die Java-Pool-Size in der Init.ora
gesetzt sein, sonst gibt es Fehler (siehe Beispiel init.Ora-Datei im Anhang).
Achtung: Im Verlauf der Installation sollten Sie keine anderen Java-Programme neu
aufrufen. Das kann zu Abbrüchen und Java-Fehlern führen.
Tip: Legen Sie sich zunächst einen separaten Tablespace (ca. 200 MB) für das Warehouse
Builder Repository an und starten Sie danach die Installation. Das ist praktisch, wenn die Daten später
wieder leichter entfernt werden sollen.
Alle weiteren Schritte sind Wizard-geführt.
Übersicht zu den angelegten Benutzern
Hier eine Übersicht aller Benutzer (Datenbankschemen), die exemplarisch zur Durchführung des
Szenarios in dieser Unterlage verwendet werden. In vielen Hard Copies dieser step-by-stepUnterlage finden Sie diese Benutzerdaten. Als Orientierung können sie hilfreich sein. Die meisten
Benutzer werden im Verlauf der Installation automatisch angelegt.
Funktion des Users
Repository-User
Target-Schema (Warehouse)
User
OWB10G
DWH
Source (Quellsysteme)
SRC
Workflow-Schema
OWF_MGR
(Default Name)
Wie und wann entsteht der User
Repository-Assistant
Wahlweise durch Repository -Assistent
(oder manuell)
Ist in der Regel schon da.
(Anlegen manuell siehe unten)
Wird durch den Workflow Configuration
Assistent angelegt. (Zuvor muss der
Workflow-Server (eine Datenbank-Option)
installiert sein.)
Alle Schemen nach Abschluss des Dem –Szenarios.
(Das Bild dient nur der Orientierung. Bitte noch nicht alle Schemen anlegen.)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
38/300
OWB10G
Das ist das Metadaten-Repository des Warehouse-Builders. Es ist auch gleichzeitig das Schema, in
dem alle späteren Laufzeitergebnisse dokumentiert sind. Dieses Schema brauchen Sie also immer:
Zum Entwicklungszeitpunkt und wenn Sie später das mit OWB erstellte Warehouse-System betreiben.
In umfangreicheren Umgebungen kann es durchaus sein, dass es dieses Schema mehrfach geben
wird, z. B. eines für Entwicklungs- und eines für Testzwecke. In unserem einfachen Szenario beginnen
wir erst einmal mit einem Schema
OWF_MGR
Das Workflow-Schema wird benötigt, um die Workflow oder Ladeprozess-Routinen aufzunehmen.
Wenn Sie nur einzelne Mappings ohne Workflow verwenden möchten, brauchten Sie das nicht.
DWH
Dies ist das eigentliche Data Warehouse-Schema. D. h. dort werden alle Warehouse-Daten abgelegt
sein. In dieses Schema generiert OWB auch alle Lade-Routinen. Aus der Sicht des OWB-DesignSchemas ist das DWH-Schema ein Repository-User. Dieser Begriff wird im Verlauf der Installation
verwendet In umfangreichen DWH-Systemen kann es hiervon mehrere geben.
SRC
Dieses Schema ist stellvertretend für ein beliebiges Quellschema, aus dem in dem Szenario Daten
gelesen werden. Dieses wird natürlich nicht durch die Installationsroutine des OWB angelegt. Das
müssen Sie mit dem Script selbst tun.
Hilfsscripte zum Erstellen der Demo-User
-- SRC-User (enthaellt die Quelldaten fuer das Beispiel-Szenario)
CREATE USER "SRC" PROFILE "DEFAULT"
IDENTIFIED BY "SRC" DEFAULT TABLESPACE "DWH"
ACCOUNT UNLOCK;
GRANT "CONNECT" TO "SRC" WITH ADMIN OPTION;
GRANT "DBA" TO "SRC" WITH ADMIN OPTION;
--- DWH-User (das ist das eigentliche Warehouse-Schema)
CREATE USER "DWH" PROFILE "DEFAULT"
IDENTIFIED BY "DWH" DEFAULT TABLESPACE "DWH"
ACCOUNT UNLOCK;
GRANT "CONNECT" TO "DWH" WITH ADMIN OPTION;
GRANT "DBA" TO "DWH" WITH ADMIN OPTION;
-Achtung: wenn das folgende nicht beachtet wird, kann es später im Verlauf des Deployments der
Laderoutinen zu Fehlern kommen.
-- Wenn SRC das Quellschema ist, dann sollten andere User darauf
-- zugreifen können
Connect SRC/SRC@ora92;
Grant select any table to public;
Einlesen der Demodaten
(ausgelieferte Dump-Datei)
für
die
step-by-step-Einführung
Die Beispieldaten für diese step-by-step-Einführung sollten in ein Datenbank-Schema mit dem Namen
SRC (für Source) geladen werden. Diese Daten sind mit denen eines Quellsystems vergleichbar. Sie
erstellen in dieser step-by-step-Einführung Laderoutinen und Transformationen zur Überführung der
Daten des SRC-Schemas in ein Ziel-Datenbankschema, z. B. mit dem Namen DWH.
Erstellen Sie z. B. mit dem Enterprise Manager einen Tablespace SRC (20 MB).
Erstellen Sie einen Benutzer SRC mit DBA-Rechten.
Importieren Sie dann, wie unten stehend, die Testdaten:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
39/300
 IMP (Kommando auf der DOS-Ebene)
 Benutzer : SRC/SRC
/ das ist
Quellschema
 EXPDAT.DMP : SRC_DATEN
 (Bestätigen Sie jetzt alle vorgegebenen Defaults bis auf)
 Benutzer: SRC
 (Und dann wieder alle weiteren Eingaben bestätigen)
Ihr
neuer
Benutzer
für
das
Es müssten geladen werden:
(src_daten.dmp: Schemaname SRC, DBA-Rechte)
Bestellung (~5000)
Best_Position (~20000)
Artikel (~65)
Artikelgruppe (5)
Artikelsparte (3)
Tage (4018)
Kunde (~1950)
Orte (12834)
Kreise (646)
(Die Ortetabelle wird zusätzlich als Textdatei geladen, hierfür sollte eine CSV-Datei bei den
Beispieldaten vorhanden sein)
Wiederholen Sie den Ladevorgang für das Schema DWH und dem Datenbestand DWH_Daten. Die
Daten sind optional. Sie werden für die Übungen nicht benötigt. Damit laden Sie:
(dwh_daten_nur_Referenztabellen.DMP)
Bildung (10)
Berufsgruppe (10)
Branche (10)
Einkommensgruppe (7)
Kundenart (10)
Wohnart (17)
Es gibt weitere Hilfstabellen in Form eines Datenbank–Dumps:
Regionen (12834)
(Wird beim Aufbau des Starschemas gebraucht.)
WH_TRANSAKTIONEN (46035)
(Kann verwendet werden, wenn ein Zwischenstand nicht erstellt wurde, um eine Faktentabelle
zu befüllen).
Es steht auch das fertige Star-Schema-Ergebnis zur Verfügung (Star.DMP), wenn Sie das step-bystep-Szenario nicht selbst aufbauen und stattdessen direkt das Ergebnis laden wollen.
Hier sind enthalten:
(Star.DMP: Schemaname DWH, DBA-Rechte)
DIM_ZEIT (5352)
DIM_REGION (12834)
DIM_KUNDE (1946)
DIM_ARTIKEL (65)
F_UMSATZ (16627)
WH_TRANSAKTIONEN (46035)
Bei der Installation der Datenbank Oracle 10g kann auch ein Beispiel-Starschema (Schemaname SH)
mitinstalliert werden. Diese englisch-sprachigen Daten können Sie natürlich auch nutzen. Allerdings
müssten Sie dann die Beispiele übertragen und Sie haben keine Quelldaten.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
40/300
Unterschiedliche Repository-Benutzer einrichten
Mit dem Warehouse Builder können unterschiedliche Benutzer gleichzeitig arbeiten. Den einzelnen
Benutzern sind unterschiedliche Rechte zuweisbar. Es kann dafür gesorgt werden, dass einzelne
Benutzer z. B. nicht in die Datenbank generieren oder keine Delete–Operation durchführen dürfen.
Für diese Aktivität gab es in früheren OWB-Release Skripte. Ab OWB 10GR2 wird es über die
Oberfläche durchgeführt. Siehe User Guide. Wenn Sie sich nur einarbeiten wollen reicht der Benutzer,
der durch die Installation entsteht.
Die Installationsschritte des OWB im Einzelnen
Diese kurze Installationsanleitung beschreibt das Verfahren auf einem Windows-Standalone-Rechner.
Die Anleitung ersetzt nicht die offizielle Dokumentation. Sie soll helfen möglichst schnell eine OWBInstallation zu Testzwecken einzurichten. Eine ausführliche Installationsanweisung ist in der SoftwareDokumentation enthalten.
Voraussetzungen zur Installation:
Windows-Client (Windows 2000 oder XP), 1 GB Hauptspeicher (Es reichen sicherlich auch 512 MB,
wenn die Datenbank nicht auf demselben Rechner installiert ist. Aber das wird in der Bedienung
deutlich langsamer und kann unangenehme Wartezeiten verursachen), ca. 700 MB Plattenplatz für
die Software,
Zugang zu einer Oracle-Datenbank ab 9.2 und höher, also auch Oracle 10GR1 und R2.
Schalten Sie vor der Installation die Sprache Ihres Rechners auf Englisch. Das ist lediglich eine
Vorsichtsmaßnahme. Wenn Sie die Einstellungen auf Deutsch belassen und die Erstellung des
Repositories später abbricht, dann kann hier die Ursache liegen. Danach können Sie den Rechner
wieder auf Deutsch zurückschalten.
Umschalten der Sprache vor der Installation:
-> Startmenü -> Settings -> Control Panel – Regional Options
Die Datenbank für die Installation vorbereiten
Treten im Verlauf der Installation Warnfenster auf, die Sie auffordern Datenbankparameter zu ändern,
ignorieren Sie diese. Für Testzwecke brauchen Sie keine Änderungen an der Datenbank
vorzunehmen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
41/300
Die Installation besteht aus 2 Schritten:
- Software Installieren: Setup auf der CD aufrufen
- Repository und Target-Schema einrichten: Mit dem Repository Assistenten
Beide Schritte können getrennt voneinander durchgeführt werden.
Ist Schritt 1 erfolgt, kann Schritt 2 beliebig oft wiederholt oder auch rückgängig gemacht werden.
Installationsschritte (Übersicht)
Schritt 1: Software installieren:
Der Installer startet entweder über autorun von selbst, oder Sie rufen die SETUP.EXE–Routine direkt
auf.
Software-Verzeichnis
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
42/300
Schritt 2: Repository Assistant
Nach der Softwareinstallation befinden sich unter dem Start-Menü des Windows-Rechners die OWBKomponenten
Hier ist der Repository-Assistant zu starten.
Next
Wählen Sie hier Advanced Setup. Advanced“ hört sich zwar „kompliziert“ an, ist es aber nicht. Hier
erhalten Sie die beste Übersicht darüber, was Sie konkret tun.
Next
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
43/300
Zum Installieren brauchen Sie die Systemadministratorberechtigung (SYS) zu der Datenbank, in der
Sie den OWB installieren wollen.
NEXT
Wählen Sie die Option „Manage a Warehouse Builder Repository Owner“.
Repository Owner ist das Repository Datenbankschema selbst. Der Repository User (die zweite
Option) wird später das Zielschema oder Data Warehouse-Schema werden, in das der Warehouse
Builder hineinschreibt.
Next
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
44/300
Lassen Sie die Installationsroutine das Schema anlegen, in dem das Repository installiert werden soll.
Wählen Sie „Create a new Warehouse Builder Repository Owner“
Vergeben Sie den Schemanamen für das OWB-Repository. Das wird später das Schema sein, unter
dem Sie sich mit dem Warehouse-Builder Login anmelden (sofern nicht mehrere Entwickler
eingerichtet werden sollen).
Next
Bestätigen Sie das Passwort. OK
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
45/300
Wählen Sie die vorbereiteten Tablespaces für Repository und Index aus. Zu Testzwecken können Sie
auch die Defaults (z. B. USERS) beibehalten.
Next
Als Base Language wählen Sie AMERICAN ENGLISH. Lassen Sie Display Languages leer, also
unberührt.
Next
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
46/300
Jetzt werden Sie nach dem Target User (Ziel-Schema), bzw. Warehouse Builder Repository User,
gefragt. Dieser Begriff ist etwas verwirrend, meint aber den Namen des Target- oder WarehouseSchemas in das später Daten hineingeladen werden sollen.
Haben Sie noch kein Ziel-Schema, so lassen Sie den Assistenten für Sie ein Schema anlegen, also
Create New DB User.
NEXT
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
47/300
(°°°°)Hier heißt das Zielschema DWH_NEU (das Szenario in dieser Unterlage verwendet DWH)
Next
Zur Kontrolle erhalten Sie alle Eintragungen noch einmal. Bei Finish wird das Repository angelegt. Es
ist sinnvoll sich dieses Fenster zu kopieren und sicher zu verwahren. Bei den vielen Schemanamen
kann man sich schon mal vertun.
Die Installation dauert in der Regel 5 – 10 Minuten.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
48/300
Anmeldung
Starten Sie den Warehouse Builder indem Sie das Design Center über das Start Menü aufrufen.
Die Anmeldung erfolgt unter der Angabe des Repository-Schema-Namens und der JDBC–
spezifischen Wahl des Datenbank–Servers. Wählen Sie unter Username den Namen des vorher
eingerichteten Repository Owners:
Es startet das Design Center des OWB:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
49/300
Workflow Installation
Wenn Sie Workflow zusätzlich testen wollen, so ist Workflow als Datenbank-Komponente zu
installieren.
Sie brauchen die Workflow-Server-Komponente. Ab der Datenbankversion 10 ist diese auf der
Companion-Zusatz-CD der Datenbank zu finden.
Folgende Versionen passen zusammen:
Datenbank 9.2 -> Workflow 2.6.2
Datenbank 10.1 -> Workflow 2.6.3
Datenbank 10.2 -> Workflow 2.6.4
Rufen Sie den Installer für die Companion-CD auf und wählen Sie den Workflow-Server aus.
Nachdem der Installationssachritt abgeschlossen ist, müssen Sie noch einmal den Workflow
Configuration Assistenten aufrufen.
In dem folgenden Dialog geben Sie die gewünschten Workflow-Schema-Informationen an.
Wählen Sie den Namen OWF_MGR für das Schema (Default).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
50/300
Bei diesem Vorgang wird lediglich das Schema OFW_MGR in der Datenbank angelegt und
bereits Prozeduren und Tabellen in das neue Schema geladen.
Bei Submit sollte sich ein Fenster mit Protokollmeldungen öffnen:
Hier wartet man 5 –10 Minuten. Danach ist der Vorgang abgeschlossen.
Hintergrund: Was geschieht mit einem Zielschema, das über den Repository Assistenten als
Repository-User gekennzeichnet wird?
Es wird genau 1 Tabelle mit 1 Spalten und 1 Zeile angelegt:
An dieser Stelle steht die Versionsnummer des OWB-Repositories. Hiermit kann der DeploymentVorgang prüfen, ob es eine Konsistenz zwischen dem Zielschema und dem Repository gibt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
51/300
Und es gibt ganz viele Synonyme: Über diese Synonyme erhalten die später in dem Zielschema
befindlichen Prozeduren (Packages) den Zugriff auf die verwaltenden Runtime-Tabellen des
Warehouse Builder Repositories.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
52/300
Erste Schritte
Die Ausgangsituation nach der Installation
Wenn Sie alle vorgenannten Installationsschritte und das Laden der Testdaten durchgeführt haben,
müsste Ihre Umgebung jetzt so aussehen:
Ausgangssituation nach der Installation:



Das Warehouse Builder-Repository ist installiert (Schema im Beispiel: OWBR2)
Es gibt ein erstes – noch leeres – Default-Projekt „My_Project“.
Es gibt ein Quell-System vom Typ Oracle 10g (Schema im Beispiel: SRC)
mit den Beispieltabellen (z. B. Bestellung, Best_Position usw.).
Es gibt ein Ziel-System vom Typ Oracle 10g (Schema im Beispiel: DWH) in dem Sie eventuell
auch schon den Testdatenbestand (Berufsgruppe usw.) geladen haben.
OWB starten
Aufruf des OWB Client über das Start-Menu (Siehe Bild).
Starten Sie den Oracle Warehouse Builder über die Option Design Center in Windows.
Es erscheint ein kurzer Dialog, über den Sie sich an dem im Verlauf der Installation erstellten
Repository anmelden. Tragen Sie die Zugangsdaten ein. Über Show Details werden die
Maschinendaten eingegeben.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
53/300
Tip: Legen Sie sich diesen Aufruf in einen
separaten Arbeitsordner. Das Suchen der
Aufrufoption über das Startmenü ist ansonsten
immer sehr aufwendig.
Achtung: Die Anmeldung erfolgt nicht an dem Datenbankschema, in dem das Warehouse
eingerichtet wird. Es ist das Repository-Schema, in das der Warehouse Builder die WarehouseModelle (Metadaten) speichert.
Die Bedienoberfläche des Warehouse Builders erscheint. Wie Sie sofort sehen, ist die komplette
Menu-Oberfläche in deutscher Sprache formuliert. Entsteht jetzt das Bedürfnis, das Ganze in Englisch
zu sehen, so sollte jetzt sofort eine andere Spracheinstellung gewählt werden. Das ist auch schon
aufgrund der hier abgedruckten, englischsprachigen Hardcopies hilfreich.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
54/300
Der erste Bildschirm nach dem Aufruf
Englische Bedienerführung einschalten?
Sind die Menupunkte jetzt in deutscher Sprache, so ist es sinnvoll, die Oberfläche in die englische
Sprache umzuschalten. Denn viele Hilfen und Hinweise auch in dieser Unterlage sind in englischer
Sprache verfasst.
Unter <Werkzeuge> den Punkt Voreinstellungen wählen:
Unter Locale die Sprache English_United_States auswählen. Ein Fenster erscheint mit der Frage,
ob Sie OWB neu starten wollen. Bestätigen Sie das mit JA und starten Sie WAREHOUSE BUILDER
auch wirklich neu. Es findet kein automatischer Restart statt. Danach sollte alles auf Englisch sein.
Wenn nicht, sollten Sie die Spracheinstellungen an Ihrem PC modifizieren.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
55/300
Eine erste Übersicht
Hier eine Übersicht über den ersten Bildschirm. Aktivieren Sie hierzu das zusätzliche OMB*PlusFenster über den Menüpunkt Window. Jetzt sind 4 Fenster geöffnet, die Sie natürlich nicht immer alle
gleichzeitig brauchen werden. Aber sie sollten einmal erklärt werden. Zunächst einmal ist die
Anordnung der Fenster wahlfrei: Sie können sie über die Kopfleiste überall positionieren.
Project-Explorer
Das wichtigste Fenster ist der Project-Explorer. Wie es der Name bereits sagt, wird hier die
Projektarbeit stattfinden. Die übrigen Fenster stellen Hilfsfunktionen dar.
Connection Explorer
Hier sind die sogenannten Locations zu finden. Über Locations legt man fest, auf welchen Rechnern
welche Datenbanken und Datenbankschemen zu finden sind. Locations stellen die Verbindungen
zwischen den Warehouse Builder-Modellen und der tatsächlichen Physik dar. Sie können später
keinen Deploy-Vorgang in eine Datenbank durchführen, ohne zuvor eine Location für diese
Datenbank sauber definiert zu haben.
Global Explorer
Hier sind allgemeingültige (projektübergreifende) Objektdefinitionen zusammengefasst. Hier werden z.
B. Benutzer und Rollen definiert. Aber auch public Funktionen und Prozeduren sind hier zu finden.
OMB*Plus
Dieses Fenster stellt eine Kommandozeile bereit, um OWB im Kommandomodus zu bedienen. Alle
graphischen Aktivitäten über die Oberfläche können auch über die sogenannte OMB-Skriptsprache
durchgeführt werden. Damit werden viele Vorgänge automatisierbar. Diese Scriptsprache ist sehr
praktisch. Aber auch etwas für „höhere Semester“. Bei den ersten Schritten brauchen wir sie noch
nicht.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
56/300
Der Project Explorer
Der Project Explorer listet die verschiedenen Projekte auf. Projekte sind völlig selbständige Einheiten
(mit Ausnahme der Objekte, die unter dem Global Explorer zu finden sind). Hier eine kurze
Darstellung der Unterpunkte in jedem Projekt.
Definition von Quell- und Zielstrukturen,
Die Komponenten werden Module genannt.
Quellen können sein Oracle-Datenbanken oder
Datenbanken von anderen Herstellern, sowie
Flat Files. Datenbanken anderer Hersteller
werden über Gateways angeschlossen.
Alle Module können sowohl lesend als auch
schreibend verwendet werden.
Spezielle Transportmodule für schnelles Laden
Schnittstellen zu ERP-Systemen
Data Quality-Komponenten, Regelbausteine und
Data Profiler
Wiederverwendbare Mapping-Komponenten
Workflow und Prozesssteuerung
Scheduling / Kalender
Schnittstellen zu Oracle BI
ETL Makros
Konfiguration von
Komponenten
Locations
und
anderen
Module ordnen das Projekt
Alle Aktivitäten innerhalb des Warehouse Builders spielen sich in dem Rahmen von Modulen ab. Die
Module stellen eine Art Fenster dar, durch das man einen bestimmten Ausschnitt des Quell- und des
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
57/300
Warehouse Systems betrachten kann. Sie unterteilen das Gesamtsystem auf einer logischen Ebene
nach Gesichtspunkten, wie sie der Data Warehouse-Architekt festlegt.
Die Module sind Repository-gesteuert. Alle Änderungen, die Sie an Objekten innerhalb eines Moduls
vornehmen, überträgt der Warehouse Builder automatisch auch die anderen Module, wenn dort
dieselben Objekte vorkommen. Löschen Sie eine Column in einer Tabelle KUNDE in dem Modul A, so
finden Sie die geänderte Tabelle KUNDE auch in einem Modul B wieder (Refresh Button
drücken).
Sinnvollerweise folgt die Moduleinteilung der Architektur des Warehouse Systems. Eine klassische
Architektur für ein unternehmensweites Warehouse sieht also wie folgt aus: Es gibt ein oder mehrere
Module für die Vorsysteme, eines für eine mögliche Staging Area, eines für das eigentliche
Warehouse und eines oder mehrere für mögliche Data Marts. Es entsteht automatisch eine Sortierung
und Übersicht über das Warehouse System.
In dem Warehouse Builder-Gesamtmodell fügen sich die Module in eine Hierarchie von mehreren
Objekten ein: Projekte, Module, Dimensionen usw. (siehe Bild).
Die Collections durchbrechen diese Objekthierarchie. In Collections fassen Sie beliebige Objekte nach
fachlichen Anforderungen zusammen. Beide Konzepte zusammengenommen ergänzen sich
hervorragend.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
58/300
Quell- oder Zielmodul?
Die Module unterscheiden nicht danach, ob sie als Quell- oder Zielmodul verwendet werden. Sie
können immer beides sein. Es gibt allerdings Ausnahmen: Die ERP- Module können nur lesend
verwendet werden.
Ohne Locations – läuft nichts
Bevor wir mit der eigentlichen Arbeit beginnen, müssen die Locations erklärt werden.
Locations treten bei dem Warehouse Builder an nahezu allen Stellen auf. Das Konzept der Locations
muss man einmal verstanden haben, wenn man erfolgreich mit dem OWB arbeitet will. Das heißt,
dass die meisten Fehler, die man zu Beginn mit dem OWB machen kann, aus dem falschen Umgang
mit den Locations herrühren.
Locations stellen kurz gesagt die Verbindung der OWB-Modelle und OWB-Objekte mit der Außenwelt
dar. Einige Beispiele:
 Soll eine Tabelle in eine Datenbank generiert werden, so muss man die konkrete Tabelle über
eine Location bekannt machen.
 Soll ein Datenbankkatalog eines Quellsystems gelesen werden, so ist über eine Location das
Quellsystem zu bezeichnen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
59/300
Locationen
sind
Objekte
innerhalb
des
Warehouse Builder-Metamodells und haben
immer einen Namen.
Alle Locations sind im Connection Explorer
aufgelistet. Dort können sie auch editiert werden.
Locations besitzen die physischen ConnectionInformationen zu den Quell- und Zielsystemen. Z.
B. erfordert eine Datenbank-Connection die
Informationen:
Schemadaten, Hostname, Port, Service-Name
Beispieleditor einer Location für ein Oracle
Datenbankschema
Aufgeklappter Baum des Connection Explorers
Connections müssen den Objekten zugewiesen
werden, die sie verwenden sollen. In der Regel
wird man bereits beim Erfassen von diesen
Objekten (z. B. Module) aufgefordert, eine
passende Location anzugeben.
Die Locations haben es in sich:
Wenn gerade bei der Generierung unerwartete Fehler auftreten, hilft es oft, die entsprechende
Location komplett zu löschen und neu anzulegen.
Die Locations finden ihren Hauptanwendungsbereich in dem
Generierungszwecke und zum Starten der Ladejobs verwendet wird.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
Control
Center,
das
für
75875104
Oracle Warehouse step-by-step
60/300
Die Beschreibung des ersten Quellsystems
Der erste Schritt bei dem Aufbau eines Data Warehouse-Systems ist immer die Identifizierung der
benötigten Quelldaten. Hierzu müssen Sie ein erstes Modul anlegen. Das oben beschriebene
Quelldatenmodelle und das angestrebte Zielmodell in dem hier vorgestellten Szenario hat die Form:
Quell- und Zielmodell des Szenarios
Nach dem erfolgreichen Laden der Beispieldaten befindet sich das Quellmodell in dem OracleDatenbankschema SRC. Das Zielmodell soll in dem Schema DWH neu aufgebaut werden. Darüber
hinaus entstehen noch weitere Tabellen als Zwischenstufen.
Bei der Festlegung der Module haben wir zwei Alternativen:
1. Wir wählen nur ein einziges Modul für das Quell- Zielschema oder
2. wir wählen für jedes Schema ein separates Modul.
Technisch wäre die Option 1 gut möglich. Aber praktisch wäre es nicht. Wir sollten das Warehouse
Builder Modell von Beginn für ein mögliches Wachstum flexibel halten und für jedes Quellsystem ein
eigenes Modul wählen. Und dann sollte es weitere Module geben, in denen aus den Quellmodulen
gelesen wird.
Das folgende Szenario ist sinnvoll:
Es wird ein erstes Modul „Bestellsystem“ erzeugt. Dieses bezieht über die Location LC_SRC die
Metadatenbeschreibungen (Tabellenbeschreibungen) des Quelldatenmodells aus dem Schema SRC.
Mehr macht dieses Modul nicht. Es wird nur zur Dokumentation der Tabellen im Quellsystem
verwendet. Das Module „Warehouse“ wird die eigentliche Transformationsarbeit übernehmen. Es
verwendet die Tabellenbeschreibungen des Quellsystems wie sie über das Modul „Bestellsystem“
geliefert werden. Das Mapping (AB) legt eine Transformation fest. Das Modul Warehouse ist über die
Location LC_DWH mit dem Zielschema DWH verbunden. Dort wird hineingeschrieben.
Die Locations LC_SRC und LC_DWH übernehmen unterschiedliche Aufgaben. Doch hierzu später.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
61/300
Commit aller Änderungen
Bevor Sie mit den ersten Schritten beginnen, bedenken Sie, dass alles, was Sie neu erstellen oder
ändern, noch nicht gesichert in dem Repository in der Datenbank abgelegt ist. Das ist erst der Fall,
wenn Sie den sog. Commit-Knopf zu drücken
(befindet sich im Kopfbereich des Design
Centers). Der Warehouse Builder arbeitet zwar sehr zuverlässig und stürzt so gut wie nie ab (kommt
wirklich nicht vor, Java-Code!). Es könnte jedoch die Datenbankverbindung zu dem Repository
wegfallen und damit wären alle nicht "Committeten" Änderungen verloren. Natürlich steht auch
Rollback unter dem Menüpunkt Project zur Verfügung.
Definieren eines Source-Moduls für eine Oracle-Datenbankquelle











Beginnen Sie in dem Project Explorer.
Aktivieren Sie das Projekt MY_PROJECT. Das ist das Default-Projekt. Wenn Sie sich fit genug
fühlen, können Sie auch ein eigenes Projekt definieren. Zum Üben ist das aber nicht nötig.
Klappen Sie Databases auf.
Erzeugen Sie ein neues Modul: Rechte Maustaste auf Oracle und wählen Sie New. Ein Wizard
führt Sie durch den Erstellungsvorgang.
Vergeben Sie den Namen Bestellsystem.
Ignorieren Sie die Option „Identify the module type“. Sie hat nur dokumentarischen Wert.
Next.
Jetzt werden Sie aufgefordert, die Connection Informationen zu dem Quellschema anzugeben.
Sie brauchen also eine gültige Location.
Drücken Sie auf Edit.
Ändern Sie den vorgeschlagenen Namen der Location (BESTELLDATEN_LOCATION1) auf den
kürzeren Namen LC_SRC. Dieser Name wird später Bestandteil von anderen Objektnamen
werden, z. B. DB Link Namen. Wenn der Name jetzt schon so lang ist, kann es später zu
Problemen führen.
Füllen Sie die entsprechenden Felder aus. Für unser Beispiel reicht: User name /Password / Host
/ Port / Service Name. Wählen Sie auch die passende Datenbankversion des Quellsystems.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
62/300
Festlegen der Location-Informationen für das Modul SRC


Testen Sie die Connection. Machen Sie es jetzt, denn es verhindert später Fehler.
Finish Den Metadaten Import machen wir separat.
Ergebnis:
Sie sollten jetzt in dem Projekt Explorer unter dem Punkt Oracle das Modul SRC finden und in dem
Connection Explorer unter Locations/Databases/Oracle die Location LC_SRC.
Auslesen von Tabellenbeschreibungen (Metadaten) aus einer
Quelldatenbank
Das eben erstellte Modul ist noch "leer". Es stellt eine Art Container dar, der jetzt bereit ist die
Tabellenbeschreibungen aufzunehmen. Diesen Schritt nennt man Import der Metadaten.





Rechte Maustaste auf Objekt Bestellsystem.
Option Import.
Der Metadaten Import-Wizard erscheint.
Es erscheinen Optionen mit Datenbank-Objekten. Lassen Sie die Häkchen im Default gesetzt und
drücken Sie gleich auf Next.
Wählen Sie die Option Table. Next.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
63/300
Importierbare Objekttypen
Im unteren Bereich finden sie die Optionen:
None:
Keine referenzierten Tabellen
One Level:
Zusätzlich importiert OWB die Parent-Tabellen der von Beziehungen
All Level:
OWB wertet alle Beziehungen auch über mehrere Tabellen hinaus verzweigte
Beziehungen aus.
Selektieren einzelner Tabellen, von denen die Metadaten zu importieren sind




Belassen Sie es bei One Level.
Klappen Sie das +-Zeichen vor Tables auf und es sollten alle Tabellen aus dem Source-Schema
SRC aufgelistet werden.
Selektieren Sie die Tabellen BEST_POSITIONEN und BESTELLUNG und schieben Sie die
Tabellen mit dem Pfeil-Symbol > in das rechte Feld
Beenden Sie den Dialog mit Next, Finish und OK.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

64/300
Überprüfen Sie die Existenz der Tabellen in dem Modul BESTELLDATEN.
Das Ergebnis sieht jetzt so aus:
Aufgeklapptes Modul
Das neu entstandene Modul besitzt die folgenden Objekttypen:
 Es besitzt zusätzliche Objekte wie:
 Table
 Dimensions
 Cubes (das sind Fakten-Tabellen)
 Views und Materialized Views
 External Tables
 (Advanced) Queues
 Mappings
 Transformations
 Sequences
 User Defined Types
 Data Auditors
Ein zweites Modul für die Warehouse-Tabellen erstellen
Wie oben bereits ausgeführt, sollen die eigentlichen Warehouse-Objekte in einem zweiten Modul
definiert werden. In diesem zweiten Modul wird die eigentliche Arbeit stattfinden.





Erzeugen Sie sich ein neues Modul mit dem Namen Warehouse.
Definieren Sie aber jetzt eine Location LC_DWH, die auf das Schema DWH zeigt. Dieser Vorgang
ist analog zu dem oben beschriebenen durch zuführen.
Bestätigen Sie alle weiteren Voreinstellungen (OK, Finish usw.).
Lassen Sie sich das neue Modul anzeigen (Doppelklick auf den Namen).
Überprüfen Sie auch die Existenz der neuen Location LC_DWH im Connect Explorer.
Exkurs 1: Ein genauer Blick auf Module und Locations
Module können über zwei Locations verfügen. Öffnen sie hierfür den Modul-Editor
 Rechte Maustaste auf das Modul Warehouse.
 Open Editor.
Sie sehen ein Fenster mit den 3 Reitern:
- Name (ist selbstredend)
- Metadata Location
- Data Location
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
65/300
Die beiden Location-Reiter sollten Sie näher betrachten. Der Metadata Location-Reiter zeigt auf das
Datenbank-Schema aus dem für dieses Modul z. B. Tabellenbeschreibungen gelesen werden können.
Die List-Box zeigt auf LC_DWH. Sie könnten hier auch umschalten und das Schema SRC einstellen.
Den praktischen Nutzen werden wir später erkennen.
Der Data Location-Reiter zeigt auf das Schema in das später generiert werden kann. Hier steht die
Location auch auf LC_DWH.
Exkurs 2: Woher kommen oder wie entstehen die Warehouse
Tabellen?
Es gibt 4 Wege, um diese zu erstellen:
1. Es
gibt
bereits
ein
Warehouse
mit
einer
bestehenden
Tabellenstruktur
-> dann sind die benötigten Tabellen über den Import-Mechanismus zu laden:
 Rechte Maustaste auf den Modulnamen -> Import über den entsprechenden Pull DownMenüpunkt Import.
 Alternativ wird an verschiedenen Stellen diese Import-Option angeboten. Meist immer
dann, wenn man sie tatsächlich braucht. Das finden Sie selbst heraus.
2. Es gibt Datenmodelle in Datenmodellierungstools. Hier hilft man sich ebenfalls mit dem
vorgenannten Importmechanismus. Für ERwin und Power Designer starten Sie allerdings eine
"Bridge". Oracle Designer-Datenmodelle übernehmen Sie, indem Sie den Metadaten-Importpfad
eines Moduls umstellen auf „Oracle Designer Repository“.
 Rechte Maustaste auf den Modulnamen -> Open Editor. -> Reiter Metadata Location ->
Source Type
3. Neuerstellen per Hand. Hierzu nutzen Sie den Data Object Editor
 Rechte Maustaste auf Tables im Modulfenster. -> New.
4. Neuerstellen als Kopie aus einer bestehenden Tabelle.
 Rechte Maustaste auf eine Tabelle, die Ihnen als Vorlage dient. Option Copy und dann
Paste.
5. Erstellen einer neuen Tabelle über den Mapping-Editor während man ein Mapping erstellt.
6. Die einfachste Variante ist das "On-the-Fly"-Erstellen im Verlauf des interativen
Entwicklungsprozesses des Warehouses. Dies kommt der Praxis der Warehouse-Entwicklung
auch am nächsten. Hierbei definieren Sie die Tabellen Zug um Zug und zwar dann, wenn Sie sie
brauchen. Natürlich ist es sinnvoll im Vorfeld der Entwicklung durch eine
Informationsbedarfsanalyse ein Datenmodell zu erstellen. In der Praxis wird man aber diese so
erstellten Modelle immer wieder ändern, weil sich unvorhergesehene Umstände im Verlauf der
Entwicklungsarbeit ergeben haben.
Sicherlich wird es immer wieder zu einer Mischung aus den genannten Möglichkeiten
kommen. Wichtig ist festzuhalten, dass jederzeit alle Wege offen stehen, und man keinen
Einschränkungen unterliegt. Letztlich entscheidet die Vorgehensweise im Projekt. Die
Erfahrung zeigt jedoch, dass in der Praxis immer mehr „hemdsärmelig“ entwickelt wird, weil
oftmals die Zeit für aufwendiges Projektmanagement bzw. starr getrennte Projektphasen fehlt.
Aus diesem Grund ist es gut ein Werkzeug zu haben, das einerseits genügend Freiräume für
flexible Projektgestaltung lässt, andererseits den nötigen Rahmen liefert um die Ergebnisse zu
dokumentieren.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
66/300
Ein erstes Mapping erstellen
Mappings nutzen Sie, um Datenflüsse graphisch festzulegen. Mappings sind die Kernbausteine des
Ladeprozesses. In den Mappings nutzen Sie Operatoren als graphische Komponenten. Mappings
werden später zu Prozessflüssen (Workflow) zusammengefasst.
Beispielanforderung:
Fassen Sie alle Sätze aus den beiden Tabellen BESTELLUNG und BEST_POSITION zu einer
einzigen neu zu erstellenden Tabelle WH_TRANSAKTIONEN zusammen.
Berücksichtigen Sie hierbei die Parent/Child-Beziehung zwischen beiden Quelltabellen.




Öffnen Sie das neu angelegte Modul „Warehouse“.
Erzeugen Sie ein Mapping: Rechte Maustaste auf Mappings -> New
Vergeben den Namen MP_Transaktionen und drücken Sie OK.
Der Mapping-Editor für das neue Mapping startet.
Eine „Rundtour“ durch den Mapping-Editor
Der Mapping-Editor soll zunächst erklärt werden. Selektieren Sie hierzu unter dem Auswahlpunkt
„Window“ alle Optionen, damit alle Teilfenster sichtbar sind. Das sind
- Explorer
- Palette
- Property Inspector
- Birds Eye View
- Generation Results
- Data Viewer.
Danach sieht Ihr Bildschirm etwas überfüllt aus. Bedenken Sie jedoch, dass die meisten Fenster bei
der normalen Arbeit geschlossen bleiben und nur fallweise geöffnet sind. Alle Fenster sind „dockable“.
Sie können sie also an beliebigen Stellen positionieren und auch am Rand „festdocken“.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
67/300
Mapping Editor mit allen geöffneten Fenstern
Die einzelnen Fenster sollen hier kurz vorgestellt werden, bevor wir sie später benutzen.
Der Explorer (1)
Der Explorer hat zwei Aufgaben:
Zum einen listet er alle Objekte aus allen Modulen auf, die man mit „Drag and Drop“ in den MappingEditor ziehen kann (Fußreiter Available Objects). Zum anderen listet er alle bislang benutzten
Objekte im Mappingeditor auf (Fussreiter Selected Objects).
Ein kleines Beispiel:
 Klicken Sie auf Available Objects.
 Öffnen Sie in dem Baum den Punkt „Databases / Oracle / SRC / Tables“.
 Markieren Sie die Tabellen „Bestellung“ und „Best_Position“.
 Ziehen Sie diese Objekte mit der linken gedrückten Maus in das Mapping-Fenster.
 Warten Sie etwas. Nach einem Augenblick erscheint ein Tabellenobjekt in dem Fenster.
 Drücken Sie den Knopf „Auto Layout“ in der Menüleiste.

Zwei Tabellen erscheinen senkrecht übereinander. Wenn Sie die Tabellen nicht richtig sehen,
drücken Sie noch auf den Knopf „Fit in Window“.




Über die + und – Tasten können Sie zusätzlich die Sicht verändern.
Klicken Sie jetzt in dem Explorer-Fenster auf Selected Objects.
Sie werden die Auflistung der beiden Tabellen sehen.
Klicken Sie abwechselnd auf jeweils einen der beiden Tabellennamen und Sie werden sehen, wie
sich die gewählte Tabelle im Mapping-Fenster in den Mittelpunkt schiebt.
Bei zwei Tabellen ist das keine große Hilfe. Aber man kann sich vorstellen, dass diese Funktion in
komplexen Mapping mit 100 und mehr Operatoren eine große Orientierungshilfe darstellt.
Mapping (5)
Dieses Fenster ist das eigentliche Arbeitsfenster. Dieses Fenster lässt sich auch nicht schließen oder
wegklappen (macht auch keinen Sinn).
Sie haben die beiden Tabellen in den Mapping-Bereich gezogen. Anhand dieser Tabellenobjekte
lassen sich grundlegende Dinge bzgl. der Darstellung der Operatoren erklären. Die Operatoren
können haben:
- einen Kopfbereich mit dem Namen des Objektes,
- einen Gruppenbereich (z. B. INGR1, INOUTGRP1, OUTGRP1 usw.) und
- bei aufgeklappten Gruppen sind Felder sichtbar.
Wenn Sie mit der Maus die jeweiligen Bereiche selektieren, werden Sie feststellen, dass sich die
Inhalte des Properties-Fensters (2) ändern. Im Properties-Fenster bekommen Sie immer die
Information zu den aktuell selektierten Objekten angezeigt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
68/300
Informationen rund den Tabellenoperator
Die Darstellung des Operators lässt sich ändern. Wählen Sie hierzu die View Option „Options“.
Einstelloptionen zur Darstellung des Tabellenoperators
Birds Eye View (3)
Der Birds Eye View stellt eine weitere Orientierungshilfe da.
 Versuchen Sie mit der Maus den blauen Rahmen groß und klein zu ziehen.
 Verschieben Sie den blauen Rahmen.
 Versuchen Sie mit gedrückter linker Maustaste den Fokus zu vergrößern bzw. zu verkleinern.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
69/300
Data Viewer (6)
Der Data Viewer erlaubt Ihnen einen Blick auf die Tabelleninhalte.
 Markieren sie hierzu eine Tabelle.
 Drücken Sie in dem Data Viewer auf „Execute Query“
Sie werden die ersten 100 Sätze der gewählten Tabelle sehen.
Tip: Diese Funktion ist sehr praktisch, wenn man Formatwandlungen durchführen möchte und
nicht genau über die Quellformate Bescheid weiß.
Properties Inspector (2)
Der Properties Inspector liefert Einstellmöglichkeiten und Eigenschaften zu den in dem MappingFenster selektierten Operatoren. Dieses Fenster ist kontextsensitiv und ändert sich immer dann, wenn
Sie ein anderes Objekt selektieren. Der Properties Inspector ist wichtig, weil Sie hier oft notwendige
Funktionen finden, z. B. die Reihenfolge der zu beschreibenden Zieltabellen.
Generation Results (7)
Dieses Fenster liefert ad hoc-generierten Code. Dieser Code ist eine wichtige Hilfestellung für den
Entwickler, um eine gewisse „Vorahnung“ zu dem späteren tatsächlichen Code zu gewinnen. Diese
Funktion wird später noch einmal genauer erklärt.
Palette (4)
Hier sind alle zur Verfügung stehenden Operatoren zusammengefasst.
Zum Kennenlernen der Operatoren schließen Sie am besten alle anderen Fenster, denn die Liste ist
sehr lang. Im Kopf der Palette ist eine kleine Selektionslistbox versteckt.
 Klicken Sie auf All, und Sie sehen eine Clusterung der Operatoren:
Hier eine Liste der Operatoren mit einer kurzen Erklärung:
Source- und Target-Operatoren
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
70/300
Datenfluss – oder Transformationsoperatoren
Vor- und Nachverarbeitung
Wiederverwendbare Mapping-Bausteine
Das Mapping aufbauen
Doch nun zu dem Mapping. In dem Mapping-Fenster sind bereits die beiden Tabellen BESTELLUNG
und BEST_POSITION. Um das Mapping zu einem funktionsfähigen Mapping zu machen, müssen die
beiden Tabellen „verjoint“ und das Ergebnis in eine Zieltabelle geladen werden. Die Zieltabelle ist
noch nicht da.
 Öffnen Sie das Paletten-Unterfenster „Transformationen“
 Selektieren Sie den Joiner-Operator und ziehen Sie ihn rechts neben die bereits bestehenden
Tabellen in das Mapping-Fenster.
 Der Joiner-Operator hat 2 Eingabebereiche ( INGRP1 / 2) und einen Ausgabebereich (OUTGR1)
 Überführen Sie mit „Drag and Drop“ die INOUTGRP1-Bereiche aus den beiden Tabellenbereichen
auf die INGRP-Bereiche des Joiner-Operators.
 Klappen Sie den Joiner vollständig auf (Pfeil im Kopfbereich).
 Sie sehen jetzt den OUTGRP1-Bereich des Joiners angefüllt mit den Spaltennamen aus den
beiden Eingabebereichen. Bei doppelten Namen wird eine „1“ angehängt.
Sie müssen jetzt noch die Join-Bedingung festgelegen:
 Markieren Sie den Kopfbereich des Joiners.
 Sie sehen in dem Joiner-Properties-Fenster ein leeres Feld „Join Condition“.
 Selektieren Sie mit der Maus in dieses leere Feld. Es erscheinen 3 Punkte im rechten
Feldbereich.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

71/300
Selektieren Sie die 3 Punkte und der Expression Builder erscheint.
Expression Builder
Der Expression Builder erscheint an mehreren Stellen im Warehouse Builder. Er erscheint immer
dann, wenn nähere Einstellungen in einem SQL-Befehl zu machen sind, also z. B. eine WHEREBedingung oder eine Expression. In der Regel hat man im linken Bereich zwei Reiter, einen für die
Input-Felder und einen für die zur Verfügung stehenden Funktionen (Transformationen). Durch
Doppelklick gelangen die passenden Feldnamen von der linken in die rechte Hälfte. Eine Validierung
des Ausdrucks kann man auch vornehmen.
 Machen Sie nacheinander einen Doppelklick auf die Felder BESTELLNR. Verbinden Sie beide mit
einem Gleichheitszeichen.
 OK.
Tip: Die Namen INGRP1 und INGRP2 sind nicht sprechend, vor allem, wenn Sie im
Expression-Editor bei aufwendigen Join-Bedingungen die passenden Felder suchen.
Benennen Sie diese Namen einfach um:

Rechte Maustaste auf den Kopf des Joiners „Open Details“ und unter Groups die
Namen einfach überschreiben. Z. B. in „Best“ und „Pos“.
Bedenken Sie, dass diese Namen auch später in den PL/SQL-Code mit hinein generiert
werden. Mit solchen Namen wird der Code leserlicher.
Das fertige Mapping sieht jetzt so aus:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
72/300
Das erste Mapping
Wechselspiel logisch/physisch oder Mapping / Modul
In dem Mappingeditor ist jetzt eine neue Tabelle entstanden, die wir gerne in der Datenbank
wiederfinden möchten. Aber: Schieben Sie zur Kontrolle das Mapping-Fenster zur Seite, und
kontrollieren Sie das Fenster des Moduls Warehouse. Sie werden die neue Tabelle
WH_TRANSAKTIONEN nicht finden.
Dieses Verhalten zu verstehen, ist für den weiteren Verlauf sehr wichtig, denn es gehört zur
grundlegenden Mechanik des Mapping-Editors:
Der Warehouse Builder unterscheidet zwischen sog. physischen und logischen Objekt-(Tabellen-)
strukturen.
 Unter dem Punkt Table im Modulfenster sind alle Tabellen in ihrer physischen Struktur
aufgelistet. So wie sie dort aufgelistet sind, sind diese auch in dem OWB-Repository gespeichert
und können von dort aus in das Warehouse Zielschema generiert werden.
 Die in dem Mapping-Editor angezeigten Tabellen sind lediglich logische Strukturen. Es sind sog.
Operatoren, die als Platzhalter für Tabellen fungieren.
Warum diese Trennung:
Mit dieser Technik ist es möglich, Definitionen von Tabellen zunächst auf einem logischen
(entwicklungsbezogenen oder planerischen ) Level zu belassen und die Definitionen zu einem
späteren passenden Zeitpunkt in physische Beschreibungen von Tabellen umzuwandeln. Es ist auch
möglich aus einer logischen Tabellendefinition mehrere physische Tabellen abzuleiten. Das ist
praktisch um etwa eine Entwicklungsumgebung von einer Produktionsumgebung zu unterscheiden.
Das Verfahren setzt die Existenz mehrerer Module voraus. In diesem Testszenario benötigen wir
diese Technik nicht.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
73/300
Eine logische Tabelle „Kunde“ existiert in unterschiedlichen Ausprägungen in zwei Modulen WHS1
und WHS2
Was ist zu tun um die neue Tabellenbeschreibung „WH_TRANSAKTIONEN“ als physische Instanz in
einem Modul wieder zu finden:


Mit der rechten Maustaste auf die Tabelle WH_TRANSAKTIONEN im Editor.
Die Create and Bind Option wählen.

Und jetzt einfach OK drücken, weil das Zielmodul bereits vorselektiert ist.
Wenn Sie jetzt das Warehouse-Modul betrachten, können Sie die neue Tabelle sehen. In diesem
Zustand können Sie für die neue Tabelle auch alle physische Parameter vergeben, bevor Sie die
Tabelle in ein Zielschema einer Datenbank kopieren.
 Mit der rechten Maustaste auf den Tabellennamen.
 Option Configure.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
74/300
Festlegen der Tabelleneigenschaften
Auch die Struktur der Tabelle können Sie in dem Data Object Editor verändern:
 Mit der rechten Maustaste auf den Tabellennamen.
 Option Properties.
Tabelleneditor
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
75/300
Das erste Deployment – Das Control Center
In unserem Szenario sind jetzt zwei neue Objekte entstanden die Tabelle WH_TRANSAKTIONEN und
das Mapping MP_Transaktionen. Beide Objekte müssen in die Datenbank „deployed“ (generiert)
werden.
Dazu starten Sie das Control Center.
 Tools -> Control Center Manager.
 Das Control Center sollte jetzt starten.
Wenn das Control Center nicht startet, müssen Sie u. U. zunächst den Control Center Service starten.
Das erfolgt in einer reinen Windows-Umgebung über das Start-Menü. Ist die Datenbank auf einem
Unix-System installiert, so können Scripte verwendet werden, wie Sie sie in dem Verzeichnis
OWBHOME\owb\rtp\sql finden.
Der Control Center Service sollte aber in der Regel automatisch starten, wenn Rechner und die
Datenbank hochfahren.
Starten des Control Centers
Control Center
Das wichtigste Organisationskriterium im Control Center sind die Locations in dem linken Fenster. Den
Locations sind alle Module zugeordnet, die die jeweilige Location verwenden. Das Modul
WAREHOUSE ist also unter der Location LC-DWH zu finden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
76/300
Im rechten Fenster sehen Sie die Object Details. Hier stellen Sie ein, was Sie tun wollen. Unter dem
Reiter „History“ sehen Sie, was Sie bis dahin generiert haben.
In dem unteren Fenster sind die Generierungs- und spätere Laufergebnisse zu finden.
Das Control Center ist zwar ein Entwicklungswerkzeug, Sie können aber damit alle Aktivitäten rund
um OWB-Prozeduren einsehen und steuern.
Locations registrieren
Zunächst sollten Sie überprüfen, in welche Richtung die Locations zeigen. Hierzu klicken Sie mit der
rechten Maustaste auf den Namen der Location und drücken auf Register. Sie sollten in einem
separaten Fenster die Möglichkeit bekommen, diese Location zu testen. Sind die Connection-Daten
falsch, so ändern Sie diese über den Connection Explorer.
Bedenken Sie, dass Sie Locations nicht ändern können, wenn sie einem Modul zugewiesen sind. Es
kann also sein, dass Sie diese Zuweisung für einen Augenblick aufheben müssen:
Im Project Explorer mit der rechten Maustaste auf den Modulnamen klicken und dann Open Editor.
Die Tabelle generieren
 Markieren Sie die Tabelle WH_Transaktionen
 Öffnen Sie die Listbox in dem Bereich „Object Details“ unter „Deploy Action“ auf „Create“
 Drücken Sie jetzt den Deploy-Knopf im Kopfbereich des Fensters.



Jetzt sollten Sie einen Generierungsjob unter „Control Center Jobs“ sehen.
Wenn dort hinter dem Jobnamen ein grünes Häkchen erschienen ist, können Sie diesen Job mit
einem Doppelklick öffnen.
In dem neu geöffneten „Job Details“ Fenster sehen Sie die entsprechende Erfolgsmeldung und
können auch den DDL-Text für die neue Tabelle sehen.
Ein Mapping generieren
Analog gehen Sie bei dem Generieren des Mappings vor. Sie müssen hierzu das Mapping
„MP_TRANSAKTIONEN“ markiert haben.
Nachdem Sie erfolgreich generiert haben, müssen Sie es noch starten:
 Drücken Sie hierfür den Start-Knopf im Kopfbereich des Fensters. Ein Job startet wieder.
Beim Start des Jobs springt der Fokus des Fensters auf „Execution“.
Mit Doppelklick können Sie die Laufzeitergebnisse abfragen. Mögliche Fehler sind im unteren
Bereich aufgelistet, zusammen mit dem Laufzeitprotokoll.
Der Erfolg wird Ihnen mit Success angezeigt.


Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
77/300
Das Control Center ist nicht die einzige Stelle an der das Ergebnis der gelaufenen Jobs nachlesen
können. An separater Stelle wird noch der Repository Browser vorgestellt, der ebenfalls diese
Ergebnisse anzeigen kann.
Leserechte
Sind Fehler beim Generieren aufgetreten, kann das an fehlenden Leserechten liegen. Sie wollen aus
einer Prozedur, die sich in dem Schema DWH befindet Tabellendaten lesen, die in dem Schema SRC
liegen. Dazu brauchen Sie für das Schema SRC Leserechte.
Gehen Sie in das Schema SRC und setzen Sie die folgenden GRANT-Befehle ab.
z. B. -> GRANT SELECT ON BESTELLUNG TO DWH; oder
GRANT SELECT ANY TABLE TO DWH
Haben Sie nicht die nötigen Rechte, so muss dies ein DBA für Sie tun. Haben Sie die Datenbank auf
Ihrem Rechner und können sich selbst Rechte vergeben, so loggen Sie sich als DBA ein und geben
dem SRC-User zunächst DBA-Rechte: grant dba to src.
Das erste Teilergebnis ist geschafft, die ersten Daten sind bewegt. Weiter unten werden mehr Details
vorgestellt.
Connectors und Database-Links
Erhalten Sie beim Generieren von Mappings Fehlermeldungen über nicht bekannte Tabellen, dann
kann ein fehlender DB-LINK die Ursache sein. Das ist dann der Fall, wenn Quell– und Zielschema
unterschiedlichen Datenbankinstanzen angehören. Die in der Oracle-Datenbanktechnik bekannten
DB-Links verbergen sich hinter dem Punkt Connectors in dem Location-Zweig des Deploy-Trees. Sie
haben als Sie die Module „BESTELLUNGEN“ und „WAREHOUSE“ anlegten auch für jedes Modul
eine Location definiert. Die Locations sind in dem Tree zu erkennen. Die Locations repräsentieren
den DB-Link als physische Verbindung innerhalb der Datenbank und „zeigen“ ausgehend von dem
Schema DWH in das Schema SRC hinein. Sie würde gebraucht, wenn SRC und DWH Schemen in
unterschiedlichen Instanzen lägen.
Arbeiten Sie mit unterschiedlichen Instanzen und fehlt Ihnen ein Connector, so erstellen Sie einen
Connector explizit.
 Öffnen Sie in dem WAREHOUSE BUILDER-Hauptfenster unter Oracle den Punkt Locations.
 Gehen Sie auf LOC_DWH und drücken Sie über das Kontextmenü den Punkt
Create Connector.
 Vergeben Sie einen Namen (z. B. CONN_SRC).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step


78/300
Wählen Sie in dem folgenden Fenster die Location in der Listbox aus, zu dem Sie einen DB_Link
aufbauen wollen, bzw. aus der Sie lesen wollen.
Finish
Im Dployment-Manager erscheint jetzt der neuer Connector.
 Deployen Sie ihn in das Zielschema DWH in der Datenbank.
Jetzt sollten Sie keine Zugriffsprobleme mehr haben.
Intelligenter Generierungsmechanismus
In dem jüngsten Warehouse-Builder-Release muss man sich nicht mehr um die Connectoren
kümmern. Der Warehouse-Builder stellt im Verlauf der Generierung selbständig fest, ob ein DatabaseLink in Form eines Connectors nötig ist oder nicht. Ist er nötig, so wird er im Hintergrund automatisch
generiert.
Diesen Mechanismus kann man über die Konfigurations-Parameter eines Mappings umgehen
(->rechte Maustaste auf den Mapping-Namen -> Configuration). Hier haben Sie die Möglichkeit einen
Database-Link-Namen und einen Schema-Namen für jede Tabelle des Mappings anzugeben. Diese
werden dann beim Generieren genommen.
„Configuration Properties“ eines Mappings
Von dieser Vorgehensweise ist jedoch abzuraten. Die Möglichkeit besteht nur noch aus Gründen der
Abwärtskompatibilität zu älteren Releasen. Dort war dies nötig. Der „Intelligente
Generierungsmechanismus“ nimmt dem Entwickler diese Arbeit ab. Außerdem verlieren Sie damit
die Möglichkeit den Mapping-Code mit einer einzigen Schalterstellung flexibel in ein anderes System
zu generieren.
Um dies zu erreichen ändert man nur die Zuordnung einer Location. So lange Objekte noch nicht
generiert sind, werden sie in der folgenden Form beschrieben:
{location.<object_name>}.
Im Verlauf der Generierung löst OWB den „location“-String auf und ersetzt ihn durch den passenden
Database-Link-Namen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
79/300
Mit dieser DB-Link-Mechanik kann die Programmstruktur immer die gleiche bleiben, auch wenn
andere Quell- und Zieldatenbanken gewählt werden sollten. Sie stellt eine Verknüpfung zwischen der
Logik im Mapping und den tatsächlichen physischen Datenbanken dar. Auch die meisten Gateways, z.
B. nach DB2 oder SQL Server, funktionieren nach dieser Logik. So können sie auf entfernt liegende
Tabellen – auch in nicht-Oracle-Datenbanken - so zugreifen, als würden dieses lokal liegen.
Locations und Connectoren beschreiben die Beziehungen zwischen Modulen
Smart-Code Generation
Wenn Sie Gelegenheit haben, Daten aus einer anderen Datenbank-Instanz auf einem anderen
Rechner zu lesen und dabei einen Database-Link verwenden, betrachten Sie sich doch mal den
generierten PL/SQL-Code. Sie werden sehen, dass OWB für den Fall von Database-Links mit InlineViews arbeitet.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
80/300
Ein erster Blick in das Repository über HTMLBrowser
An dieser Stelle soll schon mal ein erster Blick in das Repository des Warehouse Builders geworfen
werden. In den folgenden Beispielen wird immer wieder auf Auswertungen des Repositories
verwiesen.
Das Repository ist von Beginn an mitinstalliert worden. Es beinhaltet zunächst alle
Entwicklungsinformationen (Design-Daten). Mit dem Deployment und Test in dem Beispiel zuvor,
bestehen jetzt auch Laufzeitinformationen. Sie können sich diese in einem HTML-Browser ansehen.
Die generierten Mappings kommunizieren ihre Laufzeitdaten mit dem Runtime-System, das sich im
Regelfall in dem Zielschema also dem eigentlichen Warehouse befindet. Hier sind statistische
Informationen (gelesene, geschriebene, abgewiesene Sätze usw. ) ebenso gespeichert wie die
fehlerhaften Sätze.
Aufruf des Repository Browsers
Um den Metadaten-Bowser zu nutzen, ist zunächst der OWB Browser Listener zu starten (JavaAnwendung).
Diesen starten Sie separat wie folgt:

Starten Sie zunächst den OWB Browser Listener über das Startmenü
Danach startet ein Fenster mit diversen Meldungen. Sie sollten warten bis die letzte Meldung
„.....initialized“ erscheint.
Console für Listener mit Controllmeldungen

Starten Sie jetzt über das Start Menü den Repository Browser (oder starten Sie sie den
Repositorybrowser über das Tools-Menü im Design Center).
Es erscheint die Anmeldemaske, in der Sie die Repository-Zugangsdaten eintragen können.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
81/300
Anmeldemaske Rpository
Sie befinden sich in einem Auswahlmenü über das Sie in unterschiedliche Reports sowohl für die
Design-Metadaten als auch für die Laufzeit-Informationen gelangen.
Zugriff auf die Runtime-Informationen des Repositories
Wählt man den Execution Schedule Report, so kann man über eine zusätzliche Selektion nach
 Execution Name
 Execution Status
 Start Date und
 End Date
gezielt einzelne Jobs ansteuern.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
82/300
Einschränkung auf die Anzeige eines gestarteten Mappings
Detailinformationen zu den gelaufenen Job findet man in der rechten Spalte der Jobzeile.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
83/300
Detailinformationen zu dem vorher selektierten Job
Der Fortschritt des Ladelaufes kann durch wiederholtes Drücken des REFRESH-Knopfes kontrolliert
werden.
An dieser Stelle können Ladeläufe auch angehalten bzw. auch gestartet werden.
Design-Repository Browser
Über die Option Design Repository: Navigation des Hauptfensters gelangen Sie in den MetadatenBowser.
Einstieg zum Design Repository Browser
In diesem Design Repository Browser eröffnet sich Ihnen eine Baumdarstellung aller Objekte des
Repository. Um die Übersicht zu erleichtern, kann man einen Fokus setzen, z. B. auf das Modul
Warehouse.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
84/300
Metadatenobjekte des Moduls WAREHOUSE
Oder auf ein Mapping innerhalb dieses Moduls:
Metadatenobjekte des Mappings MP_TRASNAKTIONEN_4_WHERE
Die Brillen-Symbole auf der rechten Seite ermöglichen einen Zugang zur Impact- und LineageAnalyse.
Impact- / Lineage-Analyse direkt aus OWB heraus
Um eine Impact- bzw. Lineage-Analyse direkt aus dem OWB heraus zu erhalten, genügt es im Design
Center mit der rechten Maustaste auf ein Objekt zu drücken, und dann die Impact- oder LineageOption zu drücken.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
85/300
Impact- / Lineage-Option im Design Center
Hier nur ein Ausschnitt aus einer Impact-Analyse. Die dicken Kästchen mit dem Plus-Symbol kann
man durch einen Doppelklick aufklappen. Dahinter verbergen sich Mappings. Die Darstellung kann
sehr komplex werden, wenn man die Suche von zentralen Tabellen aus startet, die in vielen Mappings
verwendet werden.
Graphisch dargestellte Impact-Analyse
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
86/300
Zur besseren Übersichtlichkeit sollte man sich bei komplexen Darstellungen, passende Teilausschnitte
vergrößern, und diese dann drucken. Eventuell müssen die Teilausschnitte dann wieder
zusammengeklebt werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
87/300
Nützliche Hilfsmittel:
Validate:
In dem Mapping-Editor kann vieles kombiniert werden, was später zur Laufzeit nicht laufen würde.
Deswegen ist es sinnvoll ein Mapping zu validieren, auch wenn die Validierung optional ist. Führen
Sie folgenden Versuch durch:

Ändern Sie über das Properties-Fenster für die Tabelle WH_TRANSAKTIONEN das numerische
Feld Kundencode auf den Datentyp varchar.


Drücken Sie das Validate-Symbol
in der Kopfleiste des Editors
Sie bekommen jetzt in dem Generation Results-Fenster Warnmeldungen angezeigt. Die erste
besagt, dass die Tabelle WH_TRANSAKTIONEN nicht mehr mit der in dem Repository
gespeicherten Version übereinstimmt (hier müsste synchronisiert werden). Zum anderen zeigt
eine Meldung an, dass der Typ des Felds KUNDENCODE im Ausgabebereich des Joiners nicht
mit dem Zielfeld der Zieltabelle übereinstimmt.
Durch einen Doppelklick in den Textbereich kann man die komplette Meldung anzeigen.
Unter Validation Details stehen Hinweise, wie man die Situation beheben kann. In fast allen Fällen
sind diese Empfehlungen sinnvoll.
Wenn Warnungsmeldungen erscheinen, kann die spätere Generierung erfolgreich verlaufen es muss
aber nicht so sein. Erscheinen echte Fehlermeldungen (rotes Symbol), ist eine Generierung
unmöglich.
Ergebnis-Meldungen des Validate-Aufrufes
Der Validate-Mechanismus arbeitet sehr genau und stellt eine große Hilfe bei der Vermeidung von
Fehlern dar. In der aktuellen Version wird der Validate-Prozeß bei Generierungen jeder Art
automatisch immer gestartet.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
88/300
 Tip: Tritt irgend eine ungewöhnliche Fehlersituation vor allem bei dem Deploy der
Datenbankobjekte auf, so findet man durch den Validierungs-Prozess meist den passenden Hinweis.
Ad Hoc-Generierungen im Mapping-Editor
SQL-Erfahrene können sehr schnell einem Programmcode ansehen, ob er tauglich ist oder nicht.
Daher bietet der Mapping-Editor auch die Möglichkeit der Zwischengenerierung direkt aus dem Editor
heraus.



Drücken Sie das Generate-Symbol
in der Kopfleiste des Editors.
In dem Generation Result Fenster wird Ihnen ein Package-Code-Extrakt gezeigt. Zur besseren
Lesbarkeit sind die vielen Aufrufe für die Statistik und Fehlerbehandlung entfernt.
Den Code können Sie herauskopieren und separat testen.
Im Kopf des Generation Result Fensters finden Sie eine Listbox Generation Style mit den Optionen
Full und Intermediate.
 Wählen Sie Intermediate.
 Markieren Sie in dem Mapping-Fenster INOUTGRP1 von WH_TRANSAKTIONEN. Das Insert ....
Into .....Select from ....-Statement erscheint in dem Generation-Result-Fenster.
 Markieren Sie nach und nach auch andere Gruppenfelder in dem Mapping und Sie erkennen, wie
sich der generierte Code ändert.
In der Listbox Aspect können Sie für diese Tabelle auch unterschiedlich DML-Befehle anwählen. Die
Optionen ändern sich in Abhängigkeit von der Situation, in der sich die Tabelle befindet.
Generierung von Intermediate Result
In diesem Mapping sind das sehr einfache Beispiele. Bei komplexeren Mappings ist diese Technik ein
wichtiges und ständiges Hilfsmittel.
 Tip: Das Intermediate-Result-Ergebnis kann in vielen Fällen direkt in SQL*Plus überführt werden.
Somit kann man sehr schnell das jeweilige Statement testen. Kopieren über „Edit“ „Select All“ oder
CTRL-A -> CTRL-C -> CTRL-V.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
89/300
Kopieren von Metaobjekten
Alle Objekte können mit Hilfe des Kontextmenüs (rechte Maustaste) kopiert werden, auch komplexe
Mappings und über Modulgrenzen hinweg. Allerdings nur innerhalb eines Projektes.
Das ist praktisch, wenn Sie ein Mapping zu Testzwecken umbauen wollen, aber eventuell auf die
Ursprungsversion wieder zurückkehren müssen.
Schnelles Generieren und Deployen auch ohne Control Center
Fast alle Objekte können auch direkt aus dem Design Center heraus generiert werden.
Testen Sie es mit Hilfe der Tabelle WH_TRANSAKTIONEN aus.
 Selektieren Sie mit der rechten Maustaste die Tabelle WH_TRANSAKTIONEN
 Wählen Sie zunächst in dem Kontextmenü den Punkt Generieren.
 Selektieren Sie den Reiter Script
 markieren Sie den Tabellennamen
 View Code
Die Create Table-Definition wird erscheinen.
Dieses Verfahren ist wesentlich schneller, als wenn Sie zunächst das Control Center starten und sich
in den Location zurecht finden müssen. Bedenken Sie jedoch, dass diese Art der Generierung nicht
alle Optionen des Control Centers beinhaltet, z. B. fehlt das DROP Table.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
90/300
Die Operatoren – Teil 1
Mehrere Tabellen über JOIN verbinden und einlesen – Join Operator
Den Join-Operator haben wir oben bereits kennen gelernt. In dem nächsten Szenario-Schritt ergänzen
wir das Mapping um mehrere Quelltabellen ARTIKEL und KUNDE.






Erstellen Sie ein zweites Mapping MP_TRANSAKTIONEN_2_JOINER.
 Tip: Kopieren Sie hierfür das Mapping MP_TRANSAKTIONEN (rechte Maustaste
COPY/PASTE)
und
RENAME
auf
das
neu
entstandene
Objekt
COPY_OF_MP_TRANSAKTIONEN mit der rechten Maustaste.
Öffnen Sie das Mapping.
Ziehen Sie über das Explorer-Fenster die beiden Tabellen ARTIKEL und KUNDE aus dem Modul
SRC in den Editor, wie bereits bekannt.
(Wenn die Tabellen nicht über das Modul SRC sichtbar sind, importieren Sie die Tabellen mit der
IMPORT-Funktion des Kontextmenüs am Modulnamen.)
Erweitern Sie den Joiner um zwei weitere INGRP-Bereiche und benennen Sie die Gruppen
ARTIKEL und KUNDE. (Rechte Maustaste auf den Joiner-Kopf -> Open Details).
Ziehen Sie die INOUTGR-Bereiche der neuen Tabellen in die jeweiligen Eingabegruppenbereiche
des Joiners
Display Set
Da die Kundentabelle etwas mehr Columns besitzt, wird der Ausgabebereich des Joiners sehr lang
und unübersichtlich. Um die Situation in den Griff zu bekommen, gibt es mehrere Hilfsmittel:
Zum einen: Display Sets verwenden. Nicht alle Columns werden genutzt. Wir blenden nur diejenigen
Columns ein, die auch wirklich gebraucht werden.
 Löschen Sie den Eingabegruppenbereich mit dem Namen „Kunde“ wieder aus dem Joiner (Open
Details). Das ist der schnellste Weg, alle Linien weg zu bekommen, und legen Sie ihn wieder neu
an.
 Öffnen Sie jetzt das Kontextmenü der Tabelle Kunde (rechte Maustaste auf den Kopf der Tabelle).
 Wählen Sie den Punkt Display Set.
 Erfassen Sie in der Liste unter Name den neuen Eintrag „Joiner“ und selektieren Sie in dem
unteren Bereich die Felder KUNDENNR / GESCHLECHT / VORNAME / NACHNAME / TITEL /
STATUS
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
91/300
Festlegen eines Display Sets





OK.
Wählen Sie jetzt in dem Kontextmenü der Tabelle „Kunde“ über den Punkt „Select Display Set“
die neu entstandene Option „Joiner“.
Jetzt sollten nur noch die vorher gewählten Spalten zu sehen sein.
Ziehen Sie jetzt den INOUTGR-Bereich der so verkürzten Kunden-Tabelle in den entsprechenden
Eingangsbereich des Joiners.
Ergänzen Sie jetzt die Join-Bedingung (Markieren des Kopfs des Joiners -> Properties Fenster ->
Join Condition wie in dem Bild angezeigt).
Die neue Join-Condition
Erweitern Sie jetzt die Zieltabelle WH_Transaktionen um die zusätzlichen Felder, die Sie jetzt in dem
OUTGR-Bereich des Joiners finden.
 Tip: Die Reihenfolge der Spalten in der OUTGRP1-Gruppe orientiert sich an der Reihenfolge der
Eingabegruppen. Dies hilft bei der Orientierung vor allem dann, wenn gleichbenannte Attribute aus
verschiedenen Eingabetabellen geliefert werden. Doppelte Spaltennamen unterscheidet OWB durch
das Anhängen eines Zählstrings (z. B. BESTELLNR_1)
 Tip: Die Spalten in der OUTGRP1-Gruppe können auch mit Hilfe von Präfixen leicht unterschieden
werden. Öffnen Sie hierzu den Joiner-Editor (rechte Maustaste auf den Kopf des Joiners -> Open
Details) und fügen Sie vor allen Column-Namen des INGRP-Bereichs einen Präfix ein (z. B. K_).
Die Präfixkennzeichnung wird in den Ausgabebereich übertragen.
Eine weitere Hilfe hierzu sind die Display Sets (rechte Maustaste auf den Kopf des Joiners -> Use
Display Set -> Selektieren der jeweiligen Option.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step


92/300
Ziehen Sie die Felder Artikelname / Einzelpreis und Status in die Zieltabelle WH_Transaktionen.
Es erscheint ein Zwischenfenster über das Sie festlegen können, in welcher Art und Weise die
Spaltennamen in die Zieltabelle übernommen werden. Mit „Go“ übernehmen Sie alle. Sie können
aber auch den Präfix „K_“ wieder ausblenden, indem Sie „Ignore Source Prefix“ wählen.
Überprüfen Sie die Richtigkeit des Mappings mit „Validate“. Sie erhalten die Information, dass die
Tabelle WH_TRANSAKTIONEN nicht mehr synchron mit dem Repository ist.
Sie müssen die Tabelle synchronisieren (rechte Maustaste auf WH_Transaktionen -> Synchronize ->
Voreinstellungen lassen -> OK).
Generieren und Testen Sie das neue Mapping über das Control Center. Sie müssen dabei auch die
Tabelle erneuern, d. h. Sie sollten die Option REPLACE für die Tabelle wählen. Diese wird zwei
Scripte erzeugen: ein DROP TABLE und ein CREATE TABLE.



Wechseln Sie in das Control Center.
Sie stellen fest, dass sich der Zustand der Objekte geändert hat. WH_Transaktionen_2 steht auf
NEW und das Mapping MP_TRANSAKTION_2 auf Not Deployed.
Dieses sollten Sie ändern, indem Sie neu generieren.
An diesem Beispiel können Sie eine wichtige Aufgabe des Control Centers erkennen: Es zeigt Ihnen
auf, welche Objekte sich im Verlauf des Entwicklungsprozesses geändert haben. Sie erkennen,
welche Generierungen Sie nachziehen müssen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
93/300
Der neue Zwischenstand des Beispiel-Mappings (Demo MP_TRANSAKTIONEN_2_JOINER)
 Tip:
Haben Sie mit der Größe der Tabellen und dem beschränkten Platzangebot im Editor
„gekämpft“? Wenn ja, sollten sie die Anzahl der angezeigten Attribute auf die tatsächlich
„gemappten“ Attribute beschränken.
 Rechte Maustaste auf die Attributgruppe der Tabelle, die Sie in der Anzeige
verkleinern möchten.
 Option Use Display Set -> MAPPED.
Diese Option Use Display Set ist zudem sehr praktisch, wenn Sie nur Spalten von einem Join-Zweig
sehen wollen. Schalten Sie zu Testzwecken zwischen den Optionen hin und her, um den Effekt
kennen zu lernen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
94/300
Die verschiedenen Display-Sets
In mehrere Zieltabellen schreiben - Splitter-Operator
In einem Mapping können Sie sowohl aus mehreren Tabellen lesen und gleichzeitig in mehrere
Zieltabellen schreiben. In mehrere Zieltabellen können Sie über den "Splitter" schreiben.
Aufgabenstellung: In Abhängigkeit von dem Feld "Status" der Tabelle WH_TRANSAKTIONEN
sollen in zwei zusätzlichen Zieltabellen die Felder Name, Kundencode und Bestellmenge geschrieben
werden. In dem Status-Feld kann stehen P (wie Privatkunde) und F (wie Firmenkunde).





Erstellen
Sie
wieder
eine
Kopie
von
MP_TRANAKTIONEN_2_JOINER
nach
MP_TRANSAKTIONEN_3_SPLITTER.
Ziehen Sie den Splitter-Operator zusätzlich in den Editor und positionieren Sie ihn rechts neben
die Tabelle WH_TRANSAKTIONEN.
Ziehen Sie die Felder Kundencode, Bestellmenge, Bestell_Total sowie Status aus
WH_TRANSAKTIONEN in den Eingabebereich des Splitters.
Ändern Sie die Namen OUTGP1/2 in die sprechenden Namen Privatkunde und Firmenkunde.
(-> rechte Maustaste auf den Splitterkopf und dann Open Details).
Markieren Sie die Ausgabegruppe Privatkunde und gehen Sie über die Group Properties (->
Properties Inspector) in das Feld Split Conditions um in den Expression Builder zu gelangen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
95/300

Erzeugen Sie hier die Bedingung:
INGRP1.STATUS = 'P'
 Wiederholen Sie den Vorgang für die Ausgabegruppe Firmenkunde mit der Bedingung
INGRP1.STATUS = 'F'
 Erzeugen Sie zwei neue Tabellen WH_TRANS_PRIVAT und WH_TRANS_FIRMA.
 Ziehen Sie jetzt die kompletten Ausgabegruppen des Splitters also Privatkunden und
Firmenkunden in die jeweiligen Eingabegruppen der Zieltabellen. Alle Attribute müssten
übernommen werden.
 Betrachten Sie zur Kontrolle das generierte Ergebnis über das Generate-Symbol im Fensterkopf.


Erzeugen Sie jetzt die neuen Tabellen in dem Modul Warehouse (-> rechte Maustaste auf den
Tabellenköpfen -> Create And Bind).
Generieren Sie die beiden neuen Tabellen und das neue Mapping.
Betrachen Sie sich die Ergebnisse der neuen Tabellen über den Relational Data Viewer:
Exkurs: Multiple-Inserts in einem Kommando
Betrachten Sie das Insert-Statement für die beiden neuen Zieltabellen in dem Generation Result
Fenster genau (ab etwa Zeile 120). Sie werden feststellen, dass der Warehouse Builder ein sog.
Multiple Insert Statement generiert hat (Funktionalität der Oracle Datenbank ab Version 9i).
Dies ist ein bedingtes Schreiben in zwei Tabellen gleichzeitig, wobei die Eingabemenge aus
einem einzigen Select entnommen wurde. Alles in allem handelt es um ein einziges SQLKommando das die Datenbank sehr performant und parallelisiert abarbeitet.
Ausschnitt aus dem generierten Code:
INSERT
/*+ APPEND PARALLEL("WH_TRANS_PRIVAT") APPEND PARALLEL("WH_TRANS_FIRMA") */
ALL
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
96/300
WHEN "STATUS" = 'P'/* SPLITTER.PRIVATKUNDEN */ THEN
INTO
"WH_Trans_Privat"
("BESTELLMENGE",
"KUNDENCODE",
"BESTELL_TOTAL",
"STATUS")
VALUES
("BESTELLMENGE$1",
"KUNDENCODE$1",
"BESTELL_TOTAL$1",
"STATUS")
WHEN "STATUS" = 'F'/* SPLITTER.FIRMENKUNDEN */ 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 */)
);
Das neue Mapping sollte jetzt wie folgt aussehen.
Der neue Zwischenstand des Beispiel-Mappings (MP_TRANSAKTIONEN_3_SPLITTER)
Exkurs: Wie viele Tabellen passen in ein Mapping und wie werden
sie kombiniert
Sie können beliebig viele Joiner und Splitter mit beliebig vielen beteiligten Tabellen in einem Mapping
kombinieren. Die Zwischentabelle WH_TRANSAKTIONEN in dem gezeigten Beispiel ist nur
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
97/300
entstanden, weil es in dieses Demo-Szenario gut passte. Wir hätten auch Joiner und Splitter direkt mit
einander vereinen können.
Es können auch beliebig viele Ladeschritte nacheinander in einem Mapping folgen, wobei eine
Zieltabelle eine Quelltabelle in einem Folgeschritt darstellt, usw.
Abarbeitung mehrerer Ladevorgänge in einem Mapping
Auch das parallele Abarbeiten von unabhängigen Tabellen ist möglich:
T1 – T4 und X1 – X4 werden nacheinander geladen. Die Tabellen müssen nicht in demselben
„Ladestrang“ liegen.
Auch komplexe Strukturen sind erlaubt, wie das folgende Beispiel zeigt:
T1 – T4 und X1 – X4 werden nacheinander geladen über einen Joiner auf TX1-2 vereinigt und über
einen Splitter wieder in V1-2 und W1-2 gespalten.
Es gibt nur die Einschränkung, dass Sie die Fülle der Inserts, die der Warehouse Builder generiert,
nicht mehr überschauen können.

Tip: Füllen Sie nur die Operatoren in den Mapping-Editor, die auch zur Abarbeitung einer
zusammenhängenden Teilaufgabe notwendig sind. In der Regel ist das das Verändern einer Tabelle
oder von logisch zusammenhängenden Tabellen. Man kann sich hier an Geschäftsprozessen
orientieren.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
98/300
Filter und Bedingungen (Where Operator)
Ein Filter schränkt die Verarbeitung von Sätzen aus den einzelnen Tabellen ein. Er wird in SQL mit
Hilfe der WHERE-Bedingung des SELECTS realisiert. Bereits bei dem JOINER-Operator ist eine
WHERE-Bedingung erzeugt worden. Wir hätten also bereits dort einen Filter definieren können, indem
wir die Join-Bedingung modifiziert hätten. Das Ergebnis wäre das gleiche gewesen, aber
unübersichtlicher. Man verwendet OWB u. a. aufgrund der Möglichkeit zur Dokumentation. Eine JoinOperation und eine Filter-Operation sind logisch zwei unterschiedliche Dinge, auch wenn sie mit
denselben SQL-Schlüsselwörtern realisiert sind.
Aufgabenstellung: Es sollen nur Kunden mit Kundenummer > 1000 geladen werden.







Erstellen Sie in dem Modul WAREHOUSE durch Kopie aus MP_TRANSAKTIONEN_3_SPLITTER
das neue Mapping MP_TRANSAKTIONEN_4_WHERE.
Minimieren Sie zunächst alle Operatoren, damit Sie leichter eine Übersicht bekommen.
Ziehen Sie das Filter-Symbol
aus der Palette und der Untergruppe Transformationen in
die Editorfläche. Am besten zwischen die Tabelle Kunde und den Joiner-Operator.
Durch einen Doppelklick auf die Tabelle Kunde können sie das minimierte Symbol aufklappen, so
dass Sie alle Spalten sehen.
Machen Sie das gleiche mit dem Joiner-Operator. Hier allerdings entstehen zu viele Spalten.
Schalten Sie am besten die Display Set-Option des Joiners für Kunden an.
Markieren Sie die Linien zwischen KUNDE und dem Joiner, so dass sie sich blau färben und
löschen Sie diese.
Ziehen die ganze (!) Gruppe INOUTGRP1 von KUNDE auf die Gruppe INOUTGRP1 des Filters.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step


99/300
Ziehen Sie diese INOUTGRP1-Gruppe auf den Kunden-Bereich des Joiners.
Das
Connect
Operator
Fenster
erscheint.
Wählen
Sie
hier
die
Option
„Match by name of Source and target attributes“ und dann Ignore target prefix mit „K_“. (Wenn
sie in den Tests vorher die Kundenspalten mit K_ gekennzeichnet haben).
Der Auto Mapping-Wizard


OK
Stellen Sie jetzt die Filterbedingung über den Properties Inspector ein.

Generieren Sie das neue Mapping und testen Sie es.

Tip: Benennen Sie das neue Filterobjekt um z. B. Kunden_groesser_1000. Das macht das
Mapping lesbarer.
Wir haben den Filter zwischen die Quelltabellen und den Joiner gesetzt, alternativ hätten wir ihn auch
nach dem Joiner setzen können. Der generierte Code wird allerdings gleich bleiben. Die
Filterbedingung wird als Bestandteil in die WHERE-Klausel mit aufgenommen.
Achtung: Wie in dem Beispiel gezeigt, ist es nötig alle Columns zunächst in den Filter und
dann erst in den Joiner fließen zu lassen. Würde man dies nur mit der einen Column tun, die
einzuschränken ist und die übrigen Columns direkt mit dem Joiner verbinden, dann hätte der Joiner
zwei Operatoren als Quelloperator. Eine Fehlermeldung würde dies anzeigen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

100/300
Betrachten Sie sich nach einer Generierung im Mapping-Editor den Code für die Filterbedingung.
Die Warehouse Builder baut die über den Filter-Operator definierte Bedingung in die Where- Klausel,
die bereits durch die Join-Bedingung entstanden war, ein.
Das Generierungsergebnis sieht jetzt so aus (Ausschnitt):
...
FROM
"SRC"."BEST_POSITION" "BEST_POSITION",
"SRC"."BESTELLUNG" "BESTELLUNG"
WHERE
( "BEST_POSITION"."BESTELLNR" = "BESTELLUNG"."BESTELLNR" ) AND
( "BESTELLUNG"."KUNDENCODE" > 1000 )
);
Das neue Mapping hat jetzt folgendes Aussehen:
Exkurs: Zieltabellen automatisch leeren - Truncate
Unsere Zieltabellen WH_TRANS_PRIVAT und WH_TRANS_FIRMA und auch die Zwischentabelle
WH_TRANSAKTIONEN füllen sich mit jedem Test, die wir durchführen um mehrere 1000 Sätze.
Eigentlich müssten wir zwischen allen Tests manuell eine TRUNCATE-Anweisung direkt in der
Datenbank absetzen. Hier ein kleiner Vorgriff auf die Update / Delete / Insert-Steuerung, die weiter
unten noch erklärt wird: Wir können die Zieltabellen auch auf TRUNCATE / INSERT umstellen, so
dass OWB zunächst einen TRUNCATE durchführt bevor mit INSERT in die Datenbank geschrieben
wird.
 Ändern Sie über das Properties-Fenster den Loading Type für alle betroffenen Tabellen auf
TRUNCATE / INSERT.
 Generieren Sie das Mapping neu und testen Sie es.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
101/300
Einstellen des Loading Type zum initialen TRUNCATE auf eine Ziel-Tabelle
Beliebige Ausdrücke in einem SQL-Kommando - Der ExpressionBuilder
Beliebige Ausdrücke, Berechnungen, Wandlungen, aber auch besondere Prüfungen integriert der
Expression-Builder in den Datenfluss. Mit diesem Operator führen Sie Ausdrücke in den Select-Teil
des SQL Kommandos über die normalen Column-Namen hinaus ein.
Anforderung: Leiten Sie aus den Bestellungen und Bestellpositionen
zusätzlichen Feldern für
 Berechnung Gesamtwert pro Position (Artikelpreis mal Menge)
 Rechnungsfälligkeitsdatum (Lieferdatum + 20),
 Berechnung Bruttogesamtwert
ab.
Die Inhalte der neuen Felder sind zu berechnen.
eine Information mit

Kopieren Sie das Mapping WH_TRANSAKTIONEN_4_WHERE und machen Sie daraus
WH_TRANSAKTIONEN_5_EXPR.

Fügen Sie aus der Palette den Expression-Operator
in das Mapping zwischen den
Joiner und die Tabelle WH_TRANSAKTIONEN.
Ziehen Sie die 3 Felder BESTELLMENGE, BESTELLDATUM und EINZELPREIS aus dem
Ausgangsbereich des Joiners in den INGR1-Bereich der Expression.
Öffnen Sie das Expression-Editor-Fenster (-> rechte Maustaste auf den Kopf der Expression ->
Option Open Details).
Erfassen Sie unter dem Reiter Output Attributes die Felder:
- BESTELL_TOTAL (NUMBER)
- RECHNUNGSDATUM (DATE)
- BRUTTOWERT (NUMBER)




Benennen Sie den Namen des Operators um z. B. auf Berechnungen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step



102/300
OK
Minimieren Sie jetzt alle anderen Operatoren außer dem neuen Expression-Operator, damit Sie
Platz auf dem Bildschirm bekommen.
Markieren Sie der Reihe nach jedes der neu entstandenen Felder in dem Outgrp-Bereich des
Operators. Wählen Sie in dem Properties Inspektor (Attribut Properties) für diese Felder die
Option Expression (Achtung die 3 Punkte erscheinen erst, wenn Sie in das Feld klicken).
Aufruf des Expression-Editors zu den Ausgabefeldern der Expression
Jetzt erscheint der Expression-Editor. Im linken Bereich sind alle Eingabefelder aufgelistet, die wir
zuvor in den Eingabebereich des Operators überführt haben. Diese wandern mit einem Doppelklick in
den rechten Bereich in dem wir die eigentliche Rechenvorschrift formulieren.
Die erste Regel ist für BESTELL_TOTAL festzulegen:
 Doppelklick auf BESTELLMENGE
 Doppelklick auf das Malzeichen

Doppelklick auf EINZELPREIS
Es entsteht der folgende Ausdruck:
Expression Bestell_Total
Sie können natürlich auch direkt in das Editor-Feld schreiben. Das ist manchmal schneller als ein
Doppelklick auf die entsprechenden Symbole. Aber so kann man sich nicht verschreiben.
Der erste Ausdruck ist fertig.
 OK
Formulieren Sie die zweite Regel in dem Sie auf Bestelldatum die Zahl 20 addieren.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
103/300
Expression Rechnungsdatum
Und die dritte Berechnung für den Bruttowert ist etwas komplexer. Hier werden 16% des
Gesamtwertes berechnet und zu dem Gesamtwert hinzu addiert.
Expression Bruttowert
Sie können für alle Berechnungen auch ein Validate durchführen, das erspart späteres Korrigieren.





Überführen Sie jetzt die neuen Felder des Ausgangsbereichs der Expression in die Tabelle
WH_TRANSAKTIONEN. Die Felder RECHNUNGSDATUM und BRUTTOWERT entstehen dort
neu. Für das Feld BESTELL_TOTAL müssen Sie die bestehende Verbindung zu dem Joiner
vorher löschen.
Synchronisieren Sie die Tabelle WH_TRANSAKTIONEN mit dem Modul Warehouse (rechte
Maustaste Synchronize). Achten Sie darauf dass Sie die Option Outbound wählen, damit
Änderungen aus dem Mapping in die Tabellendefinition des Moduls übertragen werden und nicht
umgekehrt.
Generieren Sie die geänderte Definition der Tabelle WH_TRANSAKTIONEN mit dem Control
Center (Achtung Option REPLACE).
und erzeugen Sie das neue Mapping.
Betrachten Sie sich die Tabelleninhalte über den Data Viewer
Die neuen Tabelleninhalte von WH_TRANSAKTIONEN
 Tip: Wir haben in diesem Beispiel alle Rechenoperationen in eine Expression hineingehängt. Das
war bewusst so gemacht. Wir hätten auch für jede Expression einen separaten Operator wählen
können. Allerdings würde diese Vorgehensweise das Mapping mit unnötig vielen Operatoren auffüllen
und es wäre unübersichtlich.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
104/300
Der neue Zwischenstand: Das Mapping MP_TRANSAKTIONEN_5_EXPR
CASE Strukturen im Expression Builder
Der CASE Ausdruck macht SELECT-Abfragen flexibler. Das CASE gehört mit zu den mächtigsten
Sprachmitteln des heutigen SQL. Es ersetzt das schwerer verstehbare DECODE. Mit dieser
Konstruktion können manche Prüfroutinen oder Lookups in andere Tabellen entfallen. Bedingte
Verarbeitungen und Prüfungen sind leicht möglich. Es ist auch ein wichtiges Hilfsmittel bei der noch zu
besprechenden Thematik „Mengenbasiertes oder Satzbasiertes Laden“.
Die CASE-Klausel kann die folgende Form haben:
SELECT
CASE feldname (oder Ausdruck)
WHEN ’Wert_X’ THEN ’Returnvalue_X’
WHEN ’Wert_Y’ THEN ’Returnvalue_Y’
ELSE ’Kein Wert’
END
FROM Tabelle;
Um sicher zu sein, ob eine besondere Variante möglich ist, kann man entsprechende Tests mit der
DUAL-Tabelle durchführen.
select
case 1
when 1 then 'EINS'
when 0 then 'NULL'
else 'NICHTS' end
from dual;
Je nachdem, was Sie an Stelle der 1 einsetzen liefert der Gesamtausdruck entsprechende Werte
zurück.
Anforderung: In dem vorhergehenden Beispiel konnten wie im Data Viewer für das berechnete
Feld BESTELL_TOTAL einen 0-Wert finden. Die Ursache liegt in dem Feld BESTELLMENGE das
ebenfalls eine 0 beinhaltet. Offensichtlich gibt es Bestellungen, in denen nichts bestellt wurde. Diese
Fehlbestellungen sollten markiert und später ausgesondert werden. Die Markierung soll in einem
zusätzlichen Feld „FEHLMENGE“ aufgenommen werden. Wenn eine Fehlmenge auftritt, soll dort eine
1 eingetragen werden.


Kopieren Sie das Mapping WH_TRANSAKTIONEN_5_ EXPR und machen Sie daraus
WH_TRANSAKTIONEN_6_CASE.
Ziehen Sie eine zusätzliche Expression in das Mapping-Feld zwischen den Joiner und die Tabelle
WH_TRANSAKTIONEN und rechts unterhalb der bestehenden Expressionen BERECHNUNGEN.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step







105/300
(Wir erzeugen einen zusätzlichen Operator, um die Thematik CASE hervorzuheben und um zu
zeigen, wie Expressions kombiniert werden können.)
Überführen Sie das Feld BESTELL_TOTAL aus dem Ausgabebereich der Expression
BERECHNUNGEN in den Eingabebereich der neuen Expression.
Editieren Sie die neuen Expression (-> rechte Maustaste -> Open Details) indem Sie das neue
Feld FEHLMENGE (number) unter dem Reiter Output Attributes erfassen. Benennen Sie die
Expression Fehlmenge.
Öffnen Sie für das neue Feld Fehlemenge den Expression Editor über den Properties Inspektor.
Fügen Sie die folgende CASE-Anweisung ein:
Nachdem Sie den Editor geschlossen haben überführen Sie das Feld FEHLMENGE der neuen
Expression in die Tabelle WH_TRANSAKTIONEN.
Synchronisieren Sie die Tabelle WH_TRANSAKTIONEN wieder über die Synchronize-Option
Outbound.
Generieren Sie die Tabelle WH_TRANSAKTIONEN und das neue Mapping und testen Sie es.
Jetzt müssten alle fehlerhaften Liefermengen mit 1 markiert sein.
Markierung von fehlerhaften Bestellmengen mit 1 in dem Feld FEHLMENGE
Der neue Zwischenstand: Das Mapping MP_TRANSAKTIONEN_6_CASE
Das Mapping MP_TRANSAKTIONEN_6_CASE
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
106/300
2. Beispiel
Zur besseren Übung hier noch ein zweites Beispiel:
In der Kundentabelle ist ein Statusfeld enthalten um Kunden in Privat- oder Firmenkunden zu
kategorisieren. In einem Auswertebericht soll jedoch nicht der Code „P“ bzw. „F“ abgebildet werden,
sondern der sprechende Text „Privatkunde“, „Firmenkunde“ bzw. ein Fehlertext, wenn kein Wert
vorhanden ist. Die SQL-Konstruktion lautet:
Hierzu kann man eine weitere Expression zwischen den Joiner und der Tabelle
WH_TRANSAKTIONEN setzen und in der Tabelle ein weiteres Feld STATUSBESCHREIBUNG
aufnehmen.
Diese CASE-Lösung im Expression Builder lautet:
Verwendung von CASE im Expression Builder
Alles andere erfolgt analog wie in dem vorherigen Beispiel.
Die CASE-Anweisung wird sehr häufig verwendet. Diese Beispiele zeigen aber auch wie schnell man
iterativ die Mappings erweitern kann und zugleich das nötige Maß an Übersichtlichkeit behält.
Deduplicator Operator (DISTINCT Option)
Zum Erstellen von Listen mit eindeutigen Einträgen wird in der SQL-Sprache die DISTINCT-Option
verwendet
Anforderung: Erstellen Sie eine Tabelle mit den Nummern aller verkauften Artikel pro Jahr.
Hierzu wird aus der Toolbox der Deduplicator-Operator verwendet und Sie müssen über eine
Expression die Jahreszahl aus dem Bestelldatum ableiten.

Kopieren Sie das Mapping WH_TRANSAKTIONEN_6_CASE und machen Sie daraus
WH_TRANSAKTIONEN_7_DISTINCT.

Ziehen Sie den DEDUPLICATOR-Operator
in das Mapping-Feld rechts neben die
Tabelle WH_TRANSAKTIONEN.
Ziehen Sie zusätzlich einen Expression-Operator in das Feld.
Überführen Sie aus der Tabelle WH_TRANSAKTIONEN die Spalte Bestelldatum in den
Expression-Operator und fügen Sie in diesem Operator das Output-Feld Jahr (varchar2(4)) ein.
Benennen Sie den Operator JAHR.
Leiten Sie in dem Expression-Operator die Jahreszahl nach der folgenden Funktion ab:
to_char( INGRP1.BESTELLDATUM ,'YY').





Überführen Sie jetzt das Feld ARTIKELNR aus der Tabelle WH_TRANSAKTIONEN und das
Ausgabefeld der Expressen JAHR in den INOUTGRP1-Bereich des Deduplicators.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step





107/300
Erstellen Sie eine neues Tabellenobjekt BESTELLTE_ARTIKEL rechts neben dem Deduplicator.
Führen Sie die beiden Felder des Deduplicators in die neue Tabelle.
Synchronisieren Sie die neue Tabelle mit dem Modul WAREHOUSE (-> rechte Maustaste auf den
Kopf der neuen Tabelle -> Option Create And Bind).
Generieren Sie die neue Tabelle und das neue Mapping.
Testen Sie es und betrachten Sie sich die neue Tabelle in dem Data Viewer.
Der Zwischenstand des Mappings MP_TRANSAKTIONEN_7_DISTINCT
 Tip: Umgang mit dem Data Viewer
Der Data Viewer wird die Sätze aus der neuen Tabelle so anzeigen, wie sie die Datenbank liefert, also
unsortiert. Das ist gerade bei einer mit DISTINCT erzeugten Tabelle nicht sehr leserlich. Die SQLSchlüsselwörter ODER BY feldname können hier helfen. Unter der Option Where Clause im Data
Viewer kann man diese Schlüsselwörter eintragen. Allerdings haben wir keine Where-Klausel und
müssen diese simulieren: Testen Sie den Ausdruck:
1=1 order by Jahr,Artikelnr.
Data Viewer mit „simulierter WHERE-Klausel“
Aggregieren von Daten (SUM, AVG)
Für die Aggregation von Daten (SUM, AVG usw.) ist der Aggregator-Operator zuständig. Sie hängen
ihn zwischen Quell- und Zieltabelle und dort nimmt er die aggregierten, sowie die Group-By-Felder
auf.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
108/300
Die Handhabung des Operators weicht von den bisher beschriebenen etwas ab, denn für das zu
generierende SQL sind zwei Komponente zu definieren:
o Schlüsselwörter wie: SUM, AVG, COUNT, MAX, STDDEV, STDDEV_POP, STDDEV_SAMP,
VARIANCE, VAR_POP, VAR_SAMP und
o Die Group By Klausel
Anforderung: Erstellen Sie eine Tabelle mit den aggregierten Umsätzen pro Kunde.
Das zugehörige SQL zu dieser Anforderung lautet:
SELECT SUM(Feld_X) FROM Tabelle_X GROUP_BY Feld_y





Kopieren Sie das Mapping WH_TRANSAKTIONEN_7_DISTINCT
in das neue Mapping
WH_TRANSAKTIONEN_8_AGG.
Erstellen Sie eine neue Tabelle mit dem Namen UMSATZ_PRO_KUNDE und platzieren Sie diese
rechts neben die Tabelle WH_TRANSAKTIONEN.
Ziehen Sie den Aggregator-Operator
in den Editor zwischen die Tabelle
WH_TRANSAKTIONEN und die neue Tabelle.
Überführen Sie die Felder KUNDENCODE und BESTELL_TOTAL in den INGR1-Bereich des
Aggregators.
Definieren Sie jetzt den GROUP BY Ausdruck: Markieren Sie mit der Maus den Kopf des
Aggregators. In dem Properties Inspektor erscheint jetzt ein Feld mit dem Namen Group By
Clause. Über dieses Feld gelangen Sie in den Group By Claus Editor.
Festlegen der GROUP BY Klausel








Schieben Sie das Feld KUNDENCODE in die rechte Fläche
OK.
In der Mapping-Fläche sehen Sie jetzt, dass das Feld KUNDECODE in dem OUTGR1-Bereich
des Aggregators erscheint.
Erfassen Sie jetzt zusätzlich für den Ausgabebereich des Aggregators das Feld
SUMME_PRO_KUNDE (Analog dem Expression-Editor) (-> Rechte Maustaste auf den Kopf des
Aggregators -> Open Details).
Benennen Sie den Aggregator SUMME_PRO_KUNDE.
Markieren Sie das neue Feld SUMME_PRO_KUNDE und Sie sehen in dem Properties Inspektor
Fenster ein Feld mit dem Namen EXPRESSION. Hierüber gelangen Sie in den Expression Editor.
Wählen Sie unter:
 Function
-> SUM
 ALL/DISTINCT
-> ALL
 Attribute
-> BESTELL_TOTAL
Wählen Sie abschließend: Use Above Values.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
109/300
Festlegungen für die SUM-Anweisungen
Tip: Sie können unter Expression auch manuell Einträge vornehmen. Z. B. sind alle
analytischen Funktionen hier möglich.


Erstellen Sie die neue Tabelle in dem Modul WARHOUSE (-> rechte Maus auf den Kopf der
Tabelle -> Create And Bind).
Generieren Sie die neue Tabelle und das Mapping über das Control Center und testen Sie das
Mapping.
Das Ergebnis im Data Viewer
Das erweiterte Mapping sieht jetzt so aus:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
110/300
Das Mapping MP_TRANSAKTIONEN_8_AGG
Lookup Tabellen lesen
Eine der häufigsten Transformationen bei dem Laden von Daten in das Warehouse, ist das
Dekodieren von Schlüsselinformationen über Referenzwerte in einer anderen Tabelle. Hierzu nutzen
Sie den Key-Lookup-Operator.
Anforderung: Die in dem Vorbeispiel erstellte Tabelle Umsatz_Pro_Kunde soll um RegionenInformationen angereichert werden, d. h. pro Kunde sind Bundesland und die Wohnregion des
Kunden hinzuzufügen. Als Referenztabelle dient die Tabelle ORTE aus dem SRC-Schema.

Kopieren Sie das Mapping WH_TRANSAKTIONEN_8_AGG
WH_TRANSAKTIONEN_9_LOOKUP.
in
das
neue
Mapping
Eine nachträgliche Änderung in ein Mapping einbauen
Um später einen Lookup auf die Orte-Tabelle durchführen zu können, ist ein Schlüssel nötig: der OrteSchlüssel. Dieser ist in der Tabelle UMSATZ_PRO_KUNDE nicht enthalten. Wir haben zwei
Möglichkeiten zu dieser Nummer zu gelangen:
 Wir nehmen einen separaten Lookup auf die Kundentabelle vor, um die Ortenummer zu
erhalten oder
 wir gehen zurück in den Joiner und ziehen aus der Quelltabelle das Feld ORTNR nach.
Die zweite Variante ist sicher besser, denn die erste hätte eine zusätzliche Leseoperation auf die
Kundentabelle zur Folge, wir würden in einem Mapping zwei mal auf die Kundentabelle zugreifen.




Führen Sie das Feld ORTNR aus der Tabelle KUNDE in den entsprechenden Eingangsbereich
des Joiners. Zur besseren Orientierung können Sie für den Joiner das Display Set für den Kunden
selektieren. Beachten Sie, dass das Feld auch durch den Filter-Operator zu führen ist.
Ziehen Sie das Feld weiter in die Tabelle WH_TRANSAKTIONEN.
Aus WH_TRANSAKTIONEN muss es jetzt noch in den Aggregator SUMME_PRO_KUNDE
gelangen.
Nehmen Sie das neue Feld ORTENR über den Properties-Inspektor in die GROUP BY Klausel mit
auf. ORTENR wird danach in dem Ausgangsbereich des Operators erscheinen.
Das Ganze sieht etwas aufwändig aus, aber durch die graphische Unterstützung behält man den
Überblick. Die Änderung ist dennoch schnell durchgeführt. Der Vorgang zeigt aber auch, dass
komplexere Mappings nicht von Beginn an geplant werden können und Änderungen immer auf der
Tagesordnung stehen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
111/300

Ziehen Sie den Lookup-Operator
aus der Palette zwischen den Aggregator
SUMME_PRO_KUNDE und die Tabelle UMSATZ_PRO_KUNDE.

Es erscheint der Lookup-Operator Wizard mit der ersten Aufforderungen den neuen Operator zu
benennen. Geben Sie dem neuen Operator den Namen ANREICHERN_KUNDE. (Step 1/5)
Next
(Step 2/5) Next
(Step 3/5) Jetzt sehen Sie eine Liste mit allen Operatoren des gesamten Mappings. Aus dieser
Liste können Sie ein Feld auswählen, das als Eingabeschlüsselwert für den Lookup-Operator
dient, also der Wert, der umzuschlüsseln ist. Das ist in unserem Fall das Feld ORTNR aus dem
Operator SUMME_PRO_KUNDE (Aggregator).





Next.
(Step 4/5) Es erscheint der Schritt in dem Sie die Lookup-Tabelle auswählen. Wählen Sie im
oberen Bereich die Tabelle ORTE aus dem Modul SRC. Im unteren Bereich selektieren Sie bei
Lookup Key die Ort_NR (das ist das Schlüsselfeld der referenzierten Ortetabelle und rechts unter
Input Attribut das Feld ORTNR (das ist das Input-Feld, das wir in dem vorherigen Schritt gewählt
haben.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step







112/300
Next
(Step 5/5) Im letzten Schritt sind die Rückgabefelder des Lookup-Operators zu wählen. Hier
könnten Sie auch noch zusätzliche Funktionen für jedes Feld in dem rechten Bereich (dort wo
NULL steht) hinterlegen. Das ist in unserem Fall aber nicht nötig.
Next und Finish
Ziehen Sie jetzt die beiden Felder BUNDESLAND und REGION in die Tabelle
UMSATZ_PRO_KUNDE.
Synchronisieren Sie die Tabellen WH_TRANSAKTIONEN und UMSATZ_PRO_KUNDE mit dem
Modul WAREHOUSE (-> rechte Maustaste auf den Kopf der jeweiligen Tabellen -> Synchronize > Option Outbound....)
Sie müssen jetzt die geänderten Tabellen neu generieren:
 WH_TRANSAKTIONEN
 UMSATZ_PRO_KUNDE
 und natürlich das neue Mapping
Testen Sie es und betrachten Sie sich die Tabelle UMSATZ_PRO_KUNDE im Data Viewer
 Tip: Denken Sie bei Ihren Tests daran, die Tabelle UMSATZ_PRO_KUNDE
auf
TRUNCATE/INSERT zu stellen, damit Sie nicht aus Versehen bei wiederholten Läufen mit alten
Werten arbeiten.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
113/300
NULL-Werte verhindern
Bei der Durchsicht der Ergebnisdaten in der Tabelle UMSATZ_PRO_KUNDE ist zu erkennen, dass in
einigen Sätzen kein Wert für BUNDESLAND und REGION angezeigt wird. Das ist auch erklärbar,
denn der Lookup-Operator wird im SQL-Code mit einem Outer-Join realisiert, der für den Fall, dass
kein Wert in der Referenztabelle gefunden wird, ein NULL-Wert zurückliefert. Für diesen Fall ist es
praktisch, diese Sätze mit einem String z. B. „Keine oder falsche Ortsangabe“ zu markieren. In einem
nachgelagerten Schritt können Sie diese Sätze herausfiltern und korrigieren.
Wir lösen die Aufgabe, indem wir in dem Lookup-Operator ANREICHERN_KUNDE für die
Rückgabefelder BUNDESLAND und REGION eine Funktion z. B. NVL mitgeben.




Öffnen Sie dazu den Lookup-Editor des Operators ANREICHERT_KUNDE (-> rechte Maustaste
auf den Kopf des Operators -> Open Details).
Gehen Sie auf No-match Rows.
Tragen Sie unter Default Value den String
’Keine oder falsche Ortsangabe’ ein.
Achten Sie darauf dass das Zielfelder in der Tabelle UMSATZ_PRO_KUNDE (BUNDESLAD und
REGION die richtige Größe haben. Der String ist sehr lang. Sonst gibt es später beim Starten des
Mappings Fehler.
Das Festlegen Markierungstexten für den NULL-Fall
Die Zieltabelle sieht jetzt so aus:
Die Tabelle UMSATZ_PRO_KUNDE mit der Markierung „Keine oder falsche Ortsangabe“ im NULLFall
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
114/300
Das Mapping sieht jetzt so aus:
Das Mapping MP_TRANSAKTIONEN_9_LOOKUP
 Tip: Das Schlüsselfeld aus der Lookup muss ein Primary Key oder zumindest ein Unique Key-Feld
sein, d.h. eindeutige Werte enthalten. Ist dies nicht der Fall, wird der Validate dies als Problemfall
melden. Es kann später zum Laufzeitpunkt zu Abbrüchen kommen.
Set Operator (UNION, UNION ALL, MINUS, INTERSECT)
Set ist ein Mengenoperator, mit dem die Ergebnismengen von 2 und mehr SELECT-Befehlen wie in
der Mengenlehre weiterverarbeitet werden.
Es gilt:
 UNION: Die Ergebnisse von 2 oder mehreren SELECTs werden zusammengefasst, doppelte
Sätze eliminiert.
 UNION ALL: Wie vorher, jedoch bleiben doppelte Sätze erhalten
 MINUS: Die Ergebnismenge eines zweiten SELECTS wird von der Ergebnismenge des ersten
SELECTS abgezogen.
 INTERSECT: Es werden nur diejenigen Sätze geliefert, die in beiden (oder mehr) SELECTErgebnismengen vorhanden sind.
Beachten Sie bei dem Umgang mit dem SET-Operator, dass alle SELECTs die gleiche Feldstruktur
haben. Die Zieltabelle kann davon abweichen aber nur, wenn es die implizite Typkonvertierung der
Datenbank erlaubt. Wandlungen von NUMBER nach VARCHCHAR2() sind z. B. erlaubt umgekehrt
führt es jedoch zu einem Fehler.
Anforderung:
Es sollen alle Kunden gefunden werden, die noch nicht bestellt haben. Vorgehensweise:
1. Zusammenfassen von allen Firmen- und Privatkunden (UNION)
2. Abziehen dieser gefundenen Kundenmenge von der Ursprungstabelle Kunde aus dem Schema
SRC (MINUS).





Erstellen Sie ein neues Mapping mit dem Namen MP_SET
Ziehen Sie die Tabellen WH_TRANS_FIRMA und WH_TRANS_PRIVAT aus dem Modul
WAREHOUSE und die Tabelle KUNDE aus dem Modul SRC in die Editorfläche.
Ziehen Sie jetzt 2 Set-Operatoren in den Editor.
Für den ersten Set-Operator versorgen Sie die INGRP-Bereiche durch die Tabellen
WH_TRANS_FIRMA und WH_TRANS_PRIVAT. Setzen Sie seine Properties auf UNION
(Properties Inspector)
Den zweiten SET-Operator versorgen Sie bei INGRP1 mit der Tabelle KUNDE und den INGRP2Bereich durch den OUTGRP-Bereich des ersten Set-Operators. Nehmen Sie allerdings jeweils nur
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step



115/300
das Kundennummern (Code)-Feld mit. Stellen Sie die Eigenschaften des zweiten Operators auf
MINUS.
Erzeugen Sie jetzt eine neue Tabelle KUNDE_OHNE_BESTELLUNG und überführen Sie das
eine Ausgangsfeld des Operators in die neue Zieltabelle.
Erzeugen Sie die neue Tabelle in dem Modul WAREHOUSE (-> rechte Maustaste auf den Kopf
der Tabelle -> Create And Bind) und generieren Sie die neue Tabelle und das neue Mapping über
das Control Center.
Testen Sie das Mapping und betrachten Sie sich die Ergebnisse mit dem Data Viewer.
Mapping MP_SET
Pivoting mit SQL Mitteln - Der Pivot-Operator
°°°°° Bezieht sich noch auf das ältere Release°°°°°°
Gerade bei dem Verarbeiten von Textdateien kann es vorkommen, dass in den Columns eines Satzes
Informationen enthalten sind, die auf mehrere Sätze verteilt leichter verarbeitet werden können.
Beispiel: Eine Excel-Tabelle enthält eine Jahresübersicht mit Artikelumsätzen. Die Tabelle besteht aus
Spalten mit Monatswerten. Während des Ladens der Excel-Tabelle in das Warehouse müssen aus
einem Satz mit 12 Monatswerten 12 Sätzen mit jeweils einem Monatswert entstehen.
Diese Aufgabenstellung lösen wir mit dem Pivot-Operator
Die Beispieldatei:
Artikel_Nr;Januar;Februar;Maerz;Mai;Juni;Juli;August;September;Oktober;November;Dezember
1;3467;652456;8945;7490;7465;84734;3448;64637;33445;9499;84658;747764
5;3467;654256;89234545;749440;744565;846774;7097788;8945337;334545;946799;878458;748764
55;3467;6354556;866775;748990;78905;834644;623478;66547;3367845;949909;8445658;74654764
36;3467;645456;89545;74590;7245;5674;89058;23437;33545;95499;84558;754764
32;3467;645456;86875;7490;74985;8474;6378;6637;3345;9499;8458;74764
23;3467;655456;89845;74690;74665;84674;63878;66837;38345;94899;8458;74764
59;3467;656456;894775;76490;748965;804774;6ß378;669837;388345;94899;847658;74764
2;3467;654656;86456;7690;7465;8474;6378;6637;3345;9499;8458;74764
4;3467;654656;89645;74690;7465;8474;6378;6637;3345;9499;8458;74764
39;3467;686;89890;7490;7465;8474;63078;666437;33345;94992;826458;748964
12;3467;65236;8545;74906;74675;84374;637458;66337;336745;94299;84658;746764


Importieren Sie die Beschreibungsdaten der Flat File Artikelumsatz.csv in das Textmodul Ihres
Projektes. „Sampeln“ Sie die Datei. (Wenn die Datei nicht vorhanden ist, erzeugen Sie die Datei
aus den vorstehenden Beispielsätzen).
Machen Sie daraus eine External Table EX_Artikelumsatz in dem Modul Warehouse.
„Deployen“ Sie die External Table und testen Sie den Zugriff über SQL*Plus.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
116/300



Erstellen Sie ein in dem Warehouse-Modul ein neues Mapping mit dem Namen MP_Pivot.
Ziehen Sie die neu erstellte External Table EX_Artikelumsatz in den Editor.
Erstelle Sie eine neue Tabelle Artikelumsatz und erfassen Sie die Attribute Artikel_nr,Umsatz
und Monat wie folgt:



Ziehen Sie jetzt den Pivot-Operator
aus der Toolbox in die Editorfläche. Ein Wizard startet.
Als erstes legen Sie den Namen fest. Nennen Sie ihn UMSATZ_PRO_MONAT.
Den nächsten Schritt der Definition In-/Out-Groups überspringen Sie, weil das System bereits die
Vorgaben mit INGRP1 und OUTGRP1 getätigt hat. (Sie könnten auch mehrere Eingabegruppe
verwenden. Unser Beispiel enthält jedoch nur eines).
Im folgenden Schritt übernehmen Sie die Eingabeattribute der Quelle und schieben diese in das
rechte Fenster. In unserem Fall sind das alle Attribute der Quelltabelle.


Jetzt können Sie die Attribut-Eigenschaften der Felder des Pivot-Operators festlegen, z. B. die
Schlüsseleigenschaft eines Feldes.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

117/300
Jetzt müssen Sie die gewünschten Ausgabeattribute des Pivot-Operators festlegen. In unserem
Beispiel kennt der Operator bis jetzt nur das Schlüsselfeld Artikel_NR. Erfassen Sie jetzt ein Feld
Umsatz um die Umsatzwerte (numerisch) darzustellen und ein Feld Monat für die Monatsnamen.
An dieser Stelle ist der Begriff Row Locator zu erklären. In der Quelltabelle sind die Monatswerte in
einer Reihe mit zwölf Spalten abgelegt. Jedem Feld dieser Reihe kommt virtuell eine bestimmte Rolle
zu, das erste Feld repräsentiert eine Januarsumme das 2. eine Februarsumme usw. In der Zieltabelle
gibt es dieses eindeutige Rolle nicht mehr. Hier existiert keine Spaltenposition mehr, anhand der wir
erkennen können, ob es sich um einen Januar- oder Februarwert handelt. Um dennoch eine
Orientierung zu erhalten um welchen Monat es sich handelt, sollten Sie ein optionales Hilfsfeld für den
Monatsnamen einführen. Dieses Feld ist optional aber sinnvoll. Dieses Attribut mit dem Monatsnamen
heißt Row Locator.


Markieren Sie jetzt das Feld Monat als Row Locator Feld.
In dem letzten Schritt legen Sie das Schema der Satzfolgen fest. Das Prinzip des Pivoting besteht
darin, für die Anzahl der Spalten einer Quelltabelle eine entsprechende Anzahl Zeilen in der
Zieltabelle zu erstellen. Zwölf Spalten produzieren somit zwölf Zeilen und jede Zeile der Quelle
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
118/300

erzeugt eine Gruppe von zwölf Zeilen der Zieltabelle. Jetzt bestimmen Sie die Inhalte der Felder
dieser zwölf Zeilen.
Fügen Sie zunächst 12 Zeilen ein (Add) Row1 bis Row12.
Das Schlüsselfeld Artikel_Nr kann nicht mehr verändert werden, weil es als Schlüsselfeld
gebraucht wird. Alle anderen Felder sind mit Null vorbelegt. Legen Sie für das Umsatzfeld in der
ersten Zeile das Quellfeld INGRP1.JANUAR fest. Für die zweite Zeile wählen Sie
INGRP1.FEBRUAR usw. In der Monatsspalte definieren Sie dann die Monatsnamen für die
jeweiligen Zeilen
Und jetzt Finish

Editor für den Pivoting-Operator
Verbinden Sie die OUTGRP-Felder des Pivot-Operators mit der Zieltabelle


Pivoting Mapping (Demo: MP_Pivot)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
119/300
Alle Einstellungen können nachträglich über Edit (rechte Maustaste auf den Kopf des Pivot-Operators
wieder geändert werden.


Schieben Sie die neue Tabelle Artikelumsatz in das Warehouse-Modul.
Generieren Sie die neue Zieltabelle und das neue Mapping und testen Sie es.
Das Ergebnis:
Inhalte der Ergebnisstabelle Artikelumsatz nach der Pivoting-Operation.
Unpivoting mit SQL Mitteln - Der Unpivot-Operator
[Der Unpivot-Operator ist analog zu dem Pivot-Operator zu bedienen.]
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
120/300
Unternehmensdaten integrieren – Teil 1
(Textdateien)
Integrieren von Textdateien
Bislang haben wir nur Tabellen aus einer Oracle Datenbank verarbeitet. Hier sollen weitere mögliche
Quellen vorgestellt werden. Eine der wichtigsten Quellen sind Textdateien. Unter Textdateien
verstehen wir ASCII (oder EBCEDIC)-Dateien, die auf der Betriebssystemebene vorliegen. In der
Regel liegen sie in 2 Formaten vor:
1. Dateien bei denen ein Separator (z. B. ; ) die Felder der Sätze unterteilt (CSV- oder Comma
Separated Values-Strukturen).
2. Dateien mit Felder fester Länge (Fixed Length)
Zudem können Dateien mehrere Satzarten enthalten. Ein Satzkennzeichen identifiziert die einzelnen
Satzarten.
Seit dem Datenbank-Release Oracle 9i steht die Technik der External Tables zur Verfügung um
Textdateien in die Warehouse-Datenbank einzulesen. Diese Technik ersetzt in den meisten Fällen die
davor genutzte Technik des SQL-Loaders.
In beiden Fällen ist zunächst die Struktur der Textdatei einzulesen – also der Metadaten – Import
durchzuführen. Der WAREHOUSE BUILDER gruppiert die Textdateien in einem separaten Modul.
Textdateien sind meist bestimmten Themenbereichen oder Abteilungen zugeordnet. Auch hier helfen
die Module, um die unterschiedlichen Textobjekte nach fachlichen Kriterien zusammen zu fassen.
Aufgabenstellung: Eine Liste mit Ortsnamen liegt als CSV-Datei vor. Lesen Sie diese ein. Sie
bildet später die Grundlage für eine Orte-Dimension.








Definieren Sie in dem Design Center unter dem Punkt Files ein neues Modul mit dem Namen
FF_Orte
Unter Ihrem Projektordner finden Sie den Punkt „Files“. Über die rechte Maustaste wählen Sie
dann den Punkt „NEW“.
Ein Wizard startet in dem Sie den Namen für das neue Modul anlegen können.
Die Angabe über das Verzeichnis in dem die Datei liegt, verbirgt sich hinter einer Location. Sie
müssen also jetzt eine Location definieren. Wählen Sie die Option Edit und Sie können genaue
Angaben zur Location machen. Ändern Sie am besten auch den Namen der Location z. B. auf
LC_FF_ORTE, weil der vorgeschlagene Name sehr lang und wenig sprechend ist. Wählen Sie
das Verzeichnis, in dem sich die Beispieldatei Orte.CSV befindet.
Wählen Sie über den Wizard das Verzeichnis aus, in dem die Datei zu finden ist. Die Dateien
selbst werden nicht angezeigt. Die Dateinamen werden erst bei dem späteren Import-Vorgang
festgelegt.
(Bei UNIX-Systemen ist hier ein entsprechender UNIX-Pfad anzugeben. Er muss allerdings hierzu
von der Windowsumgebung her sichtbar sein).
Nachdem Sie Next und Finish gedrückt haben erscheint das neue Modul. Die neue Location
(LC_FF_ORTE) finden Sie jetzt auch unter dem Connection Explorer wieder und zwar unter
Locations / Files.
Starten Sie jetzt den Import-Wizard (-> Rechte Maustaste auf den Namen des neuen Moduls ->
Import.)
Nachdem Sie die ersten beiden Masken mit Next übersprungen haben, erhalten Sie eine Liste von
allen Dateien in dem Verzeichnis, das Sie bei der Definition der Location angegeben haben.
Achtung Demodaten: Orte.csv

Wählen Sie die Datei ORTE.CSV und schieben Sie diese in das rechte Fenster ( Das ist in
unserem Beispiel eine einfache Datei, mit nur einer Satzart, bei der die einzelnen Spalten mit
einem Komma getrennt sind. Eine erste Spalte enthält die Spaltenüberschriften).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step



121/300
Next.
Jetzt erscheint vor dem
Dateinamen ein roter Punkt.
Das
bedeutet
dass
die
Metadaten für diese Textdatei
noch nicht beschrieben sind.
Wählen
Sie
in
dem
Folgedialog
die
Option
SAMPLE.
Im unteren Teil erkennen Sie die
ersten Sätze der Datei und eine
Zeile mit Spaltenüberschriften. Sie
sehen, dass die Textfelder mit
einem
Hochkomma
gekennzeichnet sind.
Die Überschriftenzeile können Sie
später als Column-Namen nutzen.
Die Hochkomma sind noch zu
entfernen.
 Die nächsten Bildschirme
können
Sie
mit
Next
überspringen, bis Sie auf den
Bildschirm zur Angabe der
„Field delimiter“ kommen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step




122/300
Entfernen Sie die Hochkomma
für die dargestellten Sätze
(Enclosures Left / Right).
Setzen Sie den Field Delimiter
auf
Komma.
(Das Ergebnis müsste dann
aussehen
wie
rechts
dargestellt).
In einem der folgenden Dialoge wählen Sie Use the first record as the field names,
um die erste Zeile als Spaltenüberschriften zu nutzen.
Beenden Sie den Dialog.
Die Metadaten für die Ortedatei sind jetzt vorhanden.
Über das Kontextmenü (rechte Maustaste auf den Dateinamen) können sie im Projekt-Explorer
nachträglich Eintragungen vornehmen, jedoch nicht den Dateinamen bzw. Pfad.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
123/300
Anzeigen der Eigenschaften einer bereits eingelesenen Textdatei
Fragen an den Experten:
Wie werden EBCDIC-Dateien eingelesen?
EBCDIC-Dateien werden genauso gelesen, wie ASCII-Dateien. Hier stellt man jedoch einen anderen
Zeichensatz im Verlauf des Samplings ein. Die Tatsache, dass OWB die ersten 1000 Sätze zum
Analysieren bereits anzeigt und bei EBCDIC auch gleich in ein ASCII-lesbares Format umwandelt, ist
sehr hilfreich um z. B. eine unbekannt Satzlänge für Fixed-Format-Dateien herauszufinden. Werden
manche Zeichen nicht richtig dargestellt, so hat man die falsche Satzart erwischt.
Wie werden Dateien z. B. auf Unix-Servern eingelesen?
Warehouse Builder kann im Verlauf des Samplens nur Dateien lesen, die in dem unmittelbaren Zugriff
über das Dateiverzeichnis des Entwicklungsrechners liegen. Sind die einzulesenden Dateien auf
einem anderen Rechner, so müssen die Verzeichnisse (Laufwerke) dieses anderen Rechners dem
Entwicklungsrechner bekannt gemacht werden. Das gilt auch für UNIX Betriebssysteme. Ist dies nicht
möglich, so muss für den Zeitraum der Entwicklung die Datei (eine Beispieldatei oder die ersten 100
Sätze der Datei) auf den Entwicklungsrechner kopiert werden.
Tip: Wenn Sie Textdateien mit vielen Spalternüberschriften besitzen und diese nicht einzeln
schreiben wollen, suchen Sie nach Tabellen mit analogen Spaltennamen. Erstellten Sie sich ein
Mapping in dem Sie als Ziel eine neue Textdatei wählen. Indem Sie die ganze Gruppe aus der Tabelle
in die Zieldatei ziehen, übernimmt diese die Spaltennamen. Erzeugen Sie die Datei in einem
Textmodul neu und Sie haben dort die gewünschte Tabellenbescheschreibung.
Einlesen von Textdateien über External Tables
Textdateien lädt man seit dem Oracle 9i Datenbank-Release am einfachsten mit den sog. External
Tables in die Datenbank.
External Tables behandeln Sie wie normale Tabellen. In der Projektarbeit hat sich die Überlegenheit
der External Tables gegenüber dem SQL*Loader deutlich gezeigt.
Die Vorteile:
1. Staging -Tabellen entfallen. Der gesamte Ladevorgang gestaltet sich homogener und
kompakter, weil kein separates Programm neben der Datenbank zusätzlich zu starten ist.
2. Es können Joins auch auf externe Tabellen gebildet werden.
3. Zum Filtern, Aggregieren und Wandeln können Sie SQL-Mittel und PL/SQL-Prozeduren
nutzen.
4. Das Datenbanksystem regelt selbständig die Parallelisierung im Verlauf der Verarbeitung der
Sätze, die aus der Textdatei gelesen werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
124/300
Erstellen einer External Table aus einer Textdatei-Definiton
 Definieren Sie unter dem Modul WAREHOUSE eine External Table mit dem Namen EX_ORTE
(-> Rechte Maustaste und dann „New“)
 Im Verlauf des Wizard-Dialogs erscheint eine Liste aller Textdateien, die in dem Projekt definiert
sind.
 Wählen Sie die Datei Orte_CSV
 Next
 Wählen Sie die Location an der sich die Textdatei befindet.
 Beenden Sie den Dialog mit Finish.
Die Definition zur Textdatei OREe_CSV liefert also die
Vorlage für die External Table-Definition EX_ORTE.
Erzeugen einer Directory-Definition in der Datenbank
Bevor Sie die External Table generieren und nutzen können, brauchen Sie eine DirectoryAnweisung.
Die Fundstelle der Textdatei legt eine CREATE DIRECTORY Anweisung fest. Das macht die
Pfadangabe unabhängig von der eigentlichen External Table-Definition. Sie ist variabel und jederzeit
auch automatisiert änderbar. Bei einer Änderung des Pfades ist nur die CREATE DIRECTORYAnweisung zu erneuern. Die Definition der External Table jedoch bleibt stabil.
Beispiel für eine Directory-Definition:
CREATE DIRECTORY link-name AS ‘//dir/pfad-name’;
Oder die in diesem Beispiel zu generierende Definition:
CREATE DIRECTORY LC_FF_ORTE AS '’D:\szenario\testdaten';
Sie können alle bereits bestehenden Directory-Einträge in der Datenbank abfragen mit:
select * from all_directories;
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
125/300
Festlegen von physischen Ablagen von Dateien mit Hilfe von sog. Directory-Objekten
Generieren von Directory-Objekten für External Tables
Der WAREHOUSE BUILDER realisiert die Directory-Festlegung über die Location, die dem
Textmodul zugewiesen wurde. Diese Zuweisung haben Sie bei der Definition des Moduls
vorgenommen.
 Rufen Sie das Control Center auf.
 Registrieren Sie die Location, die Sie zu dem Textmodul finden.
 Betrachten Sie die Location zu dem Modul Warehouse.
Registrieren der Text Modul-Location

Nach dieser Registrierung finden Sie unter der Location für das Modul in dem sich die External
Table befindet einen von dem Warehouse Builder automatisch erzeugten Eintrag: Einen
Connector. Der Name entspricht dem Namen der Location von dem Textmodul.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
126/300
Connection, die das System gebildet hat.
Dies ist die Vorlage für die CREATE DIRECTORY-Definition

Diese Connection ist als erstes zu generieren. Dies erzeugt die CREATE DIRECTORY-Definition.
Achtung: Im Jüngsten OWB-Release 10G R2 wird die Directory-Definition automatisch zusammen mit
der External Table-Definition erstellt, wenn sie noch nicht da ist.

Generieren Sie jetzt die External Table.
 Tip: Der Deployment Manager kann schnell unübersichtlich wirken, wenn man ihn falsch nutzt.
Wenden Sie doch folgenden Trick an:
Markieren Sie in dem Deployment Manager das Projekt. Im rechten Fenster erscheinen jetzt
alle Objekte des gesamten Projektes. Wenn Sie bislang alle Objekte generiert haben, so
müssen nur die beiden noch nicht generierten Einträge für das Directory (Connection
die External Table
„deployen“.
als noch nicht deployed
) und
aufgelistet sein. Diese können Sie jetzt
Test der External Table Definition
Wie stellen Sie fest, ob die External auch wirklich funktioniert?
 Starten Sie SQL*Plus und gehen Sie in Ihr Zielschema, in das Sie die External Table generiert
haben.
 Setzen Sie folgendes Kommando ab:
Test der External Table-Definition mit SQL Plus

Sie können aber auch den Data Viewer verwenden indem Sie mit der rechten Maustaste auf die
External Table drücken und Data wählen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
127/300
Die External Table wird verwendet wie eine Tabelle, also kann man auch den Data Viewer verwenden,
obwohl die hier gezeigten Sätze nicht in der Datenbank stehen.
External Tables in einem Mapping benutzen
External Tables benutzen Sie in den Mappings wie normale Tabellen.

Erzeugen Sie in dem Modul WAREHOUSE ein Mapping MP_EX_Orte


Ziehen Sie aus der Palette das Symbol für die External Tables
in die Editorfläche.
Wählen Sie in dem erscheinenden Dialog die External Table EX_ORTE unter dem Modul
WAREHOUSE aus.

Erzeugen Sie eine neue Tabelle in dem Mapping-Editor, indem Sie das Tabellensymbole
aus der Palette in die Editorfläche rechts neben die External Table ziehen und unter
Create unbound operator with no attributes den Namen Orte_Tab anlegen.
Ziehen Sie die Spalten der External Table in die neue Tabelle.
Erzeugen Sie die neue Tabelle auch in dem Modul WAREHOUSE (-> rechte Maustaste auf den
Kopf der neuen Tabelle -> Option Create and Bind).
Drücken Sie OK und kopieren Sie alle Columns der External Table in die neue Zieltabelle.




Verwenden einer External Table
Generieren Sie die neue Tabelle ORTE_TAB und das Mapping und testen Sie das Mapping und
die Ergebnisse in der Tabelle über den Data Viewer.
Dies war ein sehr einfaches Mapping. Bedenken Sie, dass sie alle SQL-Lese-Operationen auf
External Tables durchführen können, also auch Joiner, Splitter, Filter, Aggregationen, Pivot,
Unpivot, Table Functions.... Weiter unten folgen hierzu weitere Techniken.
Einlesen von Dateien mit dem SQL Loader
(Dies ist eine alte Variante oder nur anzuwenden, wenn nur eine Oracle 8i-Datenbank vorhanden ist.
Daher wird dieser Abschnitt sehr knapp gehalten und ist nur zur Vollständigkeit aufgenommen.
Arbeiten Sie den Abschnitt nur dann durch, wenn für Sie das Erzeugen von Control Files für den
Loader wichtig ist .)
Dateien können in einem Oracle Warehouse auch über den klassischen SQL Loader angebunden
werden. Dieses separate Programm ist außerhalb der Datenbank zu starten. Der Warehouse Builder
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
128/300
generiert den Steuer-Code (CTL-Dateien) für den SQL-Loader. Die Metadaten zu den Dateien sind
innerhalb des OWB-Repositories vorgehalten.
Dateien werden innerhalb der Mappings wie Tabellen behandelt.
Dateien können die Strukturen CSV (Comma Seperated Value) oder Fixed Length (feste
Spaltenlänge) und mehrere Satzarten haben.
 Erzeugen Sie in dem Modul WAREHOUSE ein Mapping MP_SQL_LOADER


Ziehen Sie das Flat File-Symbol
aus der Palette in den Editor.
Wählen Sie die Flat File Orte_CSV und bestätigen Sie mit OK bzw. Finish.

Ziehen Sie das TABLE-Symbol
aus der Palette in den Editor und erstellen Sie eine neue
Tabelle Orte_Neu..
Verbinden Sie jetzt die Flat File-Attribute von der Quelle in die Zieltabelle.
Generieren Sie alle Objekte.
Anstelle der Generierung in die Datenbank wird ein Control-File erzeugt. Der Speicherort für diese
Control File ist unter Configuration des Mapping anzugeben.



Das


Ergebnis
ist
ein
Control-File-Script
für
den
SQL-Loader:
Zum korrekten Lauf muss die Location des Moduls, aus dem die Textdatei stammt, registriert sein
(rechte Maustaste auf den Location-Namen und dann Option Register).
Sie können auch im Verlauf des Deploy-Prozesses das CTL-File über die Deploy To File Option in
ein Zielverzeichnis Ihrer Wahl schreiben und unabhängig von dem Warehouse Builder mit eigenen
Mitteln weiterarbeiten, z. B. mit einer Batch-Datei für den Loader-Aufruf:
sqlldr userid=DW/DW,control=MP_ORTE.ctl,log=log.log
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
129/300
Die Operatoren - Teil2: Generische und
wiederverwendbare Komponenten und Text-Output
Verwenden von Funktionen und Prozeduren –
Die erweiterbare Funktionsbibliothek
Es gibt Anforderungen, die nicht mit einfachen SQL Befehlskomponenten zu lösen sind. Hier helfen
zusätzliche PL/SQL- oder Java-Funktionen. Solche Funktionen sind in der Funktionsbibliothek zu
finden. Sie können eigene Funktionen innerhalb Warehouse Builder programmieren oder bestehende
aus einer Datenbank importieren oder mit anderen Werkzeugen die Funktionen erstellen und sie dann
über die Datenbank importieren.
Diese Funktionen/Prozeduren sind die Schnittstelle hin zur freien Programmierung. Beliebige
Aktivitäten in der Datenbank sind möglich. Die erweiterbare Funktionsbibliothek des Warehouse
Builder ist damit ein Sammelort für alle zum Aufbau des Warehouse nötigen Routinen.
In Funktionen oder Prozeduren sind auch solche Rechen- und Transformationsoperationen zu
konzentrieren, die man an anderen Stellen wieder verwenden will. Die Expressions, die wir bereits
kennen gelernt haben, finden wir nur innerhalb eines Mappings fest hinterlegt. Man kann den Code
allenfalls mit Cut/Paste in ein anderes Mapping kopieren, dann ist es aber nicht mehr derselbe Code
und er kann getrennt und ohne Synchronisation geändert werden.
Funktionen sind nur innerhalb der Funktionsbibliothek zu ändern. Nachdem sie in die Datenbank
„deployed“ wurden, wirken sie in allen Mappings in denen sie verwendet wurden gleichermaßen.
Sie können Funktionen und Prozeduren an zwei Stellen definieren:
 innerhalb der Module
 über den Global Explorer
Definitionsorte von Funktionen und Prozeduren
Die Möglichkeit Funktionen und Prozeduren in Modulen zu definieren ergibt nur einen
dokumentarischen Sinn. Wenn die Objekte später die Datenbank generiert werden, sind sie auch
allgemein zugänglich. Auch wenn Sie innerhalb eines Mappings ein Objekt heranziehen, haben Sie
Zugriff auf alle Funktionen und Prozeduren in allen anderen Modulen.
 Tip: Bleibt die Frage, wo man die Objekte am sinnvollsten definiert. Hier gibt es nur die Regel:
Beziehen sich Funktionen nur auf die Tabellen in dem jeweiligen Modul, dann sollte man sie dort
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
130/300
ablegen. Man kann somit Metadaten auf Modul-Ebene leicht mit anderen Projekten austauschen und
hat alle Objekte zusammen. Sind es generelle Funktionen (z. B. Zeitumrechnungen, oder
testdatengenerierende Funktionen), so sollte man sie in dem Global Explorer ablegen.
Über die Copy-Funktion können Sie bestehende Routinen als Vorlage nutzen. Das erleichtert die
Arbeit. Neue Funktionen/Prozeduren erstellt Sie über den Wizard der jeweils immer über die rechte
Maustaste und dann über „New ...“ startet.
Aus dem komfortablen Editor heraus kann die neu erstellt Routine direkt in die Datenbank gestellt und
getestet werden.
 Tip:
Das Zusammenfassen wichtiger und immer wieder zu benutzenden Funktionen/Prozeduren
in einer Bibliothek ist hilfreich, um eine projektübergreifende Bibliothek über einen längeren
Zeitraum wachsen zu lassen. Es entsteht eine sog. Ressourcen-Bibliothek, die über den
Metadaten-Loader in eine beliebige OWB-Umgebung hineinkopiert bzw. wieder um neue
Funktionen ergänzt und herausgeholt werden kann.
Anforderung: Für die beiden Tabellen WH_TRANS_PRIVAT und WH_TRANS_FIRMA soll eine
Bonusberechnung durchgeführt werden. Die Berechnung des Bonus unterliegt mehreren Regeln:
Für Firmenkunden:
- werden bis 50% des Umsatzes mit 2% belegt
- weitere 20 % mit 4%
Für Privatkunden:
- werden die ersten 30% mit 1% des Umsatzes belegt
- weitere 10% mit 2%.
Es ist eine Funktion zu erstellen, die sowohl für Firmen- und Privatkunden einsetzbar ist.
Die Funktion wird zwei Aufrufparameter haben:
- Statusflag (F oder P)
- BESTELL_TOTAL.
Sie wird eine ermittelte Bonussumme zurückliefern.
Wir entschließen uns eine Funktion innerhalb des Moduls WAREHOUSE zu definieren.
Anlegen einer Funktion
 Erstellen Sie eine Funktion BONUS_Berechnung (-> rechte Maustaste auf Functions innerhalb
des Transformations-Astes in dem Warehouse-Modul. (Step 1/3).
 Erfassen Sie zwei Aufrufparameter für die Funktion: KUNDENSTATUS (varchar2) und
BESTELL_TOTAL (number). (Step 2/3).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

131/300
Jetzt erhalten Sie unter Step 2/3 die Möglichkeit den Funktions-Code zu erfassen. Wählen Sie
hierzu den Punkt Code-Editor.
In dem Editor-Fenster ist bereits ein Code-Template vorbereitet. Dieses Template an sich ist schon
ablauffähig, bewirkt durch die NULL-Schlüsselwörter jedoch nichts. An diesen Stellen müssen
Änderungen vorgenommen werden.

Erfassen Sie den Code wie folgt:
Funktion Bonus_Berechnung
Den Code zum Kopieren um das Schreiben zu sparen:
if KUNDENSTATUS = 'F' Then -- Firmenkunde
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
132/300
return ((BESTELL_TOTAL* 0.5)*0.02) + ((BESTELL_TOTAL* 0.2)*0.04);
end if;
if KUNDENSTATUS = 'P' Then -- Privatkunde
return ((BESTELL_TOTAL* 0.5)*0.02) + ((BESTELL_TOTAL* 0.2)*0.04);
Else return 0;
end if;





Testen Sie den Code jetzt über den Menüpunkt TEST.
Sie werden nach der Location gefragt die sie selektieren können (in unserem Fall ist das
LC_DWH).
nachdem Sie die Location quittiert haben erscheint im unteren Feld z. B. ‚Succussfully tested’.
Wenn dies erscheint, können Sie in das Zielschema in der Datenbank (DWH) wechseln und z. B.
folgenden Funktionstest machen:
Speichern Sie den Code mit SAVE unter dem Menüpunkt Code ab. und beenden Sie den Wizard
mit OK
Syntax-Check und Code-Debugging
Der Code-Editor macht zwar nur eine rudimentäre Syntax-Prüfung (Gelb-Markieren von Klammern
und Fettmarkierung von Schlüsselwörtern). Aber durch die Testfunktion ist er sehr praktisch
geworden. Wird ein Debugging gebraucht, so kann man z. B. den SQL Developer von Oracle nutzen,
der kostenlos von den Oracle-Seiten heruntergeladen werden kann ( oder er ist bereits auf der CD, mit
der diese Step_By_Step ausgeliefert wurde.
Debuggen mit Oracle SQLDeveloper
Wenn Sie diesen Debugger ausführen, denken Sie an die folgenden Rechte, die SYS as das Schema
DWH übertragen muss.
grant DEBUG CONNECT SESSION to DWH;
grant DEBUG ANY PROCEDURE to dwh;
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
133/300
Verwenden einer Funktion
Diese Funktion soll in das Beispiel integriert werden:

Kopieren Sie das Mapping WH_TRANSAKTIONEN_9_LOOKUP in das neue Mapping
WH_TRANSAKTIONEN_10_Function.

Ziehen Sie aus der Palette einen Transformation Operator
rechts
neben den Splitter.
Ein Fenster öffnet sich, über das Sie die Funktion BONUS_BERECHNUNG in dem Modul
WAREHOUSE auswählen können. OK









Verbinden Sie die Felder STATUS und BESTELL_TOTAL aus dem Splitterausgang für
Privatkunden mit den jeweiligen Eingabefeldern der Funktion.
Erzeugen Sie in der Zieltabelle WH_TRANS_PRIVAT ein neues Feld BONUS (number).
Verbinden Sie das Feld VALUE der Funktion mit dem neuen Feld BONUS in der Zieltabelle
Wiederholen Sie den Vorgang für die Tabelle WH_TRANS_FIRMA.
Synchronisieren Sie die Tabellen WH_TRANS_PRIVAT und WH_TRANS_FIRMA (-> rechte
Maustaste auf die Tabellenköpfe -> Synchronize -> Option Outbound)
Generieren Sie die geänderten Tabellen (Replace Option wählen) und das Mapping.
Die Funktion müssen Sie nicht mehr generieren, wenn Sie diese vorher bereits getestet haben.
Testen Sie das neue Mapping und betrachten Sie sich die Tabellen im Data Viewer.
Der aktuelle Stand des Szenarios sieht so aus:
Das Mapping MP_TRANSAKTIONEN_10_FUNCTION
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
134/300
Verwenden von Aufrufparametern
Mappings können variabel gehalten werden indem Aufrufparameter von außen auf Einstellungen
innerhalb des Mappings einwirken. In unserem Beispiel haben wir einen Filter eingebaut
(Kundennummer > 1000). Diese Einschränkung ist ein für alle Mal festgeschrieben. Mit einem
Aufrufparameter können wir diese Filterbedingung variabel halten.
Aufrufparameter können Sie wie ein Attribut einer Tabelle innerhalb des Mappings weiterverwenden.
Innerhalb des später generierten Mappings, stellt der Parameter ein einfacher Aufrufwert dar, den Sie
von der aufrufenden Instanz her bestimmen können.
Hilfreich sind Vorbelegungen für das Attribut, falls mal vergessen wird, später einen Parameter
mitzugeben.
Anforderung: Definieren Sie einen Aufrufparameter um den Filter zur Kundenselektion variabel zu
halten.











Kopieren Sie das Mapping WH_TRANSAKTIONEN_10_FUNCTION in das neue Mapping
MP_TRANSAKTIONEN_11_Para.
Ziehen Sie aus dem Pre/Post Processing-Bereich der Palette den Mapping Input-Operator
in den linken Bereich des Mappings
Öffnen Sie den Detail-Editor für diesen neuen Operator (-> rechte Maustaste auf den Kopf des
Operators -> Option Details).
Erfassen Sie das Feld AB_KD_NUMMER unter dem Reiter OUTPUT ATTRIBUTES.
Nennen Sie den Operator KD_NR_FILTER.
Klappen Sie den Filter-Operator KUNDE_GROESSER_1000 auf, und führen Sie das neue Feld
des Parameter-Operators zusätzlich in den Filter-Operator, so dass dort ein neues Feld erscheint.
Gehen Sie über den Properties Inspector in die Filter Condition des Filters (-> den Kopf des
Filter Operators selektieren).
Löschen Sie in dem rechten Bereich den Wert 1000 und ersetzen Sie ihn durch den Feldnamen
AB_KD_NUMMER aus der Liste die Sie links sehen.
Benennen Sie den Filter-Operator noch um, z. B. auf FILTER_KUNDE, denn der alte Name passt
jetzt nicht mehr.
Generieren Sie das neue Mapping mit dem Control Center.
Und testen Sie das Mapping
Parametereingabe und Aufruf des Mappings
Wenn Sie das Mapping über das Control Center starten, werden Sie feststellen müssen, dass Sie
keinerlei Daten mehr in Ihren Tabellen haben. Das ist verständlich, denn Sie hatten noch keine
Chance einen sinnvollen Parameter für die neue Filterbedingung anzugeben. Hierzu müssen Sie eine
Voreinstellung des OWB verändern, damit OWB Ihnen das Fenster zur Parametereingabe einblendet.


Öffnen Sie ihm Design Center die Preferences , die Sie unter dem Menüpunkt Tools finden.
Setzen Sie ein Häkchen für Prompt for excecution parameters unter Deployment / Process

Starten Sie das Mapping jetzt noch einmal und Sie bekommen ein Auswahlfenster mit allen
Aufrufparametern angezeigt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
135/300
Eingabemöglichkeit von Parameterwerten im Verlauf des Mapping-Aufrufs

Nachdem Sie den Wert für den Parameter gesetzt haben, können Sie die weitere Verarbeitung
über den grünen Pfeil links oben starten.
Das neue Mapping sieht jetzt so aus:
MP_TRANSAKTIONEN_11_PARA
Schreiben von Textdateien
Ebenso wie das Schreiben in eine Datenbank kann auch in eine Textdatei geschrieben werden. Dies
ist oft notwendig, wenn Ergebnisse zu protokollieren sind oder Daten über einen Workflow verschickt
werden müssen. Im Ergebnis sind die folgenden Formate direkt aus einem Mapping heraus möglich:
 Textfile im CSV-Format
 Textfiles im Fixed Length Format
 XML Dateien
Erzeugen wir zunächst eine einfache CSV-Datei.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
136/300
Anforderung: Protokollieren Sie alle bestellten
BESTELLTE_ARTIKEL in eine Textdatei schreiben




Artikel,
indem
Sie
die
Tabelle
Erstellen Sie deswegen ein neues Mapping mit dem Namen MP_PROTOKOLL_ARTIKEL
Ziehen Sie die Tabelle BESTELLTE_ARTIKEL aus dem Modul WAREHOUSE in die MappingFläche.
Ziehen Sie jetzt aus dem Bereich Source/Target der Palette den Flat File Operator
in die Editorfläche rechts neben die Tabelle BESTELLTE_ARTIKEL
Ein Auswahlfenster mit den in dem Projekt befindlichen Textdateien erscheint. Wählen Sie den
Punkt Create unbound operator with no attributes und vergeben Sie einen Namen für die
künftige Textdatei, z. B. Protokoll_Verkaufte_Artikel

Klappen Sie die Tabelle BESTELLTE_ARTIKEL auf und überführen Sie alle Attribute der Tabelle
in den Textdatei-Operator.

Erzeugen Sie die Definition der Textdatei in dem Text-Modul FF_ORTE (das ist bereits angelegt
worden, als wir Textdateien über eine External Table gelesen haben) (-> Rechte Maustaste auf
den Kopf des Textdatei –Operators -> Create and Bind)
Jetzt müssen Sie vor dem Generieren nur noch außerhalb des Mappings unter den ConfigurationEinstellungen des Mappings den tatsächlichen Namen der noch nicht existierenden Zieldatei
angeben.


Generieren Sie das neue Mapping. Testen Sie es und überprüfen Sie die Existenz der neuen
Datei in dem Dateiverzeichnis, das unter der Location des File-Moduls angegeben ist.
Bedenken Sie, dass wir die Location des Flat File Moduls bereits angelegt haben, als wir die External
Table in dem vorherigen Kapitel erstellten. Wenn Sie dies noch nicht gemacht haben, müssen Sie
zunächst ein File-Modul mit einer gültigen Text-Location anlegen. Dies ist unter dem entsprechenden
Kapitel beschrieben.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
137/300
 Tip:
Das Verfahren eignet sich generell gut, um Textfiles aus Datenbanktabellen zu erzeugen.
Oftmals sollen auch die Spaltenüberschriften als Kopfzeile in die Textdatei geschrieben werden.
Hierzu muss man bei den Properties zur Textdatei in dem Mapping-Editor ein Häkchen für die Option
„File contains a header row“ setzen.
Properties der Textdatei
 Tip:
Aus den so entstandenen Text-File-Definitionen lassen sehr leicht wieder External Tables
erstellen um diese Textinformationen wieder in eine Oracle-Datenbank zu schreiben. Es müssen nicht
mehr die Metadaten der Textdatei durch das Sampling erzeugt werden, weil sie durch das Create
And Bind im Mapping bereits da ist.
XML-Dateien erzeugen
Mit einem einzigen Klick können Sie die eben erzeugte Datei auch als XML-Datei herstellen.
 Setzen Sie das Häkchen in dem Configuration Fenster unter Flat File Operators (-> Output as
XML file).
 Testen Sie es aus
Ausschnitt aus generierter XML-File
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
138/300
Selbsterstellte Schreibroutinen
Grundsätzlich kann man sich auch eine Textschreibroutine von „Hand programmiert“ erstellen.
Der Aufruf einer solchen Prozedur kann im Verlauf eines Mappings oder aus dem Workflow heraus
erfolgen. Das hier abgedruckte Beispiel schreibt bei jedem Aufruf eine Zeile weg. D. h. die Zeile sollte
bereits "montiert" sein bevor sie als p_line1 der Prozedur übergeben wird. Dies ist im Mapping zu
regeln. Eine solche Routine ist als Protokolldatei-Routine nützlich.
CREATE OR REPLACE PROCEDURE SL1 (p_Dir in Varchar2, p_file in varchar2, p_line1 in varchar2)
AS
v_FileHandle UTL_FILE.FILE_TYPE;
BEGIN
-- Open the output file in append mode.
-- v_FileHandle := UTL_FILE.FOPEN(p_FileDir, p_FileName, 'a');
v_FileHandle := UTL_FILE.FOPEN(p_Dir ,p_file, 'w');
UTL_FILE.PUT_LINE(v_FileHandle, p_line1);
-- Close the file.
UTL_FILE.FCLOSE(v_FileHandle);
EXCEPTION
-- Handle the UTL_FILE exceptions meaningfully, and make sure
-- that the file is properly closed.
WHEN UTL_FILE.INVALID_OPERATION THEN
UTL_FILE.FCLOSE(v_FileHandle);
RAISE_APPLICATION_ERROR(-20061,
'SD: Invalid Operation');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
UTL_FILE.FCLOSE(v_FileHandle);
RAISE_APPLICATION_ERROR(-20062,
'SD: Invalid File Handle');
WHEN UTL_FILE.WRITE_ERROR THEN
UTL_FILE.FCLOSE(v_FileHandle);
RAISE_APPLICATION_ERROR(-20063,
'SD: Write Error');
WHEN UTL_FILE.INVALID_PATH THEN
UTL_FILE.FCLOSE(v_FileHandle);
RAISE_APPLICATION_ERROR(-20063,
'SD:Falscher Pfad');
WHEN OTHERS THEN
UTL_FILE.FCLOSE(v_FileHandle);
RAISE;
END ;
Wiederverwendbare Mapping-Bausteine – Pluggable Mappings
Es gibt immer wieder Aufgabenstellungen, für die wir zwar mehrere, unterschiedlichen Mappings
brauchen, um sie zu lösen, aber dennoch sind die Aufgabenstellungen ähnlich. Bevor wir mühsam
ganze Mappings kopieren, um sie dann getrennt weiter zu pflegen, ist es einfacher, ein generisches
Mapping zu erstellen und dieses dann in andere Mappings einzubetten.
Diese Bausteine nennt man Pluggable Mappings.
Bevor wir hierzu eine Aufgabenstellung bearbeiten, sollte die Arbeitsweise an einem sehr einfachen
Beispiel erklärt werden: Lassen Sie uns hierfür eine Tabelle kopieren.






Erzeugen Sie zunächst ein Pluggable Mapping mit dem Namen CT unter dem Punkt
-> Pluggable Mappings und
-> Standalone
Der Wizard fragt nach der Input_Signatur. Legen Sie hier 4 Felder an (F1-F2) jeweils varchar2(30)
Dann werden Sie nach der Ouptut-Signatur gefragt. Drücken Sie hier einfach auf NEXT ohne
Felder anzulegen.
Sie erhalten jetzt eine Editor-Fläche die dem Mapping-Editor gleicht. Die beiden Operatoren Input
und Output sind sichtbar. Schieben Sie die INGR1-Gruppe der Input-Signatur in die OutputSignatur, so dass dort die Felder F1-F4 ebenfalls entstehen.
Erstellen Sie jetzt ein neues Mapping MP_Pluggable.
Ziehen Sie die Tabelle WH_Transaktionen in die Editor-Fläche und aus der Palette unter dem
Punkt unter dem Punkt Pluggable Mapping den Operator Pluggable Mapping.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step





139/300
Jetzt erhalten Sie eine Liste über die Sie die bestehenden Pluggable Mappings selektieren
können. Wählen Sie das vorher erstellte CT.
Verbinden Sie die ersten 4 Spalten von WH_Transaktionen mit dem INGRP1-Bereich des
Pluggable Mappings.
Für den Ausgabebereich erzeugen Sie eine neue Tabelle WH_OUT und schieben Sie den
Pluggable Mappings-OUTGRP1-Bereich dorthin.
Erzeugen Sie diese neue Tabelle in dem Modul WAREHOUSE (-> Create And Bind -> Create
in...).
Generieren Sie das neue Mapping und die neue Tabelle, und testen Sie es.
Das Mapping zum Testen der Pluggable Mappings
Sehr viel ist mit diesem Mapping noch nicht gewonnen. Sie können aber jetzt Zug um Zug in dem
Pluggable Mapping Änderungen vornehmen, und diese austesten.

Fügen Sie jetzt in dem Pluggable Mapping für das Feld F1 im Ausgabebereich eine Expression
ein, in dem SYSDATE anstelle des Eingangswertes geladen wird (to_char(sysdate)).
Wenn Sie das Mapping MP_PLUGGABLE jetzt neu generieren, werden Sie keinerlei Veränderung in
den Daten feststellen.
 Sie müssen erst das Pluggable Mapping in dem Mapping mit der neuen Version synchronisieren
(-> rechte Maustaste auf den Kopf des Operators -> Synchronize -> Inbound ...
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
140/300
Geänderte Pluggable Mappings müssen mit den Mappings, in denen sie verwenden synchronisiert
werden.
Änderungen, die Sie in dem Pluggable Mapping durchführen werden, implizit auch in dem Repository
abgespeichert. Definieren Sie allerdings in dem Pluggable Mapping Objekte wie Tabellen oder
Textfiles, so müssen Sie diese mit den Objekten in den Modulen synchronisieren (Outbound).
Diese einfache Übung sollte Sie mit dem Umgang vertraut machen und besonders auf die
Notwendigkeit der Synchronisation hinweisen. In einem Pluggable Mapping sind alle Operatoren
möglich wie Sie sie auch in einem Mapping verwenden können. Die Unterschiede liegen lediglich in
der Tatsache, dass Pluggable Mappings eine Aufrufparameter- und eine Rückgabeleiste haben.
Pluggable Mappings müssen nicht mit einer Aufruf oder Rückgabe-Parameterleiste versehen werden,
wie das Beispiel im folgenden Abschnitt zeigt. Dort besteht der Output des Pluggable Mappings in
dem Beschreiben einer Textdatei.
Anwendungsszenario „Generisches Protokoll“
Das folgende umfangreichere Beispiel zeigt Anwendungsmöglichkeiten und darüber hinaus spezielle
Techniken, die auch in anderen Fällen einsetzbar sind.
Anforderung:
Es ist ein Mapping-Baustein zu erzeugen, der an beliebigen Stellen in anderen Mappings zum
Schreiben von Protokolldateien verwendet werden kann. Das Protokoll soll beliebig viele Textspalten
aufnehmen können und eine unterstrichene Kopfzeile mit Datum und Uhrzeit enthalten.
Format der Protokolltabelle
In dem Beispiel werden folgende Aspekte behandelt:
 Erzeugen von zusätzlichen Sätzen mit Hilfe von Konstanten und dem SET-Operator und
DUAL
 Verwenden des Sorter-Operators
 Verwenden des Set-Operators (UNION)
 Implizite Typkonvertierung
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
141/300
Bei der Planung des Pluggable Mappings sind mehrere Aspekte zu realisieren:
1. Wie kann die Aufrufschnittstelle so generisch gehalten werden, dass das Mapping auch mit einer
unterschiedlichen Anzahl Parameter und unterschiedlichen Feldtypen arbeitet?
2. Wie können zusätzliche Kommentare (z. B. beschreibende Kopfzeilen) in den Datenfluss so hinein
generiert werden, dass sie immer an erster Stelle stehen.
3. Wie kann zwischen dem aufrufenden Mapping und dem Pluggable Mapping eine Kommunikation
statt finden, so dass neben den eigentlichen Sätzen auch noch andere Verwaltungsinformationen
übergeben werden (z. B. Mapping-Name etc.).
Zu dem ersten Punkt – flexible Input-/Output-Schnittstelle
Pluggable Mappings können in ihrer Aufruf- und Rückgabeschnittstelle Parameter besitzen, die von
den aufrufenden Mappings nicht verwendet werden müssen. Man kann also eine Reihe von
Parametern vorsehen, die nicht immer von jedem Mapping benutzt werden müssen. Das passt auf
unsere Anforderung, denn wir erstellen eine generische Protokoll-Routine, über die Sätze mit einer
unterschiedlichen Anzahl von Feldern zu schreiben sind.
Bleibt das Typen-Problem. Hier können wir nicht immer wissen, welche Feldtypen die aufrufenden
Mappings für ihre Parameter mitgeben. Hier hilft ein Trick. Dem späteren Text in der Textdatei, wird es
gleichgültig sein, von welchem Typ die Strings sind. Ein Text kennt keine Feldtypen. Deswegen
definieren wir die gesamte Aufrufleiste des Pluggable Mappings vom Typ varchar2. Bei dem Aufruf der
Komponente in dem späteren Mapping wird Oracle eine implizite Typkonvertierung vornehmen.
Zu dem zweiten Punkt – Erzeugen zusätzlicher Sätze (z. B. Kopfzeilen)
Während die eigentlichen Sätze über die Input-Schnittstelle des Pluggable Mappings angeliefert
werden, gibt es für zusätzliche Informationen wie Kopfzeilen zunächst keinen Input. Da die Mappings
letztlich in SQL überführt werden und für jeden zu schreibenden Datensatz in einem Zielobjekt eine
Quellinformationen existieren muss, müssen wir eine solche Quelle simulieren. Das scheint zunächst
ein Problem bzw. ein Stolperstein in der mengenorientierten Verarbeitungslogik des SQL zu sein.
Ist es aber nicht. Wir können mit der DUAL-Dummy-Tabelle Sätze simulieren, die in Wirklichkeit gar
nicht da sind. Um das zu verstehen, sollte man sich einige Prinzipien von OWB vergegenwärtigen:


Wenn irgendwo Sätze weitergereicht werden, kann man sowohl mit dem Operator
CONSTANT als auch mit einer EXPRESSION beliebige zusätzliche Felder in einer
Zielstruktur generieren.
Diese zusätzlich generierten Felder müssen nichts mit einer Quelltabelle zu tun haben. Es
ist möglich, dass das Zielobjekt nur die zusätzlich generierten Felder aufnimmt und keine
einzige Information von dem eigentlichen Quellobjekt.
Betrachten wir uns das folgende Test-Mapping: Es gibt eine Quelltabelle ZAHL mit nur einem Feld
(NR) und eine Zieltabelle ZIEL_TABELLE mit drei Feldern. Die Verbindung läuft über einen
Expression-Operator, der im Ausgabebereiche drei Felder besitzt. Die Information in allen drei Feldern
entsteht in diesen Expression-Feldern entweder über eine Funktion (sysdate) oder konstante Werte.
Das Feld NR im Eingabebereich der EXPRESSION läuft ins leere und wird durch die Ausdrücke des
Ausgabebereichs nicht verwendet.
Das einzige, was von der Quelltabelle verwendet wird, ist die Anzahl ihrer Sätze. Denn genau so oft
werden die Expression-Ausdrücke ausgelesen und in die Zieltabelle geschrieben.
Test-Mapping zum Simulieren von Werten
Letztlich entsteht durch OWB folgendes SQL:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
142/300
INSERT
/*+ APPEND PARALLEL("ZIEL_TABELLE") */
INTO
"ZIEL_TABELLE"
("TAGESDATUM", "FREIER_KOMMENTAR", "BELIEBIGE_ZAHL")
(SELECT sysdate,
'Das ist ein Text',
123456 FROM "ZAHL"
Bei dieser Konstruktion war zumindest noch eine Quelltabelle nötig, um einen „triggernden“ Input zu
liefern. Geht das auch ohne eine Quelltabelle? Für die Kopfzeilen in der Ausgabeliste, wollen wir nicht
die Tabelle Zahl verwenden, weil eine solche Tabelle in dem jeweiligen Zielschema vorhanden sein
muss. Wenn wir diese Tabelle einfach weglassen gibt es einen OWB-Fehler, der besagt, dass der
Expression-Operator nicht genügend Eingabeparameter besitzt.
Eine Lösung, die immer funktioniert ist die Verwendung der Tabelle DUAL, die in jeder OracleDatenbank-Umgebung vorhanden ist. Sie hat genau eine Zeile und eine Spalte und erfüllt letztlich die
Kriterien, die wir hier brauchen. Doch es gibt noch weitere Möglichkeiten.
„Überlisten“ kann man OWB indem man eine Art Dummy-Input für den Operator benutzt: z. B. eine
Konstante oder einen Aufrufparameter.
Konstanten haben den Nachteil, dass sie in dem später generierten Code eine Deklaration nach sich
ziehen. Entsprechend sieht auch das SQL aus. Zur Qualifizierung der Konstanten enthält das SQL
immer auch den Package-Namen.
Verwenden wird den Aufrufparameter, wie in dem folgenden Beispiel, und wir haben nur die Sorge,
das der INPUT_PARAMETER-Operator suggeriert, es gäbe einen sinnvollen Wert, den es aber nicht
gibt.
Testmapping zum Simulieren von Werten
Welchen SQL-Code generiert OWB jetzt aus dieser Konstruktion?
INSERT
INTO
"WH_Testsatz"
("TAGESDATUM", "ZAHL", "TEXT")
(SELECT
sysdate,1,'A'
FROM
DUAL );
OWB erkennt das Fehlen von Eingabewerten und baut von sich aus die Dummy-Tabelle DUAL in den
Code ein.
In Ordnung. Dieses Verhalten können wir nutzen, um Kopfzeilen zu generieren. Weil wir Sätze
generieren wollen, die anschließen mit echten Tabellensätzen zusammen weiterverarbeitet werden
sollen, nutzten wir hierfür einen SET-Operator. Der SET-Operator hat 2 oder mehr INGRP-Bereiche.
Einen werden wir nutzen, um die eigentlichen Datensätze, die es zu schreiben gilt, aufzunehmen.
Weitere Eingabebereiche nutzen wir, um für die Kopfzeilen Sätze künstlich zu erzeugen. Wir brauchen
zwei Bereiche, einen für eine Kopfzeile und eine für einen Unterstrich.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
143/300
Zu dem dritten Punkt (Kommunikation mit dem aufrufenden Mapping)
Diese Anforderung ist einfach zu lösen. Wir legen einfach die letzten Parameter der Input-Schnittstelle
als Kommunikationsfelder fest. Das was über diese beiden Felder dem Pluggable Mapping übergeben
wird, kann man dort beliebig weiter verarbeiten.
Entsprechend sieht das Pluggable Mapping wie folgt aus:
Über eine Input-Schnittstelle (Felder F1-F5) werden Daten entgegengenommen. Die Feldnamen sind
beliebig, deswegen F1, F2 usw. In dem dargestellten Beispiel beschränkt man sich auf 5 Felder. Das
können natürlich beliebig mehr sein. Die beiden letzten Felder nehmen den Namen des aufrufenden
Mappings und den Namen der Tabelle auf, für die eine Protokolldatei geschrieben werden soll. Alle
Felder, werden über eine Expression (mit SUBSTR()) in ihrer Länge auf 30 Bytes begrenzt. In dieser
Expressen findet auch eine implizite Typkonvertierung von möglichen number-Feldern auf varchar2Felder statt.
Ein SET-Operator nimmt die Sätze aus dem EXPRESSION-Operator auf. In separaten
Eingabebereichen nimmt er auch den Text für eine Kopfzeile und eine Strichlinie auf. Informationen
wie MAPPING-NAME und TABELLEN_NAME aus dem aufrufenden Mapping finden ebenfalls in der
Kopfzeile Platz.
(Wie haben noch ein Sortierproblem. Das wird weiter unten gelöst).
Pluggable Mapping zum Erzeugen einer Protokoll-Textdatei mit Kopfzeile
Das aufrufende Mapping benutzt das Pluggable Mapping als wenn es eine Tabelle wäre. Das
folgende Beispiel schreibt nur den Inhalt der Tabelle ARTIKEL in die Protokolldatei. Das reicht zur
Demonstration.
Mapping zum Testen der Reusable Mappings
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
144/300
Das Ergebnis ist diese Liste:
Beispiel-Output
Die Unterstriche zwischen den Ausgabefeldern, kann man über die Eigenschaften der Textdatei
einstellen, das kann auch ein Semikolon sein.
Der Sort-Operator
Bei den ersten Tests in dem vorher behandelten Mapping wird man eine kleine Überraschung erleben.
Kopfzeile und Strichzeile sind nicht an der Stelle in der Liste, an der man sie vermutet. Sondern Sie
stehen irgendwo, meist am Ende. Bevor wir die Sätze der Textdatei übergeben, sollten wir sie
sortieren. Hierzu ist ein Sortierkriterium notwendig, über das wir festlegen, welche Sätze, die der SETOperator des Beispiels liefert, zuerst geschrieben werden. Wir erweitern alle Eingabebereiche des
Set-Operators um ein Feld SORTER und hängen den SORT-Operator an den Ausgang des SETOperators. Die zu sortierenden Werte legen wir als Konstante fest. In unserem Beispiel sind das
einfach die Buchstaben A, B, C (SORTER1=A, SORTER2=B, SORTER3=B. Für jede Satzart steht ein
Buchstabe. Über die Properties des SORT-Operators (->Properties Inspector) wird dann das
SORTER-Feld als Sortierkriterium bestimmt. Dieses Feld wird selbst nicht mehr an die Textdatei
weitergegeben.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
145/300
Unternehmensdaten integrieren – Teil 2
°°°°° Bezieht sich noch auf das ältere Release°°°°°°
Einlesen von ODBC-Quellen
ODBC hat sich als Standard-Datenaustausch-Verfahren etabliert. ODBC hilft meist dann, wenn es
keinen direkten Zugriff zu einem System gibt. Gerade in Office-Umgebungen ist ODBC verbreitet. MS
Access oder Excel können Sie sehr leicht mit Hilfe von ODBC an das Warehouse anschließen. Mit
dem Warehouse Builder greifen Sie auf ODBC-Quellen ebenso selbstverständlich zu wie etwa auf
Oracle-Tabellen. Hier nutzen Sie die Möglichkeit der Oracle-Datenbank auf eine externe ODBC-Quelle
zugreifen zu können. Die Datenbank-Möglichkeit nennt man HSODBC oder Heterogenous Services.
Funktionsweise und benötigte Komponenten des ODBC-Zugriffs
Die Einrichtung auf einem ODBC-fähigen Windows-Rechner sieht wie folgt aus:
1. Es muss ein Oracle-Listener auf dem Rechner laufen, auf dem auch die ODBC-Quelle zur
Verfügung steht.
2. Definieren einer ODBC-Quelle als System-DSN (Siehe hierzu die üblichen Verfahren unter
Windows). Die ODBC-Quelle sollte zunächst getestet werden, um sicher zu gehen, dass diese
auch funktioniert. Machbar ist dies z. B. mit dem Programm "C:\Program Files\Microsoft
Office\Office\MSQRY32.EXE"
In dem Beispiel in dieser Unterlage heißt die ODBC-Quelle -->
Orte
<-Es wurde eine Excel-Datei als ODBC-Objekt gewählt. (Jede andere ODBC-Quelle wäre
natürlich auch möglich.)
Jetzt müssen drei Dateien modifiziert werden:
- %ORACLE_HOME%\network\admin\listener.ora
- %ORACLE_HOME%\network\admin\tnsnames.ora
(
Achtung jetzt kommt ein neues Verzeichnis:)
- %ORACLE_HOME%\hs\admin\inithsodbc.ora
3. In der TNSNAMES ist ein neuer TNS-Eintrag vorzunehmen, z. B.
ORA9.DE.ORACLE.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = Aschlauc-de)(PORT = 1521))
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
146/300
)
(CONNECT_DATA =
(SERVICE_NAME = ORA9)
)
)
Orte.DE.ORACLE.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = Aschlauc-de)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = Orte)
)
(HS=OK)
)
4. In der LISTENER-Datei ist ein neuer Aufruf einzutragen, z. B.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\ora9)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORA9)
(ORACLE_HOME = D:\ora9)
(SID_NAME = ORA9)
)
(SID_DESC =
(SID_NAME = Orte)
(ORACLE_HOME = D:\ora9)
(PROGRAM = hsodbc)
)
)
5. In dem Oracle-Home-Verzeichnis gibt es ein Verzeichnis mit dem Namen HS mit der Datei
%ORACLE_HOME%\hs\admin\inithsodbc.ora als Beispiel einer ODBC-Konfigurationsdatei.
Kopieren Sie diese und benennen Sie die neue Datei nach dem Muster:
initeigenerODBCName.ora also in diesem Beispiel initOrte.ora. Hier nehmen sie folgende
Einträge vor.
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = Orte
HS_FDS_TRACE_LEVEL = off
6. Jetzt sollte in SQLPlus noch ein neuer DBLink zur ODBC-Quelle definiert werden, z. B.
create database link DBL_Orte using 'Orte.de.oracle.com'
Unter using ist der Name anzugeben, wie er auch in der TNSNAMES verwendet wurde.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
147/300
Testen des ODBC-Aufrufs:
Hier ist der Name des Karteireiters innerhalb von EXCEL
anzugeben. Jede Kartei stellt eine eigene Tabelle dar.
Beachten Sie das $-Zeichen vor dem DB-Linknamen.
SQL>
select
ORT_sicher_excel$@dbl_orte;
OrteNr
---------1
2
3
4
5
6
7
8
9
10
11
*
from
Ort
----------------------------Berlin
Braunschweig
Bremen
Dortmund
Elmshorn
Essen
Hannover
Kaiserslautern
Karlsruhe
Kiel
Ludwigsburg
Anzeigen aller möglichen Tabellen über die ODBC
Quelle:
select * from all_tables@dbl_orte
Verwenden von ODBC-Quellen über den Warehouse-Builder
Alle ODBC-Objekte können wie normale Tabellen
in den Mapping-Editoren betrachtet werden.
Definieren Sie ein separates Quellmodul für eine
ODBC-Quelle. Bei der Definition des DB-Links
könne Sie die Option Use for Hetergeneouse
Services“ wählen.
Ausnahme:
Es wird Ihnen nicht gelingen für eine ExcelTabelle einen solchen DB-Link anzulegen, denn
das System fragt Sie nach User Name und
Password.
Eine Excel-Tabelle hat so etwas nicht. Bei Access
oder SQL Server oder DB2/UDB ist dies möglich.
Erstellen Sie einen View für Excel-Tabellen. In
der View-Definition nutzen Sie den oben
definierten DB-Link.
Einlesen von XML-Dateien
(Ist in Vorbereitung – wenn jetzt bereits ein Beispiel gebraucht wird, bitte über den Autor anfordern)
Einlesen von SAP-R/3-Daten mit dem SAP-Integrator
(Ist in Vorbereitung – wenn jetzt bereits ein Beispiel gebraucht wird, bitte über den Autor anfordern)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Messagebasiertes
Queuing
Einlesen
148/300
von
Nachrichten
über
Advanced
(Ist in Vorbereitung – wenn jetzt bereits ein Beispiel gebraucht wird, bitte über den Autor anfordern)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
149/300
Generierungsstrategien
Set based versus Row based
Die Datenbank als Ladeutility zu nutzen, ist eine gute Wahl, denn die primäre Aufgabe der Datenbank
ist es, Daten in großen Mengen zu verwalten aber auch zu bewegen. Um optimale Ladeperformance
zu erzielen, sollte dem Warehouse-Entwickler die Besonderheiten der Oracle-Datenbank bewusst
sein. Die höchste Ladeperformance erreicht die Datenbank mit den nativen Mitteln des SQL. Die
Datenbank arbeitet hier mengenbasiert, sie verarbeitet mehrere Sätze gleichzeitig (Set Based).
Plattenlese- und Plattenschreibaktivitäten sind blockorientierte Operationen, und das System kann mit
einem (zeitintensiven) physischen IO viele Sätze gleichzeitig lesen bzw. schreiben. Das Gegenstück
ist die Einzelsatzverarbeitung (Row Based). Select-Kommandos auf einzelne Sätze wie sie in Handprogrammierten Routinen regelmäßig vorkommen, zwingen das System für jeden angeforderten Satz
mindestens einen physischen Plattenlesezugriff durchzuführen. Zwar bietet PL/SQL die Möglichkeit
der Cursor-Technik, die mit einem einzigen Select-Befehl die zu verarbeitenden Sätze bereits in den
Hauptspeicher liest, doch erfolgt auch hier die nachfolgende Verarbeitung (z. B. Schreiben mittels
Insert) satzweise, und das kostet Zeit.
Die Set-Based-Verarbeitung ist schneller, als die Row-Based-Variante und daher vorzuziehen.
Allerdings besteht nicht immer eine Wahlmöglichkeit. Der Update SQL-Befehl ist z. B. eher ein
Kandidat für die langsamere Variante. Fehlersituationen lassen sich in der Row-Based-Variante
leichter verwalten, weil hier die Fehlerursache direkt auf den fehlerhaften Satz zurückführbar ist.
Der Warehouse Builder berücksichtigt diese Unterschiede, in dem er mehrere CodeGenerierungsvarianten anbietet.
Ein Demonstrationsbeispiel:
 Betrachten Sie sich das Mapping MP_TRANSAKTIONEN_4_WHERE. Das haben wir angelegt
um die Filter-Bedingung zu testen. Öffnen Sie den Editor für dieses Mapping.
 Führen Sie eine Generierung aus diesem Mapping heraus über die Menüoption Generate durch.
 Schalten Sie in dem Kopfbereich des Generation-Result-Fensters den Operating Mode
SET_BASED ein.
Optionen-Wahl für den Operating Mode
In der Listbox Operating mode sehen Sie die 5 Generierungsvarianten des Warehouse Builders. Das
Generation-Result-Fenster eignet sich sehr gut zur Betrachtung dieser Varianten, weil Sie hin- und
herschalten können und sehr viel Verwaltungs-Code weggelassen worden ist.
Die ersten drei Optionen entsprechen der Set based bzw. Row based Variante. Die letzen 2 stellen
eine Mischung zwischen beiden dar, indem sie zuerst mit Set based beginnen und erst im Felhlerfall
(Failover) auf Row based umspringen. Die letzten beide Varianten sind die aufwendigsten, denn im
Extremfall werden Quellsätze zweimal gelesen. Aber wir haben die Chance, dass bei fehlerfreien
Läufen die schnelle SET-based Variante zieht.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
150/300
Der Code für die Set based Variante:
Ausschnitt Code-Generierung Set based
Dies ist die einfachste und schnellste Ladevariante. Beachten Sie auch den Hint:
/*+ APPEND PARALLEL(WH_TRANSAKTIONEN, DEFAULT, DEFAULT) */
der eingestreut ist.
Commit-Steuerung:
Das System setzt bei dieser Variante nicht bei jedem Insert ein Commit-Kommando ab sondern in
Abhängigkeit von dem Default erst nach 1000 Inserts. Diese Zahl können Sie über Configuration
Properties ändern (rechte Maustaste auf MP_Load_Strategie und dann Configure).
Die Filterbedingung ist in der Where-Klausel zu finden.
Der Code für die Row based Variante:
 Schalten Sie den Operating Mode um auf die Row Based Variante.
Bei der Row based Variante generiert der Warehouse Builder zunächst einen Cursor in der die
Quelldaten inklusive Filter und Join-Bedingung in den Speicher geladen werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
151/300
Cursor in der Row based Variante
Und schließlich erfolgt die Abarbeitung des Cursors nach einem Fetch (nicht dargestellt) und der
zeitraubenden Schleife (Loop):
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
152/300
Loop bei der Row based Variante
Commit-Steuerung
Das System setzt ein Commit nach Abschluss der Schleife ab. Es zieht damit wieder die Default
Commit Frequency von 1000 (s. o.).
Die Filterbedingung kann prozedural mit PL/SQL-Programmiermittel realisiert sein oder, wie in
diesem Beispiel, bereits im Cursor-Aufbau erfolgen.
Der Code für die Row based (Target only) Variante
Die Row based Variante löst die Filterbedingung erst in der Schleife. Die Row based target only
Variante zieht diese Prüfung in die Cursor-Aufbauphase hoch, lässt damit also gar nicht so viele Sätze
in die Schleife hineinlaufen und ist damit u. U. schneller.
Commit-Steuerung
Das System setzt ein Commit nach Abschluss der Schleife ab. Es zieht die Default Commit Frequency
von 1000 (s. o.).
Der Code für die Set Based failover to Row based Variante
Hier generiert OWB die Kombination aus beiden Varianten. Läuft die Set based Variante auf einen
Fehler, rollt die gesamte bislang durchgeführte Verarbeitung zurück und beginnt von neuem mit der
Row based Variante. Diese Variante kann in einzelnen Fällen länger dauern, als wenn gleich die Row
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
153/300
based Variante gewählt worden wäre. Hier sollten Sie eine Entscheidung in Abhängigkeit von der
Datenqualität treffen.
Der Code für die Set Based failover to Row based (Target only) Variante
Diese Variante entspricht den vorhergehenden, allerdings ist jetzt die Filterbedingung wieder in den
Cursor hochgezogen.
Steuerung der Generierungsvarianten
Im Default generiert der Warehouse Builder die Variante Set based fail over to row based.
Sie verändern diese Einstellung über die Mapping Configuration Properies (rechte Maustaste auf
MP_TRANSAKTIONEN_4_WHERE und dann Configure).
Steuerung der Generierungsvarianten
Mit der Set-Based-Variante performante Mappings erzeugen
Da die Set based-Operation die schnellste Variante ist, kann es Situationen geben, in der ein
geschicktes Kombinieren von mehreren Insert Append-Läufen schneller ist, als ein Row Based Lauf.
2 Klassen von Mappings – Mappings organisieren
Eine erste Regel besagt, dass Datenflüssen mit einer sehr geringen Fehleranfälligkeit
zusammenzufassen sind. Umgekehrt werden Datenflüssen, die sehr wahrscheinlich Fehler
produzieren auch zusammengefasst und von Beginn an mit der Row-based-Variante gesteuert, so
dass diese erst gar nicht die Set-based-Variante versuchen. Durch die Selektion in fehlerträchtige und
weniger fehlerträchtige Ladeflüsse kann man die Anzahl langsamer Mappings bereits reduzieren. Dies
erfordert vorausschauende Planung bei dem Aufbau der Mappings. Die Wahrscheinlichkeit von
Fehlern muss im Vorfeld ermittelt werden. Hier hilft das Data Profiling.
Mappings mit einer Set-based-Verarbeitung kann man schliesslich auch zusammenfassen. Wenn
keine Fehler zu erwarten sind, macht man „Sammelmappings“, in denen mehrere Ladestränge, d. h.
das Laden von mehreren Zieltabellen, in einem Mapping zusammengefasst ist.
Geschickte SQL-Anwendung
Durch die geschickte Anwendung von SQL können die meisten Anforderungen heute mit der Setbased-Variante verarbeitet werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
154/300
Ein erstes Beispiel: Es sind mehrere Millionen Sätze in eine bereits bestehende und gefüllt Zieltabelle
zu überführen, wenige Sätze sind in der Zieltabelle enthalten. Es muss ein umfangreicher Update
vermieden werden:
1.
Lauf Insert Append in eine temporäre Tabelle A für alle Sätze, die noch nicht in der Zieltabelle
enthalten sind. (Minus Operation).
2.
Lauf Insert Append in eine temporäre Tabelle B für alle Sätze, die bereits in der Zieltabelle
enthalten sind. (Union Operation).
3.
Lauf Insert Append aller Sätze der temporäre Tabelle A in die Zieltabelle.
4.
Lauf Update aller Sätze der temporäre Tabelle B in die Zieltabelle.
Mit den Datenbankmitteln von Oracle 10g Release 2 kann die Problematik generell entschärft werden.
Denn hier gibt es zum einen das MERGE-Kommando, das UPDATE und INSERT vereint. Oracle
Warehouse Builder generiert diese MERGE-Statements. Zum anderen gibt es Error-Tabellen, in die
Sätze geschrieben werden, die eine Constraint-Verletzung verursachen.
Inhaltliche Prüfungen
Das eben genannte Beispiel löst Fälle, in denen es sich lediglich um ein schnelles Updaten von
Tabellen handelt. Besondere Herausforderungen treten jedoch dann auf, wenn Inhalte von
Quellsätzen während des Ladens geprüft werden müssen. Das sind Prüfungen wie:
 NULL / NOT NULL
 Numerisch / alphanumerisch
 Gültiges Datumsfeld
 Datum in Von/Bis-Bereichen
 Summenabgleiche in unterschiedlichen Tabellen
 Beliebige ‚Regular Expressions’ (Spezielle Semantik)
 Teilstringprüfungen
 Wertgültigkeit in Abhängigkeit von Werten aus anderen Tabellen (Lookup)
Alle diese Fälle können mengenbasiert (Set-based) gelöst werden, wie die folgenden Beispiele
zeigen.
Null / NOT Null - Prüfung
Anforderung: Es sollen einzelne Felder (F2, F3) einer Quelltabelle S auf NULL / Not Null
überprüft und fehlerhafte Sätze aussortiert werden.
In der folgenden Lösung durchlaufen die Feldinhalte von F1 und F2 eine CASE-Anweisung in der im
Fehlerfall ein Kontrollfeld ERR mit der Zahl 1 belegt wird. Dieses Kontrollfeld dient dem folgenden
Splitter, um fehlerhafte Sätze in die Fehlertabelle T_ERR auszusteuert. Die korrekten Sätze stehen
nach Abschluss in der Tabelle T.
Beispiel-Mapping zum Aussteuern von NOT-NULL-Feldern
Die CASE-Anweisung für das Feld ERR lautet:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
case
when INGRP1.F2
else 0
end
is null or
155/300
INGRP1.F3 is null then 1
Prüfung Numerisch / nicht Numerisch
Eine ähnliche Lösung ist möglich für die Prüfung Numerisch / nicht Numerisch.
Hier kann man sich eine kleine Hilfsfunktion erstellen, die eine Wert auf numerisch oder nichtnumerisch prüft. Diese Funktion wird dann wie in dem Beispiel zuvor in eine CASE-Anweisung
geschrieben.
Die folgende Funktion liefert einen NULL-Wert zurück, wenn der übergebene alphanumerische
Parameter nicht in einen numerischen überführt werden kann.
CREATE OR REPLACE FUNCTION IST_NUMMER(F1 IN VARCHAR2) RETURN NUMBER IS
--initialize variables here
-- main body
BEGIN
return to_number(f1);
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
/
Die Verwendung in einem CASE-Statement sieht wie folgt aus:
select case
when ist_nummer('666') IS NULL then 'Nicht numerisch'
else 'Numerisch'
end
from Dual
Das dazu passende Mapping hat die gleiche Form, wie das Beispiel zuvor und wird deswegen hier
nicht ausgeführt.
Prüfung auf Ist-Datum / Ist Nicht Datum
Genau das gleiche Verfahren ist für eine Datums-Prüfung möglich. Man braucht hier eine andere
Funktion.
CREATE OR REPLACE FUNCTION IST_DATUM("F1" IN VARCHAR2) RETURN DATE IS
--initialize variables here
-- main body
BEGIN
return to_date(f1);
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
Die Verwendung in einem CASE-Statement sieht dann wieder so aus:
select case
when ist_datum('11-MAR-2006') IS NULL then 'Datumsformatfehler'
else 'OK'
end
from Dual
Oder eine noch einfachere Verwendung:
select ist_datum('11-MAR-2006') from dual
Auch hierzu kann man sich das dazu passende Mapping leicht aus dem obigen Beispiel ableiten.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
156/300
Summenabgleiche
Anforderung: In zwei Tabellen sind Erträge mit unterschiedlicher Verdichtung abgelegt. In einer
Bestell-Tabelle ist die Gesamtsumme einer Bestellung erfasst und in einer Bestell-Positionen-Tabelle
sind die Einzelpositionen zu dieser Bestellung mit den Einzelbeträgen einer Position gesammelt. Die
Summe aller Einzelbeträge zu einer Bestellung soll gleich der Gesamtsumme einer Bestellung in der
Bestell-Tabelle sein. Es sollen alle diejenigen Bestellungen gefunden werden, die fehlerhaft sind.
Lösung:
Hinter dieser Anforderung steckt die Gruppenwechsel-Thematik, d. h. wir müssen für jede
Bestellnummer zunächst die dazu passenden Positionen in der Bestell-Positionen-Tabelle suchen,
deren Einzelerträge zusammen addieren und das Ergebnis mit dem Summenfeld der Bestell-Tabelle
vergleichen.
SQL ist für eine solche Lösung prädestiniert. In prozeduralen Programmiersprachen müsste man
hierfür zwei Schleifen mit einer entsprechenden Kopfverarbeitung für die Bestellungen realisieren.
Die Mapping-Lösung:
Mapping zur Lösung des Summenvergleichs
Beide Quelltabellen werden über einen Joiner und dem Join-Kriterium der Bestellnummer miteinander
„verjoint“. Damit ist die Zugehörigkeit der Positionssätze aus der einen Tabelle mit den
Bestellsummensätzen der anderen Tabelle gegeben. Die Bestell-Positions-Sätze werden jedoch
vorher über die Bestellnummer durchen einen Aggregator gruppiert und die einzelnen Positionswerte
pro Bestellnummer aufaddiert (aggregiert). Im Ergebnis entsteht pro Bestellnummer nur ein Satz, der
an den Joiner weitergegeben wird. Da nur Sätze mit abweichenden Summenwerten in die Zieltabelle
gelangen dürfen, ergänzt man die Join-Bedinung um einen entsprechenden Eintrag.
Join-Bedingung
Der Deduplicator in dem Mapping soll verhindern, dass doppelte Bestellsätze angeliefert werden.
Es sollen einzelne Felder (F2, F3) einer Quelltabelle S auf NULL / Not Null
Komplexere Lösungen - Mit temporären Zwischentabellen arbeiten
Bei komplexeren Lösungen und bei mehreren gleichzeitigen Prüfungen bieten sich temporäre
Zwischentabellen an. Das Beschreiben und Wiederlesen einer Zwischentabelle kann im Endeffekt
performanter sein, als die satzweise Abarbeitung in einer Cursor-gesteuerten prozeduralen PL/SQLSchleife.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
157/300
Anforderung: In einer Tabellen sind Statusmeldungen zu einem bestimmten Vorgang abgelegt.
Ein Vorgang durchläuft eine Reihe von definierten Zuständen. Das Erreichen des Zustands wird über
einen dazu festgelegten Statuswert (A,B,C,D...) festgehalten. Die Abfolge der Zustände, also auch die
Abfolge der Statusmeldungen muss chronologisch entsprechend einer Datumsangabe erfolgen. Es
muss also der Status A zeitlich vor dem Erreichen des Status B erfolgen. Um das zu überprüfen, wird
ein Datumsfeld mitgepflegt.
Die Datumskennzeichnung der Zustände erfolgte manuell, kann also fehlerhaft sein. Ein Fehler liegt
dann vor, wenn z. B. der Status C ein früheres Datum besitzt als Status B.
Die Herausforderung in diesem Beispiel liegt in dem Umstand, dass die zu prüfenden Informationen in
der gleichen Tabelle über verschiedene Sätze hinweg verteilt sind.
Das Lösungs-Mapping:
Mapping zum Herausfinden von nicht-chronologischen Statusmeldungen
Zur Lösung wurden zwei temporäre Tabellen eingeführt. Die Ausgangstabelle „STATUSMELDUNG“
ist zweimal als Quelle in das Mapping eingeführt worden. Die Sätze dieser Tabelle werden einmal
sortiert nach dem Kriterium STATUS+DATUM und dann noch einmal umgekehrt nach
DATUM+STATUS. Damit die Sortierergebnisse später verglichen werden können, hat man eine
laufende Nummer eingeführt, die man sich aus zwei Sequence-Objekten liefern lässt. Wenn man jetzt
einen Join über diese laufende Nummer bildet, müssen die Ergebnissätze den gleichen Statuswert
aufweisen, wenn die Sätze gültig sind. Wenn nicht, laufen Datum und Statusabfolge auseinander.
Die Join-Bedingung (Anti-Join wegen des !=-Vergleichs):
Join-Bedingung des Status-Abgleichs
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
158/300
In vielen Fällen kann man auf die temporären Tabellen verzichten. Auch in diesem Beispiel könnte
man ohne die beiden temporären Tabellen auskommen. Aber sie machen das Verfahren
übersichtlicher.
Ausnahmen, die nur mit Row Based generierbar sind
Bestimmte Transformationen sind nur im Row based Modus generierbar:
- Flat File as target Operationen
- Name&Adress-Cleansing
- Regular-Expressions
Den Schreibmodus ändern - Insert – Update – Delete
Sollen Zieltabellen Updates erfahren, so generiert der Warehouse Builder den passenden UpdateCode für eine Update-Steuerung. Um dieses Verfahren einzuschalten, gehen Sie wie folgt vor:
 Kopieren Sie das Mapping MP_ARTIKEL und erstellen Sie daraus das neue Mapping
MP_ARTIKEL_UPD
 Markieren Sie die Zieltabelle DIM_ARTIKEL und öffnen Sie das Properties-Fenster hierzu. Unter
Looding Type können Sie jetzt mehrere Auswahlvarianten erkennen.
Einschalten des Änderungsmodus für die Zieltabelle
Die unterschiedlichen Varianten, in eine Zieltabelle zu schreiben, sind hier kurz dargestellt:
Updates - Updates / Insert
Mit Updates werden bestehend Zielsätze geändert. Im Fall eines nicht vorhandenen Zielsatzes führt
das System einen Insert durch. Updates sind natürlich nur dann durchführbar, wenn die Zieltabelle
auch über einen Primary Key (Matchkriterium) verfügt. Ist das Selektionskriterium für Zielsätze nicht
der Primary Key, so kann man einen alternativen Schlüssel festlegen.
Ist die Zieldatenbank Oracle 9.2 oder höher, so generiert OWB ein Merge-Statement.
Wenn Sie den Test mit dem kopierten Mapping durchführen, kann das Sequence-Objekt stören. Wir
haben in einem früheren Beispiel das Sequence-Objekt gebraucht, um einen neuen künstlichen
Schlüssel aufzubauen. Hier spielt uns die Logik einen Streich: Einerseits wollen wir in der Zieltabelle
einen neuen künstlichen Schlüssel (Dimension_Key), andererseits ist das sogenannte Matchkriterium
der alte Originalschlüssel (Artikelnummer).
Für diese spezielle Anforderung müssen wir eine spezielle Lösung finden. Zunächst legen wir fest,
dass das Matchkriterium die Artikelnummer sein soll.
 Selektieren Sie den Kopf der Zieltabelle DIM_ARTIKEL
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step




159/300
Schalten Sie in dem Properties-Fenster die Option Match by constraint auf
NO_CONSTRAINTS. Diese Option versucht einen Update über den Primary Key zu lösen.
Stattdessen wählen wir das Feld Artikel_ID. Das ist ursprüngliche Artikelnummer, die mit den
Bewegungssätzen aus der Bestell_Position-Tabelle übereinstimmt.
Wählen Sie für dieses Feld die Optionen
Load Column whenUpdating Row:
No
Update: Operation:
=
Match column when Updating Row:
Yes
Load Column when Inserting Row:
Yes
Match Column when Deleting Row:
Yes
Generieren Sie den Code innerhalb des Mappings und betrachten Sie sich den Intermediate
Result-Code für die Zieltabelle.
MERGE
/*+ APPEND PARALLEL("DIM_ARTIKEL") */
INTO
"DIM_ARTIKEL"
USING
(SELECT
"ARTIKEL"."ARTIKELNR" "ARTIKELNR",
"ARTIKEL"."ARTIKELNAME" "ARTIKELNAME",
"ARTIKEL"."ARTIKELNR" "ARTIKELNR$1",
"ARTIKEL"."ARTIKELGRUPPENNR" "ARTIKELGRUPPENNR",
"ARTIKELGRUPPE"."ARTIKELGRUPPENNAME" "ARTIKELGRUPPENNAME",
"ARTIKELSPARTE"."ARTIKELSPARTENNAME" "ARTIKELSPARTENNAME",
"ARTIKELGRUPPE"."ARTIKELSPARTENNR" "ARTIKELSPARTENNR"
FROM
"SRC"."ARTIKEL" "ARTIKEL",
"SRC"."ARTIKELGRUPPE" "ARTIKELGRUPPE",
"SRC"."ARTIKELSPARTE" "ARTIKELSPARTE"
WHERE
( "ARTIKEL"."ARTIKELGRUPPENNR" = "ARTIKELGRUPPE"."ARTIKELGRUPPENNR" ) AND
( "ARTIKELGRUPPE"."ARTIKELSPARTENNR" = "ARTIKELSPARTE"."ARTIKELSPARTENNR" )
)
MERGE_SUBQUERY
ON (
"DIM_ARTIKEL"."ARTIKEL_ID" = "MERGE_SUBQUERY"."ARTIKELNR$1"
)
WHEN MATCHED THEN
UPDATE
SET
"ORIGINAL_NUMMER" = "MERGE_SUBQUERY"."ARTIKELNR",
"ARTIKEL_NAME" = "MERGE_SUBQUERY"."ARTIKELNAME",
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
"GRUPPE_ID" =
"GRUPPE_NAME"
"SPARTE_NAME"
"SPARTE_ID" =
160/300
"MERGE_SUBQUERY"."ARTIKELGRUPPENNR",
= "MERGE_SUBQUERY"."ARTIKELGRUPPENNAME",
= "MERGE_SUBQUERY"."ARTIKELSPARTENNAME",
"MERGE_SUBQUERY"."ARTIKELSPARTENNR"
WHEN NOT MATCHED THEN
INSERT
("DIM_ARTIKEL"."DIMENSION_KEY",
"DIM_ARTIKEL"."ORIGINAL_NUMMER",
"DIM_ARTIKEL"."ARTIKEL_NAME",
"DIM_ARTIKEL"."ARTIKEL_ID",
"DIM_ARTIKEL"."GRUPPE_ID",
"DIM_ARTIKEL"."GRUPPE_NAME",
"DIM_ARTIKEL"."SPARTE_NAME",
"DIM_ARTIKEL"."SPARTE_ID")
VALUES
("DIM_ARTIKEL_SEQ".NEXTVAL,
"MERGE_SUBQUERY"."ARTIKELNR",
"MERGE_SUBQUERY"."ARTIKELNAME",
"MERGE_SUBQUERY"."ARTIKELNR$1",
"MERGE_SUBQUERY"."ARTIKELGRUPPENNR",
"MERGE_SUBQUERY"."ARTIKELGRUPPENNAME",
"MERGE_SUBQUERY"."ARTIKELSPARTENNAME",
"MERGE_SUBQUERY"."ARTIKELSPARTENNR")
;
None
Die Option None ist nützlich, wenn die Zieltabelle z. B. als Vergleichstabelle benötigt wird, sie aber
selbst nicht verändert werden soll.
Die Set based Variante ist möglich.
Truncate/Insert
Bei der Option Truncate/Insert löscht der generierte Code zunächst die Inhalte in der Zieltabelle. Das
ist oft für Zwischentabellen sinnvoll.
Die Set based Variante ist möglich.
Delete/Insert
Hier löscht der generierte Code eventuell bereits vorhandene Sätze bevor ein neuer Satz eingefügt
wird. Das kann einfacher sein, als ein Update-Vorgang.
Die Set based Variante ist möglich.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
161/300
Runtime Kontrolle
Laufzeitergebnisse betrachten Runtime Audit Browser
Die Laufzeitergebnisse können entweder in dem Control Center oder in dem Repository Browser
nachgeschaut werden. Wie man das macht, ist dort bereits ausgeführt worden.
Laufzeitverhalten ändern – Mapping Configuration
Die generierten Mappings kommunizieren ihre Laufzeitdaten mit dem Runtime-System, das sich im
Regelfall in dem Zielschema also dem eigentlichen Warehouse befindet. Hier sind statistische
Informationen (gelesene, geschriebene, abgewiesene Sätze usw. ) ebenso gespeichert wie die
fehlerhaften Sätze.
Die Menge der gemerkten Meldungen kann enorm und damit performancekritisch sein. Deswegen ist
es sinnvoll, das "Traceverhalten" einzustellen.
 Configuration bei dem jeweiligen Mapping
Hier stell Sie den Runtime Parameter "Default audit level" ein auf die Optionen:
 None: Es findet keine Protokollierung statt.
 Statistics: Die die Anzahl gelesener, geschriebener, gelöschter Stätze usw.
wird
dokumententiert
 Error Details: Im Fehlerfall dokumentiert OWB alle Sätze, die zu einem Fehler geführt haben
inklusive der Fehlermeldung.
 Complete: Alle Informationen und Sätze werden dokumentiert, auch diejenigen, die nicht zu
einem Fehler führten. D°as macht natürlich kaum Sinn.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
162/300
Einstelloptionen zur Intensität des Auditings der Ladeläufe
Den Erfolg der durchgelaufenen Mapping können Sie mit Hilfe des Repository Browsers in mit einem
messen und einsehen. Das ist bereits weiter oben dargestellt worden.
Die übrigen Parameter sollten kurz vorgestellt werden:
Deployable:
legt fest, ob das Mapping generiert werden kann oder nicht.
Language:
PL/SQL oder ABAP. Diese Einstellung macht nur Sinn im Zusammenhang mit
der Genierung von Code zum SAP-Daten-Lesen. Hier kann neben der
Generierung von SAP ABAP-Programmen auch PL/SQL erzeugt werden. Mit
diesem PL/SQL-Code würde man dann (in Ausnahmefällen) direkt auf die
SAP-Datenbank gehen.
Referred Calendar:
Zuweisung des Mappings zu einem definierten Scheduling-Kalender (siehe
Workwlow und Prozesssteuerung).
Bulk Size:
Arbeitet nur in Verbindung mit dem Bulk Processing Parameter und im Rowbased Mode. Wenn Bulk Processing aktiviert ist, dann kann hier die Anzahl
zusammenhängend geladener Sätze festgelegt werden. Diese Option zielt auf
das Bulk-Bind-Feature von PL/SQL.
Analyze Table sample percentage:
Prozentanzahl der Sätze einer Tabelle, die beim Analyze
verwendet werden sollen. Das ist ein historischer Parameter. Analyze sollte
nicht mehr genutzt werden. Stattdessen DBMS_STAT benutzen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
163/300
Commit Frequency:
Wirkt nur im Row-based mode und wenn Bulk-Processing nicht aktiviert ist.
Hier legt man fest, nach welcher Anzahl Sätze ein Commit abgesetzt werden
soll.
Maximum number of errors:
Wirk nur im Row-based mode. Die Verarbneitung bricht ab, wenn die
Anzahl an Fehlern erreicht ist, die hier gesetzt ist.
Default Operating Mode:
Steuerung Set Based / Row Based
Default Audit Level:
(siehe oben)
Default Purge Group: Die Jobs erhalten Namen, mit diesem Präfix. Über die Setzung des Preäfix,
kann man Löschgruppen festlegen.
ANSI SQL:
Wahl zwischen ANSI SQL und Oracle SQL-Syntax.
Commit Control:
Einstellung über den Einsatz von Commit. Mit der Einstellung Automatic
Correlated ist es möglich ein Commit bis an das Ende der kompletten
Verarbeitung zu verlagern. Manual verhindert ein Commit in einem Mapping.
Automatic setzt ein Commit immer nach dem Abarbeiten einer Tabelle ab.
Analyze Table Statements:
Bei dieser Wahl generiert OWB ein Analyze Table Kommando. Das
sollte jedoch unter Oracle 10g nicht mehr verwendet werden.
Enable Parallel DML: Grundsätzliche Option um parallele DML zu ermöglichen.
Abgesetzt wird dann:
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
Optimized Code:
Wirkt nur auf den Splitter-Operator. Wenn dieser Paramter gesetzt ist,
generiert OWB ein echtes Multiple Insert Statement ab der
Datenbankversion 9.
Authid:
Legt fest, welcher Benutzer generieren darf.
Use Target Load Order:
Hierüber kann von ausserhalb des Mappings gesteuert werden, ob die
explizit im Mapping festgelegte Schreibreihenfolge für die Zieltabellen genutzt
wird oder nicht.
Error Trigger:
Angabe eines Error-Triggers, der im Fehlerfall aufgerufen wird.
Bulk Processing Mode: (siehe oben).
Generation Mode:
Einschränkung auf einen bestimmten Modus.
Zugriff auf die Laufzeitdaten des Repositories
Um zusätzliche Verwaltungsarbeiten durchführen zu können, oder um ein spezielles Fehlerreporting
aufzusetzen, kann es sinnvoll sein die Laufzeitdaten des Repositories im Hintergrund abzufragen.
Hierfür stehen Public-Views in dem Repositoryschema zur Verfügung. Auf diese kann man auch aus
dem Zielschema heraus zugreifen.
Die wichtigsten Views sind
ALL_RT_AUDIT_EXECUTIONS
ALL_RT_AUDIT_MAP_RUNS
In dem ersten View sind alle ausgeführten Objekte enthalten. Das können Mappings aber auch
Prozesse der Workflowsteuerung sein. Der Schlüsselbegriff ist hier die Execution_Audit_ID. Da sich
Prozesse und Mappings gegenseitig aufrufen können, ist eine rekursive Parent-/Child-Folge
abfragbar. Hierzu dient die Parent_Execution_Audit_ID.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
164/300
View mit Laufzeitinformationen zu Prozessen
Meist will man jedoch einfach nur wissen, ob ein Mapping efolgreich verlaufen ist oder ob eine
entsprechende Anzahl von Sätzen verarbeitet wurde. Diese Information steht in dem View
ALL_RT_AUDIT_MAP_RUNS. Dieser View enthält die Detaillaufzeitdaten zu den Mappings.
Beide Views sind über die Execution_Audit_ID miteinander verbunden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
165/300
View mit den Detail-Informationen zu den Mappings
Anforderung: Es wird eine Funktion gebraucht, die für ein bestimmtes Mapping, prüft, ob die
Anzahl der gelesenen Sätze mit der Anzahl der geschriebenen Sätze übereinstimmt.
Die folgende Funktion zeigt eine mögliche Lösung:
CREATE OR REPLACE FUNCTION "F_SEL_INS"("MAPPINGNAME" IN VARCHAR2) RETURN NUMBER
IS
act_RUN_ID number;
diff number;
BEGIN
select max(map_run_id) into act_RUN_ID
from all_rt_audit_map_runs where MAP_NAME = '"'||MAPPINGNAME||'"';
select number_records_selected - number_records_inserted into diff
from all_rt_audit_map_runs where map_run_id = act_RUN_ID;
return diff;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
/
Beispielaufruf:
select f_SEL_INS('MP_ARTIKEL') from dual;
Zusätzliches Fehlerlogging – Error Trigger
Analog dem Exception-Handling von PL/SQL-Prozeduren kann aus einem Mpping heraus im
Fehlerfall auch eine Fehlerbehandlungsprozedur (Error Trigger) aufgerufen werden. Das ist eine
einfache PL/SQL-Prozedur mit folgender Aufrufschnittellen-Spezifikation:
PROCEDURE <ErrorTriggerName> (p_sqlcode
Stand/letzte Änderung 13.05.2016
IN NUMBER,
(in Arbeit)
75875104
Oracle Warehouse step-by-step
166/300
p_sqlerrm
IN VARCHAR2,
p_error_stmt IN VARCHAR2 DEFAULT NULL,
p_error_column IN VARCHAR2 DEFAULT NULL,
p_error_value IN VARCHAR2 DEFAULT NULL);
Die Prozedur wird dem jeweiligen Mapping über die Configuration mitgeteilt.
 Rechte Maustaste auf den Mappingnamen
 Configuration
Eintrag Error Trigger
Die Prozedur muss esistieren bevor das Mapping generiert wird.
Eine Beispielprozedur zum Dokumentieren von Fehlern in einer zusätzlichen Tabelle kann wie folgt
aussehen:
Create or replace
PROCEDURE MP_COMMIT_ERROR (p_sqlcode IN NUMBER,
p_sqlerrm IN VARCHAR2,
p_error_stmt IN VARCHAR2 DEFAULT NULL,
p_error_column IN VARCHAR2 DEFAULT NULL,
p_error_value IN VARCHAR2 DEFAULT NULL) IS
PRAGMA AUTONOMOUS_TRANSACTION;
runtime_audit_id NUMBER := MP_COMMIT.get_runtime_audit_id;
BEGIN
INSERT INTO Fehler_Protokoll VALUES('MP_COMMIT',
runtime_audit_id,
p_sqlcode,
p_sqlerrm,
p_error_stmt,
p_error_value);
-- an autonomous transaction must be committed.
COMMIT;
END MP_COMMIT_ERROR;
Die Tabelle zum Aufnehmen der Fehler:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
167/300
create table Fehler_Protokoll
(mapping_name varchar2(50),
runtime_audit_id number,
p_sqlcode varchar2(50),
p_sqlerrm varchar2(50),
p_error_stmt varchar2(255),
p_error_value varchar2(50));
Die Informationen in der Fehlertabelle können dann so aussehen.
Auszug aus der Fehlertabelle
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
168/300
Debugger verwenden
Komplexere Mappings können mit einem Debugger analysiert werden. Im Rahmen des Debuggens
„durchläuft“ man satzweise jeden einzelnen Operator, kann den Lauf anhalten und kann sich die
Inhalte des aktuellen Satzes anschauen. Breakpoint halten an, Watchpoints lassen in die
Satzinhalte schauen. Diese Punkte definieren Sie. Damit das gelingt, simuliert OWB eine DebuggingUmgebung im Hintergrund. Wenn Sie zum ersten Mal das Debugging durchführen, wird OWB diese
Umgebung initialisieren. Dazu gehören auch Testdaten, die entweder aus den tatsächlichen Daten der
betroffenen Tabellen gewonnen werden, oder Sie können selbst welche definieren.


Testen Sie das Mapping MP_TRANSAKTIONEN_3_SPLITTER und öffnen Sie das Mapping
Wenn Sie jetzt noch nicht die Menüleiste des Debuggers sehen, schalten Sie diese über den
Menüpunkt Window ein.
Hier zunächst eine kurze Erläuterung zur Menüleiste. Sie starten den Debugger über diese Leiste mit
dem linken Knopf. Es ist der Knopf, der als einzigster farbig unterlegt ist. Alle anderen sind grau, wenn
der Debugger nicht aktiv ist.
Die Menüleiste des Debuggers

Starten Sie den Debug-Vorgang.
Ein Fenster erscheint, das Sie auf die Situation der Testdaten aufmerksam macht. OWB analysiert die
Situation und stellt fest, dass als einzige Testdaten die Tabellen des Mappings selbst vorliegen. Er
zählt die Anzahl Sätze in diesen Tabellen und warnt Sie, wenn zu viele Sätze vorhanden sind, wie in
diesem Fall. Die Anzahl Sätze werden wir nachher reduzieren.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
169/300
Warnung bei zu vielen Testsätzen

Klicken Sie auf Yes, um den Vorgang fortzuführen. Sie erhalten eine Darstellung mit zwei
zusätzlichen Fenstern. Dem Debug Info und Debug Data Fenster.
Wenn Sie gefragt werden, bei welcher Tabelle Sie mit dem Debuggen beginnen wollen, dann legen
Sie die Tabelle Bestellung fest. In dem Debug Info-Fenster können Sie immer mitverfolgen, was der
Debugger gerade macht. Bevor Sie weitermachen sollte dort die Meldung stehen: Successful debug
initialization!
Situation nach dem ersten Starten des Debuggers
Bevor wir das Testen starten, sollten wir die Testdaten einschränken.
 Wählen Sie dazu in dem Debug Info-Fenster den Reiter Test Data.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
170/300
Festlegung der Testsätze


Selektieren Sie in dem neuen Fenster die Tabelle BESTELLUNG und drücken Sie auf Edit.
Aktivieren Sie in dem neuen Fenster die Checkbox Row Count. Damit schränken Sie die Anzahl
der Bestellsätze auf 100 ein.
Einschränkung der Bestellsätze auf 100


Drücken Sie auf OK und Sie erhalten die Information, dass sich die Testsätze geändert haben.
Sie müssen reinitialisieren. Drücken Sie dazu den entsprechenden Knopf in der Kopfleiste.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
171/300
Sie können das Modifizieren der Testdaten beliebig oft wiederholen. Sie können auch neue Testsätze
erstellen.

Markieren Sie jetzt die Tabelle WH_TRANSAKTIONEN und drücken Sie danach den Button Set

Breakpoint
.
Setzen Sie noch einen Breakpoint auf die Zieltabelle WH_TRANS_PRIVAT.

Starten Sie jetzt das Debuggen mit Resume
Der Debugger startet und wird an dem ersten Breakpoint anhalten. Jetzt haben Sie die Möglichkeit
über den Button Watchpoint in die einzelnen Tabellen hineinzuschauen. Selektieren Sie dazu immer
zunächst das Objekt und dann den Button Set Watch Point. In dem Fenster Debug Data sehen Sie
das Ergebnis des Watchpoints.
Watchoint-Ergebnis hier Artikel bei Breakpoint WH_TRANSAKTIONEN

Drücken Sie jetzt auf die Option Next Step
in der Debug-Menüleiste.
Der Debug-Lauf fährt bis zum Splitter fort. Hier ist eine Entscheidung zu treffen. Wählen Sie den
Splitterweg für Privatkunden. Dort haben Sie den nächsten Breakpoint gesetzt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
172/300
Auswahl im Splitter
Danach hält der Debugvorgang auf der Zieltabelle WH_TRANS_PRIVAT an und auch hier können Sie
Watchpoints setzen. Der Vorgang ist danach abgeschlossen.
Diese kleine Übung zeigt bereits, dass es wenig Sinn macht das Debuggen mit sehr vielen Sätzen
durchzuführen. Es ist notwendig die Anzahl der Sätze einzuschränken und sogar zur Not eigene
Testfälle zu erzeugen.
 Wiederholen Sie den Vorgang mit der Bestelltabelle in dem Sie über den Testdatendialog die
Anzahl zunächst auf 5 begrenzen und dann über die Option Edit im oberen Bereich die Zeilen
zum Editieren freischalten.
Erstellen von Testsätzen
Über die Optionen Clear All Row und Add Row können Sie auch vollständig neue Sätze schreiben.
Achtung: Jenachdem welche Einstellung Sie wählen, versucht der Debugger Sätze wieder in
die Originalquelltabellen zurückzuschreiben. Dabei könnten auch Daten verloren gehen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
173/300
Erstellen von Testsätzen
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
174/300
Erzeugen von Auswertemodellen in einem Data Mart
(Star Schema, Snowflake, OLAP-Würfel)
Für Auswertezwecke haben sich in der Praxis mehrere Datenmodelle und Techniken etabliert, die je
nach Anwendungsfall in Abhängigkeit von den Rahmenbedingungen ihre Stärken ausspielen können.
Die klassischen Auswerte-Datenmodelle in der relationalen Datenbankwelt sind das Star-und das
Snowflake-Schema. Oracle bieten zusätzlich die OLAP-Option als alternatives Speicherverfahren an.
Bei diesem Verfahren sind Kennzahlen bereits vorberechnet.
Warehouse Builder erlaubt die Definition und die Erstellung von allen 3 Varianten. Die
Metadatendefinition erfolgt jedoch nur einmal. Zu dem Zeitpunkt der Generierung entscheidet man
sich dann für die jeweilige physische Ausprägung.
Moduleinteilung und zusammenhängende Informationen
Für Data Marts kann man neben Stage und Warehouse aus dokumentarischen Gründen ein
separates Modul benutzen. Hier können Dimensionen und Faktentabellen aus einem
zusammenhängenden Themengebiet zusammengefaßt sein.
Grundsätzlich können beliebig viele Dimensionen und Faktentabellen definiert werden. Über die
Verwendung des Wizards zum Aufbau von Faktentabellen legt der Benutzer die
Zusammengehörigkeit von Dimensionen und Fakten fest. Dimensionen können in mehreren
Starschemen gleichzeitig genutzt werden. Damit ist es leichter, Abfrageinhalte über Data MartGrenzen und Faktentabellen hinweg synchron zu halten (Conforming Dimensions).
Wozu werden Dimensionen gebraucht
Zum einen sind Dimensionen fundamentaler Bestandteil eines Starschemas wie dies bereits in dem
einleitenden Kapitel zu den Dimensionen und Sichten ausgeführt wurde. Logisch gesehen
representieren sie die Geschäftsobjekte, über die der Warehouse-Benutzer Informationen abfragt.
Aus Sicht der Datenbank liefern sie wertvolle Hinweise zur Optimierung von Benutzerabfragen. Das
Datenbanksystem wird sich an den Hierarchie-Leveln der Dimension orientieren um Benutzerabfragen
automatisch auf vordefinierte Summentabellen (Materialized Views) umzulenken. Dieses QueryRewrite-Verfahren wird unten näher erläutert.
Technisch gesehen, entstehen in der Datenbank nach dem Generieren:
- eine oder mehrere relationale Tabellen (je nach dem ob ein Star- oder Snowflake-Schema beim
Generieren gewählt wurde)
- ein Datenbankobjekt Dimensional Table. Dieses hat eine Hilfsfunktion für den Datenbank-Optimizer
bei der Steuerung des Query Rewrite Verfahrens in der Datenbank.
Verwendet man die Oracle OLAP Option in der Datenbank, so dient die Dimension-Beschreibung der
Definition der OLAP-Würfel. Oracle Warehouse Builder wird aus diesen Definitionen einen OLAPWürfel herstellen.
Aus welchen Teilen besteht eine Dimension
Idealerweise beinhaltet eine Dimension die zu erwartende Drill-Down- bzw. Roll-Up-Struktur der
Abfragen der Warehouse-Benutzer. Um Trends zu erkennen verdichtet man Detailinformationen über
gleiche Eigenschaften auf einer Makroebene. Artikel fasst man so zu Artikelgruppen zusammen, Orte
werden auf Kreis- oder Landesebene in der Summe betrachtet, Mitarbeiter über Abteilungen oder
Sparten in ein globales Bild eingestuft. Über Trends auf der Makroebene lassen sich Rückschlüsse
auf die Detailebene ziehen. Besonderheiten auf der Einzelelementebene werden deutlich, aber auch
Ausreißer auf der Einzelebene werden nivelliert usw.
Für ein Level einer Hierarchie wird üblicherweise ein identifizierendes Element festgelegt – ein
Levelschlüssel – und weitere beschreibende Attribute. Auf der untersten Ebene liegt der Primary Key
der Dimensionstabelle. Dieser Schlüssel wird bei dem relationalen Star Schema als Foreign Key in die
Faktentabelle vererbt.
Bei der Definition der Level ist darauf zu achten, dass „abfragefähige“ Columns gefunden werden.
Über diese Columns fragt der Warehouse-Benutzer später ab und das Auswertewerkzeug zeigt sie
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
175/300
dem Benutzer zur Selektion an. Diese Columns können gleichzeitig die Abfrageschlüsselwörter für die
Endbenutzer sein.
Business Key - Surrogate Key
Bei der Schlüsselvergabe gibt es noch ein besonderes Phänomen. Meist wird in Data Warehouse
Systemen ein eigenständiger künstlicher Schlüssel erzeugt. Das ist notwendig, weil in einem
Warehouse System Informationen aus mehreren operativen Systemen zusammengefasst sind. Dort
sind die Informationen oftmals nach anderen Schlüsseln sortiert und abgelegt, so dass das
Warehouse einen neuen System-übergreifenden Schlüssel braucht. Der Oracle Warehouse Builder
trägt diesem Umstand Rechnung, in dem er in den Wizards zur Erstellung der Dimensionen die
Schlüsselarten Business und Surrogate (Starschems) vorsieht.
Beispiel Artikeldimension:
Auf den Hierarchieleveln gibt es
die Levelschlüssel und jeweils
noch ein Levelattribut (Langtext).
Auf dem untersten Level gibt es
noch
zusätzlich
einen
Artikelschluessel als Primary Key
der Dimension. Er übernimmt die
Fremschlüsselbeziehung
zur
Faktentabelle.
Die Artikeldimension ist über eine Denormalisierung der 3 Stammdatentabellen
Artikelgruppe und Artikelsparte zu einer einzigen Tabelle entstanden.
Artikel,
Zu jeder Dimensionstabelle definiert man ein passendes Mapping. Hier findet die Denormalisierung
statt. Werden neue künstliche Schlüssel gebraucht, so kann dieser, in diesem Mapping über eine
Sequenz erzeugt werden.
In dem nebenstehenden
Beispiel verzichtete man
auf das Erstellen eines
zusätzlichen Schlüssels
für
die
Dimension
Artikel,
da
die
Artikelnummer bereits
eine laufende Nummer
ist.
Der Primary Key der Dimensionen
Nach welchen Regeln sollten die Primary-Keys der Dimensionen im Warehouse aufgebaut sein?
Aus der klassischen Datenmodellierung gibt es folgende Regeln für Primary Keys (PKs):
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step



176/300
PKs sollten über lange Zeiträume hinweg stabil bleiben. Artikelnummern, die sich öfter
ändern, eignen sich z. B. nicht. Wie sollen im Warehouse über Jahre hinweg Trends
gemessen werden, wenn sich die Schlüssel ändern?
PKs sollten kompakt aufgebaut sein. Zusammengesetzte Schlüssel eignen sich nicht. Die
kompakteste Form ist eine laufende Nummer.
PKs sollten nicht noch zusätzlich in Bedeutungsbestandteile zerfallen. Z. B. gruppenbezogene
Präfix- oder Suffixangaben, Masken.
Zusammengefasst ist das Bilden einer laufenden Nummer in den meisten Fällen die ideale
Vorgehensweise.
Eine Aufgabenstellung bei dem Aufbau des Starschemas ist folglich das Neubilden der Primary Key.
Innerhalb des Warehouse-Builders wird man hierzu eine Sequenz (Datenbankobjekt) nutzen, die bei
jedem Zugriff einen neuen Schlüssel liefert.
Der Originalschlüssel, z. B. die Artikelnummer aus den Stammdaten, sollte ebenfalls mit in die
Dimension übernommen werden, denn nur über den Originalschlüssel können Rückverweise auf die
operativen Quellen nachvollzogen werden. Es wird möglich sein, aus dem Warehouse heraus über
diese Schlüssel auf die Originaldaten der operativen Vorsystemen zuzugreifen. Auch bei Updates
helfen die Orginalschlüssel, denn nur hierüber sind zu ändernde Sätze identifizierbar.
Empfehlungen für die Planung und den Aufbau von Dimensionen:
 Verwenden Sie denormalisierte Strukturen, die nach Möglichkeit in einer Tabelle vorhanden
sind (nicht noch zusätzliche normalisierte Strukturen, etwa Snowflake)
 Die Beziehungen zwischen der Faktentabelle und der Dimension sollte „unique“ sein, d.h.
eine echte n:1 Beziehung. Dies ist im Vorfeld durch den Aufbau der Dimension im ETLProzess zu prüfen. Auf Datenbank-Contraints zwischen Faktentabelle und Dimensionen sollte
verzichtet werden. Sie bremsen die Ladeperformance aus.
 Die Dimension sollte in sich stimmig sein. D.h. der Schlüssel eines unteres Levels muss exakt
auf einen Schlüssel des darüber liegenden Levels passen (N:1-Struktur). Prüfungen durch die
Prozedur „validate_dimension“ im DBMS_SUMMARY-Package unter SYS können hier helfen.
 Fakten-Sätze sollten immer ein Pandant zu den jeweiligen Dimensionssätzen haben.
Faktentabellen erhalten keinen explizit erstellten Primary Key. Der PK der Faktentabelle ergibt sich
aus der Kombination aller Foreign Keys zu den Dimensionstabellen. Diese Schlüsselkombination
muss nicht eindeutig sein.
Dimensionen über den Star Schema Wizard erstellen
Der Warehouse Builder hat einen speziellen Wizard um ein Starschema zu definieren. Man geht in
zwei Schritten vor:
1. Erstellen aller relevanten Dimensionen.
2. Erstellen der Faktentabelle, wobei hier die Beziehungen zu möglichen Dimensionen in dem
Modul automatisch erkannt wird.
Bei der Definition von Dimensionsobjekten werden 4 Objekte entstehen:
■
Eine Tabelle, in der die Daten in der Datenbank abgespeichert sind
■
Eine Primary Key- Definition (Index)
■
Ein Dimensional Table-Objekt
■
Ein Sequence-Objekt zum Bilden des künstlichen Schlüssels.
Dimension Artikel
Aufgabenstellung: Erstellen einer Dimension mit Artikeln:
- unterstes Level Artikel mit einer Artikel_ID
- Level2 Artikelgruppendaten
- Level3 Artikelspartendaten
Zusätzlich zu dem Originalschlüssel soll ein künstlicher Schlüssel für die Dimension aufgebaut
werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step




177/300
Gehen Sie mit der rechten Maustaste in dem Modul Warehouse auf den Punkt DIMENSIONS
und wählen Sie hier die Option New und Using Wizard.
Der Dimension-Wizard startet. Vergeben Sie den Namen DIM_ARTIKEL. Next.
Legen Sie den Storage type auf ROLAP fest (kann man später wieder ändern).
Im nächsten Schritt legen Sie Attribute fest, die später den Leveln zugeordnet werden können.
Wählen Sie hier die Attribute:
- ID (Surrogate, number)
- Originanl_Nummer (Business, number)
- Name (varchar2(32))
- Beschreibung (varchar2(50))
Festlegung der Attribute, die später den einzelnen Leveln zugeordnet werden können

Die folgende Maske fragt nach den Leveln. Es ist also für jedes Level ein Levelname zu vergeben.
Next.
Definition der Diemensions-Hierarchie-Level

Jetzt sind die vorher festgelegten Attribute den Leveln zuzuordnen. Wählen Sie:
Level Artikel:
ID, Original_Nummer, Name, Beschreibung
Level Gruppe:
ID, Name
Level Sparte:
ID, Name
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
178/300
Zurodnung von Attributen zu Leveln. Hier am Beispiel von Level Artikel

Danach wählen Sie die Slowly Changing Dimension Option. Nehmen Sie hier den einfachsten Fall
Option 1. Next.
Jetzt ist die erste Dimension angelegt und sie erscheint in dem Project Explorer des Design Centers.
Dort können Sie alle Einstellungen auch wieder über den Object Editor ansehen und nachträglich
modifizieren.
Eine Änderung wollen wir zusätzlich noch anbringen: Für den Surrogate Key sollte automatisch ein
Oracle Datenbank Sequence-Objekt entstehen.

Rufen Sie hierfür den Object Editor für die neue Dimension auf.
Data Object Explorer mit der neuen Dimension
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

179/300
Hier finden Sie bereits einen Eintrag mit dem Namen DIM_ARTIKEL_SEQ. Sie brauchen also
nichts mehr zu tun.
Bis jetzt haben wir lediglich die logische Definition einer Dimension angelegt. Es fehlt noch das
Gegenstück in Form einer relationalen Tabelle. Hierzu ist ein Bind-Vorgang nötig.

Drücken mit der rechte Maustaste auf den Kopf des Objektes und wählen Sie die Option Auto
Bind.
Bind: Ableiten einer relationalen Tabelle aus der Dimensionendefinition
Es entsteht ein neuer Reiter (DIM_ARTIKEL), und das neue Tabellenobjekt wird dargestellt.
Dimension und Tabelle

Das Ergebnis ist jetzt eine zusätzliche Tabelle, die Sie auch in dem Design Center sehen können.
Sie werden auch die Sequence finden, die zur Bildung des Künstlichen Schlüssels in einem später
zu definierenden Mapping gebraucht wird.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

180/300
Generieren Sie jetzt alle Objekte, die neu entstanden sind mit dem Control Center.
Zu Ihrer Orientierung sind hier die generierten Scripte dargestellt.
CREATE TABLE "DIM_ARTIKEL"
(
"DIMENSION_KEY" NUMBER NOT NULL,
"BESCHREIBUNG" NVARCHAR2(50),
"ORINIGAL_NUMMER" NUMBER(1),
"ARTIKEL_NAME" VARCHAR2(32),
"ARTIKEL_ID" NUMBER,
"GRUPPE_ID" NUMBER,
"GRUPPE_NAME" VARCHAR2(32),
"SPARTE_NAME" VARCHAR2(32),
"SPARTE_ID" NUMBER
)
;
ALTER TABLE "DIM_ARTIKEL" ADD
CONSTRAINT "DIM_ARTIK_DIMENSION_KEY_PK" PRIMARY KEY
("DIMENSION_KEY")
;
CREATE DIMENSION DIM_ARTIKEL
LEVEL "ARTIKEL" IS
"DWH"."DIM_ARTIKEL"."ARTIKEL_ID"
LEVEL "GRUPPE" IS
"DWH"."DIM_ARTIKEL"."GRUPPE_ID"
LEVEL "SPARTE" IS
"DWH"."DIM_ARTIKEL"."SPARTE_ID"
HIERARCHY
"STANDARD" (
"SPARTE" CHILD OF
"GRUPPE" CHILD OF
"ARTIKEL"
)
ATTRIBUTE
"ARTIKEL"
DETERMINES
(
"DWH"."DIM_ARTIKEL"."BESCHREIBUNG",
"DWH"."DIM_ARTIKEL"."ORINIGAL_NUMMER", "DWH"."DIM_ARTIKEL"."ARTIKEL_NAME" )
ATTRIBUTE "GRUPPE" DETERMINES ( "DWH"."DIM_ARTIKEL"."GRUPPE_NAME" )
ATTRIBUTE "SPARTE" DETERMINES ( "DWH"."DIM_ARTIKEL"."SPARTE_NAME" )
;
Create Sequence "DIM_ARTIKEL_SEQ"
START WITH 1 INCREMENT BY 1
;
Mapping zum Erstellen der Dimension
Aufgabenstellung: Gebraucht wird ein Mapping zum Befüllen der neuen Artikeldimension:
Als Quellen dienen Artikel, Artikelgruppe, Artikelsparte aus dem SRC-Schema.



Erstellen Sie ein neues Mapping mit dem Namen MP_ARTIKEL
Ziehen Sie über den Explorer die drei Tabellen Artikel, Artikelgruppe und Artikelsparte aus dem
Source-Modul in die Editorfläche.
Ergänzen Sie das Mapping um die Zieltabelle DIM_ARTIKEL und die Sequence
DIM_ARTIKEL_SEQ aus dem vorigen Abschnitt. (Achtung: benutzen Sie die Tabelle
DIM_ARTIKEL, nicht das Dimensions-Objekt).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step



181/300
Ziehen Sie einen Joiner zwischen die Quell- und die Zieltabelle. Präparieren Sie den Joiner so,
dass er drei Quelltabellen aufnehmen kann und benennen Sie die Eingabegruppen entsptechend
der Eingabetabellen.
Verbinden Sie jetzt die Quelltabellen mit dem Joiner. Übernehmen Sie einfach die kompletten
Attributgruppen.
Definieren Sie die Join-Bedingung wie unten im Bild dargestellt.
Joinbedingung den Mappings zur Bildung der Artikeldimension

Verbinden Sie jetzt nach folgender Vorschrift den Ausgang des Joiners mit der Zieltabelle:
Quelle
DIM_ARTIKEL_SEQ.NEXTVAL
ARTIKEL.ARTIKELNR
ARTIKEL.ARTIKELNAME
ARTIKEL.ARTIKELNR
ARTIKEL.ARTIKELGRUPPENNR
ARTIKELGRUPPE.ARTIKELGRUPPENNAME
ARTIKELSPARTE.ARTIKELSPARTENNAME
ARTIKELGRUPPE.ARTIKELSPARTENNR

Ziel
DIMENSION_KEY
ORINIGAL_NUMMER
ARTIKEL_NAME
ARTIKEL_ID
GRUPPE_ID
GRUPPE_NAME
SPARTE_NAME
SPARTE_ID
Generieren Sie das Mapping und testen Sie es. Achtung: es kann nicht passenden Feldlengen
kommen. Überprüfen Sie dieses vorher mit dem Validate in dem Mapping.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
182/300
Mapping MP_Artikel
Das Ergebnis:
Ausschnitt aus der Dimensionstabelle
Um das Zielmodell zu vervollständigen, erstellen Sie in den nächsten Schritten in der gleichen Art die
Dimensionstabellen DIM_REGION und DIM_KUNDE.
Dimension Regionen
Die Regionen-Dimension und die zugehörige Tabelle haben hat die folgenden Definitionen:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
183/300
Dimension und zugehörige Tabelle DIM_REGION
Um diese Dimension mit Daten zu füllen, laden sie aus den Beispieldaten die Tabelle REGIONEN.
Das Mapping hierzu sieht sehr einfach aus:
Mapping MP_Regionen
Dimension Kunde
Die Kunden-Dimension sollte ähnlich schnell und einfach erstellbar sein. Im Gegensatz zu den
anderen Dimensionen besteht diese jedoch nur aus einem Level: der Kunde selbst.



Erstellen Sie eine Dimension DIM_KUNDE und verwenden Sie als Muster hierfür und für die
Inhalte die Tabelle KUNDE aus dem Schema SRC (Beispieldaten).
Definieren Sie in dem Editor nur ein Level: KUNDE.
Verwenden Sie keine Sequence.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
184/300
Die Tabellen- und Dimensionendefinition DIM_KUNDE
Vorsicht Falle: Die Vorgabe besagte, dass nur ein Level in der Hierarchie erstellt werden soll.
Oracle Warehouse Builder wird jedoch mindestens zwei Level von Ihnen fordern. Das merken Sie
spätestens bei der Generierung. Dieses Verhalten ist eine Einstellung von OWB. Die
multidimensionale Speicherkomponente der OLAP-Option erfordert dies.
Fügen Sie deswegen in die Dimension noch ein Dummy-Level ein z. B. Name_Total.

Erstellen Sie hierzu das passende Mapping MP_KUNDE und verwenden Sie die folgenden
Herleitungen. Quelle ist die Tabelle KUNDE aus dem SRC-Schema und Ziel ist die neu erstellte
Dimension.
Quelle
DIMENSION_KEY
STATUS
KUNDENNUMMER
TELEFAX
TITEL
STRASSE
KONTAKPERSON
EINKOMMENSGRUPPE
GESCHLECHT
BRANCHE
WOHNART
FIRMENRABATT
ANZ_KINDER
VORNAME
ORTNR
GEBURTSDATUM
BILDUNG
TELEFON
BERUFSGRUPPE
KUNDENART
Stand/letzte Änderung 13.05.2016
Ziel
KUNDE.KUNDENNR
KUNDE.STATUS
KUNDE.KUNDENNR
KUNDE.TELEFAX
KUNDE.TITEL
KUNDE.STRASSE
KUNDE.KONTAKTPERSON
KUNDE.EINKOMMENSGRUPPE
KUNDE.GESCHLECHT
KUNDE.BRANCHE
KUNDE.WOHNART
KUNDE.FIRMENRABATT
KUNDE.ANZ_KINDER
KUNDE.VORNAME
KUNDE.ORTNR
KUNDE.GEBDAT
KUNDE.BILDUNG
KUNDE.TELEFON
KUNDE.BERUFSGRUPPE
KUNDE.KUNDENART
(in Arbeit)
75875104
Oracle Warehouse step-by-step
NAME
ANREDE
185/300
KUNDE.NACHNAME
KUNDE.ANREDE
Mapping MP_Kunde

Generieren und testen Sie die neuen Objekte.
Ergebnismenge DIM_KUNDE
Die Zeitdimension
Es fehlt noch die Zeitdimension. Hier gibt es bei Oracle Warehouse Builder ein Standardverfahren,
das bis hin zur fertigen und mit Daten gefüllten Dimension führt.

Starten Sie in dem Design Center mit der rechten Maustaste bei Dimensions den Wizard zur
Erstellung einer Zeitdimension. Beachten Sie die Option Using Time Wizard.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
186/300
Erstellen einer Zeitdimension über separaten Wizard




Vergeben Sie den Namen DIM_ZEIT. Next.
Wählen Sie die Option ROLAP. Next.
Jetzt werden Sie nach dem Zeitraum gefragt, für den Sie die Defnition haben wollen.
Wählen Sie als Startjahr 1996 und für die Zeitdauer 14 Jahre (Die Beispieldaten haben diese
breite Spanne, es sind sogar Daten aus dem Bereich jenseits der Gegenwart enthalten: ein Fall
für das Data Profiling).
Auswahl des Zeitfensters für die Zeitdimension

Im nächsten Schritt wählen Sie die Hierarchiestufen für die Zeitdimension. Wählen Sie
Jahr/Quartal/Monat/Tag.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
187/300
Festlegen der Hierarchiestufen der Zeitdimension
Nachdem Sie jetzt Next gedrückt haben, wird OWB eine Reihe von Objekten anlegen. Das können Sie
an dem Protokoll leicht erkennen. Es entsteht sogar ein Mapping.
Generierungsprotokoll für alle Objekte rund um die Zeitdimension

Öffnen Sie das das neu erstellte Mapping DIM_ZEIT_MAP. Wählen Sie die Option Autolayout. Sie
können die einzelnen Objekte betrachten.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
188/300
Mapping zur Erstellung der Zeitdimension

Generieren Sie die neuen Objekte. Beachten Sie alle Objekte, die automatisch erzeugt wurden.
Das sind
DIM_ZEIT
DIM_ZEIT_SEQ
DIM_ZEIT_MAP

Starten Sie das Mapping und betrachten Sie sich das Ergebnis in dem Data Browser.
Geladene Sätz des Mappings zur Erstellung der Zeitdimension
Das Ergebnis
Auszug mit Beispieldaten
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
189/300
Wenn Sie sich die Daten genau betrachten, werden Sie sehen, das die Zeitdimension Felder
beinhaltet, an die sie zunächst vielleicht nicht gedacht haben. Das sind Felder für die Anzahl Tage
einer Zeitperiode oder Start- und Endtag einer Periode. Diese Felder sind für die Würfel der Oracle
OLAP-Option wichtig.
Wenn Sie eine einfacher strukturierte Zeitdimension erstellen wollen, dann wählen Sie bei der
Definition die Option für Standarddimensionen.
Zum Füllen der so erstellen Zeitdimension können Sie die kleine Prozedur verwenden, die bei den
Beispieldaten mitgeliefert wird:
days_Tabelle_Create_und_Prozedur_und_Aufruf_Dt_Modell.sql
In diesem Script ist zunächst die Definition einer Hilfstabelle TAGE angegeben. Und schließlich die
Prozedur TIME_GEN. Beide Objekte kann man über SQL Plus anlegen. und die Prozedur dann über
EXECUTE und den passenden Parametern aufrufen.
---- Die Tabelle Tage
drop Table Tage;
CREATE TABLE TAGE (
Datum_ID
NUMBER(4) NOT NULL,
Datum_Desc
DATE NOT NULL,
Tag_des_Monats
NUMBER(2) NOT NULL,
Tag_des_Jahres
NUMBER(3) NOT NULL,
Woche_des_Jahres
NUMBER(2) NOT NULL,
Monats_Nummer
NUMBER(2) NOT NULL,
Monat_Desc
VARCHAR2(9) NOT NULL,
Quartals_Nummer
NUMBER(1) NOT NULL,
Jahr_Nummer
NUMBER(4) NOT NULL
);
-------------------------------------------------------------------------- Die Prozedur Time_Gen
create or replace procedure Time_Gen
(startdate DATE, enddate DATE) AS
incdate DATE;
recno INTEGER;
Begin
incdate := startdate;
recno := 1;
while incdate <= enddate LOOP
insert into Tage(Datum_ID ,
Datum_Desc,
Tag_des_Monats,
Tag_des_Jahres,
Woche_des_Jahres,
Monats_Nummer,
Monat_Desc,
Quartals_Nummer,
Jahr_Nummer)
Values (recno,
incdate,
TO_NUMBER(TO_CHAR(incdate,
TO_NUMBER(TO_CHAR(incdate,
TO_NUMBER(TO_CHAR(incdate,
TO_NUMBER(TO_CHAR(incdate,
TO_CHAR(incdate,
'Month'),
TO_NUMBER(TO_CHAR(incdate,
TO_NUMBER(TO_CHAR(incdate,
'DD')),
'DDD')),
'WW')),
'MM')),
'Q')),
'YYYY')));
recno := recno + 1;
incdate := incdate + 1;
END LOOP;
END;
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
190/300
--Beispielaufruf der Prozedur z. B.:
--exec time_gen('01011990','31121999');
-exec time_gen('01011990','31122005');
-exec time_gen(to_date('01011998','DDMMYYYY'),TO_DATE('31122004','DDMMYYYY'));
-exec time_gen(to_date('01011996','DDMMYYYY'),TO_DATE('31122004','DDMMYYYY'));
-- Hilfskommandos
-- alter session set nls_date_format
= 'DD-MON-YY';
Die Faktentabelle
Es fehlt die Faktentabelle in der die Bewegungsdaten von Bestellung und Best_POS
zusammenfliessen.
Während die Erstellung der Faktentabelle selbst sehr schnell erledigt ist, wird das Mapping etwas
aufwendiger werden, denn hier müssen eine Reihe von Umschlüsselungen vorgenommen werden.

Wählen Sie zunächst den Wizard zur Erstellung der Faktentabelle an. Fakten heißen in OWB
Cube. Also rechte Maustaste auf Cube und dann die Option New wählen.
Erstellung einer Faktentabelle




Vergeben Sie den Namen F_UMSATZ. Next.
Wählen Sie die Option ROLAP. Next.
Jetzt haben Sie die Möglichkeit die Dimensionen auszuwählen, die mit der neuen Faktentabelle
verbunden werden sollen. Das bedeutet damit auch, dass Sie in die Faktentabelle die nötigen
Fremdschlüssel generiert bekommen.
Wählen Sie hier alle 4 Dimensionen, die Sie zuvor erstellt haben. Next.
Auswahl der Dimensionen, die zur Faktentabelle gehören

Jetzt können Sie die eigentlichen Faktenwerte festlegen. Wählen Sie die Werte, wie in dem
folgenden Bild:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
191/300
Festlegung der Measures oder Kennzahlen in der Faktentabelle
Alle Eintragungen der neuen Faktentabelle kann man in dem Object Editor wieder verändern.
Die reinen Definitionsarbeiten sind jetzt allerdings abgeschlossen. Das Befüllen der neuen
Faktentabelle kann beginnen.
Die neue Faktentabelle in der graphischen Darstellung des Data Object Editors
Tip: In den folgenden Schritten wird die Faktentabelle mit Daten gefüllt. Es ist
empfehlenswert, im Verlauf der Testphase die Defintion von Foreign-Keys und Indexobjekten zu
unterlassen. Das bremst nur den Entwicklungsfortschritt, da zu Beginn der Entwicklung meist noch
fehlerhafte Sätze angeliefert werden. Das Aktivieren von Fremdschlüsseln und Indexdefinitionen kann
später nachgeholt werden.
Sie schalten die Generierung unter Configuration bei der Tabelle F_UMSATZ aus. Entfernen des
Häkchens bei Deployable.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
192/300
Konfiguration der Faktentabelle / Entfernen und Aktivieren der Generierung von Foreign Keys und
Indexdefinitionen
Das Füllen der Faktentabelle
Als Quelle für das Füllen der Faktentabelle benutzen wir die Tabelle WH_TRANSAKTIONEN aus den
vorhergehenden Schritten. Diese Tabelle ist auch den Beispieldaten beigefügt.



Erstellen Sie ein neues Mapping mit dem Namen MP_F_UMSATZ.
Ziehen Sie die Tabellen F_UMSATZ und WH_TRANSAKTIONEN in die Editorfläche
Folgende Felder können Sie sofort miteinander verbinden:
Quelle
BESTELLEMENGE
BRUTTOWERT
KUNDENCODE
Ziel
MENGE
UMSATZ
DIM_KUNDE
Für die Schlüsselfelder DIM_ARTIKEL und DIM_ZEIT müssen jetzt Lookup-Werte gefunden werden,
denn den Dimensionstabellen haben andere Schlüssel. Bevor man diese Lookups in dem
Mappingeditor entwirft, sollte man sich die Datenwerte der entsprechenden Tabellen vorher genau
ansehen. Hier eignet sich der Data Viewer. Für die Artikelwerte muss man einen Lookup auf die
Tabelle DIM_ARTIKEL durchführen und ARTIKELNR mit ORIGINAL_NUMMER vergleichen um aus
der Tabelle DIM_ARTIKEL den Wert DIMENSION_KEY zu erhalten.
Betrachtung über die Schlüsselwerte


Ziehen Sie jetzt ein Lookup-Operator in die Editorfläche.
Nennen Sie ihn ARTIKEL
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

193/300
Wählen Sie als INGRP-Felder
WH_TRANSAKTIONEN.
(Step
3)
das
Feld
ARTIKELNR
aus
der
Tabelle
Ingroup-Feld ARTIKELNR für Lookup


Wählen Sie als Lookup-Tabelle (Step 4) die Tabelle DIM_ARTIKEL (nicht das Dimensionsobjekt)
Im unteren Bereich der Fläche können Sie jetzt die korrespondierenden Attribute wählen. Das sind
ORIGINAL_NUMMER als Lookup Key und ARTIKELNR als Eingabefeld.

Der letzte Schritt (Step 5) ist nur dokumentarisch. Sie können den Vorgang beenden und in dem
Mappingeditor, der dann wieder freigegeben wird das Lookup-Ausgangsfeld DIMENSION_KEY
mit dem Feld DIM_ARTIKEL der Zieltabelle verbinden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
194/300
Rückgabefelder des Lookupvorgangs
Tip: Um die Entwicklungsarbeit zu beschleunigen, kann man diese Lookup-Bedingung
separat
testen,
auch
wenn
man
die
Zieltabelle
noch
nicht
generiert
hat:
Man kopiert sich den Intermediate-Result-Code für die Zieltabelle in einen Texteditor und macht
daraus ein Zähl-Statement.
Intermediate Result für die Zieltabelle
Modifikation zum Testen
INSERT
INTO
"F_UMSATZ"
("UMSATZ",
"MENGE",
"DIM_ARTIKEL",
"DIM_KUNDE")
(SELECT
"WH_TRANSAKTIONEN"."BRUTTOWERT"
"BRUTTOWERT",
"WH_TRANSAKTIONEN"."BESTELLMENGE"
"BESTELLMENGE",
NVL("ARTIKEL"."DIMENSION_KEY",
NULL)
"DIMENSION_KEY",
"WH_TRANSAKTIONEN"."KUNDENCODE"
"KUNDENCODE"
FROM
"WH_TRANSAKTIONEN"
"WH_TRANSAKTIONEN"
LEFT
OUTER
JOIN
"DIM_ARTIKEL"
"ARTIKEL"
ON
(
(
"ARTIKEL"."ORIGINAL_NUMMER"
=
"WH_TRANSAKTIONEN"."ARTIKELNR" ) )
);
(SELECT
count(*)
FROM
"WH_TRANSAKTIONEN"
"WH_TRANSAKTIONEN"
LEFT
OUTER
JOIN
"DIM_ARTIKEL"
"ARTIKEL"
ON
(
(
"ARTIKEL"."ORIGINAL_NUMMER"
=
"WH_TRANSAKTIONEN"."ARTIKELNR" ) )
);
Idealerweise muss das Ergebnis die gleiche Anzahl Zeilen liefern, wie die Tabelle
WH_TRANSAKTIONEN Sätze hat. Dieses schrittweise Testen ist hilfreich, weil später nur ein
zuammenhängendes komplexeres Statement zur Verfügung steht. In manchen Szenarien kommt bei
den ersten Tests kein einziger Satz in der Faktentabelle an. Dann kann die Suche nach der
fehlerhaften Bedingung aufwendig sein.
In einem alternativen Testkonzept können Sie die Zieltabelle auf TRUNCATE/INSERT stellen, das
Mapping generieren und starten. Dann sehen Sie wie viele Sätz die Lookup-Bedingung erfolgreich
bestanden haben.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
195/300
Das gleiche Verfahren ist mit der Zeitdimension durchzuführen.
 Ziehen Sie hierzu wieder einen Lookup-Operator in den Editor. Eingabefeld ist jetzt das Feld
BESTELLDATUM der Tabelle WH_TRANSAKTIONEN.
 Wählen Sie als Vergleichsfeld DAY_NAME
Vergleichsfelder für die Lookup-Bedingung ZEIT

Verbinden Sie das Feld DIMENSION_KEY im Ausgang des Lookup-Operators mit dem Feld
DIM_ZEIT in der Zieltabelle.
Tip: Bei dem hier gewählten Verfahren wurde das Datum umgeschlüsselt. Sie werden in der
Faktentabelle kein Datumsfeld mehr haben. Es kann praktisch sein, wenn man auf diese
Umsschlüsselung verzichtet. Es ist durchaus üblich, Datumsfelder in die Faktentabelle
mitaufzunehmen, vor allem dann, wenn über dieses Feld partitioniert werden soll. Bei dieser
Vorgehensweise müssen Sie aber die Zeitdimension als eine normale Dimension anlegen, da das
Standardverfahren immer von künstlichen Nummernschlüssel ausgeht.
Jetzt wird die Regionen-Dimension angeschlossen. Hierfür benötigen Sie zwei Umschlüsselungen. In
der Tabelle WH_TRANSAKTIONEN finden Sie nur die Kundennummer. Wo der Kunde jedoch wohnt,
wissen Sie erst, wenn Sie in der Kundendimension nachgeschaut haben. Dort findet sich die
Ortenummer. Mit dieser Ortenummer müssen wir dann wieder in der Regionendimension nachsehen,
um den Dimensionsschlüssel abzugreifen.



Ziehen Sie zwei Lookupoperatoren in die Editorfläche des Mappings.
Nennen Sie den ersten KUNDE_ORT.
INPUT für diesen ersten Lookup ist KUNDENCODE, die Lookutabelle ist DIM_KUNDE,
Vergleichsfelder sind DIMENSION_KEY und KUNDENCODE
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
196/300
Vergleichsbedingungen für Kunden-Lookup


Den zweiten Lookup-Operator nennen Sie ORT
Als Input-Feld wählen Sie jetzt das Feld ORTNR des ersten Lookup-Operators KUNDE_ORT.
Lookup-Eingabe-Feld ORTNR

Als Lookup-Tabelle wählen Sie DIM_REGION und als Vergleichsfelder ORT_NUMMER und
ORTNR.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
197/300
Vergleichsbedingungen des Lookup-Operators ORT

Beenden Sie den Vorgang und verbinden Sie das Feld DIMENSION_KEY des Operators mit dem
Feld DIM_REGION der Zieltabelle.
Das fertige Mapping müsste jetzt wie unten dargestellt aussehen. Auf das Füllen der noch leeren
Felder wird hier verzichtet. Hierfür kann man sich beliebige Expressions, also Berechnungen
vorstellen.
Mapping MP_F_UMSATZ
Ein Ausschnitt aus der Tabelle F_UMSATZ :
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
198/300
Vermeiden von Fehlern beim Schreiben der Faktentabelle
Wenn man sich die Faktentabelle genau betrachtet, findet man bei einigen Dimensionswerten
(DIM_REGION und DIM_ZEIT) Lücken. Hier sind tatsächlich Fehler in der Ausgangsdatenmenge. Der
Lookup-Vorgang in dem Mapping MP_F_UMSATZ lässt diese Lücken zu, wenn in der Lookup-Tabelle
kein passender Wert für die Eingabesätze gefunden wird.
Eine sinnvolle Vorgehensweise ist das nicht, denn die betroffenen Sätze sind nicht mehr abfragbar,
Auswerteergebnisse werden verfälscht. In der Faktentabelle sollten keine Sätze vorhanden sein, die
keinen Eintrag in den Fremd-Schlüsselattributen besitzen.
Die beste Vorgehensweise zur Vermeidung solcher Effekte, ist das vorherige Prüfen bevor man in die
Faktentabelle schreibt.
Hierzu erstellt man sich eine temporäre Tabelle mit den über Lookups erzeugten Faktenwerten. In die
eigentliche Faktentabelle werden schliesslich nur die Sätze mit vollständigen Schlüsseln
übernommen. Alle anderen Sätze steuert man am besten zusammen mit den Orginalwerten in eine
separate Protokolltabelle aus.
Ein solches Mapping kann z. B. so aussehen:
Mapping MP_F_UMSATZ_KORR zum Verhindern von fehlerhaften Foreign-Key-Werten in der
Faktentabelle
Korrigierte Faktentabelle
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
199/300
Ausgesonderte Faktensätze mit mindestens einem fehlenden Schlüssel in DIM_REGION oder
DIM_ZEIT
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
200/300
6. Automatisieren der Ladeprozesse-Workflow und
Scheduling
Ladeläufe müssen flexibel sein
Bislang haben wir einzelne Mappings erstellt, um die Aufgabenstellung dieses Szenarios zu lösen. Wir
hätten alle Ladeschritte in einem einzigen Mapping unterbringen können. Allerdings ist diese
Vorgehensweise nicht sinnvoll. Sie gleicht der „Spaghetti-Code-Programmierung“, bei der nur der
Programmierer selbst noch durchblickt, und auch das nur noch wenige Tage nach Abschluss des
Projektes. Außerdem fehlt uns dann die nötige Flexibilität, denn nicht immer müssen alle Mappings
zusammenhängend zu einem bestimmten Zeitpunkt laufen.
Struktur des Ladeprozesses
Durch eine mindestens 4-stufige Gestaltungsmöglichkeit liefert der Ladeprozess die Flexibilität, um
Ladeläufe je nach Anforderung in mehreren Varianten ablaufen zu lassen. Die vier Stufen sind:
Transformationslevel: Wandeln und Laden auf Feldebene. Das sind Funktionen, wie sie z. B. als
Datenbankfunktionen bekannt sind (substr,, Expression...). das entspricht den einzelenen Linien in
einem OWB-Mapping.
Mappinglevel: Wandeln und Laden auf der Ebene von einer oder mehreren Tabellen.
Zusammengefasst werden logisch zusammen gehörende Tabellen (technisch-funktionale
Zusammenhänge). Betrachtet werden z.B alle Quelltabellen, die zum Füllen von ein oder mehreren
zusammenhängenden Tabellen ( z. B. Parent / Child-Konfigurationen) nötig sind. Die
tabellenbezogene Verarbeitung wird komplett abgeschlossen, beinhaltet also Inserts/Update/DeleteVorgänge.
Prozesslevel I: Mehrere Mappings sind zu Verarbeitungsfolgen zusammengeschlossen. Es entstehen
zusätzliche, den Mappings übergeordnete Einheiten, die sich in ihrer inneren Struktur wenig
verändern, also nicht mehr manuell angefasst werden müssen. Zusammen gehören z. B. das Füllen
aller Dimensionen und Fakten eines Starschemas, das Aufbauen eines Data Marts usw.
Prozesslevel II: Diese Stufe sorgt für die flexible Gestaltung des Gesamtprozesses. Die
Verarbeitungsfolgen des Prozesslevel I können hier flexibel kombiniert werden. Auf dieser Ebene ist
spontanes Umhängen einzelner Abfolgen mit graphischen Mitteln möglich. Auf diesem Level kann z.
B. im Verlauf des Warehouse-Betriebs entschieden werden, ob ein Starschema in einer Ladeperiode
gefüllt oder ausgespart wird.
4 Ebenen der Datenflusssteuerung im Data Warehouse
Die Mappings sind in einem Workflow zusammenzufassen. Der Workflow wird über
Modellierungseditoren graphisch dargestellt und technisch über eine PL/SQL-Prozedur in der
Datenbank realisiert. Zur Lauffähigkeit ist die Installation des Workflow-Servers in der OracleStand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
201/300
Datenbank nötig (siehe hierzu die Hinweise zur Installation des Workflows). Der Workflow-Server wird
im Default in dem Schema OFW_MGR installiert.
Der WAREHOUSE BUILDER besitzt einen Prozess-Editor. Über diesen Editor erstellen Sie graphisch
den Prozess, indem Sie die benötigten Mapping durch Linien miteinander verbinden. Aus diesem
graphisch dargestellten Prozess erstellt der WAREHOUSE BUILDER durch den Generierungsprozess
die Workflowprozedur, der Deploy-Vorgang überführt die Prozedur in das Datenbankschema des
Workflow-Servers (OWF_MGR). Jetzt muss diese Prozedur nur noch ähnlich wie die Mappings
gestartet werden.
Erstellen von Prozessen
Das Arbeiten mit dem Prozess-Editor ist eine eigenständige und von dem Erstellen der Mappings
unabhängige Aufgabe. Der Prozess-Editor hat ebenfalls eine Reihe von Operatoren. Hier nennt man
sie allerdings Aktivtäten oder Activities. Zu Beginn sollten grundsätzliche Dingen zur Erstellung von
Prozessen erklärt werden. Wir nutzen hierzu sehr einfache rudimentäre Mappings.
Da das Ergebnis einer Prozessmodellierung in Form einer PL/SQL-Prozedur in einem
Datenbankschema landet, benötigen wir auch hier wieder ein Modul und zu diesem Modul, eine
Location, die auf das Workflow-Schema zeigt (OWF_MGR).
Definition von Prozessen



Erstellen Sie ein Modul mit dem Namen SZENARIO (-> Rechte Maustaste auf Process Flow
Modules -> New). Sie werden aufgefordert eine Location anzugeben (LC_OWF_MGR).
Jetzt haben Sie die Möglichkeit Prozesspakete anzulegen. Alle Prozesse, die Sie später in einem
Prozesspaket definieren, werden in dem generierten Konstrukt in einer PL/SQL-Package landen,
sie können sich also gegenseitig sehen und aufrufen. In dem ersten Beispiel geht es nur um die
grundsätzliche Arbeitsweise des Workflows, die zu vergebenden Namen sind also belanglos.
Definieren Sie eine Gruppe mit dem Namen Prozesse (-> Rechte Maustaste auf SZENARIO ->
New).
Und schliesslich können Sie jetzt eine Prozess mit dem Namen P1 anlegen
(-> Rechte Maustaste auf Prozesse -> New).
Es erscheint der Prozess-Editor.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
202/300
Prozess-Editor nach dem ersten Aufruf
Der Prozess-Editor ist zwar auf den ersten Blick ähnlich aufgebaut, wie der Mapping-Editor, hat jedoch
an einige Stellen wichtige Unterscheidungsmerkmale. Im rechten Bereich gibt es wieder die
Arbeitsfläche, in der alle Aktivitäten Platz finden. Auch er hat eine Palette mit den möglichen
Aktivitäten. Diese ist unterschieden in Utility- / OWB specific- und Control-Activities.
Es gibt auch ein Object Details-Fenster, das die Eigenschaften der in der Arbeitsfläche selektierten
Aktivitäten anzeigt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
203/300
Object Details- Fenster
Eine besondere Rolle spielt der Explorer. Neben der Option „Available Objects“ gibt auch den Reiter
„Selected Objects“. Unter dieser Auswahl finden Sie später alle Detailsichten und Eigenschaften der
verwendeten Aktivitäten. Sie selektieren diese Eigenschaften und setzen über das Object DetailsFenster die gewünschten Werte. Diese Bedienungsart müssen wir später noch genauer kennenlernen.
Explorer-Fenster mit der Option Selected Object
Das erste Beispiel – einfache Workflows
Zum Kennenlernen der Möglichkeiten erstellt man sich am besten sehr einfache Mappings, so dass
man bei dem Experimetieren nicht noch Gefahr läuft, sich mit Fehlern in komplexen Mappings
herumschlagen zu müssen.
Zunächst helfen zwei einfache Mappings M1 und M2.
Startmapping M1
Erstellen Sie diese Mappings entsprechend der Graphik.
M1: Ziel ist eine Tabelle T1. Dort wird ein Aufrufparameter in F1 und eine Zeitangabe über eine
Konstante (Wert: TO_CHAR(sysdate,'DD.MM.YYYY::HH24:MI:SS')) abgelegt. Pro Lauf entsteht nur
ein Satz. Für spätere Tests ist ein Ausgabeparameter definiert. Belegen Sie den Aufruf-Parameter mit
einem Default-Wert z. B. ’A’. Das erspart Ihnen unnötige Parameter-Eingaben.
M2: Das Mapping M2 ist noch einfacher. Es übernimmt die Sätze von T1 und schreibt sie in die
Tabelle T2.
Mapping M2.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
204/300

Erstellen Sie den ersten Workflow, indem Sie in dem Explorer-Fenster unter Available Objects
beide Mappings M1 und M2 selektieren und in die Process-Flow-Editor-Fläche mit drag And Drop
verschieben.

Wenn Sie die Maus über die Aktivitäten-Objekte führen, ändert sich die Mauszeigerform zur
Pfleilform. Jetzt können Sie mit der gedrückten linken Maustaste Verbindungen ziehen von der
Startaktivität bis zur Aktivität M2 und dort den Knopf wieder loslassen. Es sollte eine
Verbindungslinie erscheinen. Man nennt diese Linien Transision.
Ihr Prozess ist jetzt schon fertig. Er muss noch generiert und getestet werden.
Das machen Sie in dem Control Center unter der Location, die Sie für das Workflow-Schema
OWF_MGR definiert und Ihrem Prozessmodul zugewiesen haben.
Im Ergebnis stellen Sie fest, dass beide Mappings nacheinander aufgerufen wurden.
Der Execution Schedule- Report zeigt Ihnen:
AND und FORK
Dieses einfache Beispiel kann beliebig erweitert werden.
 Erstellen Sie das weitere Mapping M3, in dem die Sätze der Tabelle T1 in eine neue Tabelle T3
kopiert werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
205/300
Mapping MP3
Sie könnten dieses Mapping in den bestehenden Prozess hinter das Mapping M2 hängen. Wir bauen
jedoch noch zusätzliche Steuerelemente ein und zwar das gezielte parallele Starten (FORK) und die
AND-Aktivität.
 Erstellen Sie einen neuen Prozess P2.
 Ziehen Sie die 3 Mappings M1,M2 und M3 in die Editor-Fläche. Ordnen Sie M1 und M2
übereinander und M3 rechts daneben an.
 Ziehen Sie jetzt aus der Palette die Fork und die AND- Aktivität hinzu.
 Ordnen Sie alle Aktivitäten wie auf dem zugehörigen Bild an und verbinden Sie mit den nötigen
Transition-Linien, wie in dem Bild gezeigt.
Prozess P2
 Generieren und Testen Sie den Prozess.
(Beachten Sie, dass das Control Center jetzt beide Prozesse neu erzeugt. Alle Prozesse, die Sie unter
dem Punkt PROZESSE abgelegt haben, werden schließlich in ein Package hinein generiert).
Durch die Fork –Aktivität starten M1 und M2 parallel. Grundsätzlich arbeitet die Datenbank schon
parallel. Man wird also durch diese Steuerung keinen Performancegewinn erzielen. Man hat jedoch
die Möglichkeit für einen gemeinsamen, gesicherten Abschluss zu sorgen, denn durch die ANDAktivität wird garantiert, dass M3 erst startet, wenn M1 und M2 abgeschlossen sind.
Schleifen bilden
Für bestimmte Aktivitäten ist es sinnvoll, Aktivitäten mehrmals durchzuführen. Eine File ExistAktivitäten soll z. B. für unterschiedlichen Verzeichnisse mehrfach durchlaufen werden, bis eine
passende Datei wirklich gefunden wurde.
Zwei Arten von Schleifen stehen zur Verfügung:
1. WHILE-Schleife
für Wiederholungen mit Boolschen Abbruch-Entscheidungen (TRUE/FALSE)
2. FOR-Schleife
für zählbare Abbruch-Kriterien, bei denen eine über eine Variable definierte
Anzahl Schleifendurchläufe absolviert wird.
In dem folgenden Beispiel soll das Mapping M1 10 mal durchlaufen werden.
 Erstellen Sie einen neuen Prozess P3.
 Fügen Sie die Mappings M1 und M2 und eine FOR-Schleife ein. An der FOR-Schleife hängt
bereits eine End-Loop-Aktivität
.
 Verbinden Sie alle Aktivitäten entsprechend dem Bild (Bild zu dem fertigen Prozess P3).
Zur Ablaufsteuerung benötigen wir eine Variable, in der wir die Anzahl der Läufe so oft hochzählen,
bis wir das Abbruchkriterium erreichen.
Eine Variable können wir nur über die Selected Objects-Auswahl des Explorers definieren.
 Selektieren Sie in dem Baum den ordner Variables.

Drücken Sie jetzt auf das Plus-Zeichen
im Kopfbereich des Explorers. Es entsteht ein neuer
Eintrag mit dem Namen Variable. Selektieren Sie dieses Objekt und Sie können in dem Object
Details-Fenster die Eigenschaften des Objektes verändern.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step

206/300
Setzen Sie die Eigenschaften der Variablen auf
Name:
V_FOR_LOOP
Data Type: INTEGER
Literal:
false
Es wird eine Zählvariable deswegen integer.
Literal weist den späteren Generierungsprozess an, den verwendeten Ausdruck entweder in
Hochkommatas zusetzen oder den Ausdruck so zu belassen, wie er in das Feld geschrieben wurde.
Für die korrekte Arbeitsweise des Prozesses ist die richtige Wahl des Literals wichtig. Feste
Ausdrücke wie z. B. Zahlenwerte brauchten keine Hochkomma, also Literal -> false. Weiter unten
kommen jedoch auch noch Ausdrücke wir Variable_Name + 1. Diese müssen in Hochkomma gesetzt
werden, also Literal -> true.
Jetzt müssen wir die Bedingung für die FOR-Schleife festlegen.
 Selektieren Sie mit der Maus die Aktivität FOR_LOOP.
 Setzen Sie für Optionen die folgenden Werte:
CONDITION:
Value:
V_FOR_LOOP<10
Literal:
false
INITIAL_VALUE:
Value:
Literal:
1
true
NEXT_VALUE:
Value:
Literal:
V_FOR_LOOP+1
false
VARIABLE:
Binding:
V_FOR_LOOP
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
207/300
Die Festlegung der Bedingungen für die FOR-Schleife

Generieren und Testen Sie den Prozess. In der Tabelle T1 müssten jetzt 9 Zeilen entstehen.
Prozess P3
Das Ergebnis in der Tabelle T1
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
208/300
Wechselspiel von Variablen und Parameter
Mit einer kleinen Änderung können wir ein mögliches Wechselspiel zwischen Variablen des Prozesses
und Input-Parametern der Mappings testen.
Das Mapping M1 verfügt über einen Eingabe-Parameter, den wir in dem Mapping bereits mit dem
Zeichen ’A’ vorbelegt haben. Dieser Parameter soll jetzt durch den Wert der Schleifenzählervariable
durch Parameterübergabe für jeden Schleifendurchlauf überschrieben werden.
Die Kommunikation mit den Mappingparametern (ob Input- oder Output) erfolgt über das sogenannte
Binding.
 Kopieren Sie den Pozess P3 und machen Sie daraus den Prozess P4.
 Markieren Sie in dem Prozess P4 das Mapping M1.
 Unter Selected Objects sehen Sie unter dem Mapping die möglichen Parameter, u. a. auch den
Parameter EINGABE_M1
 Selektieren Sie diesen und unter dem Fenster Object Details erscheinen die Eigenschaften des
Parameters.
 Jetzt können Sie Binding in der Listbox die Variable V_FOR_LOOP wählen. Diese Variable wird
pro Schleifenlauf hochgezählt.

Generieren Sie den Prozess und Testen Sie ihn. In der Tabelle T1 sollten jetzt 9 Sätze
erscheinen, in denen hochgezählte Werte vorkommen.
Das Ergebnis in der Tabelle T1
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
209/300
Parameterübergabe von Mapping zu Mapping
In dem nächsten Beispiel soll ein Mapping Werte einem nachfolgenden Mapping übergeben. Dies
gelingt ebenfalls über das Binding und mit Hilfe einer Variablen, die als „Mittler“ zwischen den
Mappings fungiert.

Definieren Sie hierfür zunächst ein Testmapping M4, entsprechend der folgenden Darstellung.
Mapping M4


Generieren Sie die neue Tabelle T4 und das Mapping M4.
Testen Sie das Mapping, bevor Sie den folgenden Prozess erstellen.
Das Mapping verfügt über einen Eingabe-Parameter mit dem Namen M4_EINGABE.
Die Konstante ZEIT dient nur als Kontrolleingabe damit erkannt werden kann, wann die Zeile
geschrieben wurde.
In dem neuen Prozess übernimmt eine Variable den Ausgabewert des ersten Mappings und übergibt
den Wert an den Eingabeparameter des nachfolgenden Mappings.
Schema der Parameterübergabe von Mapping zu Mapping in Prozessen




Erstellen Sie sich einen neuen Prozess P5.
Fügen Sie die beiden Mappings M1 und M4 dort ein.
Positionieren Sie die beiden Mappings nebeneinander und verbinden Sie diese mit den TransitionLinien.
Definieren Sie eine Variable mit dem Namen V_M1_M4 (über den Selected Objekts-Bereich mit
dem +-Symbol).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
210/300
Prozess P5




Unter Selected Objects in dem Explorer sind die beiden Mappings M1 und M4 aufgelistet. Unter
M4 finden Sie auch den Parameter M4_EINGABE
Selektieren Sie den Parameter. In dem Object Details-Fenster können Sie unter Binding die zuvor
definierte Variable V_M1_M4 auswählen.
Wiederholen Sie den Vorgang mit dem Parameter M4_Eingabe, indem Sie auch diesen mit der
Variablen ’zusammenbinden’.
Generieren Sie den Prozess und testen Sie ihn.
In der Zieltabelle T4 erscheint ein Satz mit dem Wert, der als Default für den Ausgabe-Parameter des
Mappings M1 festgelegt wurde.
Umgang mit Dateien - File Exists Aktivität
Eine der häufigsten Quellen In Warehouse-Systems sind immer noch Textdateien. Diese liegen
irgendwo auf Servern oder werden mittels FTP angeliefert und letztlich zwischen Verzeichnissen hinung herkopiert.
Das Nichtvorhandensein von Textdateien ist eine der häufigsten Ursachen für Ladeabbrüche im
produktiven Betrieb des Data Warehouse.
Hier hilft die File Exists Aktitivität.






Kopieren Sie sich die Textdatei FF_BESTELLUNG aus den Beispieldaten in ein Verzeichnis aus
dem Sie später auch mit External Tables lesen können (nicht Voraussetzung, es ist nur ein
Vorgriff auf spätere Übungen).
Erstellen Sie ein neues Prozess-Package BESTELLUNGEN.
Erstellen Sie innerhalb dieses Packages einen neuen Prozess B1.
Ziehen Sie die FILE_EXITS Aktivitität in die Editorfläche.
Ziehen Sie zusätzlich noch eine END_ERROR Aktivität in die Editorfläche.
Verbinden Sie alle Aktivitäten entsprechend dem Bild.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
211/300
Mapping B1

Selektieren Sie die FILE_EXITS Aktivitität. Sie finden jetzt in dem Explorer-Fenster unter Selected
Objects das FILE_EXISTS Objekt und die Möglichkeit eine Pfadangabe vorzunehmen. Markieren
Sie PATH und tragen Sie in dem Object Details Fenster unter Value die Ablagestelle Ihrer Datei
ein.
Optionen zum Ansteuern der Textdatei

Ändern Sie jetzt die Zustände der Transitions zwischen der FILE_EXITS Aktivitität und den
beiden Ausgängen des Prozesses.
Bei der Wahl der Conditions stellen Sie fest, dass sich die Optionen geändert haben. Sie können
zwischen
- MISSING,
- FILE_EXITS,
- END_ERROR
wählen. Daran erkennen Sie, dass die Bedingungen, für die Weiterverarbeitung nach Abschluss einer
Aktivität auch unterschiedlich ausfallen können.
 Wählen Sie für den Fehlerausgang die Option „Missing“ und für den Success-Fall die Option
FILE_EXISTS
 Generieren Sie den Prozesse, und testen Sie ihn, in dem Sie abwechselnd die Datei z. B.
umbenennen.
Standard-Conditions für Transitions, die aus der FILE EXITS Aktivität weggehen
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
212/300
Jenachdem, ob die Datei korrekt vorhanden ist oder nicht, wird der Prozess einen Fehler nach aussen
melden oder nicht. Sie sehen das in dem Laufzeitprotokoll.
Umgang mit externen Aufrufen Dateien File Exists Aktivität
Das vorangegangene Beispiel lässt die Frage aufkommen, was zu tun ist, wenn die Datei nicht da ist.
Dann könnte z. B. ein Kopiervorgang die Datei beschaffen. Dazu sind Kommandoaufrufe in das
Betriebssystem durchzuführen. Die einfachste Variante hierfür ist das Aufrufen einer Kommando-Datei
(Stapel-/Batchdatei). Wir können auch den Kommando Interpreter CMD
(z. B. c:\windows\system32\cmd.exe) aufrufen und entsprechende Parameter anhängen.
Das einfachste Verfahren ist allerdings eine Batch-Datei mit den Kommandos zu erstellen und diese
einfach nur aufzurufen. Das hat den Vorteil, dass die auszuführenden Kommandos unabhängig von
den einmal generierten Prozessen des Warehouse Builders verändert werden können.
Anforderung: Eine Datei soll dann kopiert werden, wenn sie nicht in einem angegebenen
Verzeichnis exisitiert.



Kopieren Sie den Prozess B1 und erstellen Sie daraus den Prozess B2.
Erstellen Sie sich neben dem Verzeichnis für Ihre Testdaten, das bereits exisitiert noch ein
zweites Verzeichnis Testdaten2, aus dem heraus Sie die Datei kopieren können, wenn sie noch
nicht exisitiert.
Erstellen Sie sich eine Batch-Datei RUN.BAT zum Kopieren mit folgendem Inhalt:
copy D:\Szenario\Testdaten2\*.* D:\Szenario\Testdaten

Ergänzen Sie jetzt den Prozess um die Aktititäten: USER_DEFINED und eine zweite
FILE_EXISTS Aktivität und ordnen Sie die Objekte wie in dem folgenden Bild:
Prozess B2 Absetzen Betriebssystem-Kommandos und File_Exist
 Die Transitions in dem Bild sind durchnummeriert. Sie besitzen die folgenden Bedingungen:
0: leer
1: EXISTS
2: MISSING
3: leer
4: leer
5: MISSING
6: EXISTS
7: leer

Die Aktivität USER_DEFINED besitzt unter COMMAND den Aufruf der Batch-Datei. Alle anderen
Parameter sind leer. (-> Selected Objects).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
213/300
Aufrufsteuerung der Batch-Datei
In diesem Prozess ist eine Aktivität END_WARNING eingebaut, weil der Warehouse Builder nach den
FILE_EXISTS Aktivitäten immer eine „unbedingte“ Transition erwartet. Dies ist eine
Sicherheitsmassnahme dafür, dass ein Prozess auch immer zum Ende kommt.

Generieren Sie den Prozess und testen sie ihn indem Sie die Textdatei aus dem einen
Verzeichnis löschen und aus dem anderen Verzeichnis kopieren lassen.
Ergebnis-Protokoll des Laufs
Security von externen Aufrufen freischalten
Achtung: Das Aufrufen von externen Prozessen und Programmen ist geschützt. Damit dieses
funktioniert muss man in einer OWB-Properties-Datei einen Parameter freischalten:
Das Verzeichnis .
.owbhome..\owb\bin\admin und hier
die Datei:
Runtime.properties.
Hier muss am Ende der Datei folgendes stehen:
#
# FTP, Shell amd SQLPlus operator are disabled by default
#
property.RuntimePlatform.0.NativeExecution.FTP.security_constraint = NATIVE_JAVA
property.RuntimePlatform.0.NativeExecution.Shell.security_constraint = NATIVE_JAVA
property.RuntimePlatform.0.NativeExecution.SQLPlus.security_constraint = NATIVE_JAVA
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
214/300
Aufrufen von SQL Plus aus einem Prozess
SQL Plus-Aufrufe stellen die einfachste Variante dar, individuelle Aktivitäten in der Datenbank
durchzuführen und dabei einen direkten Kontakt zu allen Datenbank-Objekten zu haben.
Über die Aktivität SQLPLUS kann man eine SQL*Plus Session im Hintergrund starten und alle
Datenbank-Kommandos absetzen, die über SQL*Plus möglich sind.
In dem folgenden Test werden wir eine native INSERT-Anweisung durchführen und zusätzlich eine
Prozedur aufrufen.
 Erstellen Sie hierfür zunächst eine kleine Hilfstabelle:
CREATE TABLE T (F1 varchar2(500));

Und eine Prozedur:
CREATE OR REPLACE PROCEDURE P_INSERT_T(AUFRUF IN VARCHAR2)
IS
BEGIN
INSERT INTO T VALUES (Aufruf) ;
COMMIT ;
END;
/
Beide Objekte können Sie natürlich auch mit dem Warehouse Builder erzeugen. Oder den Code oben
mit Cut / Paste in SQL Plus absetzen.





Erzeugen Sie jetzt einen neuen Prozess mit dem Namen P_SQLPLUS.
Ziehen Sie die Aktivität SQLPLUS in die Editorfläche und verbinden Sie diese mit dem Start- und
End-Punkt.
Selektieren Sie die Aktivität SQLPLUS, so dass Sie unter dem Explorer-Fenster und Selected
Objects die Eigenschaft SCRIPT anwählen können.
Sie können jetzt unter Object Details und Value ein Fenster öffnen, um die SQLPLUSKommandos abzusetzen.
Tragen Sie in dieses Fenster den folgenden Code ein:
insert into t values ('Dies ist ein Text') ;
begin
p_insert_t('Aufruf von der Prozedur') ;
end ;
/
exit
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
215/300
Prozess zum Aufruf von SQL Plus und Beispielkommandos
Es fehlt jetzt noch die Information, unter welchem Benutzer SQLPlus gestartet werden soll. Das
steuern Sie über die Eigenschaften (Configure) des Prozesses.
 Selektieren Sie dazu mit der rechten Maustaste den Prozess und öffnen Sie die Configuation
Properties.
 Unter den SQL Plus-Eintragungen stellen Sie unter Deployed Location die Location des
Zielschemas ein. Also diejenige Location unter der SQL Plus gestartet werden soll. Damit sind
auch die Login-Informationen für SQL Plus festgelegt.
SQL Plus-Konfiguration

Generieren Sie den Prozess und testen sie ihn. Das Ergebnisprotokoll müsste so aussehen:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
216/300
Ergebnisprotokoll
Parameterübergabe an SQL Plus
SQL Plus-Aufrufe können über Parameter dynamisiert werden.
Anforderung:
gehalten werden.

Eine Skript-Datei mit SQL-Befehlen soll über Parameteraufrufe dynamisch
Zur Lösung der Aufgabe legen Sie zunächst ein Script mit parametrisierten SQL-Befehlen an:
File: SQLSCRIPT
insert into t values ('Der Wert des ersten Parameters ist &1') ;
insert into t values ('Ein zweiter Parameter ist &2') ;
exit





Erzeugen Sie einen neuen Prozess mit dem Namen P_SQLPLUS_DYN.
Ziehen Sie die Aktivität SQLPLUS in die Editorfläche und verbinden Sie diese mit dem Start- und
End-Punkt.
Selektieren Sie die Aktivität SQLPLUS, so dass Sie unter dem Explorer-Fenster und Selected
Objects die Eigenschaft PARAMETER_LIST anwählen können.
Sie können jetzt unter Object Details und Value einen Parameterwert eingeben
Geben Sie folgenden Wert ein:
?${Target.User}/${Target.Password}@${Target.URL}?@C:/sqlscript.sql?value 1?value 2?
Diese Eingabe sollte erläutert werden.
Zunächst ein paar grundlegende Eigenschaften. Parameter-Aufrufe werden durch Oracle Warebuilder
interpretiert. Bei dieser Interpretation sind Hilfsmittel möglich, z. B. das „?“. Dieses Fragezeichen dient
als Separator. Es wird von OWB als solcher erkannt, weil es als erstes Zeichen des gesamten
Ausdrucks vorkommt.
Damit haben wir schon die Möglichkeit einen Ausdruck zu unterteilen, was wichtig ist, wenn Aufrufe
aus mehreren Teilen bestehen.
Jetzt zu dem SQL Plus-Aufruf: Ein SQLPlus-Aufruf auf der Kommando-Ebene hat die folgende Form:
SQLPLUS user/Passwort@sid @script.sql
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
217/300
Der String ‚SQLPLUS’ wird von OWB intern gesetzt. Dazu müssen wir also nichts mehr tun.
User, Passwort und SID sind Informationen, die über die Locations bereits gesetzt sind, d. h. hier
benötigen wir OWB-Variablen, um diese Daten abzufragen. Das sind Eigenschaften des internen
OWB-Objektes TARGET, also:
Target.User
Target.Password
Target,URL
Die Variablen werden über das $-Zeichen gekennzeichnet also:
${Target.User}
${Target.Password}
${Target,URL}
Werte, die das System einfach durchreichen soll, sind mit dem Ausdruck „value“ gekennzeichnet.
Jetzt muss der Ausdruck nur noch zusammengesetzt werden, so wie oben geschehen.
Prozess P_SQLPLUS_DYN und Festlegung der Parameterliste
 Generieren Sie den Prozess und testen sie ihn.
Achten Sie darauf den Prozess richtig zu konfigurieren. Es muss die Location des Zielschemas
angegeben werden, so wie das in dem Beispiel zuvor bereits geschehen ist.
 Das Ergebnisprotokoll müsste so aussehen:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
218/300
Die Ergebnis-Log-Information
Steuerung der Prozesse über das Control Center
Aufrufen von Prozessen und Mappings – Scheduling
Scheduling mit OWB-fremden Schedulern
Warehouse-Prozesse laufen selbständig oder als Folge von Ereignissen. Das manuelle Starten ist nur
in Ausnahmefällen üblich. In den Rechenzentren von Unternehmen existieren oftmals SchedulingProgramme, die an einer Stelle zentral alle Jobs starten, die den täglichen Produktionsbetrieb der
Softwarelösungen ausmachen. In dieser Weise können auch Warehouse Builder Mappings bzw.
Prozesse gestartet werden. Zum Aufrufen hierfür gibt es Hilfsroutinen, die bei der Installation von
OWB mit in ein Unterverzeichnis kopiert werden.
Sehen Sie hierzu das Unterverzeichnis: OWBHOME\OWB\RTP\SQL.
Hier sind es die Scripte
sqlplus_exec_template.sql und
sqlplus_exec_background_template.sql
Diese Scripte sind selbserklärend. D. h. Sie können sie in einen Editor laden und den Hinweisen im
Kopfbereich der Scripte folgen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
219/300
Verzeichnis mit Verwaltungsscripten des OWB, u. a. Hilfsscripte zum Aufrufen mit separaten
Schedulern
Scheduling mit OWB
Der Warehouse Builder besitzt jedoch auch einen eigenen Scheduler.
Hierzu definieren Sie zunächst ein Scheduler-Objekt. Hier hinterlegen Sie seine
Gesamtgültigkeitsdauer und eine Wiederholerfrequenz mit der Prozesse oder Mapppings aufgerufen
werden sollen.
Im zweiten Schritt weisen Sie Prozesse oder Mappings diesem Scheduler-Objekt zu.

Definieren Sie in dem Design Center unter dem Auswahlpunkt Schedules ein Schedule-Module
mit dem Namen S_Minuten_Takt und in diesem Modul das Schedule-Objekt S_MIN1. Bei der
Anlage des Moduls, werden Sie nach einer Location gefragt. Wählen Sie hier die Location Ihres
Zielschemas.Unter dieser Location generieren Sie später auch das Schedule-Objekt.
Anlegen von Schedule-Objekten

Ein Wizard startet. In dem Schritt 2 geben Sie die Zeitdauer an, für die Sie Prozesse oder
Mappings starten wollen. Sollen Prozesse oder Mapping ständig gestarten werden, so müssen die
beiden grünen Häkchen entfernt werden. Wählen Sie hier die Uhrzeit, die in Ihrem Testbereich
liegt. Wenn Sie die Prozesse ständig starten, können Sie später das Schedule-Objekt über das
Control Center stoppen bzw. starten.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
220/300
Das Festlegen von Start- und Endzeitpunkten einer Laufserie

In dem folgenden Schritt legen Sie die Häufigkeit der Aufrufe fest (monatlich, täglich, stündlich
usw). Wählen Sie hier minütlich.
Festlegen der Wiederholfrequenz
Das war die Definition. Jetzt können Sie diese Definition auf Mappings oder Prozesse anwenden.
Das soll hier mit Hilfe des Prozesses P_SQLPLUS_DYN aus dem vorigen Abschnitt geschehen. Sie
können jeden anderen Prozess oder jedes Mapping ebenfalls benutzen.




Selektieren Sie in dem Design Center den Prozess P_SQLPLUS_DYN mit der rechten Maustaste
und öffnen Sie den Punkt Configuration.
Unter dem Hauptpunkt P_SQLPLUS_DYN finden Sie in dem rechten Bereich des Fensters
Referred Calendar.
Klicken Sie in das Feld mit den drei Punkten (...), um die Liste der zur Verfügung stehenden
Kalenderobjekten angezeigt zu bekommen.
Wählen Sie den Kalender S_MIN1
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
221/300
Zuordnung der Schedule-Definition zu einem Laufobjekt (hier Prozessdefinition)

Generieren Sie jetzt das neue Schedule-Objekt über das Control Center und starten Sie es so wie
Sie bislang Mappings und Prozesse gestartet haben.

Sie sehen in dem rechten Bereich unter Control Center Jobs, drei Reiter. Wählen Sie den rechten
mit dem Namen Schedule. Jetzt sehen Sie den Schedule-Job.
Wenn Sie den Reiter Execution wählen sehen, dann die im Minutenabstand gestarteten Prozesse.

Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
222/300
Kontrolle über alle Aufrufe, hier Aufruf eines Prozesses pro Minute
Stoppen von laufenden Workflow-Prozessen über SQL*Plus
Manchmal kommt es vor, dass Prozesse der Workflow-Engine gestoppt werden müssen hierzu liegen
in dem Unterverzeichnis „WF“ (OWB-Installations-Verzeichnis), Skripte, die in SQL*Plus abgesetzt
werden können.
Starten von SQL*Plus in Workflow-Schema ( Default OWF_MGR/OWF_MGR)
Herausfinden von laufenden Prozessen:
select item_type,item_key, end_date from wf_items where end_date is Null;
Ergebnis:
ITEM_TYP ITEM_KEY
-------- --------------------------------------WFERROR WF1
AUD_RULE WB_IK_20071206_143741_30917
WFERROR WF21
Beenden der laufenden Prozesse:
exec wf_engine.abortprocess('AUD_RULE','WB_IK_20071206_143741_30917');
PL/SQL procedure successfully completed.
Beenden der laufenden Prozesse:
exec wf_purge.items('AUD_RULE');
PL/SQL procedure successfully completed.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
223/300
7. Aufbauen von Skripten zum automatisierten
Ändern der Modelle (OMB Plus – Scriptsprache)
Die OMB Plus Scriptsprache (Oracle Meta Base) steht seit dem OWB Release 9.2 zur Verfügung. Sie
wurde erstellt, um funktionale Eigenschaften des Warehouse Builder von der Bedienoberfläche zu
entkoppeln. Tatsächlich werden viele Bedienschritte, die der Benutzer über die Oberfläche durchführt,
zunächst an ein internes API weitergeleitet und erst von dort aus interpretiert und zur Ausführung
gebracht.
Dieses interne API kann auch über die Scriptsprache OMB angesprochen werden. Die Vorteile liegen
auf der Hand: Schritte, die im Rahmen von ETL-Prozessen immer wieder neu entwickelt werden
müssen oder einfache Verwaltungsarbeiten wie das Validieren, das Generieren oder der DeployVorgang können automatisiert über Batchaufrufe im Hintergrund gestartet werden. Dieser Einsatz ist
sinnvoll für:
 Regelmäßiges, automatisiertes Erstellen von Sicherungen.
 Entladen/Beladen/Erstellen von Objekten, wenn diese Online zu viel Aufwand bedeutet.
 Grössere Löschaktivitäten zum Bereinigen der Modelle.
 Massenupdates von Attributinhalten z. B. Verwaltungsattribute bei Überführungsarbeiten
(Test -> QA -> Produktion).
 Offline Execution von Verwaltungsarbeiten wie z. B. Validate-Checks, Generierungen,
Deployments.
 Durchführen von Massenupdates bzw. typischen Wiederholeraufgaben z. B. Hinzufügen von
Location-Informationen.
 Und viele andere Beispiele, bei denen automatisiertes Bearbeiten aufwendige manuelle
Wiederholertätigkeiten erstzt.
Die OMB Plus Scriptsprache besteht aus zwei Sprachkomponenten:
1. Warehouse Builder API Kommandos
- Sie werden in den Scripten immer groß geschrieben. Ihre Syntax ist dem OMB Plus
Handbuch zu entnehmen, das mittlerweile über 800 Seiten umfasst.
2. Der TCL Scriptsprache, die im UNIX-Umfeld häufig vorkommt.
(Siehe hierzu http://tcl.tk/ Auf dieser Webseite ist die genaue Beschreibung zu finden)
(Siehe auch die Datei Ein_TCL.pdf auf der CD. Dort ist eine deutschsprachige Einführung, die
über das Internet von Holger Jakobs zur Verfügung gestellt wurde).
Sie können die Kommandos der Scriptsprache interaktiv mit dem Werkzeug OMBPLUS absetzen.
Hierzu rufen Sie OMBPlus über die Startleiste auf:
Oder sie benutzen das OMBPlus Fenster des Design Centers:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
224/300
OMB Plus-Kommando Eingabefenster des Design Centers
Wenn dieses Fenster nicht sichbar ist, so sollten Sie es über die Pull Down Liste Window zugänglich
machen. Beachten Sie, dass Sie sich in dem Fenster des Design Centers nur innerhalb der durch das
Frontend bereits geöffneten Session bewegen können. Es gibt Aktionen (z. B.
Metadatenmodelländerungen), die in dieser Weise nicht möglich sind, weil sie das OWB Repository
exlusiv für sich beanspruchen. Diese Aktionen gehen dann nur aus dem OMB Plus-Fenster heraus,
wobei alle anderen OWB Sessions geschlossen sein müssen.
Es gibt noch andere Möglichkeiten OMB Skript Kommandos abzusetzen, wie das folgende Bild zeigt.
Einsatzvarianten der OMB-Scriptsprache
Scriptbeispiele
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
225/300
(noch nicht kommentiert, es kann sein, dass direkte Kopieren der Scripte aus dem Word-Text heraus
zu Problemen mit den verwendeten Hochkommatas. Die Scriptbeispiel können als Textfile direkt vom
Autor bezogen werden, oder sind bereits auf der Auslieferungs-CD mit diesem Dokument)
--Einloggen Single User – Mode (nur nötig wenn Metadatenänderungen gemacht werden)
-- Das Einloggen ist nur nötig, wenn man nicht im Design-Fenster arbeitet).:
OMBCONNECT owb10/owb10@localhost:1521:ora10 USE SINGLE_USER_MODE
-- Einwählen in einen bestimmten Projekt-Kontext:
OMBCC 'MY_PROJECT'
-- Navigation allgemein
OMBCC ‘STEP_BY_STEP’OMBCC ’WAREHOUSE’
-- Anzeigen der Umgebung
set OMBPROMPT on
--Aufrufen von Scripten aus OMBPLUS heraus z. B.:
source D:\\Szenario\\OMB\\Mod_TBL_Valid_check.tcl
-- Einwählen in ein bestimmtes Repository
OMBCONNECT owb92/owb92@localhost:1521:ora92
(ist in dem Design Center Fenster nicht nötig und auch nicht möglich)
OMBCONNECT owb92/owb92@localhost:1521:ora92 USE SINGLE_USER_MODE
-- Ändern des Kontextes
OMBCC ‚STEP_BY_STEP’
-- Anlegen eines Modules
OMBCREATE ORACLE_MODULE 'MO_BATCH'
-- Commit
OMBCOMMIT
-- Löschen eines Modules
OMBDROP ORACLE_MODULE 'MO_BATCH'
OMBCREATE ORACLE_MODULE 'MO_BATCH' \
SET PROPERTIES (DESCRIPTION) VALUES ('Automatisiert angelegtes Modul')
-- Einschalten des Prompts dann sieht man, auf welchen PCO man sich befindet
set OMBPROMPT on
--> /MY_PROJECT/WAREHOUSE>
-- Anlegen einer User Defined Property
OMBREDEFINE CLASS_DEFINITION 'TABLE' ADD PROPERTY_DEFINITION 'UDP_Autor' SET
PROPERTIES (TYPE) VALUES('STRING')
OMBREDEFINE CLASS_DEFINITION 'TABLE' ADD PROPERTY_DEFINITION 'UDP_Erstellt_Am'
SET PROPERTIES (TYPE) VALUES('DATE')
OMBREDEFINE CLASS_DEFINITION 'TABLE' ADD PROPERTY_DEFINITION
'UDP_Zuletzt_geaendert_Am' SET PROPERTIES (TYPE) VALUES('DATE')
OMBREDEFINE CLASS_DEFINITION 'TABLE' ADD PROPERTY_DEFINITION
'UDP_Zuletzt_Aenderungs_Autor' SET PROPERTIES (TYPE) VALUES('STRING')
OMBREDEFINE CLASS_DEFINITION 'TABLE' ADD PROPERTY_DEFINITION 'UDP_Status' SET
PROPERTIES (TYPE,DEFAULT_VALUE) VALUES('STRING','Entwicklung')
OMBREDEFINE CLASS_DEFINITION 'TABLE' ADD PROPERTY_DEFINITION 'UDP_Version' SET
PROPERTIES (TYPE,DEFAULT_VALUE) VALUES('INTEGER','0')
-- Löschen von UDPs
OMBREDEFINE CLASS_DEFINITION 'TABLE' DELETE PROPERTY_DEFINITION 'UDP_Autor'
OMBREDEFINE CLASS_DEFINITION 'TABLE' DELETE PROPERTY_DEFINITION 'UDP_Autor'
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
226/300
-- Ändern eines Columnwertes
OMBALTER TABLE 'ARTIKEL_ZIEL' SET PROPERTIES (UDP_Version) VALUES('1')
-- Herausschreiben einer MDL-Datei
OMBEXPORT TO MDL_FILE 'C:\\WWWW.MDL' \
FROM PROJECT 'MY_PROJECT' \
COMPONENTS (ORACLE_MODULE 'WAREHOUSE') \
OUTPUT LOG TO 'C:\\WWWW.LOG'
-- Ändern Business name
OMBALTER ORACLE_MODULE 'MO_BATCH' \
SET PROPERTIES (BUSINESS_NAME) \
VALUES ('Metadata_Demo_Modul')
##############################################################
#Auflistung aller Tabellen pro Modul
#
# Durchsucht werden alle Module nach deren Tabellen
# Innerhalb der Module Ausgabe des Tabellennamens
#
# Beginnt auf Kontext: Repository
# Endet auf Kontext : Repository
#
# OMBPLUS Aufruf:
source D:\\Szenario\\OMB\\Mod_TBL.tcl
##############################################################
OMBCC 'MY_PROJECT'
puts " "
puts "Liste von Tabellen pro Modul "
puts "---------------------------- "
OMBLIST ORACLE_MODULES
foreach moduleName [OMBLIST ORACLE_MODULES] {
puts " "
puts "Modul: $moduleName"
OMBCC '$moduleName'
puts "Folgende Tabellen sind in dem Modul:"
foreach tableName [OMBLIST TABLES] {
puts "
--> $tableName"
}
OMBCC '..'
}
OMBCC '..'
##############################################################
#Auflistung aller Tabellen und ihrer Columns pro Modul
#
# Durchsucht werden alle Module nach deren Tabellen
# Innerhalb der Module Ausgabe des Tabellennamens
# Pro Tabelle Ausgabe aller Columns
# Beispiel fuer OMBRETRIEVE
#
# Beginnt auf Kontext: Repository
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
227/300
# Endet auf Kontext : Repository
#
#
# OMBPLUS Aufruf:
source D:\\Szenario\\OMB\\Mod_TBL_COL.tcl
##############################################################
OMBCC 'MY_PROJECT'
puts " "
puts "Liste von Tabellen mit ihren Spalten pro Modul "
puts "---------------------------------------------- "
OMBLIST ORACLE_MODULES
foreach moduleName [OMBLIST ORACLE_MODULES] {
puts " "
puts "Modul: $moduleName"
puts "=============================================="
OMBCC '$moduleName'
puts "Folgende Tabellen sind in dem Modul:"
foreach tableName [OMBLIST TABLES] {
puts " "
puts "
Tabelle: --> $tableName"
puts "
--------------------------------------------"
set columnList [OMBRETRIEVE TABLE '$tableName' GET COLUMNS]
foreach colName $columnList {
puts "
Spalte: $colName"
}
}
OMBCC '..'
}
OMBCC '..'
##############################################################
#Pruefung ob Tabellen in Modulen Valid
#
# Durchsucht werden alle Module nach deren Tabellen
# Innerhalb der Module werden alle Tabellen compiliert
#
und das Ergebnis festgehalten
#
# Beginnt auf Kontext: Repository
# Endet auf Kontext : Repository
#
# OMBPLUS Aufruf:
source D:\\Szenario\\OMB\\Mod_TBL_Valid_check.tcl
##############################################################
OMBCC 'MY_PROJECT'
puts " "
puts "Pruefung auf Gueltigkeit von Tabellen "
puts "------------------------------------- "
OMBLIST ORACLE_MODULES
foreach moduleName [OMBLIST ORACLE_MODULES] {
puts " "
puts "Modul: $moduleName"
OMBCC '$moduleName'
puts "Folgende Tabellen sind in dem Modul:"
set tableList [OMBLIST TABLES];
foreach tableName $tableList {
puts " --> geprueft wird --> $tableName"
if { [OMBCOMPILE TABLE '$tableName'] == "Invalid."} {
set context [OMBCC];
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
228/300
puts "Tabelle $context/$tableName ist invalide";
} else {puts "
Tabelle $tableName ist OK!" }
}
OMBCC '..'
}
OMBCOMMIT
OMBCC '..'
#############################################################################
#Auflistung aller Tabellen pro Modul
#
# Durchsucht werden alle Module nach deren Tabellen
# Innerhalb der Module Ausgabe des Tabellennamens
# Änderung aller Verwaltungsattribute der Tabellen:
#
UDP_Version
#
UDP_Autor
#
UDP_Zuletzt_Aenderungs_Autor
#
UDP_Status
#
UDP_Zuletzt_geaendert_Am
#
UDP_Erstellt_Am
#
#
# Beginnt auf Kontext: Repository
# Endet auf Kontext : Repository
#
# OMBPLUS Aufruf:
source D:\\Szenario\\OMB\\Mod_TBL_Change_UDP.tcl
##############################################################################
puts " "
puts "Änderung der Verwaltungsattribute aller Tabellen "
puts "auf aktuelle Werte"
puts "------------------------------------------------ "
OMBCC 'MY_PROJECT'
OMBLIST ORACLE_MODULES
foreach moduleName [OMBLIST ORACLE_MODULES] {
puts " "
puts "Modul: $moduleName"
OMBCC '$moduleName'
puts "Folgende Tabellen sind in dem Modul:"
foreach tableName [OMBLIST TABLES] {
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Version) VALUES('1')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Autor) VALUES('Warehouse
ADM Meier')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Zuletzt_Aenderungs_Autor)
VALUES('Fr. Friedrich')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Status) VALUES('Testraum')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Zuletzt_geaendert_Am)
VALUES('2003-05-31')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Erstellt_Am) VALUES('200301-04')
puts "
--> geaendert wurde $tableName"
}
OMBCC '..'
}
OMBCOMMIT
OMBCC '..'
##############################################################
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
229/300
#Auflistung aller Tabellen pro Modul
#
# Durchsucht werden alle Module nach deren Tabellen
# Innerhalb der Module Ausgabe des Tabellennamens
# Änderung aller Verwaltungsattribute der Tabellen:
#
UDP_Version
#
UDP_Autor
#
UDP_Zuletzt_Aenderungs_Autor
#
UDP_Status
#
UDP_Zuletzt_geaendert_Am
#
UDP_Erstellt_Am
#
#
# Beginnt auf Kontext: Repository
# Endet auf Kontext : Repository
#
# OMBPLUS Aufruf:
source D:\\Szenario\\OMB\\Mod_TBL_Change_Status.tcl
##############################################################
puts " "
puts "Änderung der Verwaltungsattribute aller Tabellen "
puts "auf aktuelle Werte"
puts "------------------------------------------------ "
OMBCC 'MY_PROJECT'
OMBLIST ORACLE_MODULES
foreach moduleName [OMBLIST ORACLE_MODULES] {
puts " "
puts "Modul: $moduleName"
OMBCC '$moduleName'
puts "Folgende Tabellen sind in dem Modul:"
foreach tableName [OMBLIST TABLES] {
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Version) VALUES('1')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Autor) VALUES('Warehouse
ADM Meier')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Zuletzt_Aenderungs_Autor)
VALUES('Fr. Friedrich')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Status) VALUES('Testraum')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Zuletzt_geaendert_Am)
VALUES('2003-05-31')
OMBALTER TABLE '$tableName' SET PROPERTIES (UDP_Erstellt_Am) VALUES('200301-04')
puts "
--> geaendert wurde $tableName"
}
OMBCC '..'
}
OMBCOMMIT
OMBCC '..'
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
230/300
8. Metadatenmanagement im Data Warehouse
Metadaten
Alle Design Informationen des Warehouse-Systems sind als Metadaten in dem Warehouse Builder
Design Repository gespeichert. Diese Metadaten entsprechen dem Bauplan des Warehouse. Jedes
Objekt ist hier verzeichnet. Jede Abhängigkeit dokumentiert. Ändert sich ein Objekt im
Entwicklungsprozess, so sind in den Metadaten die abhängigen Objekte zuerkennen, für die
Auswirkungen zu erwarten sind.
Hintergrund:
Der Warehouse Builder erzeugt die Metadaten automatisch im Hintergrund. Jedes Hinzufügen eines
Operators in einem Mapping führt zu einem Hinzufügen des Operators in dem Metadatenmodell. Das
Metadatenschema ist selbst nach dem von der OMG (Object Management Group, WWW.OMG.ORG)
festgelegten Metadatenstandard CWM (Common Warehouse Metamodel) entworfen worden. In
seinem Inneren ist es mit XML-Mitteln beschrieben. Dadurch, dass es selbst als Mehrschichtenmodell
definiert ist, ist es flexibel erweiterbar. Das spielt zwar für den Entwickler, der mit dem Warehouse
Builder arbeitet keine Rolle, er merkt kaum etwas davon. Aber es gibt ein beruhigendes Gefühl wenn
die in die Modelle investierte Arbeit über einen allgemein anerkannten Standard abgesichert ist.
Mehrschichtig aufgebautes Metadatenrepository
Das Metadaten Repository besitzt mehrere Möglichkeiten die beschreibenden Metadaten zu
bearbeiten, ein- und auszulesen oder auszuwerten. Hier eine Übersicht:
Möglichkeit / Aktion
Hilfsmittel / Methode
Primäre Verwendung
Bearbeiten und Erfassen der
Metadaten
Herausladen oder Einladen
ganzer Modelle über das GUI
OWB GUI (Client Oberfläche)
Entwicklung des WarehouseModells durch das Projektteam
- Archivierung
- Metadatenaustausch zwischen
OWB-Repositories
- Migration der Modelle über
Stand/letzte Änderung 13.05.2016
Metadaten Import- / Export in
eine MDL-Datei von beliebigen
Modellteilen.
(in Arbeit)
75875104
Oracle Warehouse step-by-step
231/300
Bearbeiten von Modellen im
Batch
bzw. auf einer
Kommandozeilenebene.
Kommandos in Scriptdateien
Scriptsprache verwendet über
OMBPlus
Direktzugriff auf Metadaten über
andere
Programme.
Jede
Metadateninformation ist über
ein Javaprogrammm abgreifbar
Zugriff
auf
bereitgestellte
Datenbankviews
Java API
Graphische Auswertungen
Metadaten Browser im Web
Auswertungen im XML-Format
XML-Schnittstelle
Datenbank
SQL
OWB-Releases hinweg
- Automatisiertes Ändern der
Modelle.
- Integration des Warehouse
Builders
in
andere
Anwendungen (ERP-Systeme)
- Sich selbst pflegende Systeme
Schnittstellenprogramme
zur
Versorgung
anderer
Anwendungen
Selbst
entworfene
textbasierte Reports
- Einfache
Metadatenauswertungen
Metadaten Online Reporting
sowohl für Entwickler als auch
für Business-User
XML-basiertes Reporting
-
der
Metadata Dependancy Managers
Die Auswertungen über den Metadatenbowser sind weiter vorne bereits gezeigt worden. Daher kann
an dieser Stelle darauf verzichtet werden. Hier nur noch einmal Hinweise für die Bedienung des
Metadata Dependancy Managers.
Der Dependancy Manager kann entweder über das Design Center Menü (Option Tools) oder direkt
aus der Liste der Objekte im Design Center (rechte Maustaste) aufgerufen werden.


Öffnen Sie mit der rechten Maustaste das Kontextmenü für die Tabelle REGIONEN.
Starten Sie hierüber die Impact-Analyse für diese Tabelle.
Sie erhalten eine Darstellung mit der Tabelle REGIONEN im linken Bereich und mehreren dickeren
blauen Rechtecken, die durch ein weißes Kreuz gekennzeichnet sind. Diese können Sie nach und
nach aufklappen. Kommen Sie auf ein Objekt, das an einer Seite ebenfalls durch ein Plus-Zeichen
gekennzeichnet ist, dann können Sie auch dieses weiter öffnen.
Schließlich stellen wir fest, dass eine Text-Datei und die Faktentabelle F_UMSATZ Daten aus dieser
Tabelle bezieht.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
232/300
Impact Analyse für die Tabelle REGIONEN
Eine weitere Analyse kann die Frage sein: In welchen Modulen sind die Objekte zu finden.
Diesen Punkt finden Sie unter dem Men[punkt EDIT.
Moduldarstellung zur Impact-Analyse
Diese beiden Module sind recht überschaubar. Dass die Darstellung auch etwas komplexer sein kann
zeigt eine nach Modulen-gruppierte Impact-Analyse der Artikeltabelle aus derm Modul SRC.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
233/300
Nach Modulen gruppierte Impact-Analyse der Artikeltabelle
In der Darstellung oben sehen wir zweimal das Objekt F_UMSATZ. Es ist einmal die Cubb-Definition
und zum anderen ist es die Tabelle F_UMSATZ. Optisch können wir diese Objekte zusammenfassen.
Wählen Sie hierzu die Group Selected Objects Option in der Kopfleiste des Fensters.
Die Objekte F_Umsatz sind zur Gruppe Umsatztabelle zusammengefasst
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
234/300
Diagramme ausdrucken
In fertigen Umgebungen kommen durchaus komplexere Auswertungen vor. Am Bildschirm wird es
schwierig sein. die einzelnen Abhängigkeiten dann noch zu erkennen.
Dann hilft das Ausdrucken. Darüber sind sehr brauchbar Ergebnisse zu erzielen. Über die Selektion
Print Setup sollten Sie zunächst das Ausdrucken auf „mehrseitig“ stellen, indem Sie die Page
Columns und die Page Rows auf Werte > 1 setzen
Druckoptionen zum mehrseitigen Drucken
Dann können Sie in der grafischen Darstellung die Objekte bei einer kleinen Zoomeinstellung
möglichst weit auseinander ziehen.
Auseinanderziehen von Objekten und Bereichen in komplexen Darstellungen
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
235/300
Beim Drucken wird dieses Bild auf die verschiedenen Seiten verteilt. Das kann dann eine Wandtapete
werden.
Die Verteilung der Darstellung auf die Ausdruckseiten
Auswertungen mit Application Express
Alle Metadatentypen des Repositories stehen für Auswertezwecke zur Verfügung. Öffnen Sie hierzu z.
B. mit dem SQL Developer das Schema des Repositories. Hier finden Sie für alle Objekttypen eine
View. Diese Views können nach Belieben ausgelesen werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
236/300
Ausschnitt Metadaten Views OWB
Ein Beispiel zeigt die folgende Application Express-Anwendung, in der mehrere Zugriffe
zusammengefasst sind:
 Eine Auflistung nach Objekttyp
 Listen aller Tabellen, Mappings und Funktionen
 Eine listenartige Strukturauflösung
Application Express (HTMLDB)-Listenauswertung über Metadaten mit Beschreibungstexten
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
237/300
Application Express (HTMLDB)-Strukturauflösung in Listenform
Einfache Liste von Tabellen mit den Modul-Fundstellen. Die Beschreibungsinformationen wurden nicht
gepflegt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
238/300
Liste von Mappings mit Beschreibungstexten
Die Grundlage dieser Application Express-Auswertung ist eine Hilfstabelle. Die Metadaten sind
innerhalb des Repositories in einer sehr verschachtelten Form abgelegt. Hinzu kommt die Fülle der
Informationen. Mit dem „Trick“ der Hilftabelle können solche programmierten Zugriffe erleichtert
werden.
Die Hilfstabelle hat die gleiche Struktur wir der View ALL_IV_ALL_OBJECTS und wird mit den
folgenden Daten gefüllt:
insert into t_all_objects select
OBJECT_ID,
OBJECT_UOID,
OBJECT_TYPE,
OBJECT_NAME,
BUSINESS_NAME,
DESCRIPTION,
PARENT_OBJECT_ID,
PARENT_OBJECT_TYPE,
PARENT_OBJECT_NAME,
IS_VALID,
UPDATED_ON,
CREATED_ON,
UPDATED_BY,
CREATED_BY
from OWBR2.all_IV_ALL_objects where
object_type != 'Unknown'
Eine Strukturauflösung wie in dem Beispiel oben kann erreicht werden über:
Select
substr('|---------',1,level*2)||substr(OBJECT_NAME,1,25) Name,
substr(OBJECT_TYPE,1,20) typ,
substr(PARENT_OBJECT_NAME,1,20) Parent ,
substr(PARENT_OBJECT_TYPE,1,20) Parent_Typ,
--CONNECT_BY_ISLEAF,
LEVEL,
substr(SYS_CONNECT_BY_PATH(OBJECT_NAME, '->'),1,30) Pfad
from t_all_objects
START WITH OBJECT_ID = 26265
CONNECT BY PRIOR OBJECT_ID = PARENT_OBJECT_ID and
OBJECT_TYPE not in ('Unknown')
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
239/300
Die hier vorgestellten Beispiele lassen erahnen, welche komfortablen Browserauswertungen man
erzuegen kann. Das ist jedoch die Anwendung von Application Express (HTMLDB) und sollte an
anderer Stelle besprochen werden.
Leichtes Austauschen von Metadaten zwischen verschiedenen
Repositories (MDL-Files)
In verschiedenen Situationen will man Metadaten aus dem Repository auslagern und auch wieder in
ein Repository zurückschreiben. Diese Situationen können sein:
 Erstellen von Sicherungskopien der Metadaten
 Austausch von Metadaten zwischen Repositories
 Erstellen eines Versionsstands
Alle Objekte können komplett oder selektive ausgetauscht werden.
Bei diesem Vorgang entsteht eine sog. MDL-Datei. Das ist ein verschlüsseltes Warehouse-Builder –
eigenes Format. In dieser Textdatei sind alle Informationen enthalten, um die jeweiligen Objekte
wieder neu aufzubauen. Ein komplettes Repository kann damit wieder hergestellt werden.


Markieren Sie hierzu in dem Design Browser das Objekt, das Sie als Metadaten herausschreiben
wollen. Wenn Sie das Projekt selektieren, wird das komplette Projekt geschrieben.
Wählen Sie aus dem Menüpunkt Design die Option Export und hier Warehouse Builder
Metadata
Starten des Metadaten-Export-Vorgangs
Jetzt startet ein Wizard, in dem Sie den Pfad für sie Zieldatei angeben können.
 Wählen Sie eine Datei aus und starten Sie der Exportvorgang.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
240/300
Metadaten-Export-Wizard
Nach dem Abschluss Exportvorgangs sehen Sie das Protokoll. Sie können diese Informationen in dem
geschriebenen Log-File nachlesen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
241/300
Protokollierung des Metadaten-Exports
Zur Umkehrung des Vorgangs lesen Sie die Datei einfach wieder ein.
 Wählen Sie aus dem Menüpunkt Design die Option Import und hier
Metadata.
 Selectieren Sie die zuvor weggeschriebene Datei.
Warehouse Builder
Sie haben die Option alle Daten zu lesen oder nur einzelne Objekte auszutauschen.
 Schalten Sie hierzu unter der Option Object Selection. ->Import selected objects from file.
Danach sehen sie eine Browser, der dem des Design Centers gleicht und Sie können auch einzelne
Objekte zum Zurückladen selektieren.
Tip: Erzeugen Sie sich regelmäßig solche MDL-Dateien. Sie können damit Ihre Arbeit
absichern. Wenn Sie ein mapping aus Versehen gelöscht oder es so stark modifiziert haben, so dass
Sie nicht mehr zum Ursprung zurückkommen, dann können Sie Ihre Ursprungsversion aus der MDLDatei wieder „zurück-retten“.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
242/300
Dialog Wizard zum Zurückladen einzelner Objekte aus einer MDL-Datei
Versionierung von Modellen und Modellteilen
Modelle bzw. Modellausschnitte können versioniert werden. Dies ist eine Art Snapshot-Verfahren, das
dem Speichern der vorher besprochenen MDL-Files gleicht. Die versionierten Informationen bleiben
jedoch innerhalb des Repositories.
Versionieren wir das Mapping MP_Artikel.
 Gehen Sie in das Kontextmenü des Mappings MP_ARTIKEL.
 Wählen Sie dort den Punkt Snapshot und hier die Option New
Erstellen einer Version für das Mapping MP_ARTIKEL
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step


243/300
Jetzt vergeben Sie den Namen für diese Version, z. B. V1_MP_ARTIKEL.
Wählen Sie bei Type FULL.
Full speichert alle Informationen zu dem Object. Diese Informationen können auch exportiert werden
und man kann daraus wieder ein neues Objekt erstellen. Nachteilig ist allerdings der höhere
Platzverbrauch. Die Signature-Variante verbraucht wesentlich weniger Platz. Sie kann alerdings
verwendet werden, um Unterschiede zwischen Versionsständen herauszufinden um daraus z. B. die
Notwendigkeit für ein Deployment abzuleiten. Hier sollte man sich überlegen, für welche Einsatzfälle
man die Versionierung einsetzen will.


Bei der Frage nach Dependancy Depth lassen Sie die 0 stehen. Hier würden referenzierte Objekte
herangezogen werden.
Schließen Sie den Vorgang danach ab.
Um die Arbeit mit dieser Version zu testen, können Sie jetzt eine Änderung in dem Mapping
vornehmen.
 Öffnen Sie das Mapping und löschen Sie die Tabelle Artikelsparte weg. Löschen Sie auch die
Gruppe Sparte in dem Joiner.
 Schließen Sie das Mapping und wählen Sie in dem Design Center in dem Kontextmenü des
Mappings die Option Snapshot und Compare.
Liste der zur Verfügung stehenden Versionen

Wählen Sie in der angebotenen Liste die Version V1_MP_ARTIKEL und Sie erhalten
Übersicht aller gegenüber dieser Version geänderten Informationen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
eine
75875104
Oracle Warehouse step-by-step
244/300
Änderungsliste von aktuellem Mapping gegenüber der gespeicherten Version
Change Manager – Zurückholen einer alten Version
Jetzt wissen wir zwar, welche Unterschiede sich eingestellt haben. Die alter Version haben wir jedoch
noch nicht zurück bekommen. Hierzu wird der Change Manager benötigt.

Starten Sie den Change Manger über den Menüpunkt Tools im Design Center.
Jetzt sehen Sie in dem linken Bereich die Auflistung der zur Verfügung stehenden Versionen und in
dem Kopfbereich haben Sie die Optionen für Zurückholen, Löschen und Vergleichen.
Die Compare-Option vergleicht jetzt zwei Versionen. Wenn Sie Compare wählen, erscheinen zwei
Listen mit dem gleichen Inhalt. Sie können also mit unterschiedlichen Versionen von dem gleichen
Objekt vergleichen.


Marken Sie Version und wählen Sie die Option Restore.
Kontrollieren Sie das Ergebnis, in dem Sie den Mapping-Editor wieder öffnen.
Das Mapping sollte wieder hergestellt sein.
Restore, Compare und Delete von Versionen
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
245/300
9. Die Verbesserung der Datenqualität
(Dieses Kapitel wird nachgeliefert)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
246/300
10. Experts
(Dieses Kapitel wird nachgeliefert)
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
247/300
11. Implementierung des Starschemas in der
Datenbank Oracle 10g
°°°° Noch nicht überarbeitet °°°°°
Es ist naheliegend, dass ein Modell wie das des Starschemas besondere Herausforderungen
aufgrund der zu speichernden Datenmengen mit sich bringt. Während die Dimensionstabellen meist
überschaubar klein sind (Produkte etwa 1000 bis 100000, Kunde je nach Einsatz 1000 bis 1 Mio.,
Regionen/Orte 10 – 20.000, 10 Jahre Zeitdimension 4000) laufen in den Faktentabellen mehrere
Millionen bis Milliarden Sätze auf. Hier sind letztendlich Bewegungsdaten gespeichert. Um die
Aussagefähigkeit der Daten möglichst hoch zu halten, wird meist auch eine sehr feine Granularität in
den Fakten gewählt, z. B. eine konkrete Verkaufsaktivität – eine operative Transaktion.
Bei einer Telefongesellschaft mit einem
Telefongespräch pro Transaktion sind
dann natürlich andere Datenmengen zu
erwarten
als
bei
einer
Großhandelsgesellschaft wo große
Stückzahlen pro Transaktion zu
messen sind, oder bei einer Bank, die
lediglich Darlehensverträge analysiert.
Mit Hilfe einer Join-Operation fragen
Sie die hohen Datenmengen in der
Faktentabelle
und
die
damit
verbundenen
Daten
in
den
Dimensionen ab.
Mehrere Techniken innerhalb der Oracle 9i Datenbank erlauben auch bei großen Datenmengen in der
Faktentabellen performante Abfragen des Warehousebenutzers. Hier eine Vorabübersicht:

Materialized Views (Summentabellen) spielen eine wichtige Rolle, weil durch sie eine
besonders hohe Performancesteigerung erreichbar ist. Die Abfrageergebnisse eines Views
werden physisch gespeichert. Das gespeicherte Ergebnis kann bei nachfolgenden Abfragen
anderer Benutzer wiederverwendet werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step





248/300
Dimensional Tables und Query Rewrite sorgen dafür, dass auch textuell nicht identische
Benutzerabfragen bestehende Materialized Views ausnutzen können. Bei einem geschickt
aufgebauten Warehouse-System können so fast alle Benutzerabfragen über Materialized
Views beschleunigt werden, auch wenn die konkrete Fragestellung bei dem Aufbau des
Systems noch unbekannt war.
Partitionierung
teilt große Datenmengen in kleinere Teilmengen. Lade- und Abfrageaufwand wird minimiert.
Bitmap-Indizierung
erlaubt gerade bei Warehouse-Abfragen den schnellen Zugriff über Wertekategorien in den
Dimensionstabellen.
Star Transformation schreibt Benutzerabfragen datenbankintern so um, dass der günstigste
Abfrageweg gewählt wird
Analytical Functions Statistische und analytische Berechnungen, die ansonsten in den
Abfrage-Clientwerkzeugen machbar vorkommen, sind mit analytischen Funktionen direkt
innerhalb der Datenbank mit einer erheblich verbesserten Performance machbar. Kombiniert
mit Materialized Views entstehen damit gewaltige Performanceverbesserungen.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
249/300
Summentabellen / Materialized Views
Eine der wichtigsten Techniken zur Erreichung von Abfrageperformance in einem Starschema sind
Materialized Views (Summentabellen). Hier werden die Ergebnisse für mögliche Benutzerabfragen
im Vorwege bereits erstellt und physisch innerhalb der Datenbank gespeichert. Wenn die Berechnung
der Umsätze pro Monat und Artikelgruppe als z. B. 100-zeilige Ergebnismenge bereits in der
Datenbank vorliegt, ist eine Benutzerabfrage in Sekundenschnelle beantwortet. Im anderen Fall
müßten erst Millionen von Faktensätzen gelesen werden (u. U. Full Table Scan), um das Ergebnis zu
liefern.
Zur praktischen Einsetzbarkeit des Konzeptes müssen jedoch noch einige technische
Voraussetzungen erledigt sein.
Eine erste Herausforderung: Ist ein View auf eine Basistabelle erstellt und das Ergebnis physisch
gespeichert, sind die Inhalte des Views bei den nächsten Updates auf die Basistabelle nicht mehr
aktuell und Abfragen liefern falsche Ergebnisse.
Um dies zu verhindern hat Oracle einen sog. Fast
Refresh-Modus eingeführt. Hier werden alle
Änderungen in der Basistabelle in DML-Form in
sog. View Logs gespeichert. D. h. die auf die
Basistabellen wirkenden, ändernden Kommandos
sind abgelegt. Jetzt können die Materialized
Views modifiziert (Refreshed) werden und zwar
„ON DEMAND“, „FAST“, „ON COMMIT“,
„FORCE“ und „COMPLETE“ (siehe Manual zur
näheren Erklärung der einzelnen Optionen).
Die Materialized Views aktualisieren sich also
selbst und dies ohne die Performance der
Verarbeitung der Basistabellen deutlich zu
beeinflussen. Ein Neuaufbau der Views findet
nicht statt. Einmal erstellt, sind lediglich
Änderungen nachzufahren.
Beispieldefinition für eine View Log:
create materialized view log on f_umsatz_2 with sequence, ROWID
(ARTIKEL_ID,
BESTELLMENGE,
KUNDEN_ID,
ORT_ID,
UMSATZWERT,
ZEIT_ID,
ZEIT_PARTITION )
including new values;
Eine zweite Herausforderung besteht in der der Nichtvorhersagbarkeit von nötigen Materialized Views.
Denn der Warehousenutzer wird interaktiv virtuell innerhalb des Starschemas Rollup- und RolldownWege gehen und dabei auch eine Vielzahl von unterschiedlichen SQL-Funktionen verwenden. Es
kann nicht für alle Abfragemöglichkeiten ein View vordefiniert werden.
Hier hilft die Rewrite-Technik der Oracle-Datenbank. Hierbei sucht das Datenbanksystem selbständig
ob Materialized-View-Abfragen mit identischem oder teil-identischem Ergebnis bereits in der
Datenbank vorliegen, wenn ja, schreibt der Optimizer der Datenbank das Benutzerkommando um und
leitet es so auf den passenden View. Der Vorgang ist für den Benutzer vollständig transparent, er
spürt lediglich die verbesserte Performance.
Wie arbeitet der Optimizer:
Zunächst prüft der Optimizer auf volle textliche Identität des Kommandos (
Achtung
Groß/Kleinschreibung). Wenn dies nicht zum Erfolg führt, werden Textteile analysiert und zwar
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
250/300
beginnend mit den Einträgen in der FROM-Klausel. Schließlich werden Join-Bedingungen, GroupingSets und Aggregationen herangezogen.
Dimensional Table
Eine Hilfestellung kann dem Optimizer durch die Definition einer Dimensional Table gegeben
werden, wie wir sie als Ergebnis einer Starschema-Generierung aus dem Warehouse Builder
bekommen. Haben wir die Dimensionen eines Starschemas definiert, generiert OWB für jede
Dimension zwei Datenbankobjekte: eine echte Tabelle, die die Dimensionssätze auch wirklich
physisch aufnimmt und eine Dimensional Table, die im Prinzip nur logisch vorhanden ist.
Die Dimensional Table beinhaltet die wichtige Information über Hierarchien in der Dimensionstabelle,
die der Optimizer auswerten kann. Bei der Definition der Dimensionen haben wir mögliche
Aggregatstufen (Level) festgelegt. Hier haben wir uns an den möglichen Drill-Down-Hierarchiestufen
orientiert, die auch ein Warehouse-Benutzer wahrscheinlich wählen würde, wenn er Analysen startet.
(Umsatz nach Artikelsparte, ... Artikelgruppe,... Artikel).
Generierte Dimension
Die dazu passende Tabelle
CREATE DIMENSION "DIM_ARTIKEL_DIM"
LEVEL
"ARTIKEL"
IS
"DIM_ARTIKEL"."ARTIKEL"
LEVEL
"ARTIKEL_KEY"
IS
"DIM_ARTIKEL"."ARTIKEL_ID"
LEVEL
"ARTIKELGRUPPE"
IS
"DIM_ARTIKEL"."ARTIKELGRUPPE"
LEVEL
"ARTIKELSPARTE"
IS
"DIM_ARTIKEL"."ARTIKELSPARTE"
HIERARCHY "ARTIKEL_HIER"(
"ARTIKEL_KEY" CHILD OF
"ARTIKEL" CHILD OF
"ARTIKELGRUPPE" CHILD OF
"ARTIKELSPARTE" )
ATTRIBUTE "ARTIKELGRUPPE" DETERMINES
("ARTIKELGRUPPEN_" )
ATTRIBUTE "ARTIKELSPARTE" DETERMINES
("ARTIKELSPARTEN_" )
;
CREATE TABLE "DIM_ARTIKEL"
(
"ARTIKEL" VARCHAR2(30),
"ARTIKELGRUPPE" VARCHAR2(20),
"ARTIKELGRUPPEN_" NUMBER(9),
"ARTIKELSPARTE" VARCHAR2(20),
"ARTIKELSPARTEN_" NUMBER(9),
"ARTIKEL_ID" NUMBER(9))
TABLESPACE "USERS"
PARALLEL
LOGGING
;
Beispiel:
Es wird ein Materialized View für den Join zwischen der Umsatztabelle F_Umsatz und der oben
definierten Artikeldimension (DIM_ARTIKEL) definiert und zwar mit einer Aggregation (Sum() Group
By) auf der Artikelebene. Der View liefert Ergebnisse für „Alle Umsätze pro Artikel“.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
251/300
Die Definition des Views innerhalb OWB
Das generierte Script:
Create
Materialized
View
"MW_ARTIKEL_UMSATZ2"
TABLESPACE "USERS"
PARALLEL
LOGGING
BUILD IMMEDIATE REFRESH ON
DEMAND ENABLE QUERY REWRITE
AS
select
Dim_artikel.Artikel,
sum(f_umsatz_2.UMSATZWERT),
count( f_umsatz_2.umsatzwert)
from
Dim_artikel, f_umsatz_2
where f_umsatz_2.ARTIKEL_ID =
Dim_artikel.Artikel_ID
group by Dim_artikel.Artikel;
Der View kann innerhalb des OWB definiert werden. Das Select-Statement ist allerdings von Hand zu
schreiben. (Hier kann man sich mit einem Hilfsmapping helfen, indem man sich die nötigen Tabellen
und den Join „zusammenklickt“ und das Ergebnis über Immediate Result und Cut/Paste in das QueryFenster des View-Wizards kopiert. Das spart Schreibarbeit und Schreibfehler).
Die Schlüsselwörter wie “Query Rewrite“,“Build Immediate Refresh“ usw. stellt man über die Option
„Configuration“ zu den jeweiligen Materialized Views ein.
Ist der View generiert, so läuft zunächst jede mit dem View identische Abfrage wesentlich schneller.
Eine Testabfrage auf 1 Million Testsätze einer Faktentabelle kann so z. B. von 14 Sekunden auf unter
0,01 Sekunden reduziert werden. Dies ist leicht erklärbar.
Aber auch eine Abfrage auf Gruppenebene in dem Beispiel läuft wesentlich schneller, obwohl hierfür
kein Materialized View existiert. Über die Dimensional Table DIM_ARTIKEL weiß der Optimizer, dass
eine Aggregation aller Umsätze auf Artikellevel eine Vorstufe
einer Aggregation auf
Artikelgruppenebene ist. Artikelgruppe ist Parent von Artikel in der Dimensionshierarchie. Der
Optimizer veranlast jetzt ein zusätzliches Zusammenfassen aller im oben genannten Materialized
View bestehenden Artikelaggregate auf Gruppenebene.
 Tip: Achten Sie unbedingt darauf, dass die Felder, über die in dem Materialized View aggregiert
wird, auch tatsächlich als Levelfelder in der Dimension definiert sind. Sonst wird der Query Rewrite
nicht stattfinden. In dem oben ausgeführten Beispiel (Dim_Artikel) sind auf der untersten Ebene zwei
eigentlich gleichwertige Level definiert (Artikel und Artikel_Key). Einmal ist es der sprechende
Artikelname (Artikel) und zum anderen der Primary Key der Dimension (Artikel_Key) der in der
Foreign Key-Beziehung zur Faktentabelle genutzt wird. Hier sind zwei Anforderungen erfüllt:
Einmal ist die Foreign Key-Beziehung zur Faktentabelle über eine kompakte und auf Dauer stabile
laufende Nummer realisiert (Forderung aus der Datenmodellierung) zum anderen ist garantiert, dass
auf der untersten Hierarchieebene der Dimension ein sprechender Wert z. B. für die GROUP-BY
Klausel genutzt werden kann. Denn es ist kaum zu erwarten, dass spätere Auswertungen über die
laufende ID-Nummer der Dimension abfragen:
Select A.Artikel_Key, sum(F.Umsatz)
from Dim_Artikel A,Umsatz F)
where....
Group by A.Artikel_key
Die Abfrage wird eher über den Artikel selbst laufen:
Select A.Artikel, sum(F.Umsatz)
from Dim_Artikel A,Umsatz F)
where....
Group by A.Artikel
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
252/300
Voraussetzungen für Query Rewrite
Das Query Rewrite bedarf bestimmter Voraussetzungen, die gegeben sein müssen, wenn ein Rewrite
auch wirklich stattfinden soll.
Materialized-View-Definition
Init.ora (oder pfile unter Oracle 9i)
Optimizer Mode
Analyse auf Basistabellen
Integritätslevel
Ein View muss definiert sein mit den Schlüsselwörtern:
“Enable Query Rewrite“
Parameter
Query_Rewrite_Enable=True
Der Otimizer Mode muss entweder auf
ALL_ROWS oder First_Rows stehen
bzw. im Modus Choose sein (Default).
Im letzten Fall müssen zu den betroffenen Basistabellen des
Views statistische Informationen durch den Analyse-Befehl
durch das Datenbanksystem gesammelt worden sein.
Im Fall von Optimizer Mode=Choose
Es kann eingestellt werden, wie oft ein Materialized View
aktualisert wird.
Es gibt die Optionen
- Stale_Tolerated
- Trusted
- Enforced (Default)
Im letzten Fall ist der View immer aktuell. In den ersten beiden
kann es zu einer fehlenden Synchronisierung kommen.
Nun kann zusätzlich festgelegt werden, dass ein Query Rewirte
nur dann stattfinden soll, wenn ein Materialized View auch
wirklich aktuell ist:
Set Query_Rewrite_Integrity=ENFORCED (Default)
Ist ein View nicht synchronisiert, wird ein Rewrite z. B. bei
ENFORCED nicht durchgeführt.
Über Hints kann das Ausführen von Rewrites zusätzlich
gesteuert werden:
Hints
Select /*+Rewrite (hintname) */ feld1,feld2 from....
Select /*+NoRewrite (hintname) */ feld1,feld2 from....
Grants
(Benutzerrechte)
Zum Rewrite sind auch besondere Rechte eines Benutzers
nötig.
Grant Rewrite auf das eigene Schema und
Grant Rewrite auf ein anderes Schema, wenn Basistabellen in
einem anderen Schema liegen.
Hilfsmittel:
Prüfung ob Parameter gesetzt sind:
Show Parameters Query...
SQL> show parameters Query
NAME
-----------------------------------query_rewrite_enabled
query_rewrite_integrity
SQL>
TYPE
----------boolean
string
VALUE
-----------TRUE
trusted
Zum Testen, ob auch wirklich ein Materialized View durch Rewrite erkannt und genutzt wird kann ein
Trace eingeschaltet werden:
Set autotrace on [explain]
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
253/300
Die Beispielabfrage in SQL*PLUS auf Artikelgruppen:
select
Dim_artikel.Artikelgruppe,sum(f_umsatz_2.UMSATZWERT),
count( f_umsatz_2.umsatzwert)
from Dim_artikel, f_umsatz_2
where f_umsatz_2.ARTIKEL_ID = Dim_artikel.Artikel_ID
group by Dim_artikel.Artikelgruppe;
Die Ausgabe mit dem Trace-Output:
SQL>
2
3
4
5
select
Dim_artikel.Artikelgruppe,sum(f_umsatz_2.UMSATZWERT),
count( f_umsatz_2.umsatzwert)
from Dim_artikel, f_umsatz_2
where f_umsatz_2.ARTIKEL_ID = Dim_artikel.Artikel_ID
group by Dim_artikel.Artikelgruppe;
ARTIKELGRUPPE
SUM(F_UMSATZ_2.UMSATZWERT) COUNT(F_UMSATZ_2.UMSATZWE
------------------------------ -------------------------- ------------------------Computerteile
269623219
43
Haushaltswaren
10468546
82
Gartenbedarf
9479235
76
Heimwerker
10633209
80
KFZ-Zubehoer
10273962
78
Abgelaufen: 00:00:01.00
Ausführungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=27 Card=5 Bytes=540)
1
0
SORT* (GROUP BY) (Cost=27 Card=5 Bytes=540)
2
1
SORT* (GROUP BY) (Cost=27 Card=5 Bytes=540)
3
2
HASH JOIN* (Cost=12 Card=1263 Bytes=136404)
4
3
VIEW* (Cost=8 Card=74 Bytes=4440)
5
4
SORT* (UNIQUE) (Cost=8 Card=74 Bytes=4440)
6
5
TABLE ACCESS* (FULL) OF 'DIM_ARTIKEL' (Cost=4 Ca
rd=74 Bytes=4440)
7
3
:Q223004
:Q223003
:Q223003
:Q223001
:Q223001
:Q223000
TABLE ACCESS* (FULL) OF 'MW_ARTIKEL_UMSATZ2' (Cost=3 :Q223002
Card=1263 Bytes=60624)
1 PARALLEL_TO_SERIAL
SELECT /*+ CIV_GB */ A1.C0,SUM(SYS_OP_CSR(A1
.C1,0)),SUM(SYS_OP_CSR(A1.C1,1)) FRO
2 PARALLEL_TO_PARALLEL
SELECT /*+ PIV_GB */ A1.C2 C0,SYS_OP_MSR(SUM
(A1.C4),SUM(A1.C3)) C1 FROM (SELECT
...............
In dem Output kann deutlich gesehen
‚MV_ARTIKEL_UMSATZ2’ gesprungen wird.
werden
wie
auf
den
Materialized
View
Ist unbekannt ob ein Query Rewrite für eine Materialized View stattfindet, gibt es ein Hilfspackage das
den View analysiert:



Führen Sie zunächst das Script
Verzeichnis
%Oracle_Home%/rdbms/admin/
UTLXMV.SQL und UTLXPLAN.SQL aus. Sie liegen in dem
(z.
B.
D:\ora9\rdbms\admin\utlxmv.sql)
(
Achtung
als
SYS
ausführen).
Dieses Script erzeugt eine Hilfstabelle MV_CAPABILITIES_TABLE die die benötigten
Informationen zu dem zu testenden View aufnimmt
Starten
Sie
jetzt
den
Aufruf
exec dbms_mview.explain_mview(`Viewname`);
Folgendes Script wird die Ergebnistabelle auswerten
column mvname format a20;
column CAPABILITY_NAME
format a20;
column POSSIBLE
format a5;
column RELATED_TEXT format a10;
column RELATED_NUM
format 999999;
column MSGNO
format 999999;
column MSGTXT format a20;
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
254/300
column SEQ format 999999;
select mvname,
CAPABILITY_NAME,
possible,
related_text,
RELATED_NUM,
MSGNO,
MSGTXT,
SEQ
from MV_CAPABILITIES_TABLE;
Der Summary Advisor DBMS_SUMMARY gibt zusätzliche Hinweise darüber, welche Materialized
Views zusätzlich angelegt werden können. Hierzu nutzt er Statistiken, die im Verlauf der Nutzung des
Starschemas das System erstellt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
255/300
Parallelverarbeitung
°°°° Noch nicht überarbeitet °°°°°
Parallelität ist eine der Hauptverarbeitungsmuster in der Warehousedatenhaltung.
Beladen des Warehouse mit neuen Daten, Umwandeln von Datenbeständen oder die
Auswerteoperationen des Endbenutzers über die Auswertungswerkzeuge, sind letztendlich Aktionen,
bei denen Summen oder Mengen von vielen Einzelfakten bewegt werden.
Ist in operativen Systemen der Ist-Zeitpunkt oder eine einzelne Transaktion relevant, so ist es im
Warehouse die Summe all dieser Istsituationen über einen Zeitstrahl verteilt (historische Betrachtung).
In der Oracle 9i kann die Verarbeitung von Daten parallel durchgeführt werden. Auch wenn das Maß
der Parallalisierung administriert werden kann, so steuert die Datenbank weitesgehend selbständig
das Erstellen und Verwalten der einzelnen parallelen Prozesse.
Parallelisierung lohnt sich, wenn folgende Voraussetzungen erfüllt sind:
- Rechnerarchitekur entweder Symmetric multi-processors (SMP), Clustersystem oder Massiv
parallel Process-Maschinen (MPP).
- Genügend I/O Bandbreite (d.h. parallele Platten)
- Nur z. T. ausgenutzte CPU-Leistung (< 30%)
- Genügend Hauptspeicher, um parallelen Prozessen Speicher zu geben.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
256/300
Partitionierung
°°°° Noch nicht überarbeitet °°°°°
Die Parallelisierung kann zusätzlich durch Partitionierung von Tabellen, Indizes oder Views unterstützt
bzw. gesteuert werden.
Man unterscheidet zwischen 4 Partitionierungsvarianten:
1. Range: Hier werden die Records einer Tabelle nach den Wertberreichen einer festgelegten
Column in Partitionen aufgeteilt. Sinnvolles Beispiel ist hier das Aufteilen der Faktentabelle im
Starschema nach Zeiteinheiten, etwa Wochen, Monate, Quartale. Siehe Beispiel unten.
2. Hash: Hier legt das Datenbank-System über einen Hash-Algorithmus die Verteilung der
Tabellensätze
auf
Regionen
fest.
Beispiel:
Eine Faktentabelle, mit detaillierten Einzelverkaufsdaten an Kunden (Transaktionslevel) soll
nach Postleitzahlgebieten partitioniert werden. Nun gibt es aber Postleitzahlgebiete mit einer
sehr geringen Bevölkerungsdichte und andere, etwa in Städten, mit einer hohen
Bevölkerungsdichte. Rangepartitionierung würde hier zu einer ungleichgewichtigen Verteilung
von Kundentransaktionen in den einzelnen Postleitzahlgebieten führen. Bei der
Hashpartitionierung verteilt das System alle Verkaufstransaktionen gleichmäßig auf die
Partitionen.
3. Composit: Dies ist eine Verbindung von Range- und Hashpartitionierung. Um bei den
vorgenannten Beispielen zu bleiben, könnten etwa ‚gehashte’ Postleitzahlgebiete zusätzlich
über eine Zeiteinheit Range-Partitioniert werden.
4. List: Das Partitionierungskriterium ist hier eine definierte Werteliste. Z. B. entlang der
Produktgruppen in eines Vertriebssortiments.
Beispiel Rangepartitionierung im Starschema:
Gerade in historischen Datenbeständen
bietet sich die Rangepartitionierung nach
einem
Zeitkriterium
an.
Eine
erste
Herausforderung stellt jetzt die Auswahl des
passenden Feld an, nach dem partitioniert
werden
soll.
Aus
der
klassischen
Datenmodellierungslehre kennen wir die
Regel Primary-Keys möglichst knapp und auf
Dauer konsistent zu entwerfen. Die
einfachste Methode dies zu erreichen ist die
Einführung eines künstlichen Schlüssels, im
Regelfall eine fortlaufende Nummer. Diese
Nummer ist allerdings wenig geeignet , um
danach
eine
Rangpartitionierung
durchzuführen.
Welche
Wertebereiche
sollten genommen werden?
Daher empfiehlt es sich ein Datumsfeld mit in die Faktentabelle aufzunehmen oder wenn aus
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
257/300
irgendwelchen Gründen ein Datum in der Faktentabelle hinderlich ist, zumindest ein nummerisches
Feld, in dem ein Zeitkriterium wieder zu finden ist. In dem nebenstehenden Beispiel wurde eine 1stellige Quartalsnummer und eine 4-stellige Jahreszahl gewählt.
Die Definition einer Partitioned Table kann über die Configuration-Option des Table-Kontextmenues
im Moduleditor erfolgen. Wird ein echtes Datumsfeld als Partitionierungskriterum benutzt, so generiert
OWB die Definition mit samt der nötigen „TO_DATE“ Funktion:
Das generierte Ergebnis nach dem oben gennanten
Beispiel:
CREATE TABLE "F_UMSATZ_3" (
"ARTIKEL_ID" NUMBER(10),
"BESTELLMENGE" NUMBER(9),
"KUNDEN_ID" NUMBER(10),
"ORT_ID" NUMBER(10),
"UMSATZWERT" NUMBER(9),
"ZEIT_ID" NUMBER(7),
"ZEIT_PARTITION" NUMBER(5))
PARALLEL
LOGGING
PARTITION BY RANGE ("ZEIT_PARTITION")
(PARTITION "Q19971" VALUES LESS THAN
TABLESPACE "USERS"
,PARTITION "Q19972" VALUES LESS THAN
TABLESPACE "USERS"
,PARTITION "Q19973" VALUES LESS THAN
TABLESPACE "USERS"
,PARTITION "Q19974" VALUES LESS THAN
TABLESPACE "USERS"
,PARTITION "Q19981" VALUES LESS THAN
TABLESPACE "USERS"
................................
,PARTITION "Q20003" VALUES LESS THAN
TABLESPACE "USERS"
,PARTITION "Q20004" VALUES LESS THAN
TABLESPACE "USERS" )
(19972)
(19973)
(19974)
(19975)
(19982)
(20004)
(20005)
;
Definition einer Rangepartion mit OWB
Partition Pruning
Einer der wichtigsten Vorteile der Partitionierung ist das Partion-Pruning. Kommt in der Where-Klausel
einer Abfrage eine Einschränkung auf ein Partition-Kriterum vor, so sorgt der Cost-Based-Optimizer
des Oracle-Systems dafür, dass nur die betroffene Partition durchsucht wird.
In dem folgenden Beispiel wird auf die oben definierte Fakttabelle zugriffen bevor sie partitioniert
wurde und ein zweites Mal, nachdem sie nach dem Schlüssel Quartal/Jahr in 15 Partitionen unterteilt
wurde.
Beispielabfrage:
select substr(A.artikel,1,15) Artikel, sum(U.umsatzwert) from dim_artikel A, f_umsatz_3
U where A.Artikel_ID = U.Artikel_ID and Zeit_Partition = 19994 group by A.Artikel
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Join über 350.000 Faktsätze ohne Partition
258/300
Join über 350.000 Faktsätze mit Partition
Partition-wise Join
Das Partitionierungsverfahren kann auch sehr effektiv über einen Join zwischen zwei Tabellen hinweg
genutzt werden, wie wir ihn in Starschemen kennen. Hier sind in beiden Tabellen (Parent/Child, oder
Dimension/Fakt) gleiche Partitionsmengen zu erstellen, wobei die jeweiligen Partionscolumns sich
entsprechend müssen.
Beispiel: Ein Starschema besteht aus einer Kundendimension mit dem Primary-Key PK_Kunden_DIM
und einer Faktentabelle, in der sich der entsprechende Foreign Key FK_Kunden_DIM wieder findet.
Für beide Tabellen werden die gleiche Anzahl Hash-Partitionen über die jeweiligen Schlüssel definiert.
Das Datenbanksystem wird bei Abfragen auf beide Tabellen den hierzu nötigen Join in
partitionsbezogene, kleinere Joins zerteilen – für jede Partition einen (Hash/Hash-Variante).
Vorteile entstehen jetzt einmal durch die leichtere und schnellere Zuteilung der Systemprozesse zu
den Partitionen und zum anderen brauch bei einer Einschränkung über die where-Klausel die nicht die
gesamte Datenmenge analysiert zu werden.
Join-Wise-Partition
Hash/Hash-Variante
Join-Wise-Partition (Hash/Hash-Variante)
Das Beispiel kann noch weiter ausformuliert werden, indem über die Hash-Partitionen in der
Faktentabelle zeitbezogene Range-Partition gelegt werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
259/300
Join-Wise-Sub
Partition
Partial Partition-wise Join
Eine übliche Variante des Partition-wise Join ist der Partial Partition-wise Join.
Hier wird lediglich eine der beiden Tabellen partitionniert (in der Regel die größere Faktentabelle).
Das Datenbank-System wird bei späteren Abfragen selbständig die nicht partitionierte Tabelle
partitionieren und die entstandenen Datensets den Partitionen der ‚gejointen’ Tabelle zuordnen.
Parallelisierungsgrad und Anzahl Partitions
Die Anzahl der Partitions sollte immer höher sein, als der eingestellte Grad der Parallelisierung des
Datenbanksystems. Empfohlen wird der Faktor 3, also wird von 10 parallelen Datenbankprozessen
ausgegangen, so sind 30 Partitionen optimal. Damit kann das sog. Loadbalancing der Datenbank, d.
h. das Verteilen von Durchführungsaufgaben auf freie Prozesse, effizienter erfolgen. Die Datenbank
kann eine Partition als Maß für Durchführungseinheiten annehmen. Ist ein Prozess mit der
Abarbeitung einer Partition fertig, so kann ihm eine andere noch nicht bearbeitete Partition
zugewiesen werden. Da i. d. R. einzelne Prozesse unterschiedlich lange brauchen, um eine Partition
zu bearbeiten, würde bei gleicher Anzahl von Partitionen und Prozessen regelmäßig Leerlauf für
einzelne Prozesse entstehen und das Systeme wäre nicht optimal ausgelastet. Daher Faktor 3 für
das Verhältnis Prozesse zu Partitionen.
Beispiel: Bei 10 möglichen Prozessen des Systmens 10 * 3 = 30 Partitionen.
Zusammenfassende Empfehlung zur Partitionierung
In den meisten Fällen haben wir es in Starschemen mit historisierten Faktentabellen zu tun. Hier
empfiehlt sich eine Rangepartitionierung über einen Zeitschlüssel (künstlich oder Datum).
Zusätzlich kann über den Schlüssel für die Dimension mit den meisten Anfrageanforderung und relativ
hoher Anzahl von Sätzen eine Hash-Partitionierung (Partial Join-wise) erstellt werden.
Eine Beispielannahme für eine solche Konstellation wäre etwa das Vorhandensein mehreren
Millionen Faktensätzen und mehreren Hunderttausend Kundendismensionssätze. Bei kleineren
Dimensionstabellen sollte Bitmap-Indizierung überlegt werden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
260/300
Schnelles Laden von Daten mit Transportable
Tablespace
In Verbindung mit der Partitionierung von großen Tabellen bietet sich eine zweite Technik zum
schnellen Laden bzw. Ergänzen solcher Tabellen an. Mit der Technik des Transportable Tablespace
können ganze Datenbereiche schnell und bequem z. B. an eine bestehende Faktentabelle angehängt
werden, ohne die Betriebsbereitschaft und Funktionsfähigkeit der Faktentabelle wesentlich zu
beeinträchtigen.
Angenommen wir haben eine Faktentabelle nach Monatseiheiten partitioniert und diese ist, einmal
monatlich um den aktuellen Monat zu erweitern. Man bereitet eine Tabelle mit den neuen
Monatsdaten vor. Diese Tabelle liegt in einem eigens hierfür erstellten Tablespace.
Dieser Tablespace kann nun an die bereits bestehende Faktentabelle angehängt werden.
Der Austausch geschieht letztendlich über das Exportieren/Importieren und Bekanntgeben von
Metdaten (siehe Schaubild).
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
261/300
Bitmap-Indizierung
Die Bitmap-Indizierung ermöglich an gezielten Stellen innerhalb des Warehouse eine erhebliche
Perfomancesteigerung. Bei der Indizierung einer Column wird für jeden möglichen Column-Wert eine
Bitmap-Kette als Index aufgebaut. Diese Bitmap-Kette verzeichnet für jeden Record der Tabelle das
Vorhandensein des entsprechenden Wertes. Wird die Tabelle über diese Columnwerte abgefragt, so
muss jetzt lediglich die viel kompaktere Bitmap-Leiste abgesucht werden. Die Tabelle muss nicht mehr
‚gescannt’ werden.
Beispiel:
In einer Kundentabelle liegt der Bildungsstatus des Kunden in Form von Codes (0 – 9) vor. Es stehen
also in der Column „Bildung“ die Zahlenwerte 0 bis 9. Ein Bitmapindex bewirkt für jeden dieser Werte
eine Bitmap-Kette in der für alle Kunden entweder das Vorhandensein oder Nicht-Vorhandensein (1)
des Wertes (0) verzeichnet ist.
Name
Schubert
Bauer
Baumeister
Schubert
Schrieder
Bach
Schmidt
Schmidt
Bauer
Schubert
Bildungscode
2
4
5
3
2
4
5
2
4
4
Bit für Wert 2
(Hauptschule)
1
0
0
0
1
0
0
1
0
0
Bit für Wert 3
(Realschule)
0
0
1
0
0
0
0
0
0
0
Bit für Wert 4
(Gymnasium)
0
1
0
0
0
1
0
0
1
1
Bit für Wert 5
(Studium)
0
0
1
0
0
0
1
0
0
0
Abfragen sind davon unberührt, wirken jedoch wesentlich schneller. Ein Bitmap wird für die Tabellen
über den Punkt „Configuration“ im Kontextmenu definiert.
Create BITMAP Index "IND_BILDUNG"
ON "KUNDE"(
"BILDUNG");
Abfragebeispiel:
select nachname from kunde where bildung = 3
 Tip:
Das Erstellen eines Bitmap-Index ist nur bei
kleinen Wertevorkommen sinnvoll, wenn die
Anzahl der unterschiedlichen Werte kleiner als
2% der Recordanzahl ist.
Dies ist verständlich, denn für jeden möglichen
Wert wird ein eigener Index vorgehalten. Auf das
Feld „Name“ einer Kundentabelle würde es z. B.
keinen Sinn ergeben.
Bitmap-Join-Index
Die Technik kann auch auf die Joins in einem Starschema ausgeweitet werden. Hier sind die Werte
von Columns einer Dimension mit der Bitliste zu indizieren. Jede Referenz eines Dimensionswertes zu
einem Rekord der Faktentabelle stellt eine 1 in der Bitmap-Liste dar.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
.
.
.
.
.
.
.
Oracle Warehouse step-by-step
262/300
Beispiel:
In einer Dimension wird für das Feld „Ort“ Bitmap-Index gelegt.
Eine Join-Abfrage auf Dimensions- und Faktensätze mit einer Einschränkung über dieses Feld wird
jetzt schneller Ergebnisse liefern, weil die Faktentabelle selbst nicht mehr gelesen werden muss.
Die Definition:
CREATE BITMAP INDEX Ind_Umsatz_bit on Umsatz (region.Orte)
From Umsatz, Region
where umsatz.fk_ort = Region.PK_Region;
Wächst der Index in größeren Systemen, so kann der Bitmap-Index noch zusätzlich partitioniert
werden.
Bitmap-Index oder Join-Bitmap-Index?
In dem Beispiel indiziert man die Werte aus der Column „Orte“. Ist „Orte“ gleichzeitig die
indentifizierende Column des untersten Levels der Dimension, so ist das Feld identisch mit dem
entsprechenden Foreign Key in der Faktentabelle (1:N – Beziehung von Regionendimension und
Faktentabelle). D. h. wir können das Verfahren vereinfachen, indem auf die entsprechenden PrimaryKey-Bestandteile der Faktentabelle ein Bitmap-Index gesetzt wird.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
263/300
Empfehlungen zum Optimieren von Ladeläufen
Die folgenden Beispiele beziehen sich auf folgende Tabelle:
CREATE TABLE "AA" (
"ARTIKEL_ID" NUMBER(10),
"BESTELLMENGE" NUMBER(9),
"KUNDEN_ID" NUMBER(10),
"ORT_ID" NUMBER(10),
"UMSATZWERT" NUMBER(9),
"ZEIT_ID" NUMBER(7),
"ZEIT_PARTITION" NUMBER(5))
NOLOGGING;
NOLOGGING
Grundsätzlich ist das Arbeiten mit NoLogging-Tabellen schneller. In einer Warehouse-Umgebung
muss
nicht
mit
Logging
gearbeitet
werden.
Erzeugen
der
Tabellen
mit
NOLLOGING:
CREATE TABLE "tablename"
(
"F1" NUMBER(10),
"F2" NUMBER(9)
)
NOLOGGING ;
In Teilschritten arbeiten
laden in mehreren kleinen Schritten ist u. U. schneller als eine große Tabelle komplett zu beschreiben,
-> Ausnutzen der Partitionierung (Erstellen einzelner Partitionen und Partition Exchange)
CTAS
Tabellen laden mit CREATE TABLE table AS SELECT * FROM source_table; ist schneller als das
Beschreiben der Zieltabelle mit INSERT INTO table SELECT * FROM source_table;
Bei Tabellen, die bereits bestehen, sollte überlegt werden, ob die Zieltabelle partitioniert werden kann.
Der hinzuzufügende Teil stellt dann eine neue Partition dar, die über eine zuvor mit CTAS erstellte
temporäre Tabelle und Partition Exchange angefügt wird. Die folgenden Zahlen auf einem 1 CPU
Win2000 System mit 600 MHZ belegen das Verhalten:
Hinzuführen von Anzahl Sätzen
310.000 in leere Tabelle
723.552 in leere Tabelle
723.552 in Tabelle mit 723.552
bestehenden Sätzen
1.447.104 in leere Tabelle
Insert in bestehende Tabelle
13 sec
27 sec
36 sec
1:08 Min
CTAS
8 sec
20 sec
PEL
Verfahren
20 Sec CTAS + 1 Sec PEL
41 sec
Ohne Constraints arbeiten (Aus/Einschalten)
Nach Möglichkeit ohne Contraints arbeiten. Oft wurde bereits im Verlauf der Transformation und
Transport in die Warehouse-Datenhaltung die Richtigkeit der Daten geprüft.
Beispiel Ausschalten von Constraints:
ALTER TABLE "DW"."KUNDE"
DISABLE CONSTRAINT "PK_KD"
ALTER TABLE "DW"."KUNDE"
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
264/300
enable CONSTRAINT "PK_KD"
Analyze
Mit Analyze arbeiten hilft dem Cost Based Optimizer.
Beispiel:
Tabelle mit 1.447.104 Sätzen
Abfrage select count(distinct Ort_ID) from bb;
-> ANALYZE TABLE "BB" COMPUTE STATISTICS;
Ohne Analyze
7.02 sec
Mit Analyze
6.08 sec
Bitmap
Mit Bitmap Index vor allem bei COUNT-Abfragen arbeiten.
Create BITMAP Index "BB_ORT_BITMAP"
ON "BB"
(Ort_ID)
TABLESPACE "INDX"
PARALLEL
NOLOGGING
;
Tabelle mit 1.447.104 Sätzen
Abfrage select count(distinct Ort_ID) from bb;
Ohne Analyze
Mit Analyze
Stand/letzte Änderung 13.05.2016
7.02 sec
3.00 sec
(in Arbeit)
75875104
Oracle Warehouse step-by-step
265/300
Analytische Funktionen in der Datenbank
°°°° Noch nicht überarbeitet °°°°°
Die Datenbank Oracle 9 liefert eine Reihe von Standardfunktionen, mit denen Analyseaktivitäten
bereits innerhalb der Datenbank durchführbar sind. Damit ist es möglich Frontend- Werkzeuge z. T.
erheblich zu entlasten.
Rank Top 10
Anforderung:
Liefere die 10 umsatzstärksten Artikel.
Select * from
(select
substr(A.Artikel,1,15),sum(U.umsatz) AS Wert,
RANK() OVER (ORDER BY sum(U.umsatz) DESC ) AS Rangfolge
from f_umsatz U,dim_artikel A
where U.artikel_ID = A.artikel_ID group by a.Artikel)
where rownum < 11;
Ergebnis
SUBSTR(A.ARTIKEL,1,15)
WERT RANGFOLGE
--------------------------------------------- ---------- ---------Teigmaschine
691200
1
Bohrmaschine_40
682560
2
Hydraulik_Wagen
648480
3
Wasservorratsbe
626880
4
AkkuSchrauber
440160
5
Rosenstrauch_1m
414680
6
Felgenkappen
408800
7
Kaffeemaschine_
401240
8
Stichsaege
384405
9
Zusatzlicht_Fro
361375
10
10 rows selected.
SQL>
Ranking innerhalb von Gruppen
Anforderung:
Liefere Liste aller Artikel nach Umsatzstärke innerhalb der jeweiligen Artikelgruppen
select substr(A.Artikel,1,15) as Artikel,
substr(A.Artikelgruppe,1,15) as Artikelgruppe,
sum(U.umsatz) AS Wert,
RANK() OVER (partition by a.Artikelgruppe ORDER BY sum(U.umsatz) DESC ) AS Rangfolge
from f_umsatz U,dim_artikel A where U.artikel_ID = A.artikel_ID group by a.Artikelgruppe,a.Artikel
order by A.Artikelgruppe;
ARTIKEL
--------------------------------------------Wasservorratsbe
Rosenstrauch_1m
Schubkarre
Kirschbauplanze
Pflanzbehaelter
Komposter
Beeteinfassunge
Spaten
Stand/letzte Änderung 13.05.2016
ARTIKELGRUPPE
WERT
--------------------------------------------- -------Gartenbedarf
626880
Gartenbedarf
414680
Gartenbedarf
356230
Gartenbedarf
342930
Gartenbedarf
264600
Gartenbedarf
239750
Gartenbedarf
195910
Gartenbedarf
168000
(in Arbeit)
RANGFOLGE
1
2
3
4
5
6
7
8
75875104
Oracle Warehouse step-by-step
Gartenschlauch
Holzblumenkaest
Rasenduenger
Hacke_5Kg
Rasenmischung
Schnittblumen
Holzpfosten
Bindeseil
Teigmaschine
Kaffeemaschine_
Kaffeemaschine_
Pfanne_30
Toster_antik
Pfanne_20
Topf_Guss_Gross
Topf_Guss_Klein
Toster_modern
Eierkocher
Butterschale_Gl
Ruehrschuessel
Weihnachsmann
Besen_Grob
Kehrschaufel
Eimer_10l
Aufnehmer
Bohrmaschine_40
AkkuSchrauber
Stichsaege
Heissluftpistol
Hammer_schwer
Amboss
Schraubendreher
Schraubenschlue
Kombizange
Wasserwaage_1m
Holzschauben_2K
Metallsaege
Hammer_50g
Kneifzange
Holzschraube_20
Schleifpapier_v
Hydraulik_Wagen
Felgenkappen
Zusatzlicht_Fro
Sitzauflage
Poliermittel
Universal_Wagen
Gluebirnen_Set
ErsteHilfekoffe
Fahrradhalter
Reinigungsfilte
Abschleppseil
Autatlas
KaelteSet
Oelfilter
Aufkleber_D
Reinigungstuech
266/300
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
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
134045
83590
80795
74640
72100
37830
36875
22515
691200
401240
358680
302910
271800
260100
235375
176625
169000
145540
92820
88440
83150
72550
43740
41000
20550
682560
440160
384405
312570
284580
281700
249900
208650
182000
125685
102115
95640
79100
43410
37275
22710
648480
408800
361375
319470
243075
241560
214240
183000
126635
89820
88465
81510
73250
44190
36350
23670
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Top 3 Artikel pro Artikelgruppe
Anforderung:
Liefere Liste der Top 3 Artikel nach Umsatzstärke pro Artikelgruppen
column Artikel format A25
column Artikelgruppe format A25
column Wert format 9999999
column Rangfolge format 99
select substr(Artikel,1,25) as Artikel,
substr(Artikelgruppe,1,25) as Artikelgruppe, Wert, Rangfolge
FROM
(select Artikel,
Artikelgruppe,
sum(U.umsatz) AS Wert,
RANK() OVER (partition by a.Artikelgruppe ORDER BY sum(U.umsatz) DESC ) AS Rangfolge
from f_umsatz U,dim_artikel A where U.artikel_ID = A.artikel_ID group by a.Artikelgruppe,a.Artikel
order by A.Artikelgruppe)
where Rangfolge < 4;
ARTIKEL
ARTIKELGRUPPE
WERT RANGFOLGE
------------------------- ------------------------- -------- --------Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Wasservorratsbehaelter
Rosenstrauch_1m
Schubkarre
Teigmaschine
Kaffeemaschine_Braun
Kaffeemaschine_Sievert
Bohrmaschine_400W
AkkuSchrauber
Stichsaege
Hydraulik_Wagenheber
Felgenkappen
Zusatzlicht_Front
267/300
Gartenbedarf
Gartenbedarf
Gartenbedarf
Haushaltswaren
Haushaltswaren
Haushaltswaren
Heimwerker
Heimwerker
Heimwerker
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
626880
414680
356230
691200
401240
358680
682560
440160
384405
648480
408800
361375
1
2
3
1
2
3
1
2
3
1
2
3
12 rows selected.
Anteile an einer Gruppe
Anforderung:
Welchen Anteil an dem Gesamtumsatz einer Artikelgruppe erwirtschaftet ein Artikel
column Artikel format A25
column Artikelgruppe format A25
column Wert format 9999999
column Proportion format 99.99
select substr(Artikel,1,25) as Artikel,
substr(Artikelgruppe,1,25) as Artikelgruppe, Wert, Proportion
FROM
(select Artikel,
Artikelgruppe,
sum(U.umsatz) AS Wert,
CUME_DIST() OVER (partition by a.Artikelgruppe ORDER BY sum(U.umsatz) ASC ) AS
Proportion
from f_umsatz U,dim_artikel A where U.artikel_ID = A.artikel_ID group by a.Artikelgruppe,a.Artikel
order by A.Artikelgruppe);
ARTIKEL
------------------------Bindeseil
Holzpfosten
Schnittblumen
Rasenmischung
Hacke_5Kg
Rasenduenger
Holzblumenkaest
Gartenschlauch
Spaten
Beeteinfassungen
Komposter
Pflanzbehaelter
Kirschbauplanze
Schubkarre
Rosenstrauch_1m
Wasservorratsbehaelter
Aufnehmer
Eimer_10l
Kehrschaufel
Besen_Grob
Weihnachsmann
Ruehrschuessel
Butterschale_Glas
Eierkocher
Toster_modern
Topf_Guss_Klein
Topf_Guss_Gross
Pfanne_20
Toster_antik
Pfanne_30
Kaffeemaschine_Sievert
Kaffeemaschine_Braun
ARTIKELGRUPPE
WERT PROPORTION
------------------------- -------- ---------Gartenbedarf
22515
.06
Gartenbedarf
36875
.13
Gartenbedarf
37830
.19
Gartenbedarf
72100
.25
Gartenbedarf
74640
.31
Gartenbedarf
80795
.38
Gartenbedarf
83590
.44
Gartenbedarf
134045
.50
Gartenbedarf
168000
.56
Gartenbedarf
195910
.63
Gartenbedarf
239750
.69
Gartenbedarf
264600
.75
Gartenbedarf
342930
.81
Gartenbedarf
356230
.88
Gartenbedarf
414680
.94
Gartenbedarf
626880
1.00
Haushaltswaren
20550
.06
Haushaltswaren
41000
.12
Haushaltswaren
43740
.18
Haushaltswaren
72550
.24
Haushaltswaren
83150
.29
Haushaltswaren
88440
.35
Haushaltswaren
92820
.41
Haushaltswaren
145540
.47
Haushaltswaren
169000
.53
Haushaltswaren
176625
.59
Haushaltswaren
235375
.65
Haushaltswaren
260100
.71
Haushaltswaren
271800
.76
Haushaltswaren
302910
.82
Haushaltswaren
358680
.88
Haushaltswaren
401240
.94
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Teigmaschine
Schleifpapier_versch_Sort
Holzschraube_200g
Kneifzange
Hammer_50g
Metallsaege
Holzschauben_2Kg
Wasserwaage_1m
Kombizange
SchraubenschluesselSet
Schraubendreher_Set
Amboss
Hammer_schwer
Heissluftpistole
Stichsaege
AkkuSchrauber
Bohrmaschine_400W
Reinigungstuecher
Aufkleber_D
Oelfilter
KaelteSet
Autatlas
Abschleppseil
Reinigungsfilter
Fahrradhalter
ErsteHilfekoffer
Gluebirnen_Set
Universal_Wagenheber
Poliermittel
Sitzauflage
Zusatzlicht_Front
Felgenkappen
Hydraulik_Wagenheber
Haushaltswaren
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
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
268/300
691200
22710
37275
43410
79100
95640
102115
125685
182000
208650
249900
281700
284580
312570
384405
440160
682560
23670
36350
44190
73250
81510
88465
89820
126635
183000
214240
241560
243075
319470
361375
408800
648480
1.00
.06
.13
.19
.25
.31
.38
.44
.50
.56
.63
.69
.75
.81
.88
.94
1.00
.06
.13
.19
.25
.31
.38
.44
.50
.56
.63
.69
.75
.81
.88
.94
1.00
65 rows selected.
SQL>
Kumulierte Anteile
Anforderung:
Erstelle eine Liste der Quartalsumsätze pro Kunde. Kumuliere die Quartalsumsätze in einer separaten
Spalte.
column Kunde format A25
column Umsatz format 9999999.99
column Umsatz_Summe format 9999999.99
select substr(k.kunden_Name,1,25) as kunde,
z.jahr,
z.quartal_des_jahr as Quartal,
sum(u.umsatz) as Umsatz,
sum(sum(u.umsatz))
over
(Partition
By
k.kunden_Name
k.kunden_Name,z.jahr,z.quartal_des_jahr
ROWS UNBOUNDED PRECEDING) as Umsatz_Summe
from dim_kunde K,f_Umsatz U, dim_zeit Z
where
k.kunde_id = u.kunde_id and
to_char(Z.Datum) = to_char(u.Datum)
group by K.kunden_Name,z.jahr,z.quartal_des_jahr;
ORDER
BY
KUNDE
JAHR
QUARTAL
UMSATZ UMSATZ_SUMME
------------------------- ---------- ---------- ----------- -----------BASF Farben und Lacke
1997
3
3765.00
3765.00
BASF Farben und Lacke
1999
4
1000.00
4765.00
BASF Farben und Lacke
2000
4
1815.00
6580.00
Baumeister
1997
1
70645.00
70645.00
Baumeister
1997
2
80795.00
151440.00
Baumeister
1997
3
45305.00
196745.00
Baumeister
1997
4
39115.00
235860.00
Baumeister
1998
1
57730.00
293590.00
Baumeister
1998
2
75865.00
369455.00
Baumeister
1998
3
35060.00
404515.00
Baumeister
1998
4
77160.00
481675.00
Baumeister
1999
1
60935.00
542610.00
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
Baumeister
269/300
1999
1999
1999
2000
2000
2000
2000
2001
2001
2001
2001
2002
2
3
4
1
2
3
4
1
2
3
4
1
59255.00
90045.00
79870.00
76755.00
62825.00
78070.00
80915.00
97485.00
70890.00
68810.00
93530.00
6285.00
601865.00
691910.00
771780.00
848535.00
911360.00
989430.00
1070345.00
1167830.00
1238720.00
1307530.00
1401060.00
1407345.00
Segmentieren von Gruppen (Kunden)
Anforderung:
Sortieren alle Kunden nach Umsatz und segmentiere sie gleich große Gruppen mit umsatzstarken und
umsatzschwachen Kunden.
25% der Kunden erzielen wie viel % des Gesamtumsatzes.
1. Zuordnung in gleich große Gruppen nachdem die Kunden nach Umsatz sortiert wurden
column Kunde format A25
column Umsatz format 9999999.99
select substr(k.kunden_Name,1,25) as kunde,
sum(u.umsatz) as Umsatz,
ntile(4) over (order by sum(u.umsatz)) as Anteil
from dim_kunde K,f_Umsatz U
where
k.kunde_id = u.kunde_id
group by K.kunden_Name;
KUNDE
UMSATZ
ANTEIL
------------------------- ----------- ---------Kaufhof
815.00
1
Ingenieurbüro Lummerbach
1425.00
1
Siemens AG
1445.00
1
Handelshaus KG
1755.00
1
Ingenieurbüro Kesselbach
3120.00
1
Transport Union Darmstadt
4110.00
1
Gustavson GmbH
4765.00
1
Grund- und Bodenanstalt
5855.00
2
Salamander AG Stuttgart
6545.00
2
BASF Farben und Lacke
6580.00
2
Hüsken Co KG
6880.00
2
Deutsche Bundebahn
8515.00
2
Tiemann und Söhne KG
9765.00
2
Natrium Kolmar
10915.00
2
Gerber KG
11235.00
3
Wienerwald
14930.00
3
Schrieder
1160570.00
3
Eberlein
1243150.00
3
Glas
1271120.00
3
1284110.00
3
Bauer
1338455.00
4
Schiller
1359660.00
4
Schmidt
1365465.00
4
Bach
1386595.00
4
Schubert
1395680.00
4
Baumeister
1407345.00
4
26 rows selected.
2. Summieren aller Umsätze innerhalb einer Gruppe
column Kunde format A25
column Umsatz format 9999999.99
select sum(umsatz), anteil from
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
270/300
(select substr(k.kunden_Name,1,25) as kunde,
sum(u.umsatz) as Umsatz,
ntile(4) over (order by sum(u.umsatz)) as Anteil
from dim_kunde K,f_Umsatz U
where
k.kunde_id = u.kunde_id
group by K.kunden_Name)
group by anteil;
SUM(UMSATZ)
ANTEIL
----------- ---------17435
1
55055
2
4985115
3
8253200
4
2. Anwenden einer Prozentrechnung
column Kunde format A25
column Umsatz format 9999999.99
column Prozent format 999.99
select sum(umsatz), anteil,
(sum(umsatz)*100/Gesamt_umsatz) as Prozent
from
(select substr(k.kunden_Name,1,25) as kunde,
sum(u.umsatz) as Umsatz,
ntile(4) over (order by sum(u.umsatz)) as Anteil
from dim_kunde K,f_Umsatz U
where
k.kunde_id = u.kunde_id
group by K.kunden_Name),
(select sum(u.umsatz) as Gesamt_Umsatz from f_Umsatz U)
group by anteil,Gesamt_umsatz;
SUM(UMSATZ)
ANTEIL PROZENT
----------- ---------- ------17435
1
.13
55055
2
.41
4985115
3
37.42
8253200
4
61.95
=> ¼ der Kunden liefern fast 62% des Gesamtumsatzes
Moving Average
Anforderung:
Miss den 3-Monats-Durchschnitt des Umsatzes mit einem bestimmten Kunden und verfolge diesen
Wert über die gesamte Geschäftsbeziehung hinweg.
Hier ist ein rollierendes Zeitfenster von 3 Monaten gefordert.
column Kunde format A10
column Mon format 99
column Jahr format 9999
column Umsatz format 9999999.99
column Mov_3M_AVG format 9999999.99
select substr(k.kunden_Name,1,25) as kunde,
z.jahr as Jahr,
Monat_des_jahres as Mon,
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
271/300
sum(u.umsatz) as Umsatz,
avg(sum(u.umsatz)) over
(order by K.kunden_Name,z.jahr,z.Monat_des_jahres Rows 2 Preceding)
as Mov_3M_AVG
from dim_kunde K,f_Umsatz U, dim_zeit Z
where
k.kunde_id = u.kunde_id and
to_char(Z.Datum) = to_char(u.Datum) and
k.kunden_name = 'Bauer'
group by K.kunden_Name,z.jahr,z.Monat_des_jahres
order by z.jahr,z.Monat_des_jahres;
KUNDE
JAHR MON
UMSATZ MOV_3M_AVG
---------- ----- --- ----------- ----------Bauer
1997
1
37310.00
37310.00
Bauer
1997
2
17040.00
27175.00
Bauer
1997
3
23310.00
25886.67
Bauer
1997
4
15820.00
18723.33
Bauer
1997
5
18040.00
19056.67
Bauer
1997
6
36925.00
23595.00
Bauer
1997
7
18585.00
24516.67
Bauer
1997
8
21515.00
25675.00
Bauer
1997
9
16545.00
18881.67
Bauer
1997 10
17515.00
18525.00
Bauer
1997 11
24850.00
19636.67
Bauer
1997 12
22855.00
21740.00
Bauer
1998
1
27235.00
24980.00
Bauer
1998
2
21855.00
23981.67
Bauer
1998
3
12880.00
20656.67
Bauer
1998
4
41230.00
25321.67
Bauer
1998
5
23005.00
25705.00
Bauer
1998
6
16000.00
26745.00
Bauer
1998
7
18640.00
19215.00
Bauer
1998
8
23280.00
19306.67
Bauer
1998
9
20780.00
20900.00
Bauer
1998 10
30115.00
24725.00
Bauer
1998 11
22495.00
24463.33
Bauer
1998 12
43940.00
32183.33
Bauer
1999
1
19140.00
28525.00
......
Mehrfachverarbeitung innerhalb eines Kommandos – Reporting
Aggregate Functions
Anforderung:
Liste für jede Artikelgruppe das Bundesland mit dem höchsten Umsatz auf.
Zunächst die Liste aller Produktgruppen-Umsätze pro Bundesland:
column ArtGr format A20
column Land format A20
column Umsatz format 9999999.99
select ARTIKELGRUPPE as ArtGr ,
BUNDESLAND as Land ,
sum(umsatz) as Umsatz
from dim_region R, dim_artikel A, f_umsatz U
where
R.ort_ID = U.ort_ID and
A.Artikel_ID = U.artikel_ID
group by ARTIKELGRUPPE ,BUNDESLAND
order by ARTIKELGRUPPE ,BUNDESLAND ;
ARTGR
-------------------Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
LAND
UMSATZ
-------------------- ----------Baden Wuerttemberg
214580.00
Bayern
459410.00
Brandenburg
349780.00
Hessen
78800.00
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Gartenbedarf
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
Heimwerker
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
Niedersachsen
Rheinland Pfalz
Saarland
Sachsen
Sachsen-Anhalt
Schleswig Holstein
Thueringen
Baden Wuerttemberg
Bayern
Brandenburg
Hessen
Niedersachsen
Rheinland Pfalz
Saarland
Sachsen
Sachsen-Anhalt
Schleswig Holstein
Thueringen
Baden Wuerttemberg
Bayern
Brandenburg
Hessen
Niedersachsen
Rheinland Pfalz
Saarland
Sachsen
Sachsen-Anhalt
Schleswig Holstein
Thueringen
Baden Wuerttemberg
Bayern
Brandenburg
Hessen
Niedersachsen
Rheinland Pfalz
Saarland
Sachsen
Sachsen-Anhalt
Schleswig Holstein
Thueringen
272/300
220990.00
508930.00
13900.00
170820.00
228425.00
225750.00
258485.00
230020.00
520775.00
359000.00
81055.00
252645.00
535205.00
15965.00
172895.00
296680.00
230880.00
268760.00
279895.00
524080.00
375295.00
94165.00
238985.00
530610.00
13295.00
215770.00
260620.00
261480.00
290055.00
245200.00
439560.00
336285.00
78950.00
207350.00
525570.00
7530.00
199280.00
222860.00
214240.00
269670.00
44 rows selected.
Jetzt die Reporting-Aktivität zu dieser Liste:
column ArtGr format A20
column Land format A20
column Umsatz format 9999999.99
select ArtGr , Land ,Umsatz from
(select ARTIKELGRUPPE as ArtGr ,
BUNDESLAND as Land ,
sum(umsatz) as Umsatz,
max(sum(umsatz)) over (partition by ARTIKELGRUPPE) as Max_Ums_Land
from dim_region R, dim_artikel A, f_umsatz U
where
R.ort_ID = U.ort_ID and
A.Artikel_ID = U.artikel_ID
group by ARTIKELGRUPPE ,BUNDESLAND
order by ARTIKELGRUPPE ,BUNDESLAND )
where Umsatz = Max_Ums_Land ;
ARTGR
-------------------Gartenbedarf
Haushaltswaren
Heimwerker
KFZ-Zubehoer
LAND
UMSATZ
-------------------- ----------Rheinland Pfalz
508930.00
Rheinland Pfalz
535205.00
Rheinland Pfalz
530610.00
Rheinland Pfalz
525570.00
Vorjahresvergleiche
Anforderung:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
273/300
Erstelle eine Liste mit aktuellen und Vorjahresumsätzen.
column Kunde format A10
column Mon format 99
column Jahr format 9999
column Umsatz format 9999999.99
column vorjahr format 9999999.99
break on kunde on jahr skip 1
select substr(k.kunden_Name,1,25) as kunde,
z.jahr as Jahr,
Monat_des_jahres as Mon,
sum(u.umsatz) as Umsatz,
lag(sum(u.umsatz),12) over (order by z.jahr,z.Monat_des_jahres) as vorjahr
from dim_kunde K,f_Umsatz U, dim_zeit Z
where
k.kunde_id = u.kunde_id and
to_char(Z.Datum) = to_char(u.Datum) and
k.kunden_name = 'Bauer'
group by K.kunden_Name,z.jahr,z.Monat_des_jahres
order by z.jahr,z.Monat_des_jahres;
KUNDE
JAHR MON
UMSATZ
VORJAHR
---------- ----- --- ----------- ----------Bauer
1997
1
74620.00
2
34080.00
3
46620.00
4
31640.00
5
36080.00
6
73850.00
7
37170.00
8
43030.00
9
33090.00
10
35030.00
11
49700.00
12
45710.00
1998
1
2
3
4
5
6
7
8
9
10
11
12
54470.00
43710.00
25760.00
82460.00
46010.00
32000.00
37280.00
46560.00
41560.00
60230.00
44990.00
87880.00
74620.00
34080.00
46620.00
31640.00
36080.00
73850.00
37170.00
43030.00
33090.00
35030.00
49700.00
45710.00
1999
1
2
3
4
5
6
7
8
9
10
11
12
38280.00
35660.00
33170.00
53300.00
29740.00
40270.00
57550.00
45870.00
17320.00
35160.00
53250.00
46190.00
54470.00
43710.00
25760.00
82460.00
46010.00
32000.00
37280.00
46560.00
41560.00
60230.00
44990.00
87880.00
2000
1
2
3
4
5
6
7
8
9
10
18290.00
76420.00
41870.00
75070.00
77570.00
62710.00
51490.00
33050.00
55380.00
52750.00
38280.00
35660.00
33170.00
53300.00
29740.00
40270.00
57550.00
45870.00
17320.00
35160.00
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
274/300
11
12
13300.00
6970.00
53250.00
46190.00
2001
1
2
3
4
5
6
7
8
9
10
11
12
33360.00
21610.00
35120.00
13440.00
77900.00
19790.00
35660.00
25400.00
70430.00
44390.00
32840.00
15660.00
18290.00
76420.00
41870.00
75070.00
77570.00
62710.00
51490.00
33050.00
55380.00
52750.00
13300.00
6970.00
2002
1
57150.00
33360.00
61 rows selected.
Anforderung:
Wieviel Prozentanteile des Umsatzes vom Vorjahr ist erreicht
column Kunde format A10
column Mon format 99
column Jahr format 9999
column Umsatz format 9999999.99
column vorjahr format 9999999.99
column Prozent format 999
break on kunde on jahr skip 1
select kunde, jahr, mon, umsatz, vorjahr,
umsatz*100/vorjahr as Prozent
from
(select substr(k.kunden_Name,1,25) as kunde,
z.jahr as Jahr,
Monat_des_jahres as Mon,
sum(u.umsatz) as Umsatz,
lag(sum(u.umsatz),12) over (order by z.jahr,z.Monat_des_jahres) as vorjahr
from dim_kunde K,f_Umsatz U, dim_zeit Z
where
k.kunde_id = u.kunde_id and
to_char(Z.Datum) = to_char(u.Datum) and
k.kunden_name = 'Bauer'
group by K.kunden_Name,z.jahr,z.Monat_des_jahres
order by z.jahr,z.Monat_des_jahres);
KUNDE
JAHR MON
UMSATZ
VORJAHR PROZENT
---------- ----- --- ----------- ----------- ------Bauer
1997
1
74620.00
2
34080.00
3
46620.00
4
31640.00
5
36080.00
6
73850.00
7
37170.00
8
43030.00
9
33090.00
10
35030.00
11
49700.00
12
45710.00
1998
1
2
3
4
5
6
54470.00
43710.00
25760.00
82460.00
46010.00
32000.00
Stand/letzte Änderung 13.05.2016
74620.00
34080.00
46620.00
31640.00
36080.00
73850.00
73
128
55
261
128
43
(in Arbeit)
75875104
Oracle Warehouse step-by-step
275/300
7
8
9
10
11
12
37280.00
46560.00
41560.00
60230.00
44990.00
87880.00
37170.00
43030.00
33090.00
35030.00
49700.00
45710.00
100
108
126
172
91
192
1999
1
2
3
4
5
6
7
8
9
10
11
12
38280.00
35660.00
33170.00
53300.00
29740.00
40270.00
57550.00
45870.00
17320.00
35160.00
53250.00
46190.00
54470.00
43710.00
25760.00
82460.00
46010.00
32000.00
37280.00
46560.00
41560.00
60230.00
44990.00
87880.00
70
82
129
65
65
126
154
99
42
58
118
53
2000
1
2
3
4
5
6
7
8
9
10
11
12
18290.00
76420.00
41870.00
75070.00
77570.00
62710.00
51490.00
33050.00
55380.00
52750.00
13300.00
6970.00
38280.00
35660.00
33170.00
53300.00
29740.00
40270.00
57550.00
45870.00
17320.00
35160.00
53250.00
46190.00
48
214
126
141
261
156
89
72
320
150
25
15
2001
1
2
3
4
5
6
7
8
9
10
11
12
33360.00
21610.00
35120.00
13440.00
77900.00
19790.00
35660.00
25400.00
70430.00
44390.00
32840.00
15660.00
18290.00
76420.00
41870.00
75070.00
77570.00
62710.00
51490.00
33050.00
55380.00
52750.00
13300.00
6970.00
182
28
84
18
100
32
69
77
127
84
247
225
2002
1
57150.00
33360.00
171
61 rows selected.
Rollup-Option
Ausgeworfen wird für jede Aggregationsebene eine zusätzliche Summenzeile als Zusammenfassung
Beispiel:
select A.Artikelgruppe,Region,Bundesland,substr(kreis,1,20),sum(u.UMSATZWERT)
from Dim_artikel A, f_umsatz U, Dim_region R
where U.ARTIKEL_ID = A.Artikel_ID and
R.Ort_Id = U.Ort_ID and
bundesland = 'Schleswig Holstein'
group by Artikelgruppe,rollup (Region,bundesland,kreis);
Ergebnis:
.
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Haushaltswaren
Stand/letzte Änderung 13.05.2016
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Holst
Holst
Holst
Holst
Holst
Holst
Holst
(in Arbeit)
Ploen
Rendsburg-Ecker
Schleswig-Flens
Segeberg
Steinburg
Stormarn
2686
3457
6763
1027
5990
1724
39903
39903
75875104
Oracle Warehouse step-by-step
Haushaltswaren
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
70 Zeilen ausgewählt.
SQL>
276/300
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Nordfriesland
Ostholstein
Pinneberg
Ploen
Rendsburg-Ecker
Schleswig-Flens
Segeberg
Steinburg
Stormarn
39903
6433
1050
1038
2127
3518
3355
423
3934
2165
38971
38971
38971
Cube-Option
Bei der Erstellung der Summenergebnisse werden alle Kombinationsmöglichkeiten der beteiligten
Dimensionen/Level berücksichtigt.
Beispiel:
select A.Artikelgruppe,Region,substr(Bundesland,1,15),substr(kreis,1,15),sum(u.UMSATZWERT)
from Dim_artikel A, f_umsatz U, Dim_region R
where U.ARTIKEL_ID = A.Artikel_ID and
R.Ort_Id = U.Ort_ID and
bundesland = 'Schleswig Holstein'
group by cube (Artikelgruppe,Region,bundesland,kreis);
Ergebnisauswurf (Ausschnitt)
......
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
KFZ-Zubehoer
Ostholstein
Ploen
Rendsburg-Ecker
Schleswig-Flens
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Nord
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Schleswig
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Holst
Dithmarschen
Pinneberg
Rendsburg-Ecker
Segeberg
Stormarn
Herzogtum Lauen
Nordfriesland
Ostholstein
Pinneberg
Rendsburg-Ecker
Schleswig-Flens
Steinburg
Stormarn
Dithmarschen
Herzogtum Lauen
Nordfriesland
Pinneberg
Ploen
Rendsburg-Ecker
Schleswig-Flens
Steinburg
Stormarn
Dithmarschen
Nordfriesland
Ostholstein
Pinneberg
Rendsburg-Ecker
Stormarn
1050
2127
3518
3355
38971
131797
8429
157944
14061
87019
1558801
273244
208311
6175
8429
157944
258416
217879
87019
131797
273244
208311
8429
195526
157944
258416
217879
87019
131797
208311
6175
8429
157944
87019
1558801
288 Zeilen ausgewählt.
Grouping Sets
Hier wird nur eine Teilmenge der möglichen Aggregationen ausgewält.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
277/300
Grouping-Sets sind sehr praktisch, weil man hier zielgenaunur die gewünschten Aggregationen
erreicht.
Beispiel:
select Region,substr(Bundesland,1,15),substr(kreis,1,15),
substr(Artikelgruppe,1,10),sum(u.UMSATZWERT),
grouping(Artikelgruppe) as AG,
grouping(Bundesland) as BL
from Dim_artikel A, f_umsatz U, Dim_region R
where U.ARTIKEL_ID = A.Artikel_ID and
R.Ort_Id = U.Ort_ID and
bundesland = 'Schleswig Holstein'
group by grouping sets (Region,Artikelgruppe,bundesland,kreis)
order by region,bundesland,kreis,artikelgruppe
/
Nord
Schleswig Holst
Dithmarschen
Herzogtum Lauen
Nordfriesland
Ostholstein
Pinneberg
Ploen
Rendsburg-Ecker
Schleswig-Flens
Segeberg
Steinburg
Stormarn
Computerte
Gartenbeda
Haushaltsw
Heimwerker
KFZ-Zubeho
1558801
1558801
131797
273244
208311
6175
8429
195526
157944
258416
14061
217879
87019
1405195
35066
39903
39666
38971
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2843085
13465
160211
131797
111388
6707
273244
269971
108684
45075
208311
141309
127942
6175
85656
151772
8429
195526
157944
34628
258416
14061
217879
87019
27476
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
18 Zeilen ausgewählt.
SQL>
2. Beispiel:
select Region,substr(kreis,1,15),
sum(u.UMSATZWERT),
grouping(Region) as RE
from f_umsatz U, Dim_region R
where R.Ort_Id = U.Ort_ID and
region = 'Nord'
group by grouping sets (Region,kreis)
order by region,kreis;
Nord
Bad Doberan
Demmin
Dithmarschen
Guestrow
Hamburg, Freie
Herzogtum Lauen
Ludwigslust
Mecklenburg-Str
Mueritz
Nordfriesland
Nordvorpommern
Nordwestmecklen
Ostholstein
Ostvorpommern
Parchim
Pinneberg
Ploen
Rendsburg-Ecker
Ruegen
Schleswig-Flens
Segeberg
Steinburg
Stormarn
Uecker-Randow
25 Zeilen ausgewählt.
Komplexeres Beispiel
Beispieltabelle:
create table months
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
278/300
(month date,
value number(10,2)
);
Abfrage:
break on year skip 1
column year noprint
column value format 9999999
column cy_movsum heading 'Calendar Year|Moving Sum' format 9999999
column cy_movavg heading 'Calendar Year|Moving Average' format 9999999
column fy_movsum heading 'Fiscal Year|Moving Sum' format 9999999
column fy_movavg heading 'Fiscal Year|Moving Average' format 9999999
select to_char(month, 'YYYY') "Year",
to_char(month, 'MON-YYYY') "Date",
value "Value",
sum(value) over (partition by to_char(month, 'YYYY') order by month
range between unbounded preceding and current row) cy_movsum,
avg(value) over (partition by to_char(month, 'YYYY') order by month
range between unbounded preceding and current row) cy_movavg,
sum(value) over (partition by to_char(add_months(month,7), 'YYYY') order by month
range between unbounded preceding and current row) fy_movsum,
avg(value) over (partition by to_char(add_months(month,7), 'YYYY') order by month
range between unbounded preceding and current row) fy_movavg
from months
order by month
/
clear columns
clear breaks
Ergebnis:
Calendar Year Calendar Year Fiscal Year
Fiscal Year
Date
Value
Moving Sum Moving Average Moving Sum Moving Average
------------------------ -------- ------------- -------------- ----------- -------------JAN-1998
496
496
496
496
496
FEB-1998
1274
1770
885
1770
885
MAR-1998
2325
4095
1365
4095
1365
APR-1998
3165
7260
1815
7260
1815
MAY-1998
4216
11476
2295
11476
2295
JUN-1998
4995
16471
2745
4995
4995
JUL-1998
6107
22578
3225
11102
5551
AUG-1998
7068
29646
3706
18170
6057
SEP-1998
7755
37401
4156
25925
6481
OCT-1998
8959
46360
4636
34884
6977
NOV-1998
9585
55945
5086
44469
7412
DEC-1998
10850
66795
5566
55319
7903
JAN-1999
FEB-1999
MAR-1999
APR-1999
MAY-1999
JUN-1999
JUL-1999
AUG-1999
SEP-1999
OCT-1999
NOV-1999
DEC-1999
11811
11494
13640
14115
15531
15945
17422
18383
18705
20274
20535
22165
11811
23305
36945
51060
66591
82536
99958
118341
137046
157320
177855
200020
11811
11653
12315
12765
13318
13756
14280
14793
15227
15732
16169
16668
67130
78624
92264
106379
121910
15945
33367
51750
70455
90729
111264
133429
8391
8736
9226
9671
10159
15945
16684
17250
17614
18146
18544
19061
JAN-2000
FEB-2000
MAR-2000
APR-2000
MAY-2000
JUN-2000
23126
22504
24986
25095
26877
26925
23126
45630
70616
95711
122588
149513
23126
22815
23539
23928
24518
24919
156555
179059
204045
229140
256017
26925
19569
19895
20405
20831
21335
26925
30 rows selected.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
279/300
12. Testdatengenerator
Der Testdatengenerator hat die Aufgabe beliebig strukturierte und anonymisierte Daten in beliebiger
Menge für Testzwecken in den Datenbanktabellen bereitzustellen.
U. U. vergisst der Entwickler, dass bestimmte Zeichenkombinationen in den Quelldaten vorkommen
können. Der Testdatengenerator liefert beliebige darstellbare Zeichen. Nicht immer stehen Echtdaten
für Testzwecke zur Verfügung. Der Testdatengenerator erstellt Daten mit einer zu den Echtdaten
analogen Struktur aber dennoch zufällig. Warehouse-Systeme reizen häufen Systemgrenzen aus, sei
es Performance oder Speicherkapazität. Der Testdatengenerator produziert Daten beliebiger Menge
und dies sehr realitätsnah genau in der Struktur, in der auch das Warehouse aufgebaut ist.
Die Kombination eines Datenbank-nahen ETL-Werkzeuges wie dem Warehouse Builder mit einen
Testdatengenerator ist besonders geeignet, die Produktivität des Entwicklers zu steigern. Wenn der
Testdatengenerator zu dem noch offene Datenbankmittel benutzt, ist dies ideal.
Nutzen Testdatengenerator:
 anonymisierte Daten als Ersatz zu Echtdaten
 beliebig strukturierte Daten auch komplexe Strukturen (Master-Detail)
 ideales Add On zu OWB
 beliebig viele Daten zum Ausreizen der Systemgrenzen
Besondere Aufgabenstellung:
Der Entwicklungsprozess eines Data Warehouses kann komplex sein. Daher sollten zumindest die
Werkzeuge zur Erstellung des Systems sehr einfachen Grundideen folgen. Der Testdatengenerator ist
sehr einfach gebaut und schnell erlernbar.
Woraus besteht der Testdatengenerator:



OWB MDL Datei mit Beispiel-Tabellen, Funktionen, Prozeduren, Beispiel-Mappings
Flat Files mit deutschsprachigen Beispieleinträgen zu üblichen Tabellen wie sie vielen
Warehouse-Systemen vorkommen
Zu den Flat Files passende CREATE EXTERNAL TABLE Definitionen zum schnellen Einlesen
der Flat Files.
Die Funktionen
Function
Paramter
RAN_M_N
MIN_N, MAX_N,
number
decimals(optional)
Beschreibung
of
Returns a random number value between parameter1
and parameter2
The optional third parameter indicates the number of
digits behind the decimal point.
Rules:
If the second parameter has a lower value than the
first
the first parameter will be ignored and set to zero.
Maximum 7 digits
RAN_ABC_MIXED
N(optional)
Example:
select ran_M_N(1000,2000) from dual
Returns a number (parameter1) of letters in mixed
cases. Parameter1 is optional.
Max number of letters is 256
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
RAN_ABC123_MI
XED
N(optional)
280/300
(You get only upper or only lower cases with the SQLupper/lower function around this function.)
Returns a number (parameter1) of letters or digits in
mixed cases. Parameter1 is optional.
Max number of letters is 256
RAN_DATE_
RANGE_FROM
RANGE_TO
(You get only upper or only lower cases with the SQLupper/lower function around this function.)
Returns any date between Parameter1 and
Parameter2
Parameter1, Parameter2 are numbers and mean the
number of years.
Example:
Assumed this Day is 16-12-02
select ran_date_n(50,20) from dual
--> returns any date between 16-12-52 and
16-12-82
select ran_date_n(10,0) from dual
--> returns any date between 16-12-92 and
today
RAN_ VALUES
N,
values
Returns a number
parameter2.
(parameter1) of values of
With first parameter you specify the number of values
with the second one you can specify the values itsself.
Example:
Select ran_values(5,'.$567{Karl Gustav}') from dual;
Returns:
7 {al
a$va
.
su76
Max number of letters is 256.
RAN_WORDS
WORD_DELIMITER,
Words
(You get upper or lower cases only with the SQLupper/lower function around this function. )
Returns a word (parameter2) of range of words
(parameter2).
With first parameter you specify a seperator for the list
of word of second paramter.
With second you specify a list of words seperated by
the separator sign defined in first parameter (last sign
must be the seperator itsself).
Example:
ran_WORDS('/','retail/IT/Medical/finance')
RAN_LK
TABLE_NAME
KEY_FIELD_NAME
VALUE_FIELD_NAME
Stand/letzte Änderung 13.05.2016
returns one of the words.
Returns random column values from a lookup table.
Parameter 1 : Name of lookup table
Parameter 2 : Name of column with the access key
Parameter 3 : Name of column with the values to
(in Arbeit)
75875104
Oracle Warehouse step-by-step
281/300
return
Example:
select RAN_LK('firstname','nr','vorname') from dual
Returns:
Klaus
Egon
Chris
Beispiel-Mapping:
In dem Beispiel-Mapping wird eine Kundentabelle mit beliebig vielen Sätzen erzeugt. Die
verschiedenen Columns erfordern unterschiedliche Wertestrukturen.
Sammlung von einfachen Zufallsgenerierungen z. B.
- Zahlenwerte von 1-10 als
Referenzcode für Berufsgruppe
- Zahlenwerte von 1000000-99999999 für Telefonnummern
usw.
Die Generierung der Werte für die einzelnen Columns erfolgt entweder über direkte Funktionsaufrufe
oder als Expression-Operatoren.
Generierung beliebiger Zahlenwerte:
Für einfache Wertestrukturen sind Funktionsaufrufe in dem Expression-Operator mit dem Namen
„Collection“ zusammengefasst. Mit der rechten Maustaste auf die einzelnen Outgrp-Felder gelangt
man zu den Definitionen:
Column
Funktionsaufruf
Telefon
Telefax
Branche
"RAN_M_N"(1, 99999)
"RAN_M_N"(1, 99999)
"RAN_M_N"(1, 9)
Berufsgruppe
"RAN_M_N"(1, 9)
Einkommensgruppe
"RAN_M_N"(1, 6)
Wohnart
"RAN_M_N"(1, 16)
Bildung
"RAN_M_N"(1, 9)
Firmenrabatt
"RAN_M_N"(1, 40)
Beschreibung
Beliebige Zahl von 1 bis 99999
Beliebige Zahl von 1 bis 99999
Werte von 1 bis 9 referenzieren
eine Codetabelle mit „Branchen“
Werte von 1 bis 9 referenzieren
eine
Codetabelle
mit
„Berufsgruppen“
Werte von 1 bis 6 referenzieren
eine
Codetabelle
mit
„Einkommensgruppen“
Werte
von
1
bis
16
referenzieren eine Codetabelle
mit „Wohnarten“
Werte von 1 bis 9 referenzieren
eine
Codetabelle
mit
„Bildungsabschlüssen“
Es entsteht ein einfacher Wert
von 1 bis 40
(Unter INGRP1 wird die Konstante „Del“ als Input-Parameter entgegengenommen. Dies ist nur eine
Hilfskonstruktion, weil OWB das Mapping sonst nicht generieren wird. Der Input-Parameter wird
tatsächlich nicht gebraucht.)
Generierung einfacher Buchstaben als feststehende Werte:
Für das Feld Status sind nur die Buchstaben „F“ (Firmenkunde) und „P“ (Privatkunde) erlaubt.
Wahlweise muss also der Buchstabe „F“ oder „P“ generiert werden.
Die Funktion „RAN_VALUES“ ist aus der Funktionsbibliothek in das Mapping geladen worden. Die
Versorgung der Aufruf-Prameter „Status“ und „Number_of_Status“ übernehmen die Konstanten
„Status“ (Wert „FP“) und „Number_of_Status“ (Wert „1“).
Generierung von Wörtern als feststehende Werte:
Für das Beispielfeld „Titel“ sind z. B. Werte wie „Dr.“, „Magister“, „Prof.“, „Pastor“ erlaubt.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
282/300
Die Funktion „RAN_WORDS“ generiert beliebig Begriffe, die ihr als Parameter übergeben werden. Die
einzelnen Wörter sind mit einem Stringdelimiter-Zeichen getrennt, der ebenfalls als Parameteraufruf
festgelegt
wird.
Der
Beispielaufruf
lautet
in
diesem
Fall:
'Dr./Magister/ /Prof./Pastor/'. Der Stringdelimiter ist das „/“-Zeichen.
Generierung von „VON/BIS“-Datumsbereichen:
Beispiel Geburtsdatum des Kunden. Wenn z. B. für Bankkunden ein Alter von 18 bis 70 Jahren
simuliert werden soll, so ist das Geburtsdatum zwischen Tagesdatum minus (18*365) und
Tagesdatum minus 88*365 Tagen zu wählen. Die ermöglicht die Funktion „RAN_DATE_N“ mit zwei
Datumsangaben als Aufrufparameter. Um die Formatangaben einfach zu halten, wird lediglich die
Anzahl der Jahre übergeben, also RAN_DATE_N(18,88).
Generierung von Werten aus einer großen Liste von Werten:
Beispiel ist das Erzeugen von Vornamen/Nachnamen aus einer Liste von beliebig
Vornamen/Nachnamen die in einer Tabelle gespeichert sind.
Dies ist eine wichtige und immer wieder vorkommende Anforderung: Bislang wurden als Quelle für die
Zufallswerte eine fest eingrenzbare Liste von Werten genutzt. Diese konnte sehr einfach als
Parameterliste einer Funktion übergeben werden. Oft sollen jedoch bestehende Datenbanktabellen
mit Tausenden von Sätzen als Quelle genutzt werden. Solche „Referenztabellen“ müssen mindesten
ein numerisches Codefeld (1 – n) und das eigentliche Wertefeld besitzen, z. B.:
1;Monika;0;Frau;
2;Sabine;0;Frau;
3;Elke;0;Frau;
4;Nicole;0;Frau;
5;Petra;0;Frau;
6;Claudia;0;Frau;
7;Susanne;0;Frau;
8;Annegret;0;Frau;
9;Michelle;0;Frau;
10;Vanessa;0;Frau;
11;Gudrun;0;Frau;
12;Helene;0;Frau;
13;Ortrud;0;Frau;
Aus der vorstehenden Wertetabelle können die erste und zweite Spalte genutzt werden. Die Funktion
RAN_LK liest mit dynamische SQL eine solche Wertetabelle aus. Sie stellt die Anzahl der
Tabellensätze fest und generiert einen Zufallswert aus dem Bereich „0“ bis „max. Anzahl Sätze“
(count(*)). Die Funktion bedarf als Aufrufparameter den Namen der Tabelle, den Namen der CodeSpalte und den Namen der Spalte mit den eigentlichen Werten. Die Tabelle muss eine echte Tabelle
und darf keine External Table sein.
Wie entstehen die Sätze und wie wird deren Anzahl festgelegt:
Der Warehouse Builder nutzt reines SQL zum Laden und Erzeugen von Sätzen in Zieltabellen. Er
nutzt
die
einfache
Form:
INSERT
INTO
zieltabelle
SELECT
f1,f2
FROM
quelltabelle
WHERE
bedingung;
Über dieses SQL-Kommando entstehen auch die Testsätze des Testdatengenerators. Das Mapping
visualisiert das Kommando. Alle Bestandteile des Kommandos entstehen durch Operatoren die das
Mapping graphisch darstellt. Da bei der Simulation des Testdatengenerators keine echten Quellsätze
zur Verfügung stehen, müssen diese simuliert werden. Die Rolle der Quelltabelle übernimmt die
Hilfstabelle TRIGGER_TABLE. Sie besteht aus einer einzigen Spalte und 1 bis n Sätzen mit
fortlaufenden Zahlenwerten (1 – n). Diese Tabelle wird nur gebraucht, um in der FROM-Klausel einen
Tabellennamen verwenden zu können. Weil die Tabelle aber tatsächlich 1 – n Sätze beinhaltet,
generiert die Datenbank ein internes Set an Sätzen (SELECT), und reicht es an das folgende INSERT
zur Bildung der eigentlichen Zielsätze. Wie in dem Beispiel-Mapping zu sehen ist, kann die Column
der Trigger_Tabelle als laufende Nummer in der Zieltabelle genutzt werden. Dies ist allerdings nur
optional. In dem SELECT-Zweig können jetzt beliebig viele der oben vorgestellten RANDOMFunktionen eingebaut werden. Die Anzahl der Zielsätze ist über die WHERE-Klausel festlegbar. Das
Beispiel-Mapping verwendet hierzu den Filter-Operator.
Beispielgenerierung:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
283/300
INSERT
/*+ APPEND PARALLEL("TESTKUNDE", DEFAULT, DEFAULT)*/
INTO
"TESTKUNDE"
("KUNDENNR",
"GESCHLECHT",
"VORNAME",
"NACHNAME",
"TITEL",
"ANREDE",
"GEBDAT",
"BRANCHE",
"WOHNART",
"BILDUNG",
"ANZ_KINDER",
"EINKOMMENSGRUPPE",
"BERUFSGRUPPE",
"STATUS",
"TELEFON",
"TELEFAX",
"FIRMENRABATT")
(SELECT
"TRIGGER_TABLE"."Z" "Z",
"RAN_WORDS"((FULLPACKAGENAME."CONST_DEL"),(FULLPACKAGENAME."CONST_GESCHLECHT")) "RESULT",
"RAN_LK"((FULLPACKAGENAME."CONST_TABLE_1"),(FULLPACKAGENAME."CONST_KEYFIELD"),(FULLPACKAGENAME
."CONST_VALUEFIELD")) "Result",
"RAN_LK"((FULLPACKAGENAME."CONST_TABLE_1$0"),(FULLPACKAGENAME."CONST_KEY"),(FULLPACKAGENAME."C
ONST_VALUE")) "Result$0",
"RAN_WORDS"((FULLPACKAGENAME."CONST_DEL"),(FULLPACKAGENAME."CONST_TITEL")) "RESULT$0",
"RAN_WORDS"((FULLPACKAGENAME."CONST_DEL"),(FULLPACKAGENAME."CONST_WORDS")) "RESULT$1",
"RAN_DATE_N"((FULLPACKAGENAME."CONST_GEB_DAT_VON"),(FULLPACKAGENAME."CONST_GEB_DAT_BIS"))
"RESULT$2",
"RAN_M_N"(1, 9) "BRANCHE",
"RAN_M_N"(1, 16) "WOHNART",
"RAN_M_N"(1, 9) "BILDUNG",
"RAN_M_N"(1, 6) "ANZ_KINDER",
"RAN_M_N"(1, 6) "EINKOMMENSGRUPPE",
"RAN_M_N"(1, 9) "BERUFSGRUPPE",
"RAN_VALUES"((FULLPACKAGENAME."CONST_NUMBER_OF_STATUS"),(FULLPACKAGENAME."CONST_STATUS"))
"RESULT$3",
"RAN_M_N"(1, 99999) "TELEFON",
"RAN_M_N"(1, 99999) "TELEFAX",
"RAN_M_N"(1, 40) "FIRMENRABATT"
FROM
"TRIGGER_TABLE" "TRIGGER_TABLE"
WHERE
( "TRIGGER_TABLE"."Z" < 100 )
)
Die Flat Files und die dazu passenden EXTERNAL Table
Definitionen
German Description
Wohnart
Artikel
Artikelgruppe
Artikelsparte
Firmen
Kundenart
Bildung
Vornamen
Berufsgruppe
Nachname
Gehaltsgruppe
Template als Kopiervorlage
Branche
Gemeinden
Stand/letzte Änderung 13.05.2016
Test Data
accommodation_type_GR.LST
Article_GR.LST
Article_Group_GR.LST
Article_Group_Line_GR.LST
Companies_GR.lst
Customer_Type_GR.LST
Education_GR.LST
First_Name_GR.LST
Job_Role_GR.LST
Last_Name_GR.LST
salary_Range_GR.LST
Template.LST
Trade_GR.LST
Village_GR.LST
(in Arbeit)
CREATE TABLE Definition
CR_accommodation_type.txt
CR_Articles.txt
CR_Article_Groups.txt
CR_Article_Group_line.txt
CR_Companies.txt
CR_Customer_Type.txt
CR_education.txt
CR_FirstName.txt
CR_Job_Role.txt
CR_LastName.txt
CR_salary_Range.txt
CR_Template.txt
CR_Trade.txt
CR_Villages.txt
75875104
Oracle Warehouse step-by-step
Alle Daten zusammenhängend
landen
284/300
All previous lists
All_Definitions.txt
Die Batch-Datei „All_Definitions.txt „ läd alle Flat File Daten in die Datenbank. Ergebnis sind zum einen
External Tables (Präfix EX_) zum anderen aber auch echte Oracle-Tabellen. Echte Oracle-Tabellen
sind besser geeignet um im Nachgang Testdaten zu erzeugen, weil über einen Zufallsgenerator
immer wieder zufällig auf eine Nummernspalte zugegriffen wird.
-
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
285/300
13. Anhang mit Sonderthemen
°°°° Noch nicht überarbeitet °°°°°
Aufruf eines Mapping im Batch zu Testzwecken


In SQLPLUS mit einem Access-User gehen (z. B. OWBRT_AC)
Aufruf des folgenden Scriptes mit den entsprechenden Parametern
OWB-HOME\owb\rtp\sql\sqlplus_exec_template.sql
z. B.
start D:\oracle\owb\owb\rtp\sql\sqlplus_exec_template.sql owbrt LOC_DWH PLSQL MP_TZ '','' ,",";
Das gleiche Beispiel als Batch-Datei-Aufruf:
sqlplus owbrt_ac/owbrt_ac@ora92
@D:\oracle\owb\owb\rtp\sql\sqlplus_exec_template.sql owbrt
LOC_DWH PLSQL MP_TZ '','' ,",";
In dem Beispiel stehen die Parameter für
Owbrt
LOC_DWH
PLSQL
MP_TZ
'','' ,",";
Runtime-Schema (Owner)
Name der Location des Schemas in dem das Mapping laufen soll (Zielschema)
Typ des “Laufobjektes”
Name des Mappings
Parameter, die zunächst nicht benötigt werden
Weitere Informationen sind als Kommentare in dem Header der Prozedur enthalten.
Tabellen im Speicher vorhalten
ALTER TABLE table_name CACHE;
Sinnvoll für Referenztabellen (Lookup-Tables), auf die immer wieder zugegriffen werden muss
Das Mapping
Nützliche Zeitfunktionen zum Erstellen einer Zeitdimension
Anwendung
Beispielkommando
Aktuelles Jahr
Quartal im Jahr
Monat im Jahr
Tag im Monat
Woche im Jahr
Monat
select TO_NUMBER( TO_CHAR(sysdate, 'YYYY' ) ) from dual
select TO_NUMBER( TO_CHAR(sysdate, 'Q' ) ) from dual
select TO_NUMBER( TO_CHAR(sysdate, 'MM' ) ) from dual
select TO_NUMBER( TO_CHAR(sysdate, 'DD' ) ) from dual
select to_number(to_char(sysdate,'WW')) from dual
select TO_CHAR(sysdate, 'fmMonth', 'nls_date_language =
GERMAN') from DUAL;
select TO_CHAR(sysdate, 'Mon' ) from dual
select TO_CHAR(sysdate, 'fmday', 'nls_date_language =
GERMAN') from DUAL;
select TO_NUMBER( TO_CHAR(sysdate, 'D' ) ) from dual
Kurzform Monat
Name
Tag der Woche
(amerikanisches
Format)
Tag der Woche
(Deutsche
Umrechnung)
select
case to_number(to_char(sysdate,'D'))-1
when 0 then 7
else to_number(to_char(sysdate,'D'))-1
end
Stand/letzte Änderung 13.05.2016
(in Arbeit)
Ergebnis
für Datum
30.06.03
(Montag)
2003
2
6
30
26
Juni
Jun
montag
2
1
75875104
Oracle Warehouse step-by-step
Tag im Jahr
Kurzform Tag
Stunde am Tag(12)
Uhrzeit
Stunde am Tag(24)
286/300
from dual
/
select TO_NUMBER( TO_CHAR(sysdate, 'DDD' ) ) from dual
select ( TO_CHAR( sysdate, 'dy' ) ) from dual
select to_number(to_char(sysdate,'HH12')) from dual
select to_char(sysdate,'HH12:MI:SS') from dual
select to_number(to_char(sysdate,'HH24')) from dual
181
Mon
11
11:23:17
23
Funktion zum liefern des 1. Tages des aktuellen Quartals
CREATE OR REPLACE FUNCTION F_1_TAG_Q(DATUM IN DATE)
RETURN DATE AS
BEGIN
if to_char(DATUM,'mmdd') < '0331' then return to_date(to_char(DATUM,'YYYY')||'0101','YYYYMMDD');
end if;
if to_char(DATUM,'mmdd') < '0630' then return to_date(to_char(DATUM,'YYYY')||'0401','YYYYMMDD');
end if;
if to_char(DATUM,'mmdd') < '0930' then return to_date(to_char(DATUM,'YYYY')||'0701','YYYYMMDD');
end if;
return to_date(to_char(DATUM,'YYYY')||'1001','YYYYMMDD');
END;
Rumpffunktion zu schnellen Erstellen einer Funktion
CREATE OR REPLACE FUNCTION F_X(Feld IN number)
RETURN number AS
BEGIN
return Feld;
END;
Prüfen auf Vorhandensein von Referenzsätzen oder Stammdaten
Angenommen Bewegungsdaten (z. B. die Bestelldaten des Beispiels in dieser Unterlage) sollen in ein
Warehouse übernommen werden. Im Verlauf dieses Vorgangs soll geprüft werden, ob die dazu
passenden Stammdaten (z. B. Kunden) auch vorhanden sind. Wenn nicht müssen Fehlermeldungen
geschrieben werden.
Lösungsvorschlag: Erstellen einer Funktion (IN_KUNDENSTAMM_CASE), die im Verlauf des
Mappings auf die Kundentabelle zu Prüfzwecken zugreift. Bei nicht Vorhandensein eines
Kundensatzes wird in eine Fehlertabelle geschrieben, die wie folgt aussieht:
create table fehlertabelle (text varchar2(20));
Die Funktion IN_KUNDENSTAMM_CASE liefert bei nicht Vorhandensein eines KUNDENCODEs von
BESTELLUNG in der Kundentabelle KUNDE den Wert 0 zurück. Dieser Wert wird in der
Splitterbedingung für den Splitterzweig „PROTOKOLL“ geprüft und ein Satz in die Tabelle
FEHLERTABELLE geschrieben.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
287/300
Das Mapping zur Erstellung des Fehlerprotokolls
Die Funktion IN_KUNDENSTAMM_CASE:
Beispiel: Zugriff auf das Runtime-System:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
288/300
Lesen Runtime
column map_run_id format 9999
column map_name format A30
column start_time format A10
column end_time format A10
select map_run_id,map_name,start_time,end_time from all_rt_audit_map_runs;
(Create a new sequence in runtime schema let's say 'myseq'.)
Create a shell script containing the following steps to be executed in a
SQL session for every mapping:
1 - Get a new sequence value with:
SELECT myseq.NEXTVAL into :newseq;
2 - Concatenate mapping name with this value you'll have a unique jobname
'mymap_newseq'
3 - Begin the job
==> exec wbprti.job_begin('mymap_newseq');
4 - Execute your mapping ==> exec
mymap.main(........,p_job=>'mymap_newseq');
5 - Get process ID:
SELECT process_id into :get_process_id
FROM all_iv_process
WHERE process_name = 'mymap_newseq';
6 - Get map status and map ID:
SELECT status , map_run_id into :get_status,:get_map_run_id
FROM all_iv_map_run
WHERE process_run_id = get_process_id;
Optionally you can get the error message with:
6a - SELECT error_number,error_message into
:get_error_number,:get_error_message
FROM all_iv_run_error
WHERE map_run_id = get_map_run_id;
If get_status = 'COMPLETE'
7a - Finalize the job with success ==> exec
wbprti.job_end('mymap_newseq');
else
7b - Finalize the job with failure ==> exec
wbprti.job_fail('mymap_newseq');
Sinnvolle Namenskonventionen
Es gibt keine Vorgaben für die Vergabe von Namen, außer dass keine reservierten Wörter genutzt
werden dürfen (siehe hierfür die Dokumentation).
Aber aufgrund der praktischen Erfahrung können einige Tipps gegeben werden:

Gruppenbegriffe in Joinern/Splittern sprechend wählen, sie werden in die Ausgaben der
Operatoren weitergereicht und können damit auch in den Folgetabellen für die Columns
genutzt werden.

Bei Dimensionen kurze Level-Präfixe nutzen, damit sind auf unterschiedlichen
Hierarchieleveln gleichlautende Attribute möglich die durch levelspezifische Präfixe wieder
unterschieden werden können.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
289/300

Mapping-Namen sollten den Namen der Hauptzieltabellen enthalten (zur Orientierung).

Bei allen Namen sollte man sich bewusst sein, dass diese Namen auch in den
Metadatenreports genutzt werden. Also je sprechender sie sind um so deutlicher sind die
Metadaten.

Sprechende Namen für Foreign Keys festlegen, das gilt speziell für die FKs zwischen Fakten
und Dimensionen. Wenn man das nicht macht, dann generiert das Systeme kryptische
Namen, die in allen Wizards auftauchen und man keinerlei Orientierung. Bei einer
Faktentabelle sollten die FKs die Namenskürzel der Dimensionen beinhalten, auf die sie
verweisen. Z. B. sind Constraintverletzungen über den Audit-Viewer dann schneller
identifizierbar.
Ansonsten:
MP_
- Mapping
MO_ - Modul
VW_ - View
MAV_ - Mat. View
DIM_ - Dimensional Table
DBL_ - Database Link
TB_
- Tabelle
LOC_
- Locations
Wie mach ich was: Tips und Tricks
Was
Ordnung
schaffen
komplexen Tabellen
Wie
Bemerkung
bei Arbeiten Sie mit Display Sets in Es kann z. B. unterschieden
der Tabellendarstellung
werden
zwischen:
- Berechneten Werten
Standard_1:1_Zuweisungswerte
n
Großziehen der Tabellen in dem An der rechten unteren Ecke des Andere Ecken gehen nicht
mappingeditor
Tabellenobjektes nach rechts
unten wegziehen
Ausschalten
der
Wizard- Unter Administrations und dann Geht einfach schneller
Übersichtsfenster zu Beginn Preferences
eines Wizardablaufs
Und hier
'Hide Welcome pages on all
Wizards'
Ausschalten der Verwendung Rechte Maustaste auf das
von DB-Link-Zusetzen bei der jeweilige Mapping und dann
Generierung
'Configuration' Hier sind für alle
an dem Mapping beteiligten
Tabellen
die
"access
Specifications aufgelistet". Der
Default beinhaltet immer einen
DB-Link
zu
dem
einmal
definierten Quellmodul. Das ist
dann auch angezeigt und kann
abgeschaltet werden
Einschalten der Schemangabe (siehe vorgenannter Punkt)
für die Generierung
Übersichtlichkeit schaffen wenn Nutzen von Display Sets
Es werden nur die Columns
Tabellen mit zu vielen Columns
angezeigt, die man wirklich
zu lang werden.
braucht.
Testabfrage:
Wieviele select status,count(status) from Hilfreich zur Überprüfung von
Vorkommnisse gibt es von kunde group by status
Werten vor und nach einer
einem bestimmten Wert in einem
Transformation.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
290/300
Feld.
Source der generierten Packages anschauen:
select text, line from user_source where name = 'MP_TRANSAKTIONEN' and line < 10
CTAS
Schnelles Kopieren einer Tabelle gelingt am einfachsten durch die Aktion CTAS (Create table ... As
Select). Der Warehouse Builder unterstützt diese Variante in der jetzigen Version nicht, daher müsste
diese Möglichkeit in einer Funktion bzw. in einer Prozedur realisiert werden:
a. Drop Target-Table;
b. Create table Target-Table as Select * from Source-Table;
Diese Variante ist deutlich schneller als Insert into Target-Table select * from Source-Table
Mengenberechnungstabelle
Berechnung des Gesamtplattenbedarfs z. B. mit folgender Tabelle:
Tabelle
Initial
Anzahl
Sätze
Inserts pro
(Zeiteinheit
(z.
B.
Monat)
Inserts pro
(Zeiteinheit
(z.
B.
Monat)
Grösse
eines
Satzes
(KB)
Grösse
eines Index
(KB)
Gesamt
grösse pro
Satz
Table Functions
Es gibt Anforderungen an die Transformation von Daten, die nicht direkt mit SQL-Mitteln realisiert
werden können. In diesen Situation kann mit PL/SQL weiter gearbeitet werden. Doch dann hat man es
man es mit Prozeduren zu tun und verlässt den die Möglichkeiten des mengenorientierten SQL.
Table Functions bieten ab Oracle 9i eine Lösung: Man kann prozedural programmieren (mit PL/SQL)
und behält dennoch die Freiheit der SQL-Kommandos mit all ihren Möglichkeiten.
Ein
Beispiel:
Es soll eine Kundendimension aufgebaut werden. Die einzelnen Sätze von Dimensionen sollten
eindeutig sein, in der Kundendimension ist also für jeden Kunden nur ein Satz vorhanden.
In dem operativen Quellsystem (vielleicht ein CRM-System) gibt es neben der eigentlichen
Kundentabelle eine Tabelle mit möglichen Kundeneigenschaften, die über eine Intersektiontabelle mit
der Kundentabelle verbunden ist. So können jedem Kunden mehrere Eigenschaften zugeordnet
werden. Über die Intersektiontabelle, sind also für jeden Kunden mehrere Sätze (mehrere
Eigenschaften) gleichzeitig möglich. Bei dem Aufbau der Kundendimension im Warehouse sollen alle
Eigenschaften „denormalisiert“ in die Kundendimensionstabelle überführt werden, wobei man sich auf
eine maximale Anzahl von Kundeneigenschaften beschränkt, jede Eigenschaft wird als separate
Column in einen Dimensionssatz aufgenommen werden.
Quellstruktur:
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
291/300
Zielstruktur:
Technisch muss eine Transformation erstellt werden, die aus Feldern, die sich über mehrere
Sätze verteilen, einen einzigen Satz erstellt. Sicher eine Anforderung für eine PL/SQL-Routine.
Diese kann jedoch jetzt geschickt gekapselt als Table Function werden. Table Functions erhalten
ein „Row Set“ als Input, also eine Menge Datensätzen, wie sie z. B. ein SELECT-Kommando
zurückliefert.
Als Rückgabe lieferte eine Table Function dann auch wieder ein „Row Set“. Damit ist eine Table
Function innerhalb der FROM-Klausel eines SELECT einsetzbar. Zur Übergabe der Sätze wird
Objekt- und Cursor-Technik genutzt, letztlich schnelle Operationen, die vollständig innerhalb des
Hauptspeichers stattfinden, und Operationen, bei denen z. T. nur Speicheradressen und nicht
Daten ausgetauscht werden.
In nebenstehendem Beispiel -- PIPELINED Table-Function
werden mehrere Sätze der ----------------------------------------------------------Tabelle
T1
immer
dann -- Beispieltabelle:
zusammgefass, wenn das erste
Feld F1 gleich ist. Das Feld F3 drop table T1;
wird auf das 3. bzw. 4. Output- Create table T1
(F1 number(1),
Feld
des
neuen
Satzes F2 number(1),
übertragen. Um das Beispiel F3 varchar2(10));
einfach zu halten, ist man davon
ausgegangen, dass es in der -- Beispieldaten:
Quelltabelle
immer nur zwei insert into T1 (F1,F2,F3) values (1,2,'MBN');
Sätze mit gleichem Feld F1 insert into T1 (F1,F2,F3) values (2,1,'ABC');
insert into T1 (F1,F2,F3) values (3,1,'XXX');
geben kann.
In dem Beispielaufruf unten ist
zu sehen, dass die Funktion in
Stand/letzte Änderung 13.05.2016
insert into T1 (F1,F2,F3) values (4,1,'DEF');
insert into T1 (F1,F2,F3) values (1,1,'ADI');
insert into T1 (F1,F2,F3) values (3,1,'LLL');
/
(in Arbeit)
75875104
Oracle Warehouse step-by-step
der
FROM-Klausel
eines
weiteren SELECT-Kommandos
aufgerufen wird. In „*“ des SQLKommandos steht also der
Output der Table Function.
Der Funktion wird beim Aufruf
ein CURSOR mitgegeben, der
aus einem weiteren SELECT
(Parameter
der
CURSORFunktion) gespeist wird.
Innerhalb der Table Function
muss
jetzt
der
Cursor
ausgelesen werden. Über ein
Gruppenwechselverfahren
sammelt die Rourine alle zu
einer F1-Nummer passenden
Sätze und gibt sie erst zurück,
wenn eine neue F1-Nummer
über den Cursor geliefert wird.
Die Routine ist mit PIPELINED
definiert. Damit kann mit der
PIPE ROW()-Funktion jeder Satz
direkt an das aufrufende SQLKommando
zurückgegeben
werden. Die nötigen Object-TypDefinitionen fürn die RekordStruktur ist ebenfalls abgedruckt.
Pivoting
Dies war ein Beispiel für das
Überführen mehrerer Sätze in
einen Satz. Dies ist ein sog.
Pivoting-Vorgang. Analog lässt
sich die Technik natürlich auch
für das Umwandeln eines
einzelnen Satzes in mehrere
Sätze anwenden.
Das Verfahren ist vor allem
deswegen so praktisch, weil es
uns nicht zwingt die SET-Based
Verarbeitung zu verlassen. Wir
bewegen uns nach wie vor auf
der
schnelleren
weil
gleichzeitigen Verarbeitung von
Mehreren Sätzen.
Schachteln von Table Functions
Table Functions lassen sich
beliebig schachtelt. Es entsteht
ein Pipelining, bei dem alle
Verarbeitungsschritte in einer
einzigen Verarbeitungskette sich
die Ergebnis-Record-Sets im
Speicher
gegenseitig
weiterreichen.
Stand/letzte Änderung 13.05.2016
292/300
Commit;
/
-- Die benötigten Typdefinitionen
drop type out_t_table ;
Drop type out_t;
/
-- Aufruftypen
create or replace package cursor_pkg1 as
type XXX_t_rec IS RECORD (
F1 number(1),
F2 NUMBER(1),
F3 VARCHAR2(10));
TYPE XXX_t_rectab IS TABLE of XXX_t_rec;
TYPE strong_refcur_t IS REF CURSOR RETURN XXX_t_rec;
TYPE refcur_t IS REF CURSOR;
END;
/
-- Rückgabetypen
/
Create type out_t as object (
out1 number(1),
out2 NUMBER(1),
out3 VARCHAR2(10),
out4 VARCHAR2(10)
);
/
create type out_t_table as TABLE of out_t;
/
-- Die eigentliche Tablefunction
create or replace function f_XXX(cur cursor_pkg.refcur_t)
RETURN out_t_table PIPELINED
IS
Y1 Number(5);
Y2 NUMBER(5);
Y3 VARCHAR2(10);
out1 Number(5);
out2 number(5);
out3 varchar2(10);
out4 varchar2(10);
Key_alt number(5) := 0;
begin
LOOP
-- read from cursor variable
FETCH cur into Y1,Y2,Y3;
-- ext when last row
EXIT WHEN cur%NOTFOUND;
if Key_alt != Y1 then
-- Gruppenwechsel, jetzt alten Satz wegschreiben,
-- der aller erste Satz wird wohl leer
-- bleiben
pipe row(out_t(out1,out2,out3,out4));
out4 := NULL;
-- neuen Schlüssel Y1 für später retten
key_alt := Y1;
out1 := Y1;
out2 := Y2;
out3 := Y3;
else
-- Folgesatz
out4 := Y3;
end if;
-- pipe row(YYY_t(Y1,Y2,Y3,Y4,Y5));
END LOOP;
-- ein letztes Mal schreiben
pipe row(out_t(out1,out2,out3,out4));
CLOSE cur;
Return;
(in Arbeit)
75875104
Oracle Warehouse step-by-step
293/300
END;
/
-- der Einsatz der Tablefunktion
select count(*) from
TABLE(f_XXX(CURSOR(select * from T1 order by F1)));
select
*
TABLE(f_XXX(CURSOR(select * from T1 order by F1)));
from
Table Functions und Warehouse Builder
Noch gibt es in dem OWB 9i-Release keine Möglichkeiten Table-Functions zu nutzen. Jedoch
können Table Functions über einen View gekapselt werden. Views sind dann in OWB wie normale
Quelltabellen zu behandeln.
Beispiel passend zu der oben erstellten Table Function:
Create Or Replace Force View xxx
(x1,x2,x3,x4) as
select * from
TABLE(f_XXX(CURSOR(select
Stand/letzte Änderung 13.05.2016
*
(in Arbeit)
from
T1
order
by
F1)));
75875104
Oracle Warehouse step-by-step
294/300
Polling
Es gibt Anforderungen bei denen Quelldaten in kurzen Zeitabständen (Intervalle von wenigen
Sekunden oder Minuten) abgefragt werden sollen. Hierzu ist eine Lese-Routine (z. B. Stored
Procedure) regelmäßig zu starten (Polling).
Genutzt werden kann hierzu das Datenbank Job-Management-System.
Man nutzt einen sog. „Background Prozess“ (SNP process) über den man eine Job-Queue erstellen
kann. Eine Prozedur wird in die Job-Queue gestellt, die die Prozedur in Abhängigkeit der gewählten
Parameter ausführt.
Wichtige Einstellungen in der INIT.ORA:
-> JOB_QUEUE_PROCESSES n
( dieser Wert ist auf > 0 zu setzen, festgelegt wird die max.
Anzahl der möglichen Prozesse für die Jobs)
Zum Starten einer Prozedur über eine Job_Queue ist folgende Routine zu erstellen.
begin
DBMS_JOB.SUBMIT(job OUT BINARY_INTEGER,
'Name einer Prozedur;' IN VARCHAR2,
nächster Startzeitpunkt IN DATE DEFAULT SYSDATE,
Intervall in Zeiteinheiten IN VARCHAR2;
end;
/
Beispiel:
VARIABLE jobnr NUMBER;
begin
DBMS_JOB.SUBMIT(:jobnr, 'tempInsert;', sysdate, 'sysdate + (10/(24*60*60))');
end;
/
jobnr ist ein Platzhalter in den das Jobsystem eine eindeutige interne Nummer schreibt. Über diese
Nummer können die Jobs später identifiziert werden.
‚tempInsert;’ ist ein Ausdruck, der zum Aufrufen der eigentlichen Routine gebraucht wird, deswegen ist
hier auch ein Semikolon mit in die Anführungsstriche eingeschlossen. Hier können also auch
Parameter der Prozedur mitgegeben werden.
sysdate ist das Startdatum, also jetzt.
'sysdate + (10/(24*60*60))' ist ein Ausdruck der eine Zeitspanne X von jetzt an berechnet. In diesem
Fall werden 10 Sekunden berechnet.
Testabfrage zur Ausgabe der Jobnummer im vorigen Beispiel:
print jobnr;
Orientierung darüber wie viele Jobs laufen:
select job, schema_user,interval from user_jobs;
In user_jobs stehen alle Informationen über aktuell laufende Jobs.
Löschen eines Jobs:
begin
DBMS_JOB.remove(61);
End
61 ist die Jobnummer, die das System intern vergeben hat.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
295/300
Neu-kompilieren von Sourcen in der Datenbank
Durch Einspielen von Patches oder unüberlegte Löschvorgänge können Prozeduren oder Funktionen
In den Zustand „INVALID“ gesetzt werden. (Herausfinden von „invalieden“ Sourcen am einfachsten
über den Enterprisemanager.). Um für ein ganzes Schema alle kompilierbaren Ressourcen wieder
neu zu komplieren kann man folgenden Aufruf auf ein Schema absetzen (hier Schema DW):
exec dbms_utility.compile_schema('DW');
Achtung: Je nach Menge der Objekte kann das länger laufen.
Testdaten (CSV-File)
ORTE.CSV (Beispiel zum Einlesen von Flat Files)
Orte_Nr,Ort,PLZ,Bundesland,Region,Nummernfeld
1,'Berlin','D-86269','Berlin','Ost',3
2,'Braunschweig','D-69279','Niedersachsen','Mitte',9
3,'Bremen','D-37053','Bremen','Nord',1
4,'Dortmund','D-71382','Nordrhein-Westfalen','Sued',1
5,'Elmshorn','D-29543','Schleswig Holstein','Nord',1
6,'Essen','D-65922','Nordrhein-Westfale','West',6
7,'Hannover','D-87741','Niedersachsen','West',1
8,'Kaiserslautern','D-47186','Rheinland Pfalz','Mitte',7
9,'Karlsruhe','D-84769','Baden Wuerttemberg','Mitte',4
10,'Kiel','D-27228','Schleswig Holstein','Nord',3
11,'Ludwigsburg','D-43165','Bayern','Mitte',5
12,'Mannheim','D-15059','Baden Wuerttemberg','West',9
13,'Muenchen','D-80639','Bayern','Sued',7
15,'Muenster','D-84407','Nordrhein-Westfalen','West',4
16,'Nuernberg','D-21394','Bayern','Sued',1
17,'Stuttgart','D-41722','Baden Wuerttemberg','Sued',1
18,'Trier','D-63893','Rheinland Pfalz','Sued',6
19,'Ulm','D-62064','Baden Wuerttemberg','Sued',6
20,'Wuerzburg','D-52375','Bayern','Ost',4
21,'Augsburg','D-52375','Bayern','Sued',4
22,'Saarbruecken','D-52375','Saarland','West',7
23,'Leipzig','D-52375','Sachsen','Ost',2
24,'Ludwigshafen','D-52375','Rheinland Pfalz','Mitte',8
25,'Dreieich','D-52375','Hessen','Mitte',4
26,'Darmstadt','D-52375','Hessen','Mitte',9
27,'Freiburg','D-52375','Baden Wuerttemberg','Sued',6
28,'Regensburg','D-52375','Bayern','Sued',7
29,'Potsdam','D-52375','Brandenburg','Ost',3
30,'Duisburg','D-52375','Nordrhein-Westfale','West',5
31,'Koeln','D-52375','Nordrhein-Westfale','West',8
32,'Koblenz','D-52375','Rheinland Pfalz','Mitte',1
33,'Worms','D-52375','Rheinland Pfalz','West',2
34,'Heidelberg','D-52375','Baden Wuerttemberg','Mitte',7
35,'Coburg','D-52375','Bayern','Sued',5
36,'Frankfurt','D-52375','Hessen','Mitte',4
37,'Flensburg','D-52375','Schleswig Holstein','Nord',3
38,'Wiesbaden','D-52375','Hessen','Mitte',8
39,'Mainz','D-52375','Hessen','Mitte',8
40,'Fuerth','D-52375','Bayern','Sued',3
41,'Duesseldorf','D-52375','Nordrhein-Westfalen','West',5
42,'Osnabrueck','D-52375','Nordrhein-Westfalen','Mitte',7
43,'Bielefeld','D-52375','Nordrhein-Westfalen','Mitte',8
44,'Aachen','D-52375','Nordrhein-Westfalen','West',2
45,'Dresden','D-52375','Sachsen','Ost',9
46,'Chemnitz','D-52375','Sachsen','Ost',3
47,'Luebeck','D-52375','Schleswig Holstein','Nord',6
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
296/300
48,'Wilhelmshaven','D-52375','Nordrhein-Westfalen','Nord',1
49,'Kassel','D-52375','Hessen','Mitte',7
50,'Schweinfurt','D-52375','Bayern','Sued',8
51,'Erfurt','D-52375','Thueringen','Ost',4
52,'Bamberg','D-52375','Bayern','Sued',3
53,'Hamburg','D-52375','Hamburg','Nord',8
Literaturliste (kommentiert)
Titel
Autor
Erscheinungsjahr / ISBN
(0 englisch
3 deutsch)
Themen
Bemerkung
(+ ++ +++)
Data
Warehouse
Design
Solutions
The
Data
Warehouse
Toolkit
Adamson
1998
0-471-25195-X
Beinhaltet Starschemen
zu
unterschiedlichen
Verticals
Als Nachschlage-sammlung
gut geeignet
++
Ralph
Kimball
1995
0-471-15337-0
Entwickeln
multidimensionaler
Strukturen (Starschema)
für verschiedene Verticals
The
Webhouse
Toolkit
Ralph
Kimball
2000
0-471-37680-9
Building the
Data
Warehouse
Inmon
1996
0-471-14161-5
Analysen von Webserver
Logfiles,
Clickstream
Data Marts,
Publishing
von
Warehouse-Daten
im
Web
Umfassende Grundlagen
zu dem Thema DW,
Konzepte, Verfahren
Klassiker,
sehr
viele
praktische
Hinweise,
sollte man kennen
+++
Nur
interessant
für
Analysen von Webtraffic
+
Object
Oriented
Data
Warehouse
Design
Giovinazzo
2000
0-13-085081-0
Kompletter Abriss eines
Warehouse
Projektes
anhand
einer
Case
Study.
Starschemamodellierung
Data
Warehouse
for Dummies
Simon
1997
0-7645-0170-4
Globaler Abriss über alles
, was mit Warehouse zu
tun hat.
Der OLAP
Markt
ForwissStudie
FORWISS
1997
3-00-002033-0
OLAP
Marktübersicht
1997,
mittlerweile
veraltet,
einleitende
Kapitel
erklären
fast
alle
Fachbegriffe, die in OLAP
Systemen Verwendung
finden.
Stand/letzte Änderung 13.05.2016
(in Arbeit)
Klassiker, während Kimball
sehr praktisch schreibt,
geht Inmon sehr stark ins
Konzeptionelle.
Liefert
methodisches
Rüstzeug
+++
Gut geschrieben, leicht
verständlich. Dieses Buch
sollte für jeden Warehouse
Projektmitarbeiter
Pflichtlektüre sein.
OO spielt nur zu Beginn
eine Rolle.
+++
Locker
(lustig)
geschriebene Übersicht für
Einsteiger,
mehr für Endanwender
gedacht,
die
sich
orientieren wollen. Kein
Expertenlevel.
+
Die einleitenden Kapitel
sind als gut vermittelnder
Einstieg
in
die
multidimensionale Analyse
empfehlenswert.
Kurzgerafft, schnell gelesen
wie eine Seminararbeit. Die
Herstellerbeschreibungen
sind mittlerweile veraltet.
75875104
Oracle Warehouse step-by-step
297/300
+
Nur
interessant
zum
Suchen von speziellen
Anwendungen aus der
Praxis.
Sehr
Uni-haft,
akademisch.
+
Data
Warehouse
und
Managemen
t
Informations
systeme
Data
Warehouse
Verschiede
ne Autoren,
Hannig
(Hrsg.)
1996
3-7910-1097-2
Verschiedene
Aufsätze
zur Methodik,
Praxisbeispiele,
Ausführungen zu Mining
Anahory
1997
3-8273-1288-4
Durchmarsch durch ein
Warehouse-Projekt.
Strategische
Steuerung
Horváth
(Hrsg)
2000
3-7910-1719-5
Aufsatzsammlung
aus
dem
Bereich
des
Controlling,
mehrere
Fallbeispiele
Balanced
Scorecard
Friedag/Sc
hmidt
1999
3-448-04061-4
Das
Data
Warehouse
Konzept
Mucksch
/Behme
(Hrsg.)
1996
3-409-12216-8
Abarbeitung
von
Kennzahlen aus den
unterschiedlichen
Perspektiven
des
Geschäftsprozesses,
das
Prinzip
einer
Balanced Scorecard wird
vorgestellt
Architekturen,
Datenmodelle,
Anwendungen
Data
Warehouse
Practical
Advice from
the Experts
Bischoff
(Vorwort
von
Zachmann)
1997
0-13-577370-9
Beschrieben sind viele
Einzelaspekte
aus
Warehouse-Projekten
Data
Warehouse
gestützte
Anwendung
en
Building
a
Data
Warehouse
for Decision
Behme/Mu
cksch
(Hrsg.)
2001
3-409-116559-1
Neben einer Einführung
Aufsätze verschiedener
Autoren aus diversen
Verticals
Bleibt viel zu oft im
Allgemeinen, viel Text und
wenig konkretes, ab und zu
kann
man
was
Interessantes entdecken.
Erfahrungen
aus
der
Frühzeit des Warehouse.
Fast veraltet.
+
Praktische
Anschauung
allerdings für die spezielle
Zielgruppe derjenigen, die
sich um Controllingsysteme
/
Kennzahlensysteme
Gedanken
machen.
Spezielle mit Blickrichtung
Balanced Scorecard
++
Praxisbuch zum Finden der
passenden Fragestellungen
in
einem
Analyse/
Steuerungssystems.
Empfehlenswert für jeden,
der
entsprechende
Systeme implementiert.
++
Aufsätze
aus
den
verschiedensten Bereichen,
z.
T.
Praxisbereichte.
Achtung
oft
nur
akademische
Abhandlungen,
z.
T.
allgemein,
technische
bezüge sind veraltet.
+
Eine Menge Autoren liefern
sehr viel Grundsätzliches,
wie vieles, was aus den
USA
zu
dem
Themenkomplex kommt, so
ist auch dieses sehr
bodenständig/praktisch
angelegt.
+
Liefert vertical-spezifisches
Eindrücke in WarehouseSzenarien.
++
Poe
1997
0-13-590662-8
Einführung
in
die
Warehouse –Philosophie
Grundlagen
Nichts, was nicht schon
woanders steht.
+
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
Support
Data
Warehouse
Data Mining
OLAP
Martin
(Meta
Group)
298/300
1998
3-8266-4022-5
Verschiedene
Autoren
referieren
über
die
unterschiedlichsten
Aspekte
des
Data
Warehouse.
Kundenbeispiele
Sehr viel Akademisches.
Wenig für Praktiker.
+
Aufrufparameter für OWB-Client setzen:
-
um Hauptspeicherverbrauch zu begrenzen
-> in der Datei „X:\OWB_HOME\owb\bin\win32\owbclient.bat” den Parameter –mx setzen
also z. B. für 256MB:
..\..\lib\ext\jre\bin\javaw
-Xms64M –Xmx256M
Testhilfen und hilfreiche Kommandos für SQL*Plus Tests
In SQLPLUS:
Set timing on
set autotrace on explain;
show parameters que...
SET LINE nn
Messung von verbrauchter Zeit
Kommandoverarbeitung tracen
Abfrage gesetzter init.ora-Parameter
Verbreiterung der Ausgabezeilen
Select * from Tab;
Schneller Zugriff auf die für den USER zur
Verfügung stehenden Tabellen.
Formatierungen der Ausgaben in SQLPLUS:
SET PAGESIZE 0
SET PAGESIZE nn
SET HEADING OFF
COLUMN column_name FORMAT 9999
COLUMN columname FORMAT A20
CLEAR FORMAT
BREAK ON feldname [ON feldname] SKIP n
CLEAR BREAKS
Spool C:/abc.txt
…
…
Spool off
Ausschalten der Seiteneinteilung. Sinnvoll für
Listenausgaben ohne störende Seitenköpfe.
Erhöhen/Ändern der Anzahl Ausgabezeilen bevor
eine neue Überschrift folgt
Ausschalten der Column-Überschriften
Festelgen von Spaltenausgabeformaten für
Listen, z. B. Festlegen der Spaltenbreite.
Unterdrücken
von
Gruppenebene
Schreiben in eine Datei
Wiederholungen
auf
Schnelles Erstellen einer CSV-Datei
Beispiel für das einfache und schnelle Erzeugen einer CSV-Datei aus den Eintrgägen einer Tabelle. In
dem folgenden Beispiel sind Semikolons eingefügt.
column VORNMAENNL_NR format 9999
column VORNAME format A20
column GESCHLECHT format 9
column ANREDE format A4
Spool d:\td\xx
select VORNMAENNL_NR,';',VORNAME,';',GESCHLECHT,';',ANREDE,';' from vorname;
spool off
Hintergrund - Erstellen einer Tabelle mit Parameteraufruf
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
299/300
accept TName Prompt "Name einer neu zu erstellenden Tabelle: "
drop table &TName;
CREATE TABLE &TName(A NUMBER(2));
insert into &TName (A) Values(10);
select * from &TName;
commit;
exit;
/
Hilfskommandos zum Unterdücken des Outputs im Betriebssystemfenster:
set echo off
set termout off
Beispiel-Init.Ora-Datei für eine Installation von OWB und OracleDatenbank auf einem(!) Rechner.
°°°° Noch nicht überarbeitet °°°°°
Hier sind die Speicherangaben entsprechend modifiziert, damit man möglichst lange ohne
Auslagerungsdatei auf dem NT-Rechner auskommt.
db_name = "ORA817"
instance_name = ORA817
service_names = ORA817
db_files = 1024
enqueue_resources = 3000
AQ_TM_PROCESSES = 1
JOB_QUEUE_PROCESSES = 2
JOB_QUEUE_INTERVAL = 5
# Schreiben in externe Datei
#UTL_FILE_DIR = D:\oracle\ora81\wf\res
UTL_FILE_DIR = *
#Einstellungen, um das automatische Umschreiben von Abfragen in
#Richtung auf Materialized Views zu ermöglichen
query_rewrite_enabled=true
# Einstellungen für Oracle Workflow
open_cursors = 400
max_enabled_roles = 50
db_file_multiblock_read_count = 16
db_block_buffers = 4500
shared_pool_size = 15728640
large_pool_size = 614400
# java_pool_size wird nur gesetzt, wenn Runtimesystem installiert wird oder mit Portal die
#Metadatengelesen werden sollen
#java_pool_size = 30971520
java_pool_size = 0
log_checkpoint_interval = 200000
log_checkpoint_timeout = 1800
processes = 200
parallel_max_servers = 5
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Oracle Warehouse step-by-step
300/300
log_buffer = 32768
#audit_trail = true # if you want auditing
#timed_statistics = true # if you want timed statistics
max_dump_file_size = 10240 # limit trace file size to 5M each
# Global Naming -- enforce that a dblink has same name as the db it connects to
global_names = false
db_block_size = 8192
os_authent_prefix = ""
#der folgende Parameter ist wichtig, damit überhaupt über einen dblink gelesen werden kann
#er ist für beide Datenbanken zu setzten, also auch für die Remote-Instanz, wenn dieser auf Null
#steht, geht nichts
distributed_transactions = 500
mts_dispatchers = "(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)"
#sort_area_size = 65536
sort_area_size = 655360
sort_area_retained_size = 65536
hash_area_size = 8388608
Stand/letzte Änderung 13.05.2016
(in Arbeit)
75875104
Herunterladen