Systemy OLAP I Krzysztof Dembczyński Instytut Informatyki Zakład Inteligentnych Systemów Wspomagania Decyzji Politechnika Poznańska Technologie Wytwarzania Oprogramowania Semestr zimowy 2008/09 Studia uzupełniajace magisterskie
Systemy baz i hurtowni danych wprowadzenie do wykładu Modele danych i ewolucja systemów baz danych Projektowanie hurtowni danych i modelowanie wielowymiarowe Proces ekstrakcji, transformacji i ładowania danych (Proces ETL) Systemy OLAP I Systemy OLAP II Systemy OLAP III
1 Systemy OLAP 2 Systemy ROLAP 3 Systemy MOLAP 4 Systemy HOLAP 5 Podsumowanie
1 Systemy OLAP 2 Systemy ROLAP 3 Systemy MOLAP 4 Systemy HOLAP 5 Podsumowanie
Serwery OLAP s a narzędziem do efektywnego wielowymiarowego przetwarzanie ogromnych wolumenów danych.
Raporty przestawne Systemy OLAP dostarczaj a narzędzi do tworzenia raportów wielowymiarowych.
Możliwe agregacje w modelu wielowymiarowym przedstawiane sa często jako krata kuboidów (ang. Cuboid). Przykład dla czterech wymiarów: czas, produkt, lokalizacja, dostawca. Łatwo pokazać operację Roll up i Drill down.
Liczba kuboidów: l = i=1,...,n (L i + 1), gdzie n to liczba wymiarów, a L i jest liczba poziomów hierarchii dla i-tego wymiaru, Przykładowo dla 10 wymiarów i 4 poziomów dla każdego wymiaru: l = 5 10 = 9, 8 10 6.
Serwery OLAP: ROLAP (Relacyjne), MOLAP (Wielowymiarowe), HOLAP (Hybrydowe).
1 Systemy OLAP 2 Systemy ROLAP 3 Systemy MOLAP 4 Systemy HOLAP 5 Podsumowanie
Serwery ROLAP bazuja na relacyjnym modelu danych. Techniki optymalizacji: denormalizacji relacji, zmaterializowane perspektywy, partycjonowanie, operacje złaczenia, indeksy, przetwarzanie zapytań.
Zalety serwerów ROLAP: Skalowalność ze względu na liczbę wymiarów, Skalowalność ze względu na rozmiar danych, Rzadkość danych nie stanowi problemu, Dobrze rozpoznana i dojrzała technologia. Wady: Gorsza wydajność w porównaniu z systemami MOLAP, Potrzeba tworzenia indeksów oraz wykorzystania innych technik optymalizacji.
SQL3 Rozszerzenia języka SQL GROUP BY ROLLUP, GROUP BY CUBE.
GROUP BY CUBE SELECT Czas, Produkt, Lokalizacja, Dostawca, SUM(Zysk) FROM Sprzedaż GROUP BY CUBE (Czas, Produkt, Lokalizacja, Dostawca);
GROUP BY CUBE SELECT Czas, Produkt, Lokalizacja, Dostawca, SUM(Zysk) FROM Sprzedaż GROUP BY Czas, Produkt, Lokalizacja, Dostawca UNION ALL SELECT Czas, Produkt, Lokalizacja, *, SUM(Zysk) FROM Sprzedaż GROUP BY Czas, Produkt, Lokalizacja UNION ALL SELECT Czas, Produkt, *, Dostawca, SUM(Zysk) FROM Sprzedaż GROUP BY Czas, Produkt, Dostawca UNION ALL... UNION ALL SELECT *, *, *, *, SUM(Zysk) FROM Sprzedaż;
GROUP BY CUBE SELECT Academic_year, Name, AVG(Grade) FROM Students_grades GROUP BY CUBE(Academic_year, Name); Academic_year Name AVG(Grade) 2001/2 Stefanowski 4.2 2001/2 Słowiński 4.1 2002/3 Stefanowski 4.0 2002/3 Słowiński 3.8 2003/4 Stefanowski 3.9 2003/4 Słowiński 3.6 2003/4 Dembczyński 4.8 2001/2 NULL 4.15 2002/3 NULL 3.85 2003/4 NULL 3.8 NULL Stefanowski 3.9 NULL Słowiński 3.6 NULL Dembczyński 4.8 NULL NULL 3.95
GROUP BY ROLLUP SELECT Czas, Produkt, Lokalizacja, Dostawca, SUM(Zysk) FROM Sprzedaż GROUP BY ROLLUP (Czas, Produkt, Lokalizacja, Dostawca);
GROUP BY CUBE SELECT Czas, Produkt, Lokalizacja, Dostawca, SUM(Zysk) FROM Sprzedaż GROUP BY Czas, Produkt, Lokalizacja, Dostawca UNION ALL SELECT Czas, Produkt, Lokalizacja, *, SUM(Zysk) FROM Sprzedaż GROUP BY Czas, Produkt, Lokalizacja UNION ALL SELECT Czas, Produkt, *, *, SUM(Zysk) FROM Sprzedaż GROUP BY Czas, Produkt UNION ALL SELECT Czas, *, *, *, SUM(Zysk) FROM Sprzedaż GROUP BY Czas UNION ALL SELECT *, *, *, *, SUM(Zysk) FROM Sprzedaż;
GROUP BY ROLLUP SELECT Academic_year, Name, AVG(Grade) FROM Students_grades G GROUP BY ROLLUP(Academic_year, Name); Academic_year Name AVG(Grade) 2001/2 Stefanowski 4.2 2001/2 Słowiński 4.1 2002/3 Stefanowski 4.0 2002/3 Słowiński 3.8 2003/4 Stefanowski 3.9 2003/4 Słowiński 3.6 2003/4 Dembczyński 4.8 2001/2 NULL 4.15 2002/3 NULL 3.85 2003/4 NULL 3.8 NULL NULL 3.95
1 Systemy OLAP 2 Systemy ROLAP 3 Systemy MOLAP 4 Systemy HOLAP 5 Podsumowanie
Serwery MOLAP bazuja na wielowymiarowym modelu danych. Techniki optymalizacji: dwupoziomowy sposób zapisu: zapamiętywanie macierzy gęstych wprost, macierzy rzadkie sa kompresowane, materializacja podkostek.
Zalety serwerów MOLAP: Bardzo wydajny dostęp do danych poprzez bezpośrednie adresowanie, Szybkie odpowiedzi na zapytania, Bardzo często zawieraja obliczone agregaty pośrednie. Wady: Problemy ze skalowalnościa przy dużej liczbie wymiarów, Wymagaja specyficznego systemu zapisu (młoda technologia), Nie sa wydajne w przechowywaniu rzadkich danych.
Przykład Model składa się z wymiarów: klient, produkt, sklep oraz dzień; w przypadku 100 000 klientów, 10 000 produktów, 1 000 sklepów oraz 1 000 dni kostka danych zawiera 1 000 000 000 000 000 komórek! Wiele komórek jest pustych: nie istnieja wszystkie kombinacje klientów, produktów, sklepów oraz dnia.
Język MDX (Multidimensional Expressions): Podstawowe terminy: Wymiar, Hierarchia, Poziom, Członek, Miara, Krotka, Zbiór, Oś.
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[All CARS].[Chevy], [CARS].[All CARS].[Ford]} ON ROWS, {[DATE].[All DATE].[March], [DATE].[All DATE].[April]} ON COLUMNS FROM MDDBCARS;
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[All CARS].[Chevy], [CARS].[All CARS].[Ford]} ON ROWS, {[DATE].[All DATE].[March], [DATE].[All DATE].[April]} ON COLUMNS FROM MDDBCARS; March April Chevy $155 000.00 $ 75 000.00 Ford $ 55 000.00 $175 000.00
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[CHEVY], [CARS].[ALL CARS].[FORD]} ON ROWS, {[DATE].[ALL DATE].[MARCH], [DATE].[ALL DATE].[APRIL]} ON COLUMNS FROM MDDBCARS WHERE ([MEASURES].[SALES_N])
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[CHEVY], [CARS].[ALL CARS].[FORD]} ON ROWS, {[DATE].[ALL DATE].[MARCH], [DATE].[ALL DATE].[APRIL]} ON COLUMNS FROM MDDBCARS WHERE ([MEASURES].[SALES_N]) Sales_N March April Chevy 1 000 700 Ford 600 1 500
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[CHEVY], [CARS].[ALL CARS].[FORD]} ON COLUMNS, {[DATE].[ALL DATE].[JANUARY]:[DATE].[ALL DATE].[APRIL]} ON ROWS FROM MDDBCARS
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[CHEVY], [CARS].[ALL CARS].[FORD]} ON COLUMNS, {[DATE].[ALL DATE].[JANUARY]:[DATE].[ALL DATE].[APRIL]} ON ROWS FROM MDDBCARS Chevy Ford January $66 000.00 $ 79 000.00 February $55 000.00 $ 72 000.00 March $155 000.00 $ 55 000.00 April $ 75 000.00 $175 000.00
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[CHEVY], [CARS].[ALL CARS].[FORD]} ON COLUMNS, {[DATE].MEMBERS} ON ROWS FROM MDDBCARS
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[CHEVY], [CARS].[ALL CARS].[FORD]} ON COLUMNS, {[DATE].MEMBERS} ON ROWS FROM MDDBCARS Chevy Ford 1998 $566 000.00 $ 479 000.00 1999 $545 000.00 $ 672 000.00 2000 $745 000.00 $ 527 000.00 2001 $345 000.00 $ 622 000.00
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[FORD].CHILDREN} ON COLUMNS, {[DATE].MEMBERS} ON ROWS FROM MDDBCARS
Multidimensional Expressions (MDX): MDX SELECT {[CARS].[ALL CARS].[FORD].CHILDREN} ON COLUMNS, {[DATE].MEMBERS} ON ROWS FROM MDDBCARS Ford Mustang Ford Taurus... 1998 $56 000.00 $ 79 000.00 1999 $54 000.00 $ 72 000.00 2000 $72 000.00 $ 52 000.00 2001 $34 000.00 $ 22 000.00
Multidimensional Expressions (MDX): MDX SELECT {([CARS].[ALL CARS].[CHEVY], [MEASURES].[SALES_SUM]), ([CARS].[ALL CARS].[CHEVY], [MEASURES].[SALES_N]), ([CARS].[ALL CARS].[FORD], [MEASURES].[SALES_SUM]), ([CARS].[ALL CARS].[FORD], [MEASURES].[SALES_N]) } ON COLUMNS, {[DATE].MEMBERS} ON ROWS FROM MDDBCARS
Multidimensional Expressions (MDX): MDX SELECT {([CARS].[ALL CARS].[CHEVY], [MEASURES].[SALES_SUM]), ([CARS].[ALL CARS].[CHEVY], [MEASURES].[SALES_N]), ([CARS].[ALL CARS].[FORD], [MEASURES].[SALES_SUM]), ([CARS].[ALL CARS].[FORD], [MEASURES].[SALES_N]) } ON COLUMNS, {[DATE].MEMBERS} ON ROWS FROM MDDBCARS Chevy Ford Sales_Sum Sales_N Sales_Sum Sales_N 1998 $566 000.00 450 $ 479 000.00 450 1999 $545 000.00 475 $ 672 000.00 670 2000 $745 000.00 750 $ 527 000.00 490 2001 $345 000.00 325 $ 622 000.00 640
Multidimensional Expressions (MDX): MDX SELECT {CROSSJOIN({[CARS].[ALL CARS].[CHEVY], [CARS].[ALL CARS].[FORD]}, {[MEASURES].[SALES_SUM], [MEASURES].[SALES_N]}) } ON COLUMNS, {[DATE].MEMBERS} ON ROWS FROM MDDBCARS Chevy Ford Sales_Sum Sales_N Sales_Sum Sales_N 1998 $566 000.00 450 $ 479 000.00 450 1999 $545 000.00 475 $ 672 000.00 670 2000 $745 000.00 750 $ 527 000.00 490 2001 $345 000.00 325 $ 622 000.00 640
Multidimensional Expressions (MDX): MDX SELECT NON EMPTY [Store Type].[Store Type].MEMBERS ON COLUMNS, FILTER([Store].[Store City].MEMBERS, (Measures.[Profit], [Time].[1997]) > 250000) ON ROWS FROM [Sales] WHERE (Measures.[Profit], [Time].[Year].[1997])
Multidimensional Expressions (MDX): MDX SELECT NON EMPTY [Store Type].[Store Type].MEMBERS ON COLUMNS, FILTER([Store].[Store City].MEMBERS, (Measures.[Profit], [Time].[1997]) > 250000) ON ROWS FROM [Sales] WHERE (Measures.[Profit], [Time].[Year].[1997]) Profit Normal 24 Hours Toronto $66 000.00 $196 000.00 Vancouver $111 000.00 $156 000.00 New York $49 000.00 $196 000.00 Chicago $75 000.00 $211 000.00
Multidimensional Expressions (MDX): MDX SELECT Measures.MEMBERS ON COLUMNS, ORDER({[Store].[Store City].MEMBERS}, Measures.[Sales Count], DESC) ON ROWS FROM [Sales]
Multidimensional Expressions (MDX): MDX SELECT Measures.MEMBERS ON COLUMNS, ORDER({[Store].[Store City].MEMBERS}, Measures.[Sales Count], DESC) ON ROWS FROM [Sales] Profit Sales Count... New York $747 000.00 2 196 000 Chicago $785 000.00 1 956 000 Toronto $666 000.00 1 916 000 Vancouver $711 000.00 1 596 000
Multidimensional Expressions (MDX): MDX WITH MEMBER [Time].[Year Difference] AS [Time].[2nd half] - [Time].[1st half] SELECT { [Account].[Income], [Account].[Expenses] } ON COLUMNS, { [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS FROM [Financials]
Multidimensional Expressions (MDX): MDX WITH MEMBER [Time].[Year Difference] AS [Time].[2nd half] - [Time].[1st half] SELECT { [Account].[Income], [Account].[Expenses] } ON COLUMNS, { [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS FROM [Financials] Income Expenses 1st Half 5 000 4 200 2st Half 8 000 7 000 Year Difference 3 000 2 800
Multidimensional Expressions (MDX): MDX WITH MEMBER [Account].[Net Income] AS ([Account].[Income], [Account].[Expenses]) / [Account].[Income] SELECT { [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS, { [Time].[1st half], [Time].[2nd half] } ON ROWS FROM [Financials]
Multidimensional Expressions (MDX): MDX WITH MEMBER [Account].[Net Income] AS ([Account].[Income], [Account].[Expenses]) / [Account].[Income] SELECT { [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS, { [Time].[1st half], [Time].[2nd half] } ON ROWS FROM [Financials] Income Expenses Net Income 1st Half 5 000 4 200 0.16 2st Half 8 000 7 000 0.125
Multidimensional Expressions (MDX): MDX WITH MEMBER [Time].[Year Difference] AS [Time].[2nd half] - [Time].[1st half], SOLVE_ORDER = 1 MEMBER [Account].[Net Income] AS ([Account].[Income] - [Account].[Expenses]) / [Account].[Income], SOLVE_ORDER = 2 SELECT { [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS, { [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS FROM [Financials]
Multidimensional Expressions (MDX): Income Expenses Net Income 1st Half 5 000 4 200 0.16 2st Half 8 000 7 000 0.125 Year Difference 3 000 2 800 0.066
Multidimensional Expressions (MDX): MDX WITH MEMBER [Time].[Year Difference] AS [Time].[2nd half] - [Time].[1st half], SOLVE_ORDER = 2 MEMBER [Account].[Net Income] AS ([Account].[Income] - [Account].[Expenses]) / [Account].[Income], SOLVE_ORDER = 1 SELECT { [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS, { [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS FROM [Financials]
Multidimensional Expressions (MDX): Income Expenses Net Income 1st Half 5 000 4 200 0.16 2st Half 8 000 7 000 0.125 Year Difference 3 000 2 800-0.035
Multidimensional Expressions (MDX): MDX WITH SET [Quarter1] AS GENERATE([Time].[Year].MEMBERS, {[Time].CURRENTMEMBER.FIRSTCHILD}) SELECT [Quarter1] ON COLUMNS, [Store].[Store Name].MEMBERS ON ROWS FROM [Sales] WHERE (Measures.[Profit])
Multidimensional Expressions (MDX): MDX WITH SET [Quarter1] AS GENERATE([Time].[Year].MEMBERS, {[Time].CURRENTMEMBER.FIRSTCHILD}) SELECT [Quarter1] ON COLUMNS, [Store].[Store Name].MEMBERS ON ROWS FROM [Sales] WHERE (Measures.[Profit]) 1998Q1 1999Q1... Saturn $147 000.00 $196 000.00 Media Markt $185 000.00 $156 000.00 Avans $166 000.00 $116 000.00
1 Systemy OLAP 2 Systemy ROLAP 3 Systemy MOLAP 4 Systemy HOLAP 5 Podsumowanie
Serwery HOLAP Systemy hybrydowe wspierajace dwa modele danych. Serwer parametryzowany przez użytkownika/administratora systemu. Najczęstsze rozwiazanie.
1 Systemy OLAP 2 Systemy ROLAP 3 Systemy MOLAP 4 Systemy HOLAP 5 Podsumowanie
Podsumowanie Systemy OLAP służa do efektywnego wielowymiarowego przetwarzania ogromnym wolumenów danych, Podstawowe modele to ROLAP, MOLAP i HOLAP, Z podejściem ROLAP zwiazany jest język SQL3; z podejściem wielowymiarowym język MDX, ROLAP, MOLAP, czy HOLAP?
Systemy baz i hurtowni danych wprowadzenie do wykładu Modele danych i ewolucja systemów baz danych Projektowanie hurtowni danych i modelowanie wielowymiarowe Proces ekstrakcji, transformacji i ładowania danych (Proces ETL) Systemy OLAP I Systemy OLAP II Systemy OLAP III