Verkäufe
Verkäufe
Verkäufe
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-1<br />
8 Data Warehousing<br />
8.1 Überblick<br />
◮ In ”<br />
klassischen“ Datenbankanwendungen werden Datenbanken im wesentlichen zur Abwicklung des<br />
( ”<br />
operativen“) Tagesgeschäfts verwendet (z.B.: Buchungen, Einkauf/Verkauf, Personal, . . .)<br />
Operationen (Transaktionsprogramme) auf diesen Datenbanken typischerweise mit Zugriff<br />
auf kleine Datenmengen (z.B. Direktzugriff über Kontonummern), Durchführung weniger<br />
Änderungsoperationen bzw. ”<br />
kleiner“ Lesetransaktionen<br />
Anforderungen:<br />
⊲ hoher Parallelitätsgrad<br />
⊲ hoher Transaktionsdurchsatz (mehrere Hundert bis Tausend Transaktionen pro Sekunde!)<br />
⊲ hohe Verfügbarkeit ( ”<br />
mission critical“)<br />
⇒ ”<br />
OnLine Transaction Processing (OLTP)“<br />
Charakteristik:<br />
⊲ normalisierte Relationen (geringer Update-Overhead)<br />
⊲ vgl.weise wenige Indexe (dto.)
◮ Neue, zusätzliche Anwendungsgebiete für große Informationssysteme:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-2<br />
Management-Informationssysteme<br />
Decision-Support<br />
Integration mehrerer operativer Datenbanken<br />
Hier sollen die vorhandenen Daten verdichtet werden, um globalere Zusammenhänge zu erkennen,<br />
beispielsweise:<br />
⊲ Wie hat sich die Auslastung der Transatlantikflüge über die letzten zwei Jahre entwickelt?<br />
⊲ Wie haben sich besondere offensive Marketingstrategien für bestimmte Produktlinien auf<br />
die Verkaufszahlen ausgewirkt?<br />
Anforderungen: große komplexe Anfragen mit hohem Aggregationsgrad, wenig oder keine<br />
Änderungen<br />
⇒ ”<br />
OnLine Analytical Processing (OLAP)“
◮ Typische Aspekte:<br />
Sehr große operative Datenbanken (> 1 TByte)<br />
Gewünschte Anfragen stellen Daten stark verdichtet aggregiert dar:<br />
⊲ relativ teuer<br />
⊲ können nicht parallel zum laufenden Betrieb gestellt werden.<br />
⊲ sollen unterschiedliche Präzisierungsgrade ermöglichen.<br />
Aus den operativen Datenbanken werden regelmässig (etwa 1x täglich oder 1x monatlich)<br />
Daten in eine zusätzliche (wesentlich kleinere) Datenbank, das Data Warehouse übertragen.<br />
Das Data Warehouse steht dann für beliebige Anfragen zur Verfügung. Gegebenenfalls wird<br />
das Data Warehouse in weitere Komponenten unterteilt, die sog. Data Marts.<br />
OLTP<br />
Online Transaction<br />
Processing<br />
OLAP<br />
Online Analytical<br />
Processing<br />
Decision Support-Anfragen<br />
Data Mining<br />
operationale DB<br />
operationale DB<br />
Data<br />
Warehouse<br />
operationale DB<br />
operationale DB<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-3
◮ Datenbankarchitektur: Ein Data Warehouse enthält üblicherweise zwei Arten von Informationen:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-4<br />
eine (sehr große) Faktentabelle:<br />
⊲ Diese enthält pro Tupel einen einzelnen Geschäftsvorfall (einen Verkauf, einen Vertragsabschluß,<br />
einen Auftrag, . . .)<br />
⊲ enthält jeweils Fremdschlüssel der beteiligten Dimensionen sowie weitere Informationen<br />
⊲ Beispiele:<br />
□ Alle Verkäufe der letzten drei Jahre<br />
□ Alle Telefonate des letzten Jahres<br />
□ Alle Flugreservierungen der letzten fünf Jahre<br />
⊲ typischerweise eine normalisierte Relation<br />
verschiedene Dimensionstabellen: Jede Dimension beschreibt einen zentralen Aspekt für das<br />
Data Warehouse. Übliche Dimensionen sind: Lieferant, Produkt, Zeit, Region, Filiale, Kunde,<br />
. . .<br />
oftmals nicht normalisiert
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-5<br />
◮ Ein wesentliches Problem ist etwa die adäquate Modellierung der Dimensionen<br />
Auftretende Probleme:<br />
⊲ Dimensionen haben eine hierarchische Gliederungsstruktur:<br />
□ Region: Kontinent – Land – Bundesland – Stadt – Straße<br />
□ Zeit: Jahr – Monat – Tag<br />
⊲ Manche Dimensionen haben mehrere nicht-kompatible Strukturen:<br />
□ Jahr – Quartal – Monat– Tag<br />
□ Jahr – Woche – Tag<br />
Jahr<br />
Woche (KW)<br />
Quartal<br />
Monat<br />
Tag<br />
Dimensionsstrukturen können sich über die Zeit verändern, wenn sich das Anwendungsfeld<br />
verändert ⇒ Anpassung alter Daten/Dimensionsinformation problematisch!<br />
◮ Üblicherweise werden Anfragen an die Fakten-Tabelle im Zusammenhang mit einer oder mehreren<br />
Dimensionen gestellt (mehrfache Joins).<br />
◮ Diese Anfragen enthalten oft Aggregierungen und sind nach den Dimensionen strukturiert<br />
⇒ Multidimensionale Anfragen
◮ Beispiel:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-6<br />
Abbildung 8-1: Multidimensionale Anfragen
◮ Datenwürfel ( ”<br />
Cube“): Strukturierte Darstellung der vorhandenen Informationen:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-7<br />
Hersteller<br />
Jahr<br />
◮ Übliche Variationen:<br />
Abbildung 8-2: Ein Datenwürfel<br />
Hinzunahme/Wegnahme von Dimensionen: Steuerung durch group by-Klausel<br />
Verfeinerung von Dimensionen
◮ Da die spezielle Struktur eines Data Warehouse nur unzureichend von relationalen Datenbanken<br />
unterstützt wird, werden bei der Entwicklung adäquater Systeme insbesondere folgende Entwicklungslinien<br />
verfolgt:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-8<br />
ROLAP: Das Data-Warehouse-System wird auf der Basis eines relationalen DBMS als Anwendungssystem<br />
realisiert.<br />
MOLAP: Die Daten werden in einer speziellen mehrdimensionalen Form gespeichert (etwa<br />
mehrdimensionale Arrays).<br />
◮ Gegenwärtig haben viele Datenbankhersteller den SQL-Support fürs Data Warehousing wesentlich<br />
erweitert (so auch der aktuelle SQL-Standard)!
◮ Wesentliche Anforderung: Das Data Warehouse soll unterschiedlichen Mitarbeitern und Problemstellungen<br />
gerecht werden. Deswegen werden auch unterschiedliche Anfragewerkzeuge eingesetzt:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-9<br />
Standard-SQL-Aggregierungen<br />
Data Mining Tools (inkl. Neuronalen Netzwerken)<br />
Statistische Analysen<br />
Expertensysteme (Frage/Antwort-Systeme)<br />
◮ Die adäquate Aufbereitung von Dimensionsanfragen ist durchaus aufwendig und nicht unproblematisch!
8.2 Adäquater Datenbankentwurf<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-10<br />
◮ Dimensionstabellen sind üblicherweise nicht normalisiert, d.h. es gibt eine Faktentabelle mit zugehörigen<br />
Dimensionstabellen. Dies nennt man auch ”<br />
Star-Schema“.<br />
Abbildung 8-3: Ein Star-Schema
◮ Zweck:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-11<br />
Anzahl der Joins wird kleiner.<br />
spezieller Join: star-join kann gut optimiert werden<br />
Auftretende Redundanzen oft unproblematisch, da Dimensionsdaten sich nur wenig ändern und<br />
im wesentlichen Einfügungen enthalten.<br />
◮ Normalisierte Dimensionen werden auch Snowflake-Schema genannt.<br />
◮ Praktiker empfehlen üblicherweise das Starschema!<br />
◮ ggf. weitere Variationen in bestimmten Anwendungsszenarien sinnvoll:<br />
◮ Beispiel: Die Struktur einiger Dimensionen ändert sich sehr häufig: Hier kann es sinnvoll sein, ggf.<br />
diese Dimension durch eine Meta-Dimension zu ersetzen.
8.3 Datenwürfel und DW-Anfragen<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-12<br />
. . . entnommen aus (Kemper und Eickler 2001, Kapitel 17)
Das Stern-Schema:<br />
Handelsunternehmen<br />
Kunden<br />
Produkte<br />
Verkäufe<br />
Filialen<br />
Zeit<br />
Verkäufer
Das Stern-Schema:<br />
Krankenversicherung<br />
Patienten<br />
Ärzte<br />
Behandlungen<br />
Krankenhäuser<br />
Zeit<br />
Krankheiten
Stern-Schema<br />
...<br />
...<br />
...<br />
...<br />
...<br />
...<br />
825<br />
4711<br />
1<br />
1347<br />
Passau<br />
25-Jul-00<br />
Verkäufer<br />
Kunde<br />
Anzahl<br />
Produkt<br />
Filiale<br />
VerkDatum<br />
Verkäufe<br />
...<br />
...<br />
...<br />
...<br />
...<br />
Bayern<br />
D<br />
Passau<br />
...<br />
Bezirk<br />
Land<br />
FilialenKennung<br />
Filialen<br />
...<br />
...<br />
...<br />
...<br />
...<br />
43<br />
Kemper<br />
4711<br />
...<br />
wieAlt<br />
Name<br />
KundenNr<br />
Kunden<br />
...<br />
...<br />
...<br />
...<br />
...<br />
...<br />
...<br />
23<br />
119<br />
Elektronik<br />
Handyman<br />
825<br />
...<br />
wieAlt<br />
Manager<br />
Fachgebiet<br />
Name<br />
VerkäuferNr<br />
Verkäufer<br />
Faktentabelle (SEHR groß)<br />
Dimensionstabellen (relativ klein)
Stern-Schema (cont‘d)<br />
...<br />
...<br />
...<br />
...<br />
...<br />
...<br />
...<br />
...<br />
Weihnachten<br />
Dienstag<br />
52<br />
4<br />
2001<br />
12<br />
18<br />
18-Dec-01<br />
Hochsommer<br />
Saison<br />
Dienstag<br />
Wochentag<br />
...<br />
...<br />
...<br />
...<br />
...<br />
...<br />
30<br />
3<br />
2000<br />
7<br />
25<br />
25-Jul-00<br />
KW<br />
Quartal<br />
Jahr<br />
Monat<br />
Tag<br />
Datum<br />
Zeit<br />
..<br />
...<br />
...<br />
...<br />
...<br />
...<br />
..<br />
Siemens<br />
Telekom<br />
Mobiltelekom<br />
Handy<br />
1347<br />
..<br />
Hersteller<br />
Produkthauptgruppe<br />
Produktgruppe<br />
Produkttyp<br />
ProduktNr<br />
Produkte
Nicht-normalisierte Dimensionstabellen:<br />
effizientere Anfrageauswertung<br />
Zeit<br />
Datum Tag Monat Jahr Quartal KW Wochentag Saison<br />
25-Jul-00 25 7 2000 3 30 Dienstag Hochsommer<br />
... ... ... ... ... ...<br />
18-Dec-01 18 12 2001 4 52 Dienstag Weihnachten<br />
... ... ... ... ... ... ...<br />
...<br />
Datum Monat Quartal<br />
ProduktNr<br />
Produkttyp<br />
Produkte<br />
Produktgruppe<br />
Produkthauptgruppe<br />
Hersteller<br />
..<br />
1347<br />
...<br />
Handy<br />
...<br />
Mobiltelekom<br />
...<br />
Telekom<br />
...<br />
Siemens<br />
...<br />
..<br />
..<br />
ProduktNr Produkttyp Produktgruppe Produkthauptgruppe
Normalisierung führt zum<br />
Schneeflocken-Schema<br />
Produkthauptgruppen<br />
Kunden<br />
Filialen<br />
Produktgruppen<br />
Produkttypen<br />
Zeit<br />
Verkäufe<br />
Verkäufer<br />
Produkte<br />
KWs<br />
Quartale
Anfragen im Sternschema<br />
select sum(v.Anzahl), p.Hersteller<br />
from Verkäufe v, Filialen f, Produkte p, Zeit z, Kunden k<br />
where z.Saison = 'Weihnachten' and<br />
z.Jahr = 2001 and k.wieAlt < 30 and<br />
p.Produkttyp = 'Handy' and f.Bezirk = 'Bayern' and<br />
v.VerkDatum = z.Datum and v.Produkt = p.ProduktNr and<br />
v.Filiale = f.FilialenKennung and v.Kunde = k.KundenNr<br />
group by p.Hersteller;<br />
Einschränkung<br />
der Dimensionen<br />
Join-Prädikate
Algebra-Ausdruck<br />
σ...(Produkte)<br />
σ...(Filialen)<br />
A<br />
A<br />
Verkäufe<br />
A<br />
A<br />
σ...(Kunden)<br />
σ...(Zeit)
Roll-up/Drill-down-Anfragen<br />
select Jahr, Hersteller, sum(Anzahl)<br />
from Verkäufe v, Produkte p, Zeit z<br />
where v.Produkt = p.ProduktNr and v.VerkDatum = z.Datum<br />
and p.Produkttyp = 'Handy'<br />
group by p.Hersteller, z.Jahr;<br />
select Jahr, sum(Anzahl)<br />
from Verkäufe v, Produkte p, Zeit z<br />
where v.Produkt = p.ProduktNr and v.VerkDatum = z.Datum<br />
and p.Produkttyp = 'Handy'<br />
group by z.Jahr;<br />
Roll-up<br />
Drill-down
Ultimative Verdichtung<br />
select sum(Anzahl)<br />
from Verkäufe v, Produkte p<br />
where v.Produkt = p.ProduktNr and p.Produkttyp = 'Handy';
Rollup<br />
Drill-<br />
Down
Flexible Auswertungsmethoden:<br />
slice and dice<br />
Regionen<br />
Produktgruppen<br />
Kunden<br />
Regionen<br />
Regionen<br />
Produktgruppen<br />
Produktgruppen<br />
Kunden<br />
Kunden
Materialisierung von<br />
Aggregaten<br />
insert into Handy2DCube<br />
( select p.Hersteller, z.Jahr, sum(v.Anzahl)<br />
from Verkäufe v, Produkte p, Zeit z<br />
where v.Produkt = p.ProduktNr and p.Produkttyp = 'Handy'<br />
and v.VerkDatum = z.Datum<br />
group by z.Jahr, p.Hersteller ) union<br />
( select p.Hersteller, to_number(null), sum(v.Anzahl)<br />
from Verkäufe v, Produkte p<br />
where v.Produkt = p.ProduktNr and p.Produkttyp = 'Handy'<br />
group by p.Hersteller )<br />
union<br />
( select null, z.Jahr, sum(v.Anzahl)<br />
from Verkäufe v, Produkte p, Zeit z<br />
where v.Produkt = p.ProduktNr and p.Produkttyp = 'Handy'<br />
and v.VerkDatum = z.Datum<br />
group by z.Jahr )<br />
union<br />
( select null, to_number(null), sum(v.Anzahl)<br />
from Verkäufe v, Produkte p<br />
where v.Produkt = p.ProduktNr and p.Produkttyp = 'Handy' );
Relationale Struktur der Datenwürfel
Würfeldarstellung
Der cube-Operator (SQL-3)<br />
select p.Hersteller, z.Jahr, f.Land, sum(v.Anzahl)<br />
from Verkäufe v, Produkte p, Zeit z, Filialen f<br />
where v.Produkt = p.ProduktNr and p.Produkttyp = 'Handy'<br />
and v.VerkDatum = z.Datum and v.Filiale = f.Filialenkennung<br />
group by cube (z.Jahr, p.Hersteller, f.Land);
Wiederverwendung von Teil-Aggregaten<br />
insert into VerkäufeProduktFilialeJahr<br />
( select v.Produkt, v.Filiale, z.Jahr, sum(v.Anzahl)<br />
from Verkäufe v, Zeit z<br />
where v.VerkDatum = z.Datum<br />
group by v.Produkt, v.Filiale, z.Jahr );<br />
select v.Produkt, v.Filiale, sum(v.Anzahl)<br />
from Verkäufe v<br />
group by v.Produkt, v.Filiale
Wiederverwendung von Teil-Aggregaten<br />
select v.Produkt, v.Filiale, sum(v.Anzahl)<br />
from VerkäufeProduktFilialeJahr v<br />
group by v.Produkt, v.Filiale<br />
select v.Produkt, z.Jahr, sum(v.Anzahl)<br />
from Verkäufe v, Zeit z<br />
where v.VerkDatum = z.Datum<br />
group by v.Produkt, z.Jahr
Die Materialisierungs-Hierarchie<br />
{ }<br />
{Produkt}<br />
{Jahr}<br />
{Filiale}<br />
{Produkt, Jahr}<br />
{Produkt, Filiale}<br />
{Filiale, Jahr}<br />
{Produkt, Filiale, Jahr}<br />
Teilaggregate T sind für eine Aggregation A wiederverwendbar<br />
wenn es einen gerichteten Pfad von T nach A gibt<br />
Also T ...... A<br />
Man nennt diese Materialisierungshierarchie auch einen<br />
Verband (Engl. Lattice)
8.4 TPC-D-Benchmark<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-13<br />
◮ Decision-Support-Anfragen in einem hypothetischen Handelsunternehmen<br />
◮ Inzwischen ist dieser Benchmark in zwei Benchmarks aufgeteilt (TPC-H und TPC-R).<br />
Abbildung 8-4: Das TPC-D-Datenmodell
◮ Datenbankgröße skalierbar (SF=1,10,30,100,300,1000), dabei ergibt SF=1 ungefähr 1GB Nutz-<br />
Daten.<br />
◮ 19 Anfragen:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-14<br />
aufsummierender Preisbericht<br />
Gute Lieferanten für bestimmte Teile<br />
nichtabgearbeitete Lieferungen (sortiert nach Priorität)<br />
. . .<br />
Erzeugung neuer Bestellungen (SF*1500)<br />
Entfernung von überflüssigen oder überholten Informationen (ebenfalls SF*1500)<br />
◮ Leistungsgrößen:<br />
Systempreis auf 5 Jahre<br />
TPC-D-Powermetrik QppD@Size: Anzahl der sequentiell ausgeführten Anfragen und<br />
Änderungen pro Stunde, gewichtet mit der Skalierung<br />
Durchsatz QthD@Size: Anzahl der Anfragen und Änderungen pro Stunde bei Parallelisierung<br />
Preis/Leistungsverhältnis (Dollar pro Anfrage pro Stunde): Hierbei wird für die Anzahl der<br />
Anfragen pro Stunde das geometrische Mittel von QppD@Size und QthD@Size verwendet.<br />
◮ Gegenwärtige Werte (für eine 300-GB-Datenbank):<br />
QppD@300GB=2000, QthD@300GB=1200 bei einem Systempreis von 5 Mio $.
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-15<br />
Beispiel: ”<br />
Veränderung des Marktanteils einer Nation innerhalb zweier Jahre“ (Query 8)<br />
(Achtung: Hier SQL-2, nicht Oracle-SQL!)<br />
select o_year,<br />
sum(case<br />
when nation = "’ then volume<br />
else 0<br />
end) / sum(volume) as mkt_share<br />
from ( select extract(year from o_orderdate) as o_year,<br />
l_extendedprice * (1 - l_discount) as volume,<br />
n2.n_name as nation<br />
from part,supplier,lineitem,orders,customer,<br />
nation n1,nation n2,region<br />
where<br />
p_partkey = l_partkey<br />
and s_suppkey = l_suppkey<br />
and l_orderkey = o_orderkey<br />
and o_custkey = c_custkey<br />
and c_nationkey = n1.n_nationkey<br />
and n1.n_regionkey = r_regionkey<br />
and r_name = "’<br />
and s_nationkey = n2.n_nationkey<br />
and o_orderdate between date ’1995-01-01’ and date ’1996-12-31’<br />
and p_type = "’<br />
) as all_nations<br />
group by o_year<br />
order by o_year;
Beispiel: ”<br />
Bestimmng des Brutto-Umsatzes bestimmter Produkte“ (Query 19) (Typische Anfrage<br />
für Data Mining-Tools)<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-16<br />
select sum(l_extendedprice* (1 - l_discount)) as revenue<br />
from lineitem, part<br />
where ( p_partkey = l_partkey and p_brand = ’’<br />
and p_container in (’SM CASE’, ’SM BOX’, ’SM PACK’, ’SM PKG’)<br />
and l_quantity >= and l_quantity = and l_quantity = and l_quantity
8.5 SQL-Support für Data Warehousing<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-17<br />
8.5.1 Erweiterte Anfrageunterstützung<br />
In der SQL GROUP BY-Klausel können Rollup- und Cube-Anfragen direkt formuliert werden.<br />
Beispiel:<br />
EMP: EMPNO ENAME JOB MGR HIREDA SAL COMM DEPTNO<br />
----- ---------- --------- --------- ------ --------- --------- ---------<br />
7369 SMITH CLERK 7902 171280 800 20<br />
7499 ALLEN SALESMAN 7698 200281 1600 300 30<br />
7521 WARD SALESMAN 7698 220281 1250 500 30<br />
7566 JONES MANAGER 7839 020481 2975 20<br />
7654 MARTIN SALESMAN 7698 280981 1250 1400 30<br />
7698 BLAKE MANAGER 7839 010581 2850 30<br />
7782 CLARK MANAGER 7839 090681 2450 10<br />
7788 SCOTT ANALYST 7566 091282 3000 20<br />
7839 KING PRESIDENT 171181 5000 10<br />
7844 TURNER SALESMAN 7698 080981 1500 0 30<br />
7876 ADAMS CLERK 7788 120183 1100 20<br />
7900 JAMES CLERK 7698 031281 950 30<br />
7902 FORD ANALYST 7566 031281 3000 20<br />
7934 MILLER CLERK 7782 230182 1300 10<br />
DEPT: DEPTNO DNAME LOC<br />
--------- -------------- -------------<br />
10 ACCOUNTING NEW YORK<br />
20 RESEARCH DALLAS<br />
30 SALES CHICAGO<br />
40 OPERATIONS BOSTON
◮ Rollup-Anfragen:<br />
select deptno,job,count(*),sum(sal)<br />
from emp<br />
group by rollup (deptno,job)<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-18<br />
DEPTNO JOB COUNT(*) SUM(SAL)<br />
--------- --------- --------- ---------<br />
10 CLERK 1 1300<br />
10 MANAGER 1 2450<br />
10 PRESIDENT 1 5000<br />
10 3 8750<br />
20 ANALYST 2 6000<br />
20 CLERK 2 1900<br />
20 MANAGER 1 2975<br />
20 5 10875<br />
30 CLERK 1 950<br />
30 MANAGER 1 2850<br />
30 SALESMAN 4 5600<br />
30 6 9400<br />
14 29025<br />
◮ Wie sieht diese Anfrage ohne rollup aus?
◮ Bestimmung aller Werte eines Datenwürfels:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-19<br />
select deptno,job,sum(sal) DEPTNO JOB SUM(SAL)<br />
from emp -------- --------- ---------<br />
group by cube(deptno,job); 10 CLERK 1300<br />
10 MANAGER 2450<br />
10 PRESIDENT 5000<br />
10 8750<br />
20 ANALYST 6000<br />
20 CLERK 1900<br />
20 MANAGER 2975<br />
20 10875<br />
30 CLERK 950<br />
30 MANAGER 2850<br />
30 SALESMAN 5600<br />
30 9400<br />
ANALYST 6000<br />
CLERK 4150<br />
MANAGER 8275<br />
PRESIDENT 5000<br />
SALESMAN 5600<br />
29025
◮ Weitere Beispiele:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-20<br />
select deptno,job,count(*),sum(sal)<br />
from emp<br />
group by rollup (deptno,job)<br />
having grouping(job)=1<br />
DEPTNO JOB COUNT(*) SUM(SAL)<br />
--------- --------- --------- ---------<br />
10 3 8750<br />
20 5 10875<br />
30 6 9400<br />
14 29025
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-21<br />
select decode(grouping(dname),1,’All Departements’,dname)<br />
AS departement,<br />
decode(grouping(job),1,’All Jobs’,job)<br />
AS job,<br />
count(*), sum(sal)<br />
from<br />
where<br />
emp,dept<br />
emp.deptno=dept.deptno<br />
group by rollup (dname,job)<br />
DEPARTEMENT JOB COUNT(*) SUM(SAL)<br />
---------------- --------- --------- ---------<br />
ACCOUNTING CLERK 1 1300<br />
ACCOUNTING MANAGER 1 2450<br />
ACCOUNTING PRESIDENT 1 5000<br />
ACCOUNTING All Jobs 3 8750<br />
RESEARCH ANALYST 2 6000<br />
RESEARCH CLERK 2 1900<br />
RESEARCH MANAGER 1 2975<br />
RESEARCH All Jobs 5 10875<br />
SALES CLERK 1 950<br />
SALES MANAGER 1 2850<br />
SALES SALESMAN 4 5600<br />
SALES All Jobs 6 9400<br />
All Departements All Jobs 14 29025
◮ Top-n/Bottom-n-Anfragen:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-22<br />
oft interessieren nur die besten/schlechtesten Ergebnisse.<br />
SQL-3 bietet hierzu eine neue Klausel ”<br />
STOP AFTER 〈n〉“.<br />
Derartige Anfragetypen wurden zuvor von SQL nicht adäquat unterstützt.<br />
Beliebter Trick: Viele DBMSe nummerieren die Tupel in Tabellen und Anfrageergebnissen.<br />
Risiko: Fehlinterpretation der Nummerierung, Änderung der Implementierung des DBMS, . . .<br />
Beispiel: Oracle 8i:<br />
⊲ Attribut rownum enthält die Nummer eines Tupels<br />
⊲ Folgende Anfrage scheitert:<br />
select ename, sal ENAME SAL<br />
from emp ---------- ---------<br />
where rownum < 6 ALLEN 1600<br />
order by sal desc WARD 1250<br />
MARTIN 1250<br />
SMITH 800<br />
⊲ In Oracle-8i wird erst rownum gesetzt und dann sortiert!
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-23<br />
⊲ Lauffähige Oracle8i-Lösungen:<br />
□ create or replace view emp_view as<br />
select * from emp<br />
order by sal desc<br />
select ename,sal<br />
from emp_view<br />
where rownum < 6<br />
□ oder auch<br />
select ename,sal<br />
from (select * from emp order by sal desc)<br />
where rownum < 6<br />
□ Ergebnis:<br />
ENAME<br />
SAL<br />
---------- ---------<br />
KING 5000<br />
SCOTT 3000<br />
FORD 3000<br />
JONES 2975<br />
BLAKE 2850
8.5.2 Datenmodellierung<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-24<br />
◮ Dimensionen können hierarchisch strukturiert werden.<br />
◮ Dies kann in Anfragen und bei der Anfrageoptimierung (Materialisierung von Anfragen) effizient<br />
eingesetzt werden.<br />
◮ Beispiel: (Oracle)<br />
◮ Data-Warehouse-Tabellen:<br />
bundeslaender(bundeslaender code,budeslaender name)<br />
staedte(staedte code,staedte name,bundeslaender code)<br />
produkte(produkte code,produkte name,marke)<br />
verkaeufe(verkauf code,datum,betrag,produkte code,staedte code)<br />
zeit(datum,woche,monat, monats name,quartal,jahr,jahreszeit)
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-25<br />
◮ Flexible Definition von Dimensionen:<br />
create dimension zeit_dim<br />
level datum is zeit.datum<br />
level woche is zeit.woche<br />
level monat is zeit.monat<br />
level quartal is zeit.quartal<br />
level jahreszeit is zeit.jahreszeit<br />
level jahr is zeit.jahr<br />
hierarchy kalender_rollup (<br />
datum child of<br />
monat child of<br />
quartal child of<br />
jahr)<br />
hierarchy jahreszeit_rollup(<br />
datum child of<br />
jahreszeit child of<br />
jahr)<br />
hierarchy wochen_rollup (<br />
datum child of<br />
woche child of<br />
jahr)<br />
attribute monat determines zeit.monats_name;
◮ Normalisierte Dimensionen:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-26<br />
create dimension regionen_dim<br />
level staedte_code is staedte.staedte_code<br />
level staedte_name is staedte.staedte_name<br />
level bundeslaender_code is bundeslaender.bundeslaender_code<br />
level bundeslaender_name is bundeslaender.bundeslaender_name<br />
hierarchy bundeslaender_rollup (<br />
staedte_code CHILD OF<br />
bundeslaender_code<br />
JOIN KEY staedte.bundeslaender_code REFERENCES bundeslaender_code)<br />
ATTRIBUTE staedte_code determines staedte.staedte_name<br />
ATTRIBUTE bundeslaender_code DETERMINES bundeslaender.bundeslaender_name;
8.5.3 Optimierung von Data Warehouse-Anfragen<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-27<br />
◮ Wesentliches Problem: der Join mit den verschiedenen Dimensionen wird dauernd benötigt.<br />
◮ Idee:<br />
Bestimmte Anfragen kommen immer wieder als Teilanfragen vor.<br />
Diese Anfragen werden als Sicht berechnet und gespeichert! (⇒ Materialized View)<br />
Darauf basierende Anfragen greifen dann nicht mehr auf die Basistabellen, sondern auf den<br />
Materialized View zu.<br />
Dabei werden auch die in der HIERACHY-Klausel Dimensionen mitberücksichtigt!<br />
◮ Beispiel:<br />
create materialized view verkaeufe_summary<br />
enable query rewrite<br />
as select p.marke, b.bundeslaender_code, s.staedte_name, z.monat,<br />
sum(v.betrag) as total_verkaeufe<br />
from verkaeufe v, staedte s, zeit z, bundeslaender b, produkte p<br />
where v.staedte_code = s.staedte_code<br />
and s.bundeslaender_code = b.bundeslaender_code<br />
and v.datum = z.datum<br />
and v.produkte_code = p.produkte_code<br />
group by p.marke, b. bundeslaender_code, s.staedte_name, z.monat;
Anfrage:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-28<br />
select p.marke, b.bundeslaender_name, z.jahr,<br />
sum(v.betrag) as total_verkaeufe<br />
from verkaeufe v, staedte s, zeit z, bundeslaender b, produkte p<br />
where v.staedte_code = s.staedte_code<br />
and s.bundeslaender_code = b.bundeslaender_code<br />
and v.datum = z.datum<br />
and v.produkte_code = p.produkte_code<br />
group by p.marke, b. bundeslaender_name, z.jahr;<br />
Execution Plan<br />
--------------------------------------------------------------<br />
SELECT STATEMENT Optimizer-CHOOSE<br />
SORT (GROUP BY)<br />
HASH JOIN<br />
HASH JOIN<br />
TABLE ACCESS (FULL) OF ’BUNDESLAENDER’<br />
TABLE ACCESS (FULL) OF ’VERKAEUFE_SUMMARY’<br />
VIEW<br />
SORT (UNIQUE)<br />
TABLE ACCESS (FULL) OF ’ZEIT’
◮ Weitere Optimierungsaspekte:<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-29<br />
Spezielle Algorithmen für Star-Joins<br />
Load-Strategien fürs Data Warehouse:<br />
Wie lädt man 1 TByte oder 20 Mio. Transaktionen in vier Stunden in das Data Warehouse?
8.6 Weitere Fragestellungen<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-30<br />
Im Zusammenhang mit Data Warehouses werden eine ganze Reihe weiterer aktueller Forschungsfragen<br />
behandelt, darunter im Zusammenhang mit dem sog. ”<br />
ETL-Prozess“ (Extract–Transform–Load):<br />
◮ (konsistente) Integration von Daten aus verschiedenen Quellen<br />
◮ Auswahl der zu integrierenden Daten<br />
◮ Auswahl einer gemeinsamen Darstellung (Modell)<br />
◮ Bereinigung von Fehlern, Vervollständigung<br />
◮ Erkennen von Änderungen in operationalen DBen<br />
◮ (inkrementelles) Propagieren der Änderungen ins Warehouse<br />
◮ erforderliche Meta-Daten<br />
◮ . . .
ETL-Prozess<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-31<br />
data warehouse<br />
data staging area<br />
Loading<br />
Completion<br />
Cleaning<br />
Integration<br />
aux. DB<br />
Completion<br />
Integration<br />
Cleaning<br />
Transformation<br />
Transformation Completion rules<br />
Monitoring<br />
&<br />
Extraction<br />
Monitoring<br />
&<br />
Extraction<br />
Monitoring<br />
&<br />
Extraction<br />
operational<br />
DB<br />
operational<br />
DB<br />
operational<br />
DB
8.7 Literaturhinweise<br />
c○ M. Scholl, 2005/06 – Informationssysteme: 8. Data Warehousing 8-32<br />
Chaudhuri, S. und U. Dayal (1997). An Overview of Data Warehousing and OLAP Technology. ACM SIGMOD<br />
Record, 26(1):65–74.<br />
Craig, R.S., J. Vivona und D. Bercovitch (1999). Microsoft Data Warehousing. Wiley.<br />
Debevoise, T. (1999). The data warehouse method. Prentice Hall.<br />
Inmon, W.H., K. Rudin, C. Buss und R. Sousa (1999). Data Warehouse Performance. Wiley.<br />
Kemper, A. und A. Eickler (2001). Datenbanksysteme: Eine Einführung. Oldenbourg, 4 Aufl.<br />
Kimball, R. (1996). The data warehouse toolkit: practical techniques for building dimensional data warehouses.<br />
Wiley.<br />
Kisseleff, A. (1999). Oracle8i Warehousing. In: 12. DOAG, Stuttgart.<br />
Kurz, A. (1999). Data Warehousing – Enabling Technology. mitp Verlag, Bonn.<br />
TPC (1999). The TPC Benchmark H. http://www.tpc.org.