Rozszerzenia języka SQL dla operacji ROLAP w bazie ORACLE8I

Transkrypt

Rozszerzenia języka SQL dla operacji ROLAP w bazie ORACLE8I
ROZSZERZENIA JĉZYKA SQL DLA OPERACJI ROLAP W BAZIE ORACLE8I
GRZEGORZ DZIEA,
ANDRZEJ MAKULSKI
Uniwersytet Technologiczno – Przyrodniczy w Bydgoszczy
Streszczenie
W pracy przedstawiono elementy rozszerzenia jĊzyka zapytaĔ SQL bazy Oracle8i,
które mają za zadanie wspomagaü przetwarzania danych pod kątem analitycznym
(przetwarzanie OLAP). Rozszerzenia te mogą mieü charakter teoretyczny w formie
propozycji umieszczenia ich w standardzie SQL lub praktyczny w postaci operatorów
zaimplementowanych w rozwiązaniach konkretnych producentów systemów bazodanowych umoĪliwiających relacyjne przetwarzanie analityczne.
Słowa kluczowe: OLAP, Bazy danych, rozszerzenia funkcji SOL
1. WstĊp
Wielowymiarowe operacje OLAP w systemach relacyjnych s przeprowadzane za pomoc
zapyta w jzyku SQL. Wikszo
operacji moe by
zrealizowana za pomoc standardowych
zapyta w jzyku SQL. W niektórych przypadkach tłumaczenie operacji wielowymiarowych na
standard zgodny z jzykiem SQL wymaga wprowadzenia pewnych rozszerze tego jzyka poprzez
uwzgldnienie funkcji w klauzuli GROUP BY oraz definiowanych przez uytkownika funkcji
agregujcych, które zwracałyby wyniki w klauzuli SELECT [1,2,3].
2. Rozszerzenia SQL zaimplementowane w bazie Oracle8i
Oracle przystosowujc ósm wersj relacyjnej bazy danych Oracle8i rozszerzył standard SQL
o nastpujce elementy6:
9 rozszerzenie moliwoci GROUP BY poprzez zastosowanie CUBE oraz ROLLUP,
9 dodatkowe analityczne funkcje SQL,
9 funkcj liniowej regresji,
9 wyraenie CASE.
Według danych producenta wprowadzenie tych rozszerze spowoduje midzy innymi:
9 uproszczenie programowania poprzez redukcj iloci kodu dla wielu operacji SQL,
9 szybsze i efektywne przetwarzanie zapyta,
9 redukcj ruchu sieciowego poprzez wykonywanie agregacji po stronie serwera,
9 moliwo
przechowywania agregatów, które mog by
wykorzystywane przez
podobne zapytania.
ROLLUP
Operator ROLLUP umoliwia konstrukcji SELECT obliczanie rozmaitych poziomów podsumowa
oraz sum całkowitych we wskazanych grupach wymiarów. Proste uycie tego operatora jest spowodowane tym, e jest on cile zwizany z klauzul GROUP BY stanowic jego pojedyncze rozsze6 „Oracle 8i Data Warehousing Guide”, Oracle Corp.s. 5
60
Grzegorz DzieĪa, Andrzej Makulski
Rozszerzenia jĊzyka SQL dla operacji rolap w bazie ORACLE8I
rzenie. Składnia zapytania z uyciem ROLLUP wyglda nastpujco:
select ... group by rollup (lista kolumn grupujcych)
ROLLUP jest operacj działajc w sposób bezporedni na danych, tworzy podsumy od najniszego
poziomu hierarchii do sumy całkowitej według listy grupowania zawartej w klauzuli. W pierwszej
kolejnoci obliczane s podstawowe wartoci agregatów podane przez GROUP BY, nastpnie zaczynajc od pierwszej wymienionej kolumny oblicza wartoci agregatów na wyszych poziomach
hierarchii, a do ostatniej kolumny znajdujcej si na licie. Na koniec jest obliczana suma całkowita. Przeprowadzenie operacji ROLLUP na danych, których liczba kolumn grupujcych wynosi
n spowoduje wygenerowanie podsum na (n+1)-poziomach.
Działanie operatora ROLLUP mona zobrazowa
na przykładzie bazy danych nalecej do
firmy sprzedajcej i wypoyczajcej tamy video. Baza danych oparta jest na kostce, której
wymiarami s:
Time
(1996, 1997),
Department
(Video Sprzeda, Video Rentals),
Region
(East, West, Central),
Jednym z elementów kostki jest warto
okrelajca zysk (profit). Zapytanie tworzce
szczegółowy raport podsumowujcy zyski bdzie miało nastpujc posta
:
select
time, region, department, sum(profit) as profit
from
sprzedaz
group by rollup
(time, region, department);
Wynik działania tego zapytania bdzie zawierał:
a) zagregowane wiersze wygenerowane przez GROUP BY bez uycia ROLLUP,
b) wiersze zawierajce podsumy pierwszego poziomu zagregowane dla oddziału (department) przy
uyciu kadej kombinacji czasu (time) i regionu (region),
c) wiersze zawierajce podsumy drugiego poziomu agregowane dla oddziału (department) i regionu
(region) przy uyciu kadej wartoci czasu,
d) wiersz zawierajcy sum całkowit (grand total).
Tabela (1) zawiera wynik zwrócony przez zapytanie. Symbolami ostatniej kolumny oznaczono poszczególne fazy wykonywania si operacji ROLLUP. Wartoci NULL s wywietlane jedynie dla
czytelnoci, w oryginalnej odpowiedzi bazy Oracle komórki bd puste.
Tabela 1. Agregacja z wykorzystaniem ROLLUP na danych 3-wymiarowych
Time
1996
1996
1996
1996
1996
1996
1996
1996
1996
Region
Central
Central
Central
East
East
East
West
West
West
Departament
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
Profit
75000
74000
149000
89000
115000
204000
87000
86000
173000
A
A
B
A
A
B
A
A
B
POLSKIE STOWARZYSZENIE ZARZĄDZANIA WIEDZĄ
Seria: Studia i Materiały, nr 17, 2008
Time
1996
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
Region
NULL
Central
Central
Central
East
East
East
West
West
West
NULL
NULL
Departament
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
NULL
NULL
Profit
526000
82000
85000
167000
101000
137000
238000
69000
97000
193000
598000
1124000
61
C
A
A
B
A
A
B
A
A
B
C
D
ródło: opracowanie własne
Rozszerzenie jzyka SQL w bazie Oracle8i umoliwia równie przeprowadzanie czciowej
operacji zwijania (PARTIAL ROLLUP) (tab. 2.). Operacja ta polega na obliczaniu tylko niektórych
sum czciowych. Rónica w składni pomidzy zwijaniem „całkowitym” oraz czciowym polega
oddzielnym wskazaniu parametrów dla operatora GROUP BY oraz dla ROLLUP:
group by expr1, rollup(expr2,expr3);
W tym przypadku PARTIAL ROLLUP tworzy podsumy na (2+1=3) poziomach agregacji, tj. na
poziomie (expr1, expr2, expr3), (expr1, expr2) i (expr1). Wan cech tego zapytania jest fakt, e
nie jest obliczana suma całkowita (grand total). Przykładem zastosowania operatora zwijania
czciowego moe by
nastpujce zapytanie:
select
time, region, department, sum(profit) as profit
from
sprzedaz
group by time, rollup(region, dept);
Wynik działania tego zapytania bdzie składał si z:
a) zagregowanych wierszy wygenerowanych przez GROUP BY bez uycia ROLLUP,
b) podsum pierwszego poziomu zagregowanych dla oddziału (department) przy uyciu kadej kombinacji czas (time) i regionu (region),
c) podsum drugiego poziomu zagregowanych dla regionu (region) i oddziału (department) dla kadej wartoci czasu.
62
Grzegorz DzieĪa, Andrzej Makulski
Rozszerzenia jĊzyka SQL dla operacji rolap w bazie ORACLE8I
Tabela 2. Wyniki zwijania czĊĞciowego (PARTIAL ROLLUP) dla przykładowych danych
Time
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
Region
Central
Central
Central
East
East
East
West
West
West
NULL
Central
Central
Central
East
East
East
West
West
West
NULL
Departament
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
NULL
Profit
75000
74000
149000
89000
115000
204000
87000
86000
173000
526000
82000
85000
167000
101000
137000
238000
69000
97000
193000
598000
A
A
B
A
A
B
A
A
B
C
A
A
B
A
A
B
A
A
B
C
ródło: opracowanie własne
Uycie operacji ROLLUP wymaga mniejszego zapotrzebowania na moc obliczeniow ni
odpowiednie zapytanie złoone z unii podzapyta. Na przykład aby zastpi
ROLLUP oparty na 4
kolumnach naley zastosowa
zapytanie składajce si z 5 podzapyta połczonych funkcj
UNION. Kade z tych piciu podzapyta wymaga oddzielnego dostpu do tabeli (tabela jest
przegldana piciokrotnie), przy czym ROLLUP moe wykona
si z pojedynczym dostpem
(tabela jest przegldana jednokrotnie). Zastpienie zapytania tradycyjnego, zapytaniem opartym
o ROLLUP zredukuje dostp do tabel o 80%. Oracle Corp. zaleca stosowanie ROLLUP
w zapytaniach obliczajcych sumy czciowe, w szczególnoci do:
9 wyliczania sum czciowych opartych o wymiar majcy charakter chronologiczny
ROLLUP(y, m, day) lub geograficzny ROLLUP(country, state, city),
9 generowania tymczasowych tabel podsumowujcych przez administratorów hurtowni.
CUBE
Podsumy wygenerowane za pomoc ROLLUP stanowi tylko cz
podsum, które mona
wygenerowa
dla wszystkich moliwych kombinacji wymiarów. Wygenerowanie danych, które maj
by
umieszczone np. w zbiorze tabel przestawnych (cross-tabular) za pomoc ROLLUP wymaga
zastosowania kilkakrotnego tego zapytania za kadym razem zmieniajc kolejno
kolumn, które
maj by
grupowane. Duo prostszym sposobem jest uycie do tego celu w zapytaniu operatora
POLSKIE STOWARZYSZENIE ZARZĄDZANIA WIEDZĄ
Seria: Studia i Materiały, nr 17, 2008
63
CUBE. Jako operator słucy do analizy danych operator CUBE oferuje niespotykan dotd
elastyczno
analizy danych n-wymiarowych. Zastosowanie do analizy operatora CUBE pokazuje
rysunek 1.
CUBE umoliwia konstrukcji SELECT obliczenie podsum dla kadej moliwej kombinacji
grupy wymiarów oraz sum całkowitych. Jak ju wczeniej wspomniano, wynik zapytania
zawierajcego operator CUBE moe zosta
przedstawiony za pomoc tabeli przestawnej. Podobnie
jak w przypadku ROLLUP, uycie operatora CUBE jest stosunkowo proste, poniewa stanowi on
pojedyncze rozszerzenie klauzuli GROUP BY. Składnia zapytania opartego o CUBE wyglda
nastpujco:
select ...
group by
cube (lista kolumn grupujcych)
Rys. 1. Porównanie moĪliwoĞci 3-wymiarowego operatora CUBE do 2-wymiarowej tabeli przestawnej,
1-wymiarowego grupowania z sum i agregatu mającego charakter punktowy
ródło: www.olapreport.com [4]
CUBE oblicza podsumy na podstawie listy kolumn (wymiarów) podanych w zapytaniu. Jeeli w
zapytaniu zostanie podane n-kolumn, to wynik zapytania bdzie zawierał 2n agregatów dla rónych
kombinacji wymiarów. Przykład zastosowania operatora w przypadku bazy danych firmy
64
Grzegorz DzieĪa, Andrzej Makulski
Rozszerzenia jĊzyka SQL dla operacji rolap w bazie ORACLE8I
wypoyczajcej/sprzedajcej kasety wideo (baza została wykorzystana przy operatorze ROLLUP)
wyglda nastpujco:
select
time, region, department, sum(profit) as profit
from
sprzedaz
group by cube
(time, region, department);
Wynikiem działania tego zapytania bdzie odpowied podana w tabeli 3.9:
Tabela 3. Agregacja z wykorzystaniem CUBE dla danych 3-wymiarowych
Time
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ródło: opracowanie własne
Region
Central
Central
Central
East
East
East
West
West
West
NULL
NULL
NULL
Central
Central
Central
East
East
East
West
West
West
NULL
NULL
NULL
Central
Central
Central
East
East
East
West
West
West
NULL
NULL
NULL
Department
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VirdeoRental
VideoSprzedaz
NULL
Profit
75000
74000
149000
89000
115000
204000
87000
86000
173000
251000
275000
526000
82000
85000
167000
101000
137000
238000
96000
97000
193000
279000
319000
598000
157000
159000
316000
190000
252000
442000
183000
183000
366000
530000
594000
1124000
POLSKIE STOWARZYSZENIE ZARZĄDZANIA WIEDZĄ
Seria: Studia i Materiały, nr 17, 2008
65
Wyniki te mona przedstawi
za pomoc kilku tabel przestawnych o wymiarach:
time – department,
time – region,
department – region.
Podobnie jak w przypadku PARTIAL ROLLUP istnieje moliwo
ograniczenia agregacji do
wymaganych wymiarów. W przypadku PARTIAL CUBE mona ograniczy
podsumy wszystkich
moliwych kombinacji do wymiarów bdcych parametrami CUBE:
group by expr1, cube(expr2, expr3)
Skonstruowane w ten sposób zapytanie wygeneruje 4 podsumy oparte na:
(expr1, expr2, expr3),
(expr1, expr2),
(expr1, expr3),
(expr1).
Uywajc bazy danych wykorzystanej w poprzednich przykładach działanie PARTIAL CUBE mona przedstawi
za pomoc nastpujcego zapytania (tab. 3.):
select
time, region, department, sum(profit) as profit
from
sprzedaz
group by time cube
(region, dept);
Zapytanie z operatorem CUBE mona oczywicie zastpi zapytanie o konstrukcji UNION
ALL składajce si kilku podzapyta, z których kade bdzie obliczało agregat dla jednej ze
wszystkich moliwych kombinacji. Gdyby istniała konieczno
sformułowania zapytania
z wykorzystaniem standardowych funkcji, które miałoby zwróci
wynik tak jak w przypadku
zapytania z CUBE okrelonym na 3 wymiarach, to zapytanie to składałoby si z 8-podzapyta.
Redukcja w dostpie do tabeli dla zapytania opartego o CUBE przy grupowaniu 4-kolumnowy siga
a 93,75% w porównaniu do zapytania opartego na technikach klasycznych. Zarówno operator
ROLLUP jak i CUBE umoliwia zastosowanie w agregacji nastpujcych funkcji:
9 count,
9 avg,
9 min,
9 max,
9 stddev,
9 variance.
66
Grzegorz DzieĪa, Andrzej Makulski
Rozszerzenia jĊzyka SQL dla operacji rolap w bazie ORACLE8I
Tabela 3. Agregacja z wykorzystaniem PARTIAL CUBE dla danych 3-wymiarowych
Time
Region
Department
Profit
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
Central
Central
Central
East
East
East
West
West
West
NULL
NULL
NULL
Central
Central
Central
East
East
East
West
West
West
NULL
NULL
NULL
VideoRental
VideoSprzedaz
NULL
Video Rental
VideoSprzedaz
NULL
Video Rental
VideoSprzedaz
NULL
Video Rental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
Video Rental
VideoSprzedaz
NULL
75,000
74,000
149,000
89,000
115,000
204,000
87,000
86,000
173,000
251,000
275,000
526,000
82,000
85,000
167,000
101,000
137,000
238,000
96,000
97,000
193,000
279,000
319,000
598,000
ródło: opracowanie własne
Funkcja COUNT, która jest bardzo czsto uywana przy analizie tabel przestawnych jest
najczciej wykorzystywan funkcj w zapytaniach ROLLUP i CUBE obok funkcji SUM. Bazy
danych firmy Oracle, nie umoliwiaj stosowania operatora DISTINCT wraz z ROLLUP lub CUBE
ze wzgldu na jego dwojaki charakter. Ograniczenie to ma na celu zmniejszenia ryzyka wystpienia
błdu przy analizie danych.
Funkcja GROUPING
Funkcja grouping stanowi rozszerzenie funkcji ROLLUP oraz CUBE słucej do zmiany formatu
wyniku wygenerowanego poprzez zapytanie. Uycie tej funkcji jest wymagane, gdy wynik działania
zapytania ma by
przetwarzany z wykorzystaniem metod numerycznych, a w szczególnoci gdy:
9 konieczne jest rozpoznanie wierszy, w których s zawarte sumy czciowe oraz suma
całkowita np. przy obliczaniu udziałów procentowych itp.;
9 zapytanie moe zwróci
w wynikowych wierszach warto
NULL, która wynika
z danych ródłowych, a nie jest wartoci nadawan przez operator CUBE lub
ROLLUP (w wierszu podsumy warto
NULL danego atrybutu okrela sum po tym
włanie atrybucie).
POLSKIE STOWARZYSZENIE ZARZĄDZANIA WIEDZĄ
Seria: Studia i Materiały, nr 17, 2008
67
Działanie funkcji GROUPING polega na zwracaniu wartoci „1” w przypadku gdy dany wiersz
wyniku zawiera warto
NULL nadan w wyniku działania operatora CUBE lub ROLLUP. Jeeli
warto
NULL wynika z charakteru danych ródłowych w odpowiednim polu jest zwracana warto
„0”. Ogólna składnia uycia tej funkcji wyglda w sposób nastpujcy:
select ... [grouping(kolumny_wymiarów)...] ...
group by ... {cube|rollup} (kulumny_wymiarów)
Operujc na bazie danych, wykorzystywanej przy okazji prezentowania poprzednich operatorów
mona sformułowa
nastpujce zapytanie na bazie operatora ROLLUP (tab. 4.):
select
time, region, department, sum(profit) as profit,
grouping
(time) as t,
grouping
(region) as r,
grouping
(department) as d
from
sprzedaz
group by rollup (time, region, department);
Tabela 4. Wynik zapytania ROLLUP z wykorzystaniem funkcji GROUPING
Time
1996
1996
1996
1996
1996
1996
1996
1996
1996
1996
1997
1997
1997
1997
1997
1997
1997
1997
Region
Central
Central
Central
East
East
East
West
West
West
NULL
Central
Central
Central
East
East
East
West
West
Department
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
NULL
VideoRental
VideoSprzedaz
Profit
75000
74000
149000
89000
115000
204000
87000
86000
173000
526000
82000
85000
167000
101000
137000
238000
96000
97000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
T
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
R
0
0
1
0
0
1
0
0
1
1
0
0
1
0
0
1
0
0
D
1997
1997
NULL
West
NULL
NULL
NULL
VideoRental
NULL
193000 0
598000 0
1124000 1
0
1
1
1
1
1
ródło: opracowanie własne
Umieszczenie w strukturze wyniku 3 dodatkowych kolumn umoliwi łatwe przetwarzania
numeryczne rezultatu zapytania. Procedura analizujca dane kontrolujc wartoci w polach T, R i D
w sposób jednoznaczny bdzie mogła okreli
charakter danej podsumy poprzez metod
maskowania. Wiersze posiadajce mask „0 0 1” bd naleały do podsum pierwszego poziomu,
68
Grzegorz DzieĪa, Andrzej Makulski
Rozszerzenia jĊzyka SQL dla operacji rolap w bazie ORACLE8I
maska „0 1 1” bdzie charakteryzowała wiersze podsum poziomu drugiego, za maska „1 1 1”
bdzie oznaczała sum całkowit. Funkcja grouping moe okaza
si przydatna równie
w zapytaniach opartych o operator CUBE. Przedstawiony w tabeli 5. przykład przedstawia wynik
zapytania CUBE, który nie moe by
interpretowany w sposób jednoznaczny.
Tabela 5. Wynik zapytania CUBE bez uĪycia GROUPING
Time
1996
1996
NULL
NULL
NULL
NULL
NULL
Region
East
NULL
East
NULL
NULL
NULL
NULL
Profit
200000
200000
200000
190000
190000
190000
390000
ródło: opracowanie własne
Wartoci NULL wystpujce w wyniku przedstawiony w tabeli 5. wynikaj z:
działania operatora CUBE, który umieszcza warto
NULL w wierszu dla atrybutu dla którego
jest przeprowadzane sumowanie;
charakteru danych ródłowych;dla niektórych rekordów pola atrybutów time lub region były
wypełnione wartociami NULL.
W celu poprawienia czytelnoci wyniku naley zastosowa
kombinacj funkcji grouping
i decode w nastpujcym zapytaniu (tab. 6.):
Select decode(grouping(time), 1, 'all times', time) as time,
decode(grouping(region), 1, 'all regions', 0, null)) as region,
sum(profit) as profit
from sprzedaz
group by cube(time, region);
Tabela 6. Wynik działania operator CUBE z funkcjami GROUPING i DECODE
Time
1996
1996
All Times
NULL
NULL
All Times
All Times
Region
East
All Regions
East
NULL
All Regions
NULL
All Regions
Profit
200000
200000
200000
190000
190000
190000
390000
ródło: opracowanie własne
Zastosowanie DECODE w powyszym zapytaniu umoliwia rozpoznanie wierszy
zawierajcych podsumy i zamian w nich wartoci NULL na okrelon w zapytaniu. Jak ju
wczeniej wspomniano funkcja GROUPING zwraca „1” jeeli wiersz zawiera warto
agregatu lub
w kadym innym przypadku „0”. Funkcja DECODE w nastpujcym fragmencie zapytania:
POLSKIE STOWARZYSZENIE ZARZĄDZANIA WIEDZĄ
Seria: Studia i Materiały, nr 17, 2008
69
decode(grouping(time), 1, 'all times', time) as time,
dla wartoci „1” uzyskanej od GROUPING podstawia tekst „all times”, a dla wartoci „0” warto
czasu przechowywan w tabeli ródłowej, która moe by
liczb lub wartoci NULL.
Funkcje Analityczne
Przetwarzanie analityczne OLAP wymaga duej iloci danych, które s w odpowiedni sposób
przetwarzane. Pocztkowo, wszystkie operacje analityczne były przeprowadzane za pomoc
odpowiednich narzdzi po stronie klienta. W obecnych systemach baz danych przystosowanych do
przetwarzania w technologii OLAP mona zaobserwowa
skłonno
producentów do umieszczania
specjalizowanych funkcji analitycznych, które mog wykonywa
analiz po stronie serwera.
Przykładem takich funkcji mog by
funkcje zaimplementowane w bazie danych Oracle8i,
znajdujce si obecnie w standardzie ANSI SQL2000, które przedstawia tabela 7.:
Tabela 7. Funkcje analityczne zaimplementowane w Oracle8i
Funkcja
Ranking
Windowing
Reporting
LAG/LEAD
Statistic
ródło: opracowanie własne
Zastosowanie
obliczanie rankingów,
obliczanie rednich łcznych i chwilowych. Współpracuje
z nastpujacymi funkcjami:
- SUM
- AVG
- IN
- MAX
- COUNT
- VARIANCE
- STDEV
- FIRST_VALUE
- LAST_VALUE
- oraz nowymi funkcjami statystycznym
Obliczanie udziałów. Współpracuje z nastpujcymi funkcjami:
- SUM
- AVG
- MIN
- MAX
- COUNT (z/bez DISTINCT)
- VARIANCE
- STDDEV
- RATIO_TO_REPORT
- oraz nowymi funkcjami statystycznym
Funkcje te mog siga
do wartoci okrelonych
atrybutów znajdujcych si w ssiednich wierszach
w tej samej partycji.
obliczanie regresji liniowej, współczynnik nachylenia, przecicie itp.
70
Grzegorz DzieĪa, Andrzej Makulski
Rozszerzenia jĊzyka SQL dla operacji rolap w bazie ORACLE8I
Sposób przetwarzania funkcji analitycznych obrazuje rysunek 2.
Rysunek 2. KolejnoĞü przetwarzania zapytaĔ analitycznych
ródło: opracowanie własne
3. Podsumowanie
Zbiór funkcji oferowanych przez Oracle, które nale do grupy funkcji analitycznych i nie s
jednoczenie objte standardem SQL 92 lub 99 jest bardzo duy. Funkcje te umoliwiaj
szczegółowe przetwarzanie analityczne pod ktem analizy statystycznej, finansowej, ekonomicznej,
raportowania itp. Kada z nich posiada wiele parametrów umoliwiajcych zdefiniowanie postaci
wynikowej. Bardzo wan rzecz jest równie fakt, e funkcje te działaj w kombinacjach
z opisanymi wczeniej operatorami CUBE oraz ROLLUP. Jedn z najczciej wykorzystywanych
funkcji analitycznych jest funkcja naleca do grupy funkcji rankingowych słuca do obliczania
pozycji danego rekordu ze zbioru danych na licie uporzdkowanej w odpowiedni sposób według
wybranych wartoci miar.
Bibliografia
1.
2.
3.
4.
Oracle 8i Data Warehousing Guide, Oracle Corp. 1999.
Oracle 8i. Concepts, Oracle Corp. 1999.
Materiały informacyjne: Oracle OLAP Technology, Oracle Corp. 1999.
N. Pendse: OLAP Report 2000, http://www.olapreport.com.
POLSKIE STOWARZYSZENIE ZARZĄDZANIA WIEDZĄ
Seria: Studia i Materiały, nr 17, 2008
71
EXPANDING SQL LANGUAGE FOR THE ROLAP OPERATIONS IN THE ORACLE8I
DATABASE
Summary
In the paper elements of expanding SQL query language for the ROLAP operations in the Oracle8i database were presented. Their task is supporting the data processing to make possible analytical OLAP processing. Those expands can have theoretical dimension in the form of the proposals to put them in the SQL standard or
practical one including operators implemented in solutions of concrete producers of
database systems which enable relational analytical processing.
Keywords: OLAP, databases, expanding the SOL function
Grzegorz Dziea
Katedra Informatyki w Zarzdzaniu,
Wydział Zarzdzania
Uniwersytet Technologiczno – Przyrodniczy w Bydgoszczy
85-970 Bydgoszcz, ul. Kaliskiego 7
e-mail: [email protected]