Multidimensionale Datenbanken Teil I: Operationen in mehrdimensionalen Daten Patrick Sager & Thomas Stocker 1 Übersicht Teil I: Operationen in mehrdimensionalen Daten Motivation Aggregate und GROUP BY in Standard-SQL Cross-Tables Operatoren: CUBE ROLLUP Teil II: Modellierung und Erstellung eines Data Cubes mit dem MS OLAP Manager für TPC-D Daten Aufgabe Begriffe Architektur des Servers Design unserer Cubes Verbesserungsvorschläge Patrick Sager & Thomas Stocker Übersicht 2 Daten-Analyse Summiere Werte und extrahiere statistische Informationen Meist nach mehreren Kriterien: Tiefste Temperatur in New York an Weihnachten während den letzten 100 Jahren Durchschnittlicher Umsatz der Abteilung „Schuhe“ in Frankreich im Monat Mai Unterstützung der Entscheidungsfindung in der Betriebsführung (MIS) Ziel: Möglichst einfacher und effizienter Zugriff auf solche Informationen Patrick Sager & Thomas Stocker Motivation 3 Mehrdimensionale Daten im Relationen-Modell Länge 37:58:33N 43:45:22N 23:13:43N Breite 122:45:28W 90:34:23W 34:16:18W Wetter Höhe 500 250 710 Temperatur 20 18 16 Luftdruck 1029 1002 1020 Höhe (20, 1029) Länge Breite Patrick Sager & Thomas Stocker Motivation 4 Aggregate Prinzip: Kombiniere alle Werte eines Attributes in einen einzigen skalaren Wert. Aggregatsfunktionen in Standard-SQL COUNT(), SUM(), MIN(), MAX(), AVG() Erweiterte Versionen von SQL bieten zusätzliche Aggregatsfunktionen (Statistik, Physik, ...). Einige Systeme erlauben es dem Benutzer eigene Aggregatsfunktionen hinzuzufügen. Patrick Sager & Thomas Stocker Aggregate und GROUP BY in Standard-SQL 5 GROUP BY Durch den Standard-SQL GROUP BY Operator wird eine Tabelle in Gruppen unterteilt. Auf jede Gruppe wird dann die Aggregatsfunktion angewendet. Das Resultat ist eine Menge von Werten. Aggregate Values Grouping Values Partitioned Table Sum() Patrick Sager & Thomas Stocker Aggregate und GROUP BY in Standard-SQL 6 Cross-Table Darstellung einer 2-dimensionalen Aggregation erfolgt am einfachsten in einer Cross-Table (Pivottabelle): T-Shirt Verkäufe T-Shirt 1996 1997 rot 500 450 blau 300 400 total (ALL) 800 850 Patrick Sager & Thomas Stocker total (ALL) 950 700 1650 Cross-Tables 7 Relationale Darstellung der Cross-Table 'ALL' wird verwendet um Mehrfach-Aggregationen auszudrücken. Verkauf: Zusammenfassung Modell Jahr Farbe Stücke T-Shirt 1996 rot 500 T-Shirt 1996 blau 300 T-Shirt 1997 rot 450 T-Shirt 1997 blau 400 T-Shirt ‘ALL’ rot 950 T-Shirt ‘ALL’ blau 700 ‘ALL’ T-Shirt 1996 800 ‘ALL’ T-Shirt 1997 850 ‘ALL’ T-Shirt ‘ALL’ 1650 Patrick Sager & Thomas Stocker SELECT Modell, 'ALL', 'ALL', SUM(Stücke) FROM Verkauf WHERE Modell = 'T-Shirt' GROUP BY Modell UNION SELECT Modell, Jahr, 'ALL', SUM(Stücke) FROM Verkauf WHERE Modell = 'T-Shirt' GROUP BY Modell, Jahr UNION SELECT Modell, 'ALL', Farbe, SUM(Stücke) FROM Verkauf WHERE Modell = 'T-Shirt' GROUP BY Modell, Farbe UNION SELECT Modell, Jahr, Farbe, SUM(Stücke) FROM Verkauf WHERE Modell = 'T-Shirt' GROUP BY Modell, Jahr, Farbe; Cross-Tables 8 CUBE - Operator Data Cube als n-dimensionale Generalisierung von GROUP BY und Aggregaten 0D: Punkt 1D: Linie mit Punkt 2D: Pivottabelle (Fläche mit 2 Linien und einem Punkt) 3D: Würfel mit 3 sich schneidenden 2D-Cubes Vorschlag der Erweiterung des SQL GROUP BYs GROUP BY ( { ( <column name> | <expression>) [ AS <correlation name>] [ <collate clause> ] ,...} [ WITH ( CUBE | ROLLUP)] ) Patrick Sager & Thomas Stocker CUBE 9 Data-CUBE Group By (mit Total) Aggregat Pivot Tabelle T-Shirt Hosen nach Farbe nach Farbe rot blau weiss rot blau weiss Sum nach Modell Sum Sum Data Cube und Sub-Space Aggregates Hosen T-Shirts Nach Jahr 1994 1995 1996 1997 nach Modell Nach Modell & Jahr rot blau weiss Nach Farbe & Jahr Sum Patrick Sager & Thomas Stocker Nach Modell & Farbe nach Farbe CUBE 10 Beispiel eines 3D-Data-Cubes Verkauf Modell T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt Hosen Hosen Hosen Hosen Hosen Hosen Hosen Hosen Hosen Jahr 1995 1995 1995 1996 1996 1996 1997 1997 1997 1995 1995 1995 1996 1996 1996 1997 1997 1997 Farbe rot weiss blau rot weiss blau rot weiss blau rot weiss blau rot weiss blau rot weiss blau Stücke 300 75 250 500 100 300 450 500 400 100 220 300 50 100 420 70 60 300 CUBE SELECT Modell, Jahr, Farbe, SUM(Stücke) AS Total FROM Verkauf WHERE Modell IN {‘T-Shirt‘, ‘Hosen‘} AND Jahr BETWEEN 1995 AND 1997 GROUP BY Modell, Jahr, Farbe WITH CUBE; Patrick Sager & Thomas Stocker DATA CUBE Modell Jahr Farbe Total ALL ALL ALL 4495 T-Shirt ALL ALL 2875 Hosen ALL ALL 1620 ALL 1995 ALL 1245 ALL 1996 ALL 1470 ALL 1997 ALL 1780 ALL ALL rot 1470 ALL ALL weiss 1055 ALL ALL blau 1970 T-Shirt 1995 ALL 625 T-Shirt 1996 ALL 900 T-Shirt 1997 ALL 1350 Hosen 1995 ALL 620 Hosen 1996 ALL 570 Hosen 1997 ALL 430 T-Shirt ALL rot 1250 T-Shirt ALL weiss 675 T-Shirt ALL blau 950 Hosen ALL rot 220 Hosen ALL weiss 380 Hosen ALL blau 1020 ALL 1995 rot 400 ALL 1995 weiss 295 ALL 1995 blau 550 ALL 1996 rot 550 ALL 1996 weiss 200 ALL 1996 blau 720 ALL 1997 rot 520 ALL 1997 weiss 560 ALL 1997 blau 700 CUBE 11 Zugriff auf Elemente des CUBEs Zusätzliche Angabe des Anteils der verkauften Stücke an den total verkauften Stücken: SELECT v.Modell, v.Jahr, v.Farbe, SUM(Stücke) AS Total, SUM(Stücke) / Total(ALL, ALL, ALL) AS Verhältnis FROM Verkauf v WHERE Modell = 'T-Shirt' AND Jahr BETWEEN 1996 AND 1997 GROUB BY Modell, Jahr, Farbe WITH CUBE v.Modell T-Shirt T-Shirt T-Shirt T-Shirt Patrick Sager & Thomas Stocker v.Jahr 1996 1996 1997 1997 v.Farbe rot blau rot blau Total 500 300 450 400 Verhältnis 0.303 0.182 0.273 0.242 CUBE 12 Berechnung des Data CUBEs Grösse des CUBEs: Falls Basisrelation N Attribute mit Kardinalitäten C1, C2,..., CN hat, so besitzt der CUBE (Ci + 1) Tupel. Berechnung des CUBEs: Da der CUBE Operator eine Erweiterung der Aggregate und des GROUP BY's ist, verwende die dort bekannten Techniken: Berechne Aggregate auf tiefst möglichem Systemlevel Verwende bei grossen Strings Indizes Hashing Einfacher Algorithmus: Alloziere Handle für jede CUBE-Zelle Rufe für jedes Tupel alle betroffenen Handles auf (2N) Übernehme die Resultate Laufzeit: T*2N (T: Anzahl Tupel; N: Anzahl Dimensionen) Patrick Sager & Thomas Stocker CUBE 13 Data-CUBE Hosen T-Shirts Nach Jahr 1994 1995 1996 1997 nach Modell Nach Modell & Jahr rot blau weiss Nach Farbe & Jahr Sum Patrick Sager & Thomas Stocker Nach Modell & Farbe nach Farbe CUBE 14 Berechnung eines Data-CUBEs am Beispiel Wenn die Aggregatsfunktion distributiv ist, so kann man den CUBE einfacher berechnen: Baue den 2D Kern eines 2*3 CUBE auf 1995 300 250 1996 500 300 1997 450 400 total rot blau total 1995 300 250 550 1996 500 300 800 1997 450 400 850 total 1250 950 rot blau total 1995 300 250 550 1996 500 300 800 1997 450 400 850 total 1250 950 2200 rot blau total Berechne die 1D Kanten Berechne den 0D Punkt Patrick Sager & Thomas Stocker CUBE 15 MS-SQL-Server Abweichung zur bisherigen Definition des CUBE-Operators: NULL Wert anstelle des ALL Wertes Neue Funktion GROUPING(): TRUE, falls Element ein ALL Wert FALSE sonst Überall wo vorher im Resultat der ALL-Wert erschien, kommt jetzt NULL, und das dazugehörige grouping Feld enthält TRUE. Patrick Sager & Thomas Stocker CUBE 16 MS-SQL-Server (Beispiel) Select Modell, Jahr, Farbe, SUM(Stücke), GROUPING(Modell),GROUPING(Jahr),GROUPING(Farbe) FROM Verkauf WHERE Modell = 'T-Shirt' AND Jahr BETWEEN 1996 AND 1997 GROUP BY Modell, Jahr, Farbe WITH CUBE; Version des MS-SQL-Servers "original" Modell T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt Jahr 1996 1996 1997 1997 ‘ALL’ ‘ALL’ 1996 1997 ‘ALL’ Farbe rot blau rot blau rot blau ‘ALL’ ‘ALL’ ‘ALL’ Stücke 500 300 450 400 950 700 800 850 1650 Patrick Sager & Thomas Stocker Modell Jahr Farbe Stücke T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt T-Shirt 1996 1996 1997 1997 NULL NULL 1996 1997 NULL rot blau rot blau rot blau NULL NULL NULL 500 300 450 400 950 700 800 850 1650 Grouping (Modell) FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE Grouping (Jahr) FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE Grouping (Farbe) FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE CUBE 17 Drill-down Modell ALL Jahr ALL Farbe ALL Stücke 2490 Modell T-Shirt Hosen Jahr ALL ALL Farbe ALL ALL Stücke 1650 840 Modell T-Shirt Jahr 1996 1997 1996 1997 Farbe ALL ALL ALL ALL Stücke 800 850 470 370 Jahr 1996 Farbe rot blau rot blau rot blau rot blau Stücke 500 300 450 400 50 420 70 300 Hosen Modell T-Shirt 1997 Hosen 1996 1997 Patrick Sager & Thomas Stocker Roll-up Drill-down / Roll-up ROLLUP 18 Symmetrische vs. Asymmetrische Aggregation (Modell, Jahr, Farbe) (Modell, Jahr, ALL) (ALL, Jahr, Farbe) (Modell, ALL, Farbe) (Modell, ALL, ALL) (ALL, Jahr, ALL) (ALL, ALL, Farbe) (ALL, ALL, ALL) symmetrischen Aggregation: Berechne Resultate aller Knoten (CUBE) asymmetrische (lineare) Aggregation: Berechne nur die Resultate der Knoten entlang eines Pfades (ROLLUP) Patrick Sager & Thomas Stocker ROLLUP 19 ROLLUP (Beispiel) SELECT Modell, Jahr, Farbe, SUM(Stücke) AS Total, FROM Verkauf WHERE Jahr BETWEEN 1996 AND 1997 GROUB BY Modell, Jahr, Farbe WITH ROLLUP Patrick Sager & Thomas Stocker Modell T-Shirt T-Shirt T-Shirt T-Shirt Hosen Hosen Hosen Hosen T-Shirt T-Shirt Hosen Hosen T-Shirt Hosen ‘ALL’ Jahr 1996 1996 1997 1997 1996 1996 1997 1997 1996 1997 1996 1997 ‘ALL’ ‘ALL’ ‘ALL’ Farbe rot blau rot blau rot blau rot blau ‘ALL’ ‘ALL’ ‘ALL’ ‘ALL’ ‘ALL’ ‘ALL’ ‘ALL’ ROLLUP Total 500 300 450 400 50 420 70 300 800 850 470 370 1650 840 2490 20 Ausblick Materialisierung des CUBEs Vorschlag mit neuer Arithmetik in [Agrawal 97] Hierarchische Dimensionen Zeit: Jahr, Monat, Woche, Tag Ort: Kontinent, Land, Landesteil Einfaches Browsen für Online Decision Support Patrick Sager & Thomas Stocker Ausblick 21