Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

SQL modellezés Turáni Balázs.

Hasonló előadás


Az előadások a következő témára: "SQL modellezés Turáni Balázs."— Előadás másolata:

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);


Letölteni ppt "SQL modellezés Turáni Balázs."

Hasonló előadás


Google Hirdetések