290 likes | 422 Views
Az Oracle SQL 11. Elemzések támogatása. A rádiótelefonokat kérem KIKAPCSOLNI!. Felhasznált irodalom. Gyári dokumentáció: Data Warehousing Guide 18. fejezet: SQL for Aggregation in Data Warehouses
E N D
Az Oracle SQL 11. Elemzések támogatása Markó Tamás, PTE TTK
A rádiótelefonokat kérem KIKAPCSOLNI! Markó Tamás, PTE TTK
Felhasznált irodalom • Gyári dokumentáció:Data Warehousing Guide 18. fejezet:SQL for Aggregation in Data Warehouses • Kende Mária - Nagy István: Oracle példatár 13. fejezet: Részletező csoportosítások és analitikus függvények az SQL-ben Markó Tamás, PTE TTK
Data Warehouse - adattárház • Relációs adatbázis, de • lekérdezésekre és elemzésekre tervezték (nem tranzakciók feldolgozására) • általában történelmi adatsorokat tartalmaz, amik tranzakciós rendszerekből származnak • általában több forrásból is gyűjt adatokat • OLAP-eszközök is tartoznak hozzá (lásd a multidimenziós adatmodellről tanultakat) • A cégen belül különválik a tranzakciók feldolgozása és az elemzés Markó Tamás, PTE TTK
Az adattárház jellemzői • Adott célra készül (pl. az értékesítések elemzésére) • Integrált: • több forrásból gyűjt adatokat • ezeket azonos formára hozza • Nemfelejtő: • az ide bekerülő adatok többé nem módosulnak • hosszú időn át megmaradnak • Lehetővé teszi az időbeli változások tanulmányozását Markó Tamás, PTE TTK
Tranzakciókezelő: kevés index sok kapcsolat 3NF származtatott adatok tárolása ritka mindig naprakész (adatmódosítás gyakran, kevés rekordon) Adattárház: sok index kevés kapcsolat nem normalizált származtatott adatok tárolása gyakori adatfrissítés naponta / hetente, sok új rekord egyszerre Eltérések a tranzakciókezelő (OLTP) rendszerektől Markó Tamás, PTE TTK
Az adattárház szerkezete Markó Tamás, PTE TTK
Adattárházak támogatása SQL-ben • Az Oracle-nél csak az Oracle 8i óta • Fontos kiterjesztések: • új csoportképzési eszközök • analitikus (elemző) függvények • Az analitikus függvények nem részei a szabványos SQL-nek • a szabványosítás napirenden van Markó Tamás, PTE TTK
Új csoportképzési lehetőségek Markó Tamás, PTE TTK
ROLLUP • Egyszerre több egymásba ágyazott szinten képez összesítő adatokat • Példa:SELECT deptno, job, SUM(sal), COUNT(*) AS letszamFROM scott.empGROUP BY ROLLUP(deptno, job); részlegenként, azon belül beosztás szerint összesít Markó Tamás, PTE TTK
ROLLUP – az eredmény • DEPTNO JOB SUM(SAL) LETSZAM---------- --------- ---------- ---------- 10 CLERK 1300 1 10 MANAGER 2450 1 10 PRESIDENT 5000 1 10 8750 3 20 CLERK 1900 2 20 ANALYST 6000 2 20 MANAGER 2975 1 20 10875 5 30 CLERK 950 1 30 MANAGER 2850 1 30 SALESMAN 5600 4 30 9400 6 29025 1413 sor kijelölve. összesítés a részlegre főösszesen ezt az információt hagyományosan csak 3 SELECT tudná előállítani Markó Tamás, PTE TTK
CUBE • Mindegyik ismérv szerint egyenrangúan képez részcsoportokat • Példa:SELECT deptno, job, SUM(sal), COUNT(*) AS letszamFROM scott.empGROUP BY CUBE(deptno, job); részleg szerint is és beosztás szerint is összesít a sorrend felcserélésével ugyanezeket a sorokat kapjuk (csak más sorrendben) Markó Tamás, PTE TTK
CUBE - az eredmény főösszesen • DEPTNO JOB SUM(SAL) LETSZAM---------- --------- ---------- ---------- 29025 14 CLERK 4150 4 ANALYST 6000 2 MANAGER 8275 3 SALESMAN 5600 4 PRESIDENT 5000 1 10 8750 3 10 CLERK 1300 1 10 MANAGER 2450 1 10 PRESIDENT 5000 1 20 10875 5 20 CLERK 1900 2 20 ANALYST 6000 2 20 MANAGER 2975 1 30 9400 6 30 CLERK 950 1 30 MANAGER 2850 1 30 SALESMAN 5600 418 sor kijelölve. összesítések a beosztásra összesítés a részlegre azonos részleg és azonos beosztás összesítés a részlegre Markó Tamás, PTE TTK
GROUPING SETS • Több csoportosítás is képezhető egy lekérdezésben ugyanazokból a rekordokból • Példa:SELECT mgr, deptno, job, SUM(sal), count(*) as letszamFROM scott.empGROUP BY GROUPING SETS ((mgr, deptno, job),(deptno, job),(mgr)); három különböző csoportosítás Markó Tamás, PTE TTK
GROUPING SETS – az eredmény 1. • MGR DEPTNO JOB SUM(SAL) LETSZAM---------- ---------- --------- ---------- ---------- 7782 10 CLERK 1300 1 7839 10 MANAGER 2450 1 10 PRESIDENT 5000 1 7788 20 CLERK 1100 1 7902 20 CLERK 800 1 7566 20 ANALYST 6000 2 7839 20 MANAGER 2975 1 7698 30 CLERK 950 1 7839 30 MANAGER 2850 1 7698 30 SALESMAN 5600 4 azonos főnök, részleg és beosztás (össz. 14 fő) Markó Tamás, PTE TTK
GROUPING SETS – az eredmény 2. • MGR DEPTNO JOB SUM(SAL) LETSZAM---------- ---------- --------- ---------- ----------10 CLERK 1300 1 10 MANAGER 2450 1 10 PRESIDENT 5000 1 20 CLERK 1900 2 20 ANALYST 6000 2 20 MANAGER 2975 1 30 CLERK 950 1 30 MANAGER 2850 1 30 SALESMAN 5600 4 7566 6000 2 7698 6550 5 7782 1300 1 7788 1100 1 7839 8275 3 7902 800 1 5000 126 sor kijelölve. azonos részleg és beosztás (össz. 14 fő) azonos főnök (össz. 14 fő) Markó Tamás, PTE TTK
Analitikus függvények Markó Tamás, PTE TTK
Analitikus rangfüggvények - példa • SELECT ename, sal,RANK() OVER (ORDER BY sal DESC) AS normal,DENSE_RANK() OVER (ORDER BY sal DESC) AS tomor,PERCENT_RANK() OVER (ORDER BY sal DESC) AS szazalekFROM scott.emp; ki hányadik a fizetési rangsorban Markó Tamás, PTE TTK
Analitikus rangfüggvények - eredmény • ENAME SAL NORMAL TOMOR SZAZALEK---------- ---------- ---------- ----- --------KING 5000 1 1 0SCOTT 3000 2 2 .0769230FORD 3000 2 2 .0769230JONES 2975 4 3 .2307692BLAKE 2850 5 4 .3076923CLARK 2450 6 5 .3846153ALLEN 1600 7 6 .4615384TURNER 1500 8 7 .5384615MILLER 1300 9 8 .6153846WARD 1250 10 9 .6923076MARTIN 1250 10 9 .6923076ADAMS 1100 12 10 .8461538JAMES 950 13 11 .9230769SMITH 800 14 12 114 sor kijelölve. ugrás ugrás
Aggregáló rangfüggvények - példa paraméter! OVER helyett WITHIN GROUP • SELECTRANK(4000) WITHIN GROUP (ORDER BY sal DESC) AS normal,DENSE_RANK(4000) WITHIN GROUP (ORDER BY sal DESC) AS tomor,PERCENT_RANK(4000) WITHIN GROUP (ORDER BY sal DESC) AS szazalekFROM scott.emp; • Az eredmény: NORMAL TOMOR SZAZALEK---------- ---------- ---------- 2 2 .071428571 hányadik lenne a 4000 a fizetési rangsorban Markó Tamás, PTE TTK
Particionálás • A sorok részhalmazaira számítja ki az analitikus függvények értékét • Példa:SELECT deptno, ename, sal,RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS sorrendFROM scott.empORDER BY deptno, ename; a rangokat minden részlegen belül külön kezeli Markó Tamás, PTE TTK
Particionálás - az eredmény • DEPTNO ENAME SAL SORREND---------- ---------- ---------- ---------- 10 CLARK 2450 2 10 KING 5000 1 10 MILLER 1300 3 20 ADAMS 1100 4 20 FORD 3000 1 20 JONES 2975 3 20 SCOTT 3000 1 20 SMITH 800 5 30 ALLEN 1600 2 30 BLAKE 2850 1 30 JAMES 950 6 30 MARTIN 1250 4 30 TURNER 1500 3 30 WARD 1250 414 sor kijelölve.
Statisztikai függvények • Az ismert statisztikai függvények az OVER taggal kiegészítve (a működés más) • Példa: göngyölített (kumulált) összegSELECT ename, sal, SUM(sal) OVER (ORDER BY sal) AS kumulalt FROM scott.emp; Markó Tamás, PTE TTK
Kumulált összeg - az eredmény • ENAME SAL KUMULALT---------- ---------- ----------SMITH 800 800JAMES 950 1750ADAMS 1100 2850WARD 1250 5350MARTIN 1250 5350MILLER 1300 6650TURNER 1500 8150ALLEN 1600 9750CLARK 2450 12200BLAKE 2850 15050JONES 2975 18025SCOTT 3000 24025FORD 3000 24025KING 5000 29025 az azonos értékeket egyszerre adja hozzá az azonos értékeket egyszerre adja hozzá
Kumulált összeg particionálással 1. • SELECT deptno, ename, sal, SUM(sal) OVER (PARTITION BY deptno ORDER BY sal) AS kumulaltFROM scott.emp; részlegenként külön kezdi a kumulálást Markó Tamás, PTE TTK
Kumulált összeg particionálással 2. • DEPTNO ENAME SAL KUMULALT---------- ---------- ---------- ---------- 10 MILLER 1300 1300 10 CLARK 2450 3750 10 KING 5000 8750 20 SMITH 800 800 20 ADAMS 1100 1900 20 JONES 2975 4875 20 SCOTT 3000 10875 20 FORD 3000 10875 30 JAMES 950 950 30 WARD 1250 3450 30 MARTIN 1250 3450 30 TURNER 1500 4950 30 ALLEN 1600 6550 30 BLAKE 2850 9400
Csúszóátlag • SELECT ename, sal, AVG(sal) OVER ( ORDER BY sal ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS csuszoatlag FROM scott.emp; az előző, az aktuális és a következő sor átlaga Markó Tamás, PTE TTK
Csúszóátlag - eredmény • ENAME SAL CSUSZOATLAG---------- ---------- -----------SMITH 800 875JAMES 950 950ADAMS 1100 1100WARD 1250 1200MARTIN 1250 1266.66667MILLER 1300 1350TURNER 1500 1466.66667ALLEN 1600 1850CLARK 2450 2300BLAKE 2850 2758.33333JONES 2975 2941.66667SCOTT 3000 2991.66667FORD 3000 3666.66667KING 5000 4000
Az analitikus függvények általános alakja • Függvénynév ([paraméter]) OVER (analitikus_tag) • analitikus_tag: [particionálás][rendezés [ablak]] Markó Tamás, PTE TTK