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

1 SQL modellezés Turáni Balázs. Multidimenzionális tömb Forrás:

Hasonló előadás


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

1 1 SQL modellezés Turáni Balázs

2 Multidimenzionális tömb Forrás: 2 Select utasítás révén kapott EREDMÉNYHALMAZ Select utasítás révén kapott EREDMÉNYHALMAZ MODEL Partíció oszlopok Dimenzió oszlopok Mérték oszlopok Szabályok

3 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 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 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 6 MODEL

7 7 Model klauzula alapszintaxisa MODEL MAIN PARTITION BY (oszlop ) DIMENSION BY (oszlop, oszlop ) MEASURES (, oszlop ) RULES RETURN {ALL|UPDATED} ROWS [IGNORE NAV] | [KEEP NAV] [UPDATE | UPSERT | UPSERT ALL] [AUTOMATIC ORDER | SEQUENTIAL ORDER] [ITERATE ( ) [UNTIL ]]

8 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 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 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 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 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 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 14 3. példa 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 15 SQL Model használata:  Cellacímzés:  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 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 17 Szimbolikus tömb feldolgozás  AVG(s)[prod_type='MOVIE‘,year BETWEEN '1998' AND '2000']  AVG(s)[prod_type='MOVIE', YEAR<='2000']

18 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 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 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 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 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] = Sorrend: es év es év es év Az első az utolsó kettőtől függ.

23 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 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 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 "1 SQL modellezés Turáni Balázs. Multidimenzionális tömb Forrás:"

Hasonló előadás


Google Hirdetések