Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 SQL-Erweiterungen für Data Warehousing Songbo Wang Januar 2004.

Ähnliche Präsentationen


Präsentation zum Thema: "1 SQL-Erweiterungen für Data Warehousing Songbo Wang Januar 2004."—  Präsentation transkript:

1 1 SQL-Erweiterungen für Data Warehousing Songbo Wang Januar 2004

2 2 Einführung Thema SQL-Erweiterungen für Data Warehousing Inhalte der Erweiterungen 1. Mehrfachgruppierungen SQL für Aggregation im Data Warehousing 2. Spezifikation sequenzbasierter Operationen SQL für Analyse im Data Warehousing

3 3 1. Mehrfachgruppierungen 1.1 Motivation Einfache Anfragenoperation erfüllen schon Anforderung der gewünschten Ergebnisse in Data Warehousing nicht. Um dieses brennendes Problem zu lösen, wird SQL gezielt erweitet, hierfür wurden insbesondere zwei Erweiterung ––––– Mehrfachgruppierungen und analytische Funktionen – auf Ebene von SQL entwickelt.

4 4 1.2 Grouping Sets() Die erweiterte Gruppierungsanweisung Grouping Sets kann mehrere nicht notwendigerweise disjunkte Attributkombinationen oder gegebenfalls auch leere Mengen enthalten. Frage: Welcher Unterschied ist zwischen GROUP BY und Grouping Sets? Dazu das folgende Beispiel:

5 5 Beispiel 1.1: SELECT Time, Region, Profit, COUNT(*) FROM Sales GROUP BY GROUPING SETS( (Time, Region), (Time, Profit), (Time), ( ) ); Anmerkung: Zuerst nach Time und Region, und dann nach Time und Profit, und dann nach Time gruppieren, zuletzt wegen leerer Menge die triviale Gruppe bilden. Diese Statement ist äqualent zu: SELECT Time, Region, Profit, COUNT(*) FROM Sales GROUP BY Time, Region UNION ALL SELECT Time, Region, COUNT(*) FROM Sales GROUP BY Time, Profit UNION ALL SELECT Time, COUNT(*) FROM Sales GROUP BY Time UNION ALL SELECT COUNT(*) FROM Sales GROUP BY ( );

6 6 Time Region Profit COUNT(*) Europa Asia Europa Asia

7 7 Form 1.1 Grouping Sets Statement und Äquivalent GROUP BY Grouping Sets Statement GROUP BY Statement GROUP BY GROUPING SETS(A, B, C) GROUP BY GROUPING SETS(A, B, (B, C)) GROUP BY GROUPING SETS((A, B, C)) GROUP BY GROUPING SETS(A, (B), ( )) GROUP BY GROUPING SETS(A, ROLLUP(B, C)) GROUP BY A UNION ALL GROUP BY B UNION ALL GROUP BY C GROUP BY A UNION ALL GROUP BY B UNION ALL GROUP BY B, C GROUP BY A, B, C GROUP BY A UNION ALL GROUP BY B UNION ALL GROUP BY ( ) GROUP BY A UNION ALL GROUP BY ROLLUP(B, C)

8 8 Grouping Sets hat folgende allgemeine Kombinationssemantiken: Multiplikation i.S. der Bildung des kartesischen Produkts bei Gruppierungsattributen innerhalb einer Gruppierungskombination. Addition i.S. einer Vereinigung bei Gruppierungskombinationen innerhalb einer Gruppierungsmenge.

9 9 Form 1.2 Fall 1: GROUP BY A, B ≡ GROUP BY GROUPING SET ( (A, B) ) → (A, B) Fall 2: GROUP BY GROUPING SET ( (A, B), (A, C), (A) ) ≡ GROUP BY A, GROUP BY GROUPING SET ( (B), (C), ( ) ) ↓ (A) × (B) (A, B) (C) → (A, C) ( ) (A) Fall 3: GROUP BY GROUPING SET ( (A, B), (B, C) ), GROUP BY GROUPING SET ( (D, E), (D), ( ) ) ↓ ↓ (A, B, D, E) (A, B) × (D, E) (A, B, D) (B, C) (D) → (A, B) ( ) (B, C, D, E) (B, C, D) (B, C)

