Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
SQL modellezés Turáni Balázs
2
Multidimenzionális tömb
Forrás: Mérték oszlopok Select utasítás révén kapott EREDMÉNYHALMAZ MODEL Partíció oszlopok Dimenzió oszlopok Szabályok
3
Mire jó az SQL modellezés?
Lekérdezés eredményéből multidimenzionális tömböt készíthetünk. Ebből a tömbből bizonyos képletek (szabályok) segítségével új értékeket nyerhetünk ki. Szabályok = műveletek, melyek alapvető számtani műveletektől a szimultán rekurziókig széles skálán mozognak.
4
SQL Modellezés előnye:
Ora 10g vezette be > 11gR1>11gR2 Korlátlan adatmennyiséggel képes dolgozni. OLAP illetve OLTP adattáblák esetében egyaránt használható Lényegében az előelemzés eszköze. Modellezési, tervezési lehetőségeket kínál.
5
Model klauzula Multidimenzionális tömböt a Model klauzula segítségével állítjuk elő. Model klauzula az SQL blokk része.
6
SELECT + MODEL SELECT SzelekciósLista FROM Táblalista WHERE LogikaiOszlopkifejezés GROUP BY CsoportosítóOszlopkifejezésLista HAVING LogikaiOszlopkifejezés ORDER BY RendezőOszlopkifejezésLista MODEL
7
Model klauzula alapszintaxisa
MAIN <fő_model_neve> PARTITION BY (oszlop <másodlagos_név>) DIMENSION BY (oszlop <másodlagos_név> , oszlop <másodlagos_név>) MEASURES (<oszlop <másodlagos_név> , oszlop<másodlagos_név>) RULES <szabály opciók> RETURN {ALL|UPDATED} ROWS [IGNORE NAV] | [KEEP NAV] [UPDATE | UPSERT | UPSERT ALL] [AUTOMATIC ORDER | SEQUENTIAL ORDER] [ITERATE (<szám>) [UNTIL <feltétel>]]
8
Partíció oszlopok Lekérdezés eredményhalmazán definiálnak logikai tartományokat (eredményhalmazt blokkokra osztják) A partíciók egymástól függetlenek. Model klauzula szabályai valamennyi partícióra vonatkoznak. Utasítása: PARTITION BY (…)
9
Dimenzió oszlopok Definiálják a multidimenzionális tömböt.
Partíción belüli cellák azonosítására használjuk. Dimenziók egy teljes kombinációja csak egy cellát azonosíthat a tömbön belül. DIMENSION BY (…)
10
Mérték oszlopok Megegyeznek a csillag sémában lévő ténytábla mérték oszlopaival. Jellemzően numerikus adatokat tartalmaznak. Pl. valamely termék eladási ára, illetve az adott termékből eladott mennyiség…stb. MEASURES (…)
11
Szabályok Szabályok hozzáférnek a mérték oszlop értékeihez.
Ezeket az értékeket módosíthatják is (frissíthetik). Szabályok tömörek, könnyen kezelhetőek, helyettesítő karaktereket és ciklus szerkezeteket is tartalmazhatnak. RULES (…)
12
1. példa: SELECT region, cat, year, sales FROM sale
WHERE region IN ('East', 'West') AND year IN ('1999','2000','2001') MODEL PARTITION BY (region) DIMENSION BY (cat, year) MEASURES (sales) RULES ( sales['PROD1', 2001] = sales['PROD1',1999] + sales['PROD1',2000], sales['PROD2', 2001] = sales['PROD2',1999] + sales['PROD2',2000], sales['PROD3', 2001] = sales['PROD3',1999] + sales['PROD3',2000] ) ORDER BY region, cat, year, sales;
13
2. példa SELECT prod_type,year, s FROM sale
WHERE region IN ('East') AND year IN ('1999','2000','2001') MODEL DIMENSION BY (prod_type, year) MEASURES (sales s) RULES UPSERT ( s['FOOD',2001] = 1.2*s['MOVIE',1999] + s['MOVIE',2000], s['MOVIE', 2001] = s['MOVIE',1999] + s['MOVIE',2000], s['GAME', 2001] = AVG(s)[CV(prod_type), year<2000] ) ORDER BY year, prod_type;
14
3. példa Összesen kategória egy származtatott érték. SELECT
region, prod_type, year, sales FROM sale WHERE region IN ('East', 'West') AND year IN ('1999','2000','2001') MODEL PARTITION BY (region) DIMENSION BY (prod_type, year) MEASURES (sales) RULES ( sales['MOVIE', 2001] = sales['MOVIE', 2000] + sales['MOVIE', 1999], sales['FOOD', 2001] = sales['FOOD',2000], sales['GAME', 2001] = sales['GAME', 2000] + sales['GAME', 1999], sales['ÖSSZESEN',2001] =sales['MOVIE', 2001] + sales['FOOD', 2001] + sales['GAME', 2001] ) ORDER BY region, prod_type, year; Összesen kategória egy származtatott érték.
15
SQL Model használata: Cellacímzés: Cellacímzés vonatkozhat:
Cellák frissíthetők Hivatkozni is lehet rájuk. Formái: s['MOVIE', '2001'] (pozícionális) s[prod_type='MOVIE', YEAR='1999'] (szimbolikus) Cellacímzés vonatkozhat: Egyedi cellákra Cella tartományokra
16
4. példa: SELECT region,prod_type, year, sales FROM sale
WHERE region IN ('East','West') AND prod_type='MOVIE' MODEL -- RETURN UPDATED ROWS PARTITION BY (prod_type) DIMENSION BY (region, year) MEASURES (sales) RULES UPDATE ( sales[region='West', year=2000] = sales['West',1999] + sales['West',1998], sales[region='East', year=2000] = MAX(sales)['East', year BETWEEN 1998 AND 2000] ) ORDER BY year,region;
17
Szimbolikus tömb feldolgozás
AVG(s)[prod_type='MOVIE‘,year BETWEEN '1998' AND '2000'] AVG(s)[prod_type='MOVIE', YEAR<='2000']
18
UPSERT, UPSERT ALL, UPDATE
UPSERT alap értelmezett (bemeneti adatok között nem szereplő cellaértékek létrehozására használhatjuk) Ha: Cella létezik → frissülni fog Nem létezik → létrejön a cella UPDATE (csak frissít, új cellát sohasem szúr be)
19
5. példa: SELECT region, prod_type, year, sales FROM sale
MODEL RETURN UPDATED ROWS PARTITION BY (prod_type) DIMENSION BY (region, year) MEASURES (sales) RULES ( UPDATE sales['West', 2000] = , UPSERT sales['West', 2007] = sales['West', 1999] + sales['West', 2000] ) ORDER BY region;
20
Dimenziók helyettesítésének lehetőségei
Egy dimenzióban lévő összes érték megadásához az ANY és IS ANY használható. sales[ ANY,2000] = 1.3*sales['West',1999], sales[region IS ANY, 1999] = sales['West',1999]
21
Dimenzióértékek elérése CV függvény használatával
Egy cella dimenzió-értékének eléréséhez a szabály jobb oldalán használható a CV függvény, amely a szabály bal oldalán lévő megfelelő értékekre hivatkozik. sales[region='West', year=2000] = 1.2*sales['West',1999], sales[region='East', year=2000] = 1.2*sales['East',1999], sales[region='Central', year=2000] =1.2*sales['Central',1999] Tömörebben: sales[ region IN ('West','East', 'Central'), year=2000]= 1.2*sales[CV(region),1999]
22
Szabályok automatikus rendezése
AUTOMATIC ORDER utasítással érhető el. sales['West', 2001] = sales['West', 2000] + sales['West',1999], sales['West', 2000] = 50000, sales['West', 1999] = 40000 Sorrend: 1999-es év 2000-es év 2001-es év Az első az utolsó kettőtől függ.
23
Hivatkozó modellek Egy főmodell read-only (kizárólag olvasható) tömbök formájában több modellhivatkozást (is) tartalmazhat. Különböző dimenzionalitásban kapcsolhatunk össze modelleket. Adattáblák: ft(régió, év, eladások), cr(régió, ráta), dollar_eladások['West',2001] = eladások['West',2000] * ráta['West']
24
6. példa: SELECT region, prod_type, year, sales FROM sale
WHERE region IN ('West','East') MODEL RETURN UPDATED ROWS MAIN simple_model PARTITION BY (region) DIMENSION BY (prod_type, year) MEASURES (sales) RULES( sales['FOOD',2000] = , sales['FOOD', 2001] = sales['FOOD',1999] + sales['FOOD',2000], sales['MOVIE', 2001] = sales[ 'MOVIE',2000] ) ORDER BY region, prod_type, year;
25
Megjegyzés Jegyezzük meg, hogy a MODEL klauzula nem frissít, vagy szúr be sorokat az adatbázis tábláiba. A következő lekérdezés jól illusztrálja, hogy az előbbi modelles adatfeldolgozás által a sale adattábla nem módosult. SELECT region, prod_type, year, sales FROM sale WHERE region IN ('West','East') AND year IN (2000, 2001);
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.