DATA CUBE Mgr. Jiří Helmich
Analytické kroky formulace dotazu analýza extrakce dat vizualizace
Motivace n-sloupcová tabulka v Excelu vs. sloupcový graf Dimensionality reduction
n dimenzí data obecně uspořádána do n dimenzí vizualizace = projekce do 2D nebo 3D příklad: mapa poloha na mapě = 2D (lat, lng) + hodnota v daném místě = 3D + časový údaj (timeline) = 4D + barva = 5D
Dimensionality reduction redukce dat z n dimenzí na počet dimenzí vizualizace SUMARIZACE toho, co je důležité
Příklad sumarizace prodej automobilů model rok prodeje barva značka distributor datum prodeje
Klasické SQL konstrukty Jak dosáhnout redukce počtu dimenzí? relační datbáze: relace s n atributy Počasí čas lat lng výška [m] teplota [C] tlak [HPa] 1.6.1996 15:00 37:58:33N 122:45:28W 102 21 1009 7.6.1996 15:00 34:16:18N 27:05:55W 10 23 1024 dimenze hodnoty
Klasické SQL konstrukty redukce dimenzí ~ sumarizace ~ agregace agregační funkce COUNT SUM MIN MAX AVG operátor GROUP BY
Agregace SELECT AVG(teplota) FROM pocasi; SELECT COUNT(DISTINCT teplota) FROM pocasi; Redukce všech vybraných hodnot na jedinou hodnotu.
GROUP BY 1. rozdělení tabulky na skupiny 2. agregace skupin pomocí agregační funkce
GROUP BY SELECT cas, vyska, AVG(teplota) FROM pocasi GROUP BY cas, vyska; čas lat lng výška [m] teplota [C] AVG(teplota) 1.6.1996 15:00 37:58:33N 122:45:28W 102 21 21 1.6.1996 15:00 34:16:18N 27:05:55W 10 23 23 1.6.1996 16:00 34:16:18N 27:05:55W 10 27 27 1.6.1996 16:00 34:16:18N 27:05:55W 102 30 1.6.1996 16:00 37:58:33N 122:45:28W 102 24 27
Další agregace median standardní odchylka variace střed úhlová rychlost a další doménově specifické funkce
Implementace GROUP BY Init(handle) { sum = 0 } Iter(handle, value) { sum += value } value = Final(handle) { return sum } Init(handle) { sum = 0; count = 0 } Iter(handle, value) { sum += value; ++count } value = Final(handle) { return (sum/count) }
Agregace /Red Brick/ Rank(expr) pro N hodnot v tabulce expr je minimum z hodnot ve sloupci: 1 expr je maximum z hodnot ve sloupci: N N_tile(expr, n) rozdělí tabulku na n hodnotových (zhruba stejně velkých) rozsahů vrátí číslo (index) rozsahu, do kterého patří expr Ratio_To_Total(expr) sečte všechny výrazy vrátí podíl expr oproti získané sumě
N_tile - příklad SELECT percentil, MIN(teplota), MAX(teplota) FROM pocasi GROUP BY N_tile(teplota, 10) as percentil HAVING percentil = 5; 1. rozdělí tabulku na 10 podobně velkých skupin 2. v každé skupině spočte MIN a MAX 3. vybere řádek s 5. skupinou (prostředních 10 % všech teplot)
Kumulativní agregace Cumulative(expr) součet dosavadních hodnot v uspořádaném seznamu Running_sum(expr, n) součet n posledních hodnot v uspořádaném seznamu prvních n-1 hodnot je NULL Running_average(expr, n) průměr
Nedostatky GROUP BY GROUP BY neumožňuje přímou tvorbu histogramů některé systémy ano, ale mimo standard SELECT den, stat, MAX(teplota) FROM pocasi GROUP BY DAY(cas) AS den, NATION(lat, lng) AS stat; Denní maximum v dané zemi.
Histogramy dle SQL92 SELECT den, stat, MAX(teplota) FROM (SELECT DAY(cas) AS den, NATION (lat, lng) AS stat, teplota FROM pocasi ) AS tmp GROUP BY den, stat; Nejprve transformace, poté agregace.
roll-up & drill-down reporty nejprve pomocí hrubých agregací postupně odkrýváme detaily
roll-up & drill-down Model Rok Barva Chevy 1994 černá 50 bílá 40 1995 černá 85 bílá 115 Prodej - model - rok - barva Prodej - model - rok 90 200 Prodej - model 290 roll-up podle modelu, roku a barvy 2 N agregačních sloupců! (6D = 64)
roll-up & drill-down Model Rok Barva Prodej - model - rok - barva Prodej - model - rok Chevy 1994 černá 50 90 290 Chevy 1994 bílá 40 90 290 Chevy 1995 černá 85 200 290 Chevy 1995 bílá 115 200 290 Prodej - model roll-up podle modelu, roku a barvy [Date]
roll-up & drill-down Model rok/barva 1994 mezisoučet 1995 mezisoučet černá bílá černá bílá 1994 1995 součet Chevy 50 40 90 85 115 200 290 Ford 50 10 60 85 75 160 220 Součet 100 50 150 170 190 360 510 roll-up podle modelu, roku a barvy [Excel Pivot]
Hodnota ALL méně sloupců SELECT ALL, ALL, ALL, SUM(prodeje) FROM prodeje WHERE model = Chevy UNION SELECT model, ALL, ALL, SUM(prodeje) FROM prodeje WHERE model = Chevy GROUP BY model UNION SELECT model, rok, ALL, SUM(prodeje) FROM prodeje WHERE model = Chevy GROUP BY model, rok UNION SELECT model, rok, barva, SUM(prodeje) FROM prodeje WHERE model = Chevy GROUP BY model, rok, barva; Model Rok Barva Kusů Chevy 1994 černá 50 Chevy 1994 bílá 40 Chevy 1994 ALL 90 Chevy 1995 černá 85 Chevy 1995 bílá 115 Chevy 1995 ALL 200 Chevy ALL ALL 290 ALL ALL ALL 290
Roll-up Není symetrický! Pivot počítá meziagregace podle všech agregovaných sloupců (všechny kombinace) Roll-up dle GROUP-BY Model Rok Barva Kusů Chevy ALL černá 135 Chevy ALL bílá 155 UNION SELECT model, ALL, barva, SUM(prodeje)
Kontingenční tabulky Kontingenční tabulka je výsledkem symetrické agregace Chevy 1994 1995 Součet (ALL) černá 50 85 135 bílá 40 115 155 Součet (ALL) 90 200 290 Ford 1994 1995 Součet (ALL) černá 50 85 135 bílá 10 75 85 Součet (ALL) 60 160 220
Problémy GROUP BY Velikost dotazů je závislá na počtu dimenzí 6D = 64-way UNION 64 průchodů daty 64 třídění/hashování
Operátory CUBE a ROLLUP Myšlenka: zavést operátor, který provede agregace postupně na všech úrovních 0D 2D 1D 3D ALL, ALL, ALL,, ALL, f(*) = SUM (0D)
Operátor CUBE
Operátor CUBE nagenerovat množinu všech podmnožin agregací rozšíření GROUP BY GROUP BY je speciální případ CUBE SELECT den, stat, MAX(teplota) FROM pocasi GROUP BY CUBE DAY(cas) AS den, NATION(lat, lng) AS stat;
Operátor CUBE 1. klasická agregace přes <select list> atributy z GROUP BY 2. UNION super-agregací globální kostky substituce hodnot za ALL N atributů v <select list> ~ 2 N -1 superagregací
Operátor CUBE C 1,C 2,, C N kardinality N atributů ze <sel. list> kardinalita výsledné kostky: (C i +1) +1 pro každý atribut za hodnotu ALL
ROLLUP pokud chceme data pro roll-up nebo drill-down report, je CUBE kanón na vrabce ROLLUP(v1,, vn) (v1, v2,, vn, f()), (v1, v2,, ALL, f()),. (v1, ALL,, ALL, f()), (ALL, ALL,, ALL, f()).
ROLLUP vs. CUBE ROLLUP (YEAR, MONTH, DAY) YEAR, MONTH, DAY YEAR, MONTH YEAR () CUBE YEAR, MONTH, DAY YEAR, MONTH YEAR, DAY YEAR MONTH, DAY MONTH DAY ()
Algebra => syntaxe CUBE(ROLLUP) = CUBE ROLLUP(GROUP BY) = ROLLUP GROUP BY <select list> ROLLUP <select list> CUBE <select list>
Příklad SELECT vyrobce, rok, mesic, den, barva, model, SUM(cena) AS zisk FROM prodej GROUP BY vyrobce, ROLLUP YEAR(cas) AS rok, MONTH(cas) AS mesic, DAY(cas) AS den, CUBE barva, model;
Syntaxe GROUP BY <aggregation list> <aggregation list> ::= { (<column name> <expression> ) [ AS <correlation name> ] [ <collate clause> ], } Rozšíření GROUP BY nezávislé na CUBE
Syntaxe GROUP BY [ <aggregation list> ] [ ROLLUP <aggregation list> ] [CUBE <aggregation list> ]
ALL nové klíčové slovo model.all = ALL(model) = {Chevy, Ford} rok.all = ALL(rok) = {1994,1995} barva.all = ALL(barva) = {černá, bílá} definice sloupce: ALL [NOT] ALLOWED podpora operátorů = a IN operátor GROUPING(): ALL() IS NOT NULL Jak je to náročné?
ALL jde to i bez něj? ALL je jako NULL mnoho speciálních případů vyžaduje vnímání množiny jako hodnoty návrh NULL místo ALL neimplementovat ALL implementovat GROUPING pro rozlišení ALL a NULL
ALL jako NULL SELECT model, rok, barva, SUM(prodej), GROUPING(model), GROUPING(rok), GROUPING(barva) FROM prodej GROUP BY CUBE model, rok, barva; ALL (NULL, NULL, NULL, 941, TRUE, TRUE, TRUE) ALL (ALL, ALL, ALL, 941
Decorations sloupce, které nejsou v GROUP BY ale jsou funkčně závislé na GROUPING() SELECT oddeleni.jmeno, SUM(prodej) FROM prodej JOIN oddeleni USING (cislo_oddeleni) GROU BY prodej.cislo_oddeleni; jméno oddělení není agregační sloupec jméno oddělení závislé na agregované hodnotě
Decorations SELECT den, stat, MAX(teplota), continent(stat) AS kontinent FROM pocasi GROUP BY CUBE DAY(cas) AS den, country(lat, lng) AS stat; den národ MAX(teplota) kontinent 25.1.1995 USA 28 Severní Amerika ALL USA 37 Severní Amerika 25.1.1995 ALL 41 NULL ALL ALL 48 NULL
Snowflake a star schémata tabulka pozorování dekorační tabulky pro každou dimenzi granularita tvoří čistou hierarchii
Užitečné zkratky SELECT Model,Year,Color,SUM(Sales), SUM(Sales)/ (SELECT SUM(Sales) FROM Sales WHERE Model IN { Ford, Chevy } AND Year Between 1990 AND 1992 ) FROM Sales WHERE Model IN { Ford, Chevy } AND Year Between 1990 AND 1992 GROUP BY CUBE Model, Year, Color ; SELECT Model, Year, Color SUM(Sales) AS total, SUM(Sales) / total(all,all,all) FROM Sales WHERE Model IN { Ford, Chevy } AND Year Between 1990 AND 1992 GROUP BY CUBE Model, Year, Color;
Výpočet ROLLUP a CUBE 1. seřadit řádky podle hodnot agregačních atributů 2. spočítat agregační funkce CUBE je UNION několika ROLLUP
Výpočet agregace algebraické MaxN, MinN, Avg distributivní count, max, min, sum alokace handle pro každou buňku n-tice (x 1,x 2,...,x N, v): 2 N x Iter() x i nebo ALL pro N hodnot tabulka kardinality T T x 2 N
Udržování kostky
Literatura Data Cube: A Relational Aggregation Operator Generalizing Group-By, Cross-Tab, and Sub- Totals Jim Gray Surajit Chaudhuri, Adam Bosworth, Andrew Layman, Don Reichart, Murali Venkatrao, Frank Pellow, Hamid Pirahesh