10 GROUPING-Funktion Ziel: Um einen systemseitig generierten NULL-Wert von benutzerseitig in der Datenbank repräsentierten NULL- Werten unterscheiden zu können, wird GROUPING() angeboten. z.B. generierte NULL-Werte von ROLLUP und CUBE. Wert: wenn über dieses Attribute hinwegaggregiert wird, d.h. das Gruppierungsattribut für das aktuelle Tupel an einer Gruppierung nicht beteiligt ist, liefert die GROUPING Funktion den numerischen Wert 1. Andernfalls, wird der Wert 0 zurückgeben, d.h. bei Gruppierung nach dem entsprechenden Attribut.

11 11 Syntax: SELECT... [GROUPING(grouping_column)...]... GROUP BY { grouping_column (| CUBE | ROLLUP| GROUPING SETS) (grouping_column) }

12 12 Beispiel 1.2: SELECT Time, Region, Department, SUM(Profit) AS Profit, GROUPING(Time) as T, GROUPING(Region) as R, GROUPING(Department) as D FROM Sales GROUP BY GROUPING SETS( (Time, Region, Department), (Time, Region), (Time), ( ) );

13 13 Time Region Department Profit T R D Europa VideoRental 75, Europa VideoSales 74, Europa - 149, Asia VideoRental 89, Asia VideoSales 115, Asia - 204, , Europa VideoRental 82, Europa VideoSales 85, Europa - 167, Asia VideoRental 101, Asia VideoSales 137, Asia - 238, , ,

14 Multidimensionale Gruppierung CUBE()-Operator Ziel:  Um die Visualisierung multidimensionaler Datenwürfel in Form einer statistischen Tabelle alle Zeilen- und Spaltensummen zu berechnen.  Um Teilsummen zu berechnen.  Um Gesamtsummen zu berechnen. Syntax: SELECT... GROUP BY CUBE ( grouping_column_reference_list)

15 15 Eigenschaft: Ein CUBE()-Operator generiert für eine n-stellige Gruppierungskombination alle möglichen davon abhängigen Kombinationen und resultiert in 2 n Tupelmengen, aggregiert nach jeweils unterschiedlicher Gruppierungskombination. Beispiel 1.3: SELECT Time, Region, Department, SUM(Profit) AS Profit, GROUPING(Time) as T, GROUPING(Region) as R, GROUPING(Department) as D FROM Sales GROUP BY CUBE ( Time, Region, Department );

16 16 Time Region Department Profit T R D Europa VideoRental 75, Europa VideoSales 74, Europa - 149, Asia VideoRental 89, Asia VideoSales 115, Asia - 204, VideoRental 164, VideoSales 189, , Europa VideoRental 82, Europa VideoSales 85, Europa - 167, Asia VideoRental 101, Asia VideoSales 137, Asia - 238, VideoRental 183, VideoSales 222, , Europa VideoRental 157, Europa VideoSales 159, Europa - 316, Asia VideoRental 190, Asia VideoSales 252, Asia - 442, VideoRental 347, VideoSales 411, ,

17 17 Form 1.3: Fall 1: GROUP BY CUBE(A, B) ≡ GROUP BY GROUPING SET ( (A, B), (A), (B), ( ) ) Fall 2: GROUP BY CUBE(A, B, C) ≡ GROUP BY GROUPING SET ( (A, B, C), (A, B), (A, C), (B,C), (A), (B), (C), ( ) ) Fall 3: GROUP BY CUBE(A, B), CUBE( B, C) ↓ ↓ (A, B, B, C) = (A, B, C), (A, B, B) = (A, B), (A, B, C) (A, B) (B, C) (A, B), (A, B, C), (A, B) (A) × (B) → (A, C), (A), (B, B, C) = (B, C) (B) (C) (B, B), (B), (B, C) ( ) ( ) (B), (B, C), (B) (C), ( ) Fall 4: GROUP BY GROUPING SET ( CUBE(A, B), CUBE(B, C)) ≡ GROUP BY GROUPING SET ( (A, B), (A), (B), ( ), (B,C), (B), (C), ( ) ) Anmerkung: In Fall 3 wird deutlich, dass es bei der Auflösung zu Duplikaten kommt, wenn die Gruppierungsattributemenge nicht disjunkt sind.

18 ROLLUP()-Operator Fragen: Eine multidimensionale Gruppierung mit dem CUBE()- Operator resultiert in einer ungewünschten Redundanz in der Ergebnisrelation, d.h. alle Kombinationen sind bedingt redundant (obiges Beispielszenario), da zwischen den Gruppierungsattributen vielleicht funktionale Abhängigkeiten vorliegen. Lösung: Zur redundanzfreien Konstruktion eines hierarchischen Datenwürfels wird der ROLLUP()-Operator jeweils angewandt auf die Klassifikationsattribute einer Dimension herangezogen. Syntax: SELECT... GROUP BY ROLLUP ( grouping_column_reference_list)

19 19 Beispiel 1.4: SELECT Time, Region, Department, SUM(Profit) AS Profit, FROM Sales GROUP BY ROLLUP ( Time, Region, Department ) ; Time Region Department Profit Europa VideoRental 75, Europa VideoSales 74, Europa - 149, Asia VideoRental 89, Asia VideoSales 115, Asia - 204, , Europa VideoRental 82, Europa VideoSales 85, Europa - 167, Asia VideoRental 101, Asia VideoSales 137, Asia - 238, , ,000

20 20 Form 1.4: Fall 1: ROLLUP (A 1,…., A n –1, A n ) ≡ GROUPING SETS ( ( ), (A 1 ), (A 1, A 2 ), (A 1,…., A n -1 ), (A 1,…., A n –1, A n ) ) Fall 2: GROUP BY ROLLUP (A 1, A 2,…., A n ), ROLLUP (B 1, B 2,…., B m ) ↓ ↓ () () (A 1 ) × (B 1 ) … … (A 1, A 2,…., A n-1 ) (B 1, B 2,…., B m-1 ) (A 1, A 2,…., A n-1, A n ) (B 1, B 2,…., B m-1, B m ) Fall 3: CUBE(A, B) ≡ GROUPING SETS ( (A, B), (A), (B), ( ) ) ≡ GROUPING SETS ( ( ), (A) ), GROUPING SETS ( ( ), (B) ) ≡ ROLLUP (A), ROLLUP (B)

21 Partielle multidimensionale Gruppierung Motivation: Manchmal sind nicht alle Einträge einer Dimension oder alle Kombinationen einer komplexen Gruppierungsbedingung immer gewünscht. Lösung: Der Begriff partielle multidimensionale Gruppierung wird eingeführt. Es gibt drei unterschiedliche Weisen für partielle multidimensionale Gruppierung.  Partielle Gruppierung auf Schemaebene  Partielle Gruppierung auf Ebene einzelner Klassifikationsstufen  Partielle Gruppierung einzelner Dimensionsknoten

22 Partielle Gruppierung auf Schemaeben Konzeption: Wie beim swiss cheese cube sind nicht alle Kombinationen bei ein Übergang von vollständigen zu partiellen Datenwürfeln enthalten, d.h. Partielle Gruppierung basieren direkt auf originaler Datenbanktabelle. Methode:  partielle Datenwürfel sind durch explizite Angabe der gewünschten Gruppierungsbedingungen in Form von Group by-Klausel mit Grouping Sets/CUBE/ ROLLUP zu beschreiben.  können einzelne Gruppierungskombinationen auch in der HAVING-Klausel durch Anwendung der GROUPING()-Funktion eliminiert werden. Siehe Beispiel 1.7.

23 Partielle Gruppierung auf Ebene einzelner Klassifikationsstufen Konzeption: Gruppierungen werden nur nach bestimmten Einträgen innerhalb einer Klassifikationsstufe vorgenommen. Diese Technik heißt bedingte Verfeinerung (conditional drill-down). Bedingte Verfeinerung: Bei der bedingten Verfeinerung wird eine Ausweisung von Detailinformation nur für bestimmte, explizit vorgegebene Dimensionselemente vorgenommen. Syntax: …CASE WHEN grouping _column IN (determinate _column_ reference_list) THEN grouping _column ( | ELSE others_ grouping _column ) END

24 24 Beispiel 1.5: SELECT Time, CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END AS Region,Department, SUM(Profit) AS Profit, GROUPING (CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END) AS GRP_Region, FROM Sales GROUP BY ROLLUP ( Time, CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END, Department );

25 25 Time Region Department Profit GRP_Region VideoRental 75, VideoSales 74,000 0 Region außer Asia , Asia VideoRental 89, Asia VideoSales 115, Asia - 204,000 0 Widerspruch! VideoRental 164, VideoSales 187, , VideoRental 82, VideoSales 85,000 0 Region außer Asia , Asia VideoRental 101, Asia VideoSales 137, Asia - 238,000 0 Widerspruch! VideoRental 183, VideoSales 222, , ,000 1

26 26 In obiger Beispiel wird deutlich, dass es entweder Widerspruch oder redundanter Eintrag vorhanden ist. Diese lassen sich jedoch Anwendung der GROUPING()- Funktion identifizieren. Für eine explizite Ausweisung der nicht explizit genannten Dimensionseinträge benutzt man einerseits die ELSE-Klausel der CASE()-Anweisung. Eine verbessere Beispiel wird wie folgt angeboten:

27 27 Beispiel 1.6: SELECT Time, CASE WHEN Region IN (‘Asia’) THEN Region ELSE ‘OTHERS’ END AS Region, Department, SUM(Profit) AS Profit, GROUPING (CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END) AS GRP_Region, FROM Sales GROUP BY ROLLUP ( Time, CASE WHEN Region IN (‘Asia’) THEN Region END, Department );

28 28 Time Region Department Profit GRP_Region OTHERS VideoRental 75, OTHERS VideoSales 74, OTHERS - 149, Asia VideoRental 89, Asia VideoSales 115, Asia - 204, VideoRental 164, VideoSales 187, , OTHERS VideoRental 82, OTHERS VideoSales 85, OTHERS - 167, Asia VideoRental 101, Asia VideoSales 137, Asia - 238, VideoRental 183, VideoSales 222, , ,000 1

29 29 Der Method der Partielle Gruppierung auf Schemaeben kann f ü r Eliminieren der nicht erwünschter Tupel hinzugefügt werden. Eine verbessere Beispiel wird wie folgt angeboten: Beispiel 1.7: SELECT Time, CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END AS Region, Department, SUM(Profit) AS Profit, GROUPING (CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END) AS GRP_Region, FROM Sales GROUP BY ROLLUP ( Time, CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END, Department ); HAVING NOT (CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END IS NULL AND GROUPING (CASE WHEN Region IN ( ‘ Asia ’ ) THEN Region END) = 0)

30 Partielle Gruppierung einzelner Dimensionsknoten  Hierarchische Datenwürfel mit irregulären Dimensionen  Diamond Dimensions Getränke Diätgetränke alkoholfreigetränke Diät-Cola Falls ein einzelnes Dimensionselement mehreren übergeordneten Klassifikationsknoten zugeordnet ist, kommt es zu Mehrfachzählungen.  Lösung: Gewichtungen angeben Dazu wird eine Spalte, die die Gewichtung repräsentiert, der Tabelle hinzugefügt: ALTER TABLE Getränke ADD COLUMN Ratio DECIMAL(3,2);

31 31 Die Summe der Gewichtung ergibt sich zu 1.0. Zum Beispiele: Getränke Diätgetränke alkoholfreigetränke α β Diät-Cola α+β=1.0 Beispiel: SELECT Name, Art, SUM(Ratio * Quantity) AS Sum_Quantity FROM Getr ä nke GROUP BY ROLLUP (Name, Art );

32 32 2Spezifikation sequenzbasierter Operationen (SQL Für Analyse im Data Warehousing) Motivation:  Welche Ansätze für Analyse nach der Mehrfachgruppierung im Data Warehouse angewendet werden.  Wie werden SQL-Anfragen für Analyse im Data Warehouse verbessert. 2.1 Konzept der attributlokalen und tupelbasierten Aggregation (Drei Gattung der Aggregation) Im attributbasierte Ordnung existieren drei zentrale Bausteine beim SQL-Sprachentwurf, d.h. es gibt drei Gattung für Aggregation: Skalarfunktionen, Aggregationsfunktionen und OLAP-Funktionen.

33 33 Skalarfunktionen Skalarfunktionen repräsentieren im Wesentlichen die Menge der tupellokale Operationen. Es gibt zwei Typen :  die eine tupellokale Berechnung vornehmen, z.B. 20*(1-A)+B*(1+C)  die Werte einzelner Attribute transformieren, z.B. MONTH(Date), YEAR(Date) Aggregationsfunktionen Aggregationsfunktionen werden verwendet, um Zusammenaddition, Zusammenrechnung und Grenzen zu vornehmen, z.B. SUM(), COUNT(), MIN(), AVG() OLAP-Funktionen OLAP-Funktionen sind Erweitungen der Aggregationsfunktionen, d.h. sind auf Partitionen angewandte Aggregationsfunktionen. Diese Partitionen werden lokal für jeden Eintrag bzgl. einer angegebenen algorithmischen Ordnung generiert. Durch die OVER()-Klausel einer Aggregationsoperation werden OLAP-Funktionen spezifiziert.

34 34 Beispiel 2.1: SELECT Time, Region, Department, Total_Profit, Total_Profit/12 AS Month_ Profit FROM Sales2, (SELECT SUM(Profit) AS Total_Profit FROM Sales2) X; Da der Ausgangsbereich für die vorangestellte Aggregationsoperation jeweils der gesamte Eingangsbereich ist,vereinfacht sich obiges Beispiel durch eine OLAP-Funktion OVER() entsprechend zu: Beispiel 2.2: SELECT Time, Region, Department, SUM(Profit) OVER() AS Total_Profit, SUM(Profit)/12 OVER() AS Month_ Profit FROM Sales2

35 Attributlokale Partitionierung  Analog zur Gruppierung auf Anweisungsebene erlauben OLAP-Funktionen die Partitionierung des eingehenden Datenstromes hinsichtlich einer Menge von Partitionier- ungsattributen.  Wir können die attributlokale Partitionierung als zweite Gruppierung nach GROUP BY-Klausel(oder ohne) auffassen.

36 36 Beispiel 2.3: SELECT Time, Profit AS Daily_Profit, SUM(Profit) OVER(PARTITION BY MONTH(Time)) AS Total_Mon_Profit, SUM(Profit) OVER(PARTITION BY YEAR(Time)) AS Total_Year_Profit 100*Profit/ SUM(Profit) OVER(PARTITION BY YEAR(Time)) AS Ratio_Year_Profit /* 》 Ratio-To-Total 《 - Anfragetypen FROM Sales2 Time Daily_Profit Total_Mon_Profit Total_Year_Profit Ratio_Year_Profit , , , , , , , , , … , , , , , , , , , … , , , , , , , , , … , , , , , , , , , …

37 Sequenzorientierte Analysen(Ranking Funktionen) Im Bereich der Datenanalyse im Data Warehousing gibt es zwei Anfragetypen:  Ratio-To-Total Anfragetypen Siehe Beispiel 2.3.  Sequenzbasierte Anfragen. Sequenzbasierte Anfragen lassen sich wie folgt einteilen:  die Ermittlung laufender Summen 》 Kumulation 《 ; (Siehe Beispiel 2.4 und 1. Beispiel von Beispiel2.5)  die Berechnung gleitender Durchschnitte (Moving Average Values); (Siehe Beispiel 2.9)  einfache 》 Ranking-Analysen 《 ; (Siehe Beispiel 2. Beispiel von Beispiel2.5)

38 38 Beispiel 2.4: SELECT Time, Profit AS Daily_Profit, SUM(Profit) OVER(ORDER BY Time) AS Total _Profit, SUM(Profit) OVER(PARTITION BY MONTH(Time) ORDER BY Time) AS Total_Mon_Profit FROM Sales2

39 39 Beispiel2.5: SELECT Time, COUNT(*) OVER(ORDER BY Profit) AS RANK _Profit, FROM Sales2 Obiges Beispiel ist äquivalent zu: SELECT Time, RANK() OVER(ORDER BY Profit) AS RANK _Profit, FROM Sales2

40 40 Ranking Funktionen  RANK() die von Duplikaten erzeugte Lücken werden nicht bewahrt.  DENSERANK() bewahrt die von Duplikate erzeugte Abstände innerhalb der Rangfolge.  ROWNUMBER() liefert eine eindeutige Nummerierung der Tupel, wobei Mehrfachplatzierungen nichtdeterministisch aufgelöst werden.

41 41 Beispiel 2.6: SELECT A, RANK() OVER(ORDER BY A) AS RANK _NO, DENSERANK() OVER(ORDER BY A) AS DENSERANK _NO, ROWNUMBER () OVER(ORDER BY A) AS ROWNUMBER _NO FROM Sales2 A RANK _NO DENSERANK _NO ROWNUMBER _NO

42 42 Sortieren pro Partitionierung  Ranking Funktionen können in einer Partition verwendet werden, aber bei Änderung einer Partition muss die Sortierenplatzierung wieder zurückgesetzt werden (reset).  Ranking Funktionen wird mit PARTITION BY-Klausel zusammen benutzt.  Eine Partition kann mehrere Ranking Funktionen enthalten. Jeder Ranking Funktionen setzt neue Sortierenplatzierung wiederum zurück.

43 43 Beispiel 2.7: SELECT Regionkey, Productkey, SUM(Amount) AS Sum_Amount RANK() OVER(PARTITION BY Regionkey ORDER BY SUM(Amount) DESC ) AS Rank _ Product_Region, RANK() OVER(ORDER BY SUM(Amount) DESC) AS Rank _ Product_Total, ROWNUMBER () OVER(ORDER BY A) AS Rownumber_No FROM Region, Product,Sales WHERE Region. Regionkey= Sales. Regionkey AND Product. Productkey =Sales. Productkey GROUP BY Regionkey, Productkey ORDER BY Regionkey

44 44 Regionkey Productkey Sum_Amount Rank_Product_Region Rank_Product_Total Rownumber_No Europa Schuh Europa Jacket Europa Shirt Europa Pullover Europa T- Shirt Europa Krawatte Europa Hose Asia Schuh Asia Jacket Asia Shirt Asia Pullover Asia T- Shirt Asia Krawatte Asia Hose

45 Bildung dynamischer Fenster(Fensterfunktionen) Motivation: Durch Aggregatfunktionen und Fensterfunktionen ermöglicht eine weitergehende und flexible Definition der Wertebereiche für Aggregationsoperatoren einzelner Tupel. Aggregatfenster: Wegen Benutzung der Aggregatfunktionen und Fensterfunktionen führen wir den Begriff des Aggregatfensters ein. Für die Festlegung der Größe eines Aggregatfensters gibt es zwei Metriken:  die Anzahl von Tupeln (ROWS); ROWS bestimmt logische Row (die Anzahl der Tupels) der Fenster.  die logische Abweichung ders Tupels (RANGE).

46 46 Für die Größe selbst existieren zwei alternative Möglichkeiten:  Alternative 1:Von einem frei wählbaren Startpunkt bis zum aktuellen Tupel  Alternative 2:Frei wählbare obere und untere Schranken Bewegung richtung von Fensters --Startposition von Fensters Current Row... --Endposition von Fensters Bewegungrichtung von Fensters

47 47 Syntax: {SUM | AVG | MAX | MIN | COUNT |...}({ | *}) OVER([PARTITION BY [,…]]) ORDER BY [ASC |DESC |…] ROWS |RANGE {{ UNBOUNDED PRECEDING | PRECEDING}| BETWEEN{ UNBOUNDED PRECEDING | PRECEDING} AND{ CURRENT ROW | FOLLOWING}}}

48 48 Anmerkung: UNBOUNDED PRECEDING Erste Zeile der Partition wird der Startpunkt des Fensters. z.B: OVER (ROWS UNBOUNDED PRECEDING) ≡ OVER () /* default erste Reihe PRECEDING Als Startpunkt wird der n-te Vorgänger relativ zur aktuellen Position gewählt. /* mit FOLLOWING zusammenbenutzen FOLLOWING Als Endpunkt wird der n-te Nachfolger relativ zur aktuellen Position gewählt./* mit PRECEDING zusammenbenutzen CURRENT ROW Startpunkt ist das aktuelle Tupel. BETWEEN Die Schranken eines Aggregatfensters werden beschreiben, AND wobei die obere Grenzen stets eine höhere Position als die untere Grenzen aufweisen muss. ROWS Die Anzahl von Tupel. ROWS bestimmt logische Row (die Anzahl der Tupels) der Fenster RANGE RANGE ist logisches Interval. Diese logische Abweichung kann wie z.B. RANGE 10 PRECEDING sein, oder eine Ausdruck, die eine Konstante oder Zeitwerte ergibt, sein, oder wie z.B. RANGE INTERVAL N DAYS/MONTHS/YEARS PRECEDING sein

49 49 Beispiel 2.8: Aggregatfunktionen SELECT Konto_Nr, Trans_date, Trans_Betrag SUM(Trans_Betrag) OVER(PARTITION BY Konto_Nr ORDER BY Trans_date ROWS UNBOUNDED PRECEDING) AS Balance FROM Hauptbuch ORDER BY Konto_Nr, Trans_date Konto_Nr Trans_date Trans_Betrag Balance ,45113, ,01 61, ,2 97, ,5610, ,5543, ,02 38,09

50 50 Beispiel 2.9: gleitende Durchschnitte Es folgt ein auf Zeit basiertes Beispiel, in dem Durchschnitte von sieben Tagen beendet werden. SELECT Konto_Nr, Trans_date, Trans_Betrag AVG(Trans_Betrag) OVER(PARTITION BY Konto_Nr ORDER BY Trans_date RANGE INTERVAL ´7´ DAYS PRECEDING) AS Avg_7Tage FROM Hauptbuch Konto_Nr Trans_date Trans_Betrag Avg_7Tage ,45 113,45  113,45/ ,01 -52,01  -52,01/ ,25 -7,88  (-52,01+36,25)/ ,56 -1,73  (-52,01+36,25+10,56)/ ,55 26,45  (36,25+10,56+32,55)/ ,25 100,25  100,25/ ,01 10,01  10,01/ ,02 11,02  11,02/ ,56 55,79  (11,02+100,56 )/ ,02 35,52  (11,02+100,56 -5,02)/3

51 Wechselwirkung mit Mehrfachgruppierungen Im folgenden wird eine Kombination der global wirkenden Mehrfachgruppierungen und der lokal operierenden analytischen Funktionen skizziert. Solche Kombination ist durchaus sinnvoll, aber relativ komplex zu visualisieren. Um obiges Ergebnis zu ergeben, haben wir dazu zwei Methoden:

52 52 Methode 1: Beispiel 2.10: Diese Beispiel wird durch CUBE() gruppiert. SELECT Time, Region, Department, SUM(Profit) AS Profit, GROUPING(Time) as T, GROUPING(Region) as R, GROUPING(Department) as D RANK() OVER(PARTITION BY GROUPING(Time) + GROUPING(Region) + GROUPING(Department) ORDER BY SUM(Profit) DESC ) AS Quan GROUPING(Time) +GROUPING(Region) +GROUPING(Department) AS Level FROM Sales GROUP BY CUBE ( Time, Region, Department ); ORDER BY Level DESC, Quan;

53 53 Time Region Department Profit T R D Quan Level , Asia - 442, VideoSales 411, , , VideoRental 347, Europa - 316, Asia VideoSales 252, Asia - 238, VideoSales 222, Asia - 204, Asia VideoRental 190, VideoSales 189, VideoRental 183, VideoRental 164, Europa VideoSales 159, Europa VideoRental 157, Europa - 167, Europa - 149, Asia VideoSales 137, Asia VideoSales 115, Asia VideoRental 101, Asia VideoRental 89, Europa VideoSales 85, Europa VideoRental 82, Europa VideoRental 75, Europa VideoSales 74,

54 54 Um Verkürzung der Schreibweise und klarer Ergebnis zu realisieren, wird Funktion GROUPING_ID() benutzt, die für jedes Tupel der Ergebnisrelation eine Bitvektorrepräsentation der GROUPING()-Werte pro Gruppierungsattribut. Methode 1: Beispiel 2.11: Diese Beispiel wird durch CUBE() gruppiert. SELECT Time, Region, Department, SUM(Profit) AS Profit, GROUPING(Time) as T, GROUPING(Region) as R, GROUPING(Department) as D RANK() OVER(PARTITION BY GROUPING(Time) + GROUPING(Region) + GROUPING(Department) ORDER BY SUM(Profit) DESC ) AS Quan GROUPING_ID(Time, Region, Department) AS Level FROM Sales GROUP BY CUBE ( Time, Region, Department ); ORDER BY Level DESC, Quan;

55 55 Time Region Department Profit T R D Quan Level /*äquivalent zu Binärkode , /* = (0111) VideoSales 411, /* = (0110) VideoRental 347, /* = (0110) 2 - Asia - 442, /* = (0101) 2 - Europa - 316, /* = (0101) 2 - Asia VideoSales 252, /* = (0100) 2 - Asia VideoRental 190, /* = (0100) 2 - Europa VideoSales 159, /* = (0100) 2 - Europa VideoRental 157, /* = (0100) , /* = (0011) , /* = (0011) VideoSales 222, /* = (0010) VideoSales 189, /* = (0010) VideoRental 183, /* = (0010) VideoRental 164, /* = (0010) Asia - 238, /* = (0001) Asia - 204, /* = (0001) Europa - 167, /* = (0001) Europa - 149, /* = (0001) Asia VideoSales 137, /* = (0000) Asia VideoSales 115, /* = (0000) Asia VideoRental 101, /* = (0000) Asia VideoRental 89, /* = (0000) Europa VideoSales 85, /* = (0000) Europa VideoRental 82, /* = (0000) Europa VideoRental 75, /* = (0000) Europa VideoSales 74, /* = (0000) 2

56 56 Vielen Dank !


Herunterladen ppt "1 SQL-Erweiterungen für Data Warehousing Songbo Wang Januar 2004."

Ähnliche Präsentationen


Google-Anzeigen