29.01.2014 Aufrufe

Verkäufe

Verkäufe

Verkäufe

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!