Data Cube Štefan Ignáth Tomáš Severýn
Úvod Aplikace poskytující analýzu dat typicky pracují s jednou či i více v vrstvami agregací ve standardním m SQL pomocí operátoru Group By a agregačních funkcí lze dosáhnou pouze 0 aža 1 dimenzionáln lní agregáty
N-dimenzionální zevšeobecn eobecnění Operátor - datová kostka (DATA CUBE) zjednodušen eně kostka (cube( cube) Zevšeobec eobecňuje datové operace potřebn ebné pro analýzu dat Histogram Dimenzionáln lní model Mezisoučty
Datová analýza Hledá různé vzorky v datech kategorie trendy 4 základnz kladní kroky formulace otázky nad velkou databází extrahování agregovaných dat do souboru nebo tabulky vizualizace analýza výsledku a formulace nového dotazu
Vizualizace Potřebn ebná pro zobrazení trendů rozdílů anomáli lií Výstup většinou v jako množiny množiny můžm ůžou být obecně v N-N rozměrn rném m prostoru
Více rozměrů <=3 3 Standardně pomocí 2,3D grafiky čas(pohyb) a barvy přidp idávají další dva rozměry ry dohromady tedy 5 dimenzí
Proč více dimenzí SQL tabulky jsou ploché Ale Relační systémy modelují N- dimenzionáln lní jako relaci s N atributy N - atributových domén
Situační příklad 1 Počas así 4 rozměry ry (místo = x,y,z,čas) další sloupce měření v 4D prostoru Čas teplota, tlak, vlhkost a rychlost větru často hodnoty agregované přes čas, nebo prostor Tabulka 1. Počasí: Zem. šírka Zem. délka Nad. výška Teplota Tlak 27/11/94:1500 37:58:33N 122:45:28W 102 21 1009 27/11/94:1500 34:16:18N 27:05:55W 10 10 1024
Standardní SQL Dovoluje agregaci jen přes p jednu dimenzi Jednoduché příklady SELECT AVG(Teplota Teplota) ) FROM Počas así; SELECT COUNT(DISTINCT Čas) ) FROM Počas así
Zvláš áštní agregační fce Mnoho systémů si přidává statistické, fyzikáln lní,, matematické,, finanční a další funkce Illustra Init(&handle) nastaví handle Iter(&handle) přidá do handle hodnotu Hodnota = final(&handle) vrátí co spočetl
GROUP BY Agregační funkce vrátí jedinou hodnotu pomocí GROUP BY můžm ůžeme vytvořit množinu hodnot indexovaných množinou atributů v klauzuli Group By Systém m RED BRICK rozší šířil Group By, ale není std.. SQL
Problémy s GROUP BY Agregační funkce jsou často používan vané Př.. Databázový benchmark (test výkonu, česky občas benčmark mark) Benchmark Tabuľka 2. SQL agregáty ve standartních benčmarcích Otázka Agregáty Počet GROUP BY TPC-A,B 1 0 0 TPC-C 18 4 0 TPC-D 16 27 15 Wisconsin 18 3 2 AS3AP 23 20 2 SetQuery 7 5 1
Problémy GROUP BY Histogramy Agregáty bez vypočítan tané kategorie Př:počasí v závislosti z na dni a zemi SELECT den, stát, MAX( Teplota ) FROM Počasí GROUP BY Day( Čas ) AS den, Country( Zem. Délka, Zem. Šířka ) AS stát;
Problémy GROUP BY Některé implementace podporují histogramy, ale není to standard proto je potřeba vyrobit tabulkově orientovaný dotaz SELECT deň, štát, MAX( Teplota ) FROM Počasie FROM ( SELECT Day( Čas ) AS deň, Štát( Zem. Šírka, Zem. Dĺžka ) AS štát, Teplota FROM Počasie ) AS foo GROUP BY deň, štát;
Vícedimenzionální dotazování V případp padě, že e se chceme pohybovat pomocí dimenzí nahoru(roll roll-up) ) zevšeobec eobecňování informací dolu (drill( drill-down) ) získz skávání agregátů k jemnější ším m datům Př: roll-up město->stát->kontinent drill-down down rok->m >měsíc->den
Používan vaná řešení Správy často používaj vají co atribut to jednotlivá agregace Problém - co null hodnoty v klíči Tabuľka 3. Prodej aut podle Modelu, Roku a Barvy Model Rok Barva Prodej podle Modelu, Roku a Barvy Prodej podle Modelu a Roku Prodej podle Modelu Chevy 1994 Č 50 B 40 1995 Č 85 B 115 90 200 290
Řešení? Přidána hodnota ALL Duplikovány klíče Naplnění jednoduchý dotaz,kde je pro každou dimenzi jeden UNION Tabuľka 4. Sumár predaja Rok Farba Jednotiek Model Chevy 1994 Č 50 Chevy 1994 B 40 Chevy 1994 ALL 90 Chevy 1995 Č 85 Chevy 1995 B 115 Chevy 1995 ALL 200 Chevy ALL ALL 290
Naplnění jednoduchý dotaz, kde je pro každou dimenzi jeden UNION SELECT Model, ALL, ALL, SUM( Predaj ) FROM Predaj WHERE Model = Chevy GROUP BY Model UNION SELECT Model, Rok, ALL, SUM( Predaj ) FROM Predaj WHERE Model = Chevy GROUP BY Model, Rok UNION SELECT Model, Rok, Farba, SUM( Predaj ) FROM Predaj WHERE Model = Chevy GROUP BY Model, Rok, Farba;
Problém Tato agregace je nesymetrická Tabulka 4 neagreguje prodej podle roku Přidám UNION SELECT Model, ALL, Farba,, SUM( Predaj ) FROM Predaj WHERE Model = Chevy GROUP BY Model, Rok
Symetrie Výsledkem symetrické agregace je křížová tabulka (cross( cross-tabulation) někdy do češtiny (výrobci tabulkových editorů) ) překlp ekládáno jako pivotní tabulky Tabuľka 5. Predaj Chevy Krížová tabulka 1994 1995 Spolu Chevy Čierna 50 85 135 Biela 40 115 155 Spolu 90 200 290
více dimenzí Musíme přidat p další křížovou tabulku např pro Ford Ford 1994 1995 Spolu Čierna 50 85 135 Biela 10 75 85 Spolu 60 160 220 Tímto se dostáváme do 3. rozměru ru Reprezentace pomocí křížových tabulek je ekvivalentní s ALL formulací
Proč voláme po zlepšen ení I Reprezentace Tabulky 4 a sjednocení GROUP BY řeší problém reprezentace agregovaných dat v relačním modely. Problémem zůstáva vyjádřen ení histogramů, roll-up up-ů, drill-down down-ů a krížových tabulkových otázek pomocí konvenčního SQL
Proč voláme po zlepšen ení II 6D krížov ová tabulka potřebuje sjednocení 64 členů a 64 různych r GROUP BY tzn. 64 průchod chodů dat a 64 tříďení - dlouhé vykonávání dotazů. Křížové tabulky pomocí tradičního SQL nejsou relačními objekty. V tabulce 5 a 5a je poslední řadek a poslední sloupec zvláštní
Data CUBE (Datová kostka) Aggregate Sum Zevšeobecnění předchozích ideí je jasné 0 rozměrný je jen výsledek fce 1 rozměrný group by 2 rozměrný křížové tabulky 3 datová krychle 3 dim. RED WHITE BLUE Group By (with total) By Color Sum RED WHITE BLUE By Make Cross Tab Chevy Ford By Color Sum By Make & Year By Year FORD CHEVY By Color & Year The Data Cube and The Sub-Space Aggregates Sum 1990 1991 1992 By Color 1993 By Make RED WHITE BLUE By Make & Color
Využit ití OLAP aplikace( podskupina MOLAP ) Datové sklady Dolování dat z rozsáhlých databází
Rozší šíření GROUP BY o CUBE Operátor CUBE (kostka) rozšiřuje syntaxi : GROUP BY ( { ( <názov stĺpca> <výraz>) [ AS <correlation name> ] [ <collate clause> ],...} [ WITH ( CUBE ROLLUP ) ] )
Jak to funguje? Operátor kostka vytváří tabulku obsahující všechny agregované hodnoty poslední řádek je ALL,ALL,...,ALL,F(*) Nazývá se úplný agregát Nižší agregáty mají nižší počet ALL hodnot
Jak to funguje? Počet řádků takto vytvořených záleží na počtu atributů na kombinaci daných atrib.. v datech Bez detailních znalostí dat se velikost nedá předpokládat, dat, pouze horní mez Horní mez násobek počtu různých r hodnot+1 pro každý atribut označme počet hodnot i-teho atributu m = (ci + 1)
Použitie I GROUP BY stĺpec WITH CUBE nevráti hodnoty ALL v riadkoch obsahujúcich superagregáty ty. Transanc-SQL (T-SQL) vráti hodnoty NULL, typu nazývaného GROUPING NULL, znamenajúce všetky existujúce hodnoty pre tento stĺpec pec. Funkcia GROUPING dovoľuje rozlíš íšiť medzi rôznymi typmi NULL.
Použitie II Operátor kocka vráti maximálny počet riadkov iba ak sa všetky v kombinácie hodnôt vyskytli v dátach. Inak je počet vrátených riadkov menší ší.. Pre nahradenie vráten teného NULL možeme použit SQL funkciu ISNULL.
Príklad SELECT Jednotky=SUM(Predane_jednotky), ),Produkt= ISNULL(Produkt,, 'ALL'), Krajina = ISNULL(Krajina,, 'ALL'), Jazyk = ISNULL(Jazyk,, 'ALL') FROM Predaj_produktu GROUP BY Produkt, Krajina, Jazyk WITH CUBE ID Produkt Krajina Jazyk Predane_jednotky 1 Word US French 5 2 Word US Spanish 87 3 Word US English 62 4 Word Canada French 54 5 Word Canada Spanish 95 Nad tabuľkou 6 Predaj_produktu: 6 Word Canada English 49 7 Word Mexico French 31 8 Word Mexico Spanish 54 9 Word Mexico English 71 10 Excel US French 64 11 Excel US Spanish 62 12 Excel US English 63 13 Excel Canada French 52 14 Excel Canada Spanish 9 15 Excel Canada English 55 16 Excel Mexico French 27 17 Excel Mexico Spanish 62
Funkcia GROUPING Ak dáta d neobsahujú žiadne NULL vo význame žiadnych dátd možeme použiť funkciu ISNULL na zmenu hodnôt NULL (vo význame ALL) na hodnotu ALL Predstavme si, že e tabuľka povoľuje vloženie hodnoty NULL do niektorého stĺpca a vložíme nasledujúci riadok: INSERT Predaj_produktu VALUES (NULL, NULL, US, 10);
Funkcia GROUPING Posledný ý riadok v kocke, tak ako sme si ju predtým definovali, by bol nerozlíš íšiteľný od teraz vložen eného riadku Na odlíš íšenie tohto rozdielu existuje funkcia GROUPING(). Vracia 1(TRUE) Ak je element ALL 0(FALSE) ak je element dátovd tová hodnota alebo explicitná hodnota NULL GROUPING berie ako parameter meno stľpca
Tabuľka obsahujúca riadok s NULL SELECT Jednotky = SUM(Predane_jednotky), Produkt, ALL Produkt = GROUPING(Produkt), Krajina = ALL Krajina = GROUPING(Krajina), Jazyk = ALL Jazyk = GROUPING(Jazyk) FROM Predaj_produktu GROUP BY Produkt, Krajina, Jazyk WITH CUBE
Jednotiek Produkt ALL Produkt Krajina ALL Krajina Jazyk ALL Jazyk Výsledok Tabuľka 7 Všimnime si, že prvý a posledný riadok majú rovnako hodnoty NULL v stľpcoch Produkt a Krajina, ale odlišujú sa v stľpcoch ALL Produkt a ALL Krajina. 10 NULL 0 NULL 0 Spanish 0 10 NULL 0 NULL 0 NULL 1 10 NULL 0 NULL 1 NULL 1 55 Excel 0 Canada 0 English 0 9 Excel 0 Canada 0 Spanish 0 64 Excel 0 Canada 0 NULL 1 39 Excel 0 Mexico 0 English 0 62 Excel 0 Mexico 0 Spanish 0 101 Excel 0 Mexico 0 NULL 1 63 Excel 0 US 0 English 0 62 Excel 0 US 0 Spanish 0 125 Excel 0 US 0 NULL 1 290 Excel 0 NULL 1 NULL 1 49 Word 0 Canada 0 English 0 54 Word 0 Canada 0 French 0 95 Word 0 Canada 0 Spanish 0 198 Word 0 Canada 0 NULL 1 62 Word 0 US 0 English 0..................... 5 NULL 1 US 0 French 0 149 NULL 1 US 0 Spanish 0 279 NULL 1 US 0 NULL 1 157 Excel 0 NULL 1 English 0 111 Word 0 NULL 1 English 0 268 NULL 1 NULL 1 English 0 59 Word 0 NULL 1 French 0 59 NULL 1 NULL 1 French 0 10 NULL 0 NULL 1 Spanish 0 133 Excel 0 NULL 1 Spanish 0 182 Word 0 NULL 1 Spanish 0 325 NULL 1 NULL 1 Spanish 0
Použitie CASE SELECT Jednotky = SUM(Predane_jednotky), Produkt = CASE WHEN (GROUPING(Produkt)=1) THEN ALL ELSE ISNULL(Produkt, N/A ) END, Krajina = CASE WHEN (GROUPING(Krajina)=1) THEN ALL ELSE ISNULL(Krajina, N/A ) END, Jazyk = CASE WHEN (GROUPING(Jazyk)=1) THEN ALL ELSE ISNULL(Jazyk, N/A ) END FROM Predaj_produktu GROUP BY Produkt, Krajina, Jazyk WITH CUBE
325 ALL ALL Spanish Jednotiek Produkt Krajina Jazyk Výsledok Tabuľka 8 10 N/A N/A Spanish 10 N/A N/A ALL 10 N/A ALL ALL 55 Excel Canada English 9 Excel Canada Spanish 64 Excel Canada ALL 39 Excel Mexico English 62 Excel Mexico Spanish 101 Excel Mexico ALL 63 Excel US English 62 Excel US Spanish 125 Excel US ALL 290 Excel ALL ALL 49 Word Canada English 54 Word Canada French 95 Word Canada Spanish............ 62 ALL Mexico Spanish 101 ALL Mexico ALL 125 ALL US English 5 ALL US French 149 ALL US Spanish 279 ALL US ALL 157 Excel ALL English 111 Word ALL English 268 ALL ALL English 59 Word ALL French 59 ALL ALL French 10 N/A ALL Spanish 133 Excel ALL Spanish 182 Word ALL Spanish
Tabuľka Tabuľka obsahuje každú kombináciu produktu, jazyka a krajiny Pre uloženie takejto kocky pre ďalšie požiadavky možeme zmeniť požiadavok na pohľad alebo uložiť výsledok do novej tabuľky. Nasledujúcim spôsobom uložíme výsledok do novej tabuľky príhodne nazvanej Vsetky_kombinacie
Vsetky_kombinacie SELECT Jednotky = SUM(Predane_jednotky), Produkt = CASE WHEN (GROUPING(Produkt)=1) THEN ALL ELSE ISNULL(Produkt, N/A ) END, Krajina = CASE WHEN (GROUPING(Krajina)=1) THEN ALL ELSE ISNULL(Krajina, N/A ) END, Jazyk = CASE WHEN (GROUPING(Jazyk)=1) THEN ALL ELSE ISNULL(Jazyk, N/A ) END INTO Vsetky_kombinacie FROM Predaj_produktu GROUP BY Produkt, Krajina, Jazyk WITH CUBE
ROLLUP Možnos nosť použiť operátor CUBE na operátor GROUP BY je veľmi silným nástrojom. n Výsledok často obsahuje viac riadkov ako je potrebné SQL nám n m dáva d možnos nosť použiť operátor ROLLUP ako alternatívu k operátoru CUBE ROLLUP vracia iba hodnoty pre hierarchiu atribútov, tov, ktoré špecifikujeme.
CUBE na ROLLUP SELECT Jednotky = SUM(Predane_jednotky), Produkt = CASE WHEN (GROUPING(Produkt)=1) THEN ALL ELSE ISNULL(Produkt, N/A ) END, Krajina = CASE WHEN (GROUPING(Krajina)=1) THEN ALL ELSE ISNULL(Krajina, N/A ) END, Jazyk = CASE WHEN (GROUPING(Jazyk)=1) THEN ALL ELSE ISNULL(Jazyk, N/A ) END FROM Predaj_produktu GROUP BY Produkt, Krajina, Jazyk WITH ROLLUP
Výsledok je oveľa a kompaktnejší ako výsledok CUBE neodpovedá na každú otázku, na ktorú odpovedá CUBE stále dostaneme viac informáci cií ako použit itím obyčajn ajného GROUP BY Výsledok ROLLUP je podobný výsledku, ktorý dáva operátor T-SQL T COMPUTE BY ale ROLLUP generuje relačnú tabuľku narozdiel od operátora COMPUTE BY.
Záver Použitie operátorov CUBE a ROLLUP zaleží na tom, koľko informáci cií (a aké podrobné) je potrebné z dát t získaz skať. Pri generovaní CUBE sa najviac času strávi pri operácii GROUP BY. Práca ktorú musí SQL Server vykonať naviac pre vykonanie operátoru CUBE oproti bežnému GROUP BY je zanedbateľná.
Implementované Microsoft SQL server 2000 Oracle 9i SQL7