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(*) ------------------------------------------------------ 2002 Europa - 2 2002 Asia - 2 2002 - 75 1 2002 - 74 1 2002 - 89 1 2002 - 115 1 2002 - - 4 2003 Europa - 2 2003 Asia - 2 2003 - 82 1 2003 - 85 1 2003 - 101 1 2003 - 137 1 2003 - - 4 - - - 8

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 10 1.3 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 -------------------------------------------------------------------------- 2002 Europa VideoRental 75,000 0 0 0 2002 Europa VideoSales 74,000 0 0 0 2002 Europa - 149,000 0 0 1 2002 Asia VideoRental 89,000 0 0 0 2002 Asia VideoSales 115,000 0 0 0 2002 Asia - 204,000 0 0 1 2002 - - 353,000 0 1 1 2003 Europa VideoRental 82,000 0 0 0 2003 Europa VideoSales 85,000 0 0 0 2003 Europa - 167,000 0 0 1 2003 Asia VideoRental 101,000 0 0 0 2003 Asia VideoSales 137,000 0 0 0 2003 Asia - 238,000 0 0 1 2003 - - 405,000 0 1 1 - - - 758,000 1 1 1

14 14 1.4 Multidimensionale Gruppierung 1.4.1 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 ---------------------------------------------------------------------------------------- 2002 Europa VideoRental 75,000 0 0 0 2002 Europa VideoSales 74,000 0 0 0 2002 Europa - 149,000 0 0 1 2002 Asia VideoRental 89,000 0 0 0 2002 Asia VideoSales 115,000 0 0 0 2002 Asia - 204,000 0 0 1 2002 - VideoRental 164,000 0 1 0 2002 - VideoSales 189,000 0 1 0 2002 - - 353,000 0 1 1 2003 Europa VideoRental 82,000 0 0 0 2003 Europa VideoSales 85,000 0 0 0 2003 Europa - 167,000 0 0 1 2003 Asia VideoRental 101,000 0 0 0 2003 Asia VideoSales 137,000 0 0 0 2003 Asia - 238,000 0 0 1 2003 - VideoRental 183,000 0 1 0 2003 - VideoSales 222,000 0 1 0 2003 - - 405,000 0 1 1 - Europa VideoRental 157,000 1 0 0 - Europa VideoSales 159,000 1 0 0 - Europa - 316,000 1 0 1 - Asia VideoRental 190,000 1 0 0 - Asia VideoSales 252,000 1 0 0 - Asia - 442,000 1 0 1 - - VideoRental 347,000 1 1 0 - - VideoSales 411,000 1 1 0 - - - 758,000 1 1 1

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 18 1.4.2 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 --------------------------------------------------------------- 2002 Europa VideoRental 75,000 2002 Europa VideoSales 74,000 2002 Europa - 149,000 2002 Asia VideoRental 89,000 2002 Asia VideoSales 115,000 2002 Asia - 204,000 2002 - - 353,000 2003 Europa VideoRental 82,000 2003 Europa VideoSales 85,000 2003 Europa - 167,000 2003 Asia VideoRental 101,000 2003 Asia VideoSales 137,000 2003 Asia - 238,000 2003 - - 405,000 - - - 758,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 21 1.5 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 22 1.5.1 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 23 1.5.2 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 --------------------------------------------------------------------------------- 2002 - VideoRental 75,000 0 2002 - VideoSales 74,000 0 Region außer Asia 2002 - - 149,000 0 2002 Asia VideoRental 89,000 0 2002 Asia VideoSales 115,000 0 2002 Asia - 204,000 0 Widerspruch! 2002 - VideoRental 164,000 1 2002 - VideoSales 187,000 1 2002 - - 353,000 1 2003 - VideoRental 82,000 0 2003 - VideoSales 85,000 0 Region außer Asia 2003 - - 167,000 0 2003 Asia VideoRental 101,000 0 2003 Asia VideoSales 137,000 0 2003 Asia - 238,000 0 Widerspruch! 2003 - VideoRental 183,000 1 2003 - VideoSales 222,000 1 2003 - - 405,000 1 - - - 758,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 --------------------------------------------------------------------------------- 2002 OTHERS VideoRental 75,000 0 2002 OTHERS VideoSales 74,000 0 2002 OTHERS - 149,000 0 2002 Asia VideoRental 89,000 0 2002 Asia VideoSales 115,000 0 2002 Asia - 204,000 0 2002 - VideoRental 164,000 1 2002 - VideoSales 187,000 1 2002 - - 353,000 1 2003 OTHERS VideoRental 82,000 0 2003 OTHERS VideoSales 85,000 0 2003 OTHERS - 167,000 0 2003 Asia VideoRental 101,000 0 2003 Asia VideoSales 137,000 0 2003 Asia - 238,000 0 2003 - VideoRental 183,000 1 2003 - VideoSales 222,000 1 2003 - - 405,000 1 - - - 758,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 30 1.5.3 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 35 2.2 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 ------------------------------------------------------------------------------------------------------- 2002-01-01 89,000 2015,000 25250,000 0.3525 2002-01-02 65,000 2015,000 25250,000 0.2574 2002-01-03 71,000 2015,000 25250,000 0.2812 … 2002-02-01 52,000 1998,000 25250,000 0.2059 2002-02-02 56,000 1998,000 25250,000 0.2218 2002-02-03 72,000 1998,000 25250,000 0.2851 … 2003-01-01 66,000 2020,000 24950,000 0.2645 2003-01-02 69,000 2020,000 24950,000 0.2766 2003-01-03 81,000 2020,000 24950,000 0.3246 … 2003-02-01 73,000 2006,000 24950,000 0.2926 2003-02-02 55,000 2006,000 24950,000 0.2204 2003-02-03 67,000 2006,000 24950,000 0.2685 …

37 37 2.3 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 ------------------------------------------------------------------------------------ 51 1 1 102 2 2 102 2 3 102 2 4 155 3 5 155 3 6 207 4 7

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 Schuh13011 1 Europa Jacket9524 2 Europa Shirt8036 3 Europa Pullover7547 4 Europa T- Shirt60511 5 Europa Krawatte50612 6 Europa Hose20714 7 Asia Schuh10012 8 Asia Jacket9923 9 Asia Shirt8935 10 Asia Pullover7547 11 Asia T- Shirt7547 12 Asia Krawatte66610 13 Asia Hose45713 14

45 45 2.4 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 ------------------------------------------------------------------------------ 73829 2003-11-01 113,45113,45 73829 2003-11-05 -52,01 61,44 73829 2003-11-13 36,2 97,69 82930 2003-11-01 10,5610,56 82930 2003-11-21 32,5543,11 82930 2003-11-29 -5,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 -------------------------------------------------------------------------------------------------------- 73829 2003-11-01 113,45 113,45  113,45/1 73829 2003-11-09 -52,01 -52,01  -52,01/1 73829 2003-11-13 36,25 -7,88  (-52,01+36,25)/2 73829 2003-11-14 10,56 -1,73  (-52,01+36,25+10,56)/3 73829 2003-11-20 32,55 26,45  (36,25+10,56+32,55)/3 82930 2003-11-01 100,25 100,25  100,25/1 82930 2003-11-10 10,01 10,01  10,01/1 82930 2003-11-25 11,02 11,02  11,02/1 82930 2003-11-26 100,56 55,79  (11,02+100,56 )/2 82930 2003-11-30 -5,02 35,52  (11,02+100,56 -5,02)/3

51 51 2.5 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 ----------------------------------------------------------------------------------------------------------------- - - - 758,000 1 1 11 3 - Asia - 442,000 1 0 11 2 - - VideoSales 411,000 1 1 02 2 2003 - - 405,000 0 1 13 2 2002 - - 353,000 0 1 14 2 - - VideoRental 347,000 1 1 0 5 2 - Europa - 316,000 1 0 16 2 - Asia VideoSales 252,000 1 0 01 1 2003 Asia - 238,000 0 0 12 1 2003 - VideoSales 222,000 0 1 03 1 2002 Asia - 204,000 0 0 14 1 - Asia VideoRental 190,000 1 0 05 1 2002 - VideoSales 189,000 0 1 06 1 2003 - VideoRental 183,000 0 1 07 1 2002 - VideoRental 164,000 0 1 08 1 - Europa VideoSales 159,000 1 0 09 1 - Europa VideoRental 157,000 1 0 010 1 2003 Europa - 167,000 0 0 111 1 2002 Europa - 149,000 0 0 112 1 2003 Asia VideoSales 137,000 0 0 01 0 2002 Asia VideoSales 115,000 0 0 02 0 2003 Asia VideoRental 101,000 0 0 03 0 2002 Asia VideoRental 89,000 0 0 04 0 2003 Europa VideoSales 85,000 0 0 05 0 2003 Europa VideoRental 82,000 0 0 06 0 2002 Europa VideoRental 75,000 0 0 0 7 0 2002 Europa VideoSales 74,000 0 0 08 0

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 - - - 758,000 1 1 11 7/* = (0111) 2 - - VideoSales 411,000 1 1 01 6/* = (0110) 2 - - VideoRental 347,000 1 1 02 6/* = (0110) 2 - Asia - 442,000 1 0 11 5/* = (0101) 2 - Europa - 316,000 1 0 12 5/* = (0101) 2 - Asia VideoSales 252,000 1 0 01 4/* = (0100) 2 - Asia VideoRental 190,000 1 0 02 4/* = (0100) 2 - Europa VideoSales 159,000 1 0 03 4/* = (0100) 2 - Europa VideoRental 157,000 1 0 04 4/* = (0100) 2 2003 - - 405,000 0 1 11 3/* = (0011) 2 2002 - - 353,000 0 1 12 3/* = (0011) 2 2003 - VideoSales 222,000 0 1 01 2/* = (0010) 2 2002 - VideoSales 189,000 0 1 02 2/* = (0010) 2 2003 - VideoRental 183,000 0 1 03 2/* = (0010) 2 2002 - VideoRental 164,000 0 1 04 2/* = (0010) 2 2003 Asia - 238,000 0 0 11 1/* = (0001) 2 2002 Asia - 204,000 0 0 12 1/* = (0001) 2 2003 Europa - 167,000 0 0 13 1/* = (0001) 2 2002 Europa - 149,000 0 0 14 1 /* = (0001) 2 2003 Asia VideoSales 137,000 0 0 01 0/* = (0000) 2 2002 Asia VideoSales 115,000 0 0 02 0/* = (0000) 2 2003 Asia VideoRental 101,000 0 0 03 0/* = (0000) 2 2002 Asia VideoRental 89,000 0 0 04 0/* = (0000) 2 2003 Europa VideoSales 85,000 0 0 05 0/* = (0000) 2 2003 Europa VideoRental 82,000 0 0 06 0/* = (0000) 2 2002 Europa VideoRental 75,000 0 0 07 0 /* = (0000) 2 2002 Europa VideoSales 74,000 0 0 08 0 /* = (0000) 2

56 56 Vielen Dank !


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

Ähnliche Präsentationen


Google-Anzeigen