Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE...

44
RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana” 3. praktiskais darbs „Datu noliktavas” Izstrādāja: Mārtiņš Paukšte (I DGDB – 3 Apl.Num.: 051RDB097) Pārbaudīja: asoc. prof. Jānis Eiduks

Transcript of Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE...

Page 1: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

RĪGAS TEHNISKĀ UNIVERSITĀTEDatorzinātnes un informācijas tehnoloģijas fakultāte

„Lielu datu bāzu administrēšana”

3. praktiskais darbs„Datu noliktavas”

Izstrādāja: Mārtiņš Paukšte (I DGDB – 3 Apl.Num.: 051RDB097)Pārbaudīja: asoc. prof. Jānis Eiduks

Rīga, 2012

Page 2: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

1. Testa datubāzes izveide (Sniegpārslas shēma)_____________________________________________3

Tabulu sasaistes shēma_________________________________________________________________________3

Tabulas un virknes_____________________________________________________________________________4

Dimensiju tabulas un sekvences__________________________________________________________________________4

Faktu tabula_________________________________________________________________________________________4

Datu aizpildīšana ar SQL Loader__________________________________________________________________5

Ražotāji_____________________________________________________________________________________________5

Preču tipi____________________________________________________________________________________________5

Preces______________________________________________________________________________________________6

Valstis______________________________________________________________________________________________8

Pilsētas_____________________________________________________________________________________________8

Veikali______________________________________________________________________________________________9

Datu aizpildīšana – datu ģenerēšana_____________________________________________________________10

Laika tabulas aizpildīšana______________________________________________________________________________10

Faktu tabulas aizpildīšana_____________________________________________________________________________13

2. Kuba „šķēlēšana” (Slicing)____________________________________________________________16

3. OlapCube Writer datu analīze_________________________________________________________21

Secinājumi_____________________________________________________________________________36

Page 3: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

1. Testa datubāzes izveide (Sniegpārslas shēma)

Klasisks piemērs ar veikaliem, precēm un pārdotajiem apjomiem noteiktos laikos. Centrā – faktu tabula,

apkārt – dimensiju tabulas.

Tabulu sasaistes shēma

Page 4: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Tabulas un virknes

Dimensiju tabulas un sekvences

-- PrecesCREATE TABLE dwh_products (product_id NUMBER UNIQUE,product_name VARCHAR2(255),manufacturer_id NUMBER,product_type_id NUMBER);

-- Preču tipiCREATE TABLE dwh_product_types(product_type_id NUMBER UNIQUE,type_name VARCHAR2(255));

-- RažotājiCREATE TABLE dwh_manufacturers(manufacturer_id NUMBER UNIQUE,manufacturer_name VARCHAR2(255));

-- VeikaliCREATE TABLE dwh_stores(store_id NUMBER UNIQUE,store_name VARCHAR2(255),city_id NUMBER);

-- PilsētasCREATE TABLE dwh_cities(city_id NUMBER UNIQUE,city_name VARCHAR2(255),country_id NUMBER);

-- ValstisCREATE TABLE dwh_countries(country_id NUMBER UNIQUE,country_name VARCHAR2(255));

-- LaiksCREATE TABLE dwh_time(time_id NUMBER UNIQUE,time DATE);

-- SekvencesCREATE SEQUENCE dwh_product_id_seq;CREATE SEQUENCE dwh_product_type_id_seq;CREATE SEQUENCE dwh_manufacturer_id_seq;CREATE SEQUENCE dwh_supplier_id_seq;CREATE SEQUENCE dwh_customer_id_seq;CREATE SEQUENCE dwh_customer_type_id_seq;CREATE SEQUENCE dwh_store_id_seq;CREATE SEQUENCE dwh_city_id_seq;CREATE SEQUENCE dwh_country_id_seq;CREATE SEQUENCE dwh_time_id_seq;

Faktu tabula

Faktu tabulā reģistrēsim pārdošanas faktu, kurā fiskē: Pārdoto preci, pārdotajā veikalā, pārdotajā laikā un

pārdoto apjomu.CREATE TABLE dwh_facts (store_id NUMBER ,product_id NUMBER ,time_id NUMBER ,COUNT NUMBER );

Page 5: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Datu aizpildīšana ar SQL Loader

Ražotāji

Faila sql_loader_manufacturers.bat saturs:

sqlldr apps/******@RTU11G.ALISE.LV control='load_manufacturers.ctl'

Faila load_manufacturers.ctl saturs:

load data infile * TRUNCATE INTO TABLE dwh_manufacturers fields terminated by '|' TRAILING NULLCOLS ( --manufacturer_id "dwh_manufacturer_id_seq.NEXTVAL", manufacturer_id INTEGER EXTERNAL, manufacturer_name CHAR(255) )begindata1|Apple2|BlackBerry3|HTC4|LG5|Motorola6|Nokia7|Samsung8|Sony Erricson9|Panasonic10|Sharp11|Sony12|Toshiba13|Canon14|Fujifilm15|Kodak16|Nikon17|Olympus

Preču tipi

Faila sql_loader_product_types.bat saturs:sqlldr apps/******@RTU11G.ALISE.LV control='load_product_types.ctl'

Faila load_product_types.ctl saturs:load data infile * TRUNCATE INTO TABLE dwh_product_types fields terminated by '|' TRAILING NULLCOLS ( --product_type_id "dwh_product_type_id_seq.NEXTVAL", product_type_id INTEGER EXTERNAL, type_name CHAR(255) )begindata0|Cita elektrotehnika|1|Mobilie telefoni| -- un aksesuāri|2|Televizori|3|Fotokameras|4|Datortehnika un tīkli|5|Vide spēles un sistēmas|6|Videokameras|7|Audio tehnika|

Page 6: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Preces

Faila sql_loader_products.bat saturs:sqlldr apps/******@RTU11G.ALISE.LV control='load_products.ctl'

Faila load_products.ctl saturs:load data infile * TRUNCATE INTO TABLE dwh_products fields terminated by '|' TRAILING NULLCOLS ( --product_id "dwh_product_id_seq.NEXTVAL", product_id INTEGER EXTERNAL, product_name CHAR(255), product_type_id INTEGER EXTERNAL, manufacturer_id INTEGER EXTERNAL )begindata1|iPhone 4S|1|12|iPhone 3G|1|13|Torch 9800|1|24|Bold 9700|1|25|Curve 8530|1|26|Storm 9530|1|27|EVO 4G|1|38|Inspire 4G|1|39|Radar 4G|1|310|Titan|1|311|Droid Incredible|1|312|Droid Eris|1|313|ThunderBolt|1|314|Sensation|1|315|MyTouch|1|316|One|1|317|enV Dare VX-9700|1|418|G2x|1|419|enV Touch VX11000|1|420|Optimus V|1|421|Esteem|1|422|Thrill 4G|1|423|Cosmos VN250|1|424|Marquee LS855|1|425|Voyager VX10000|1|426|Extravert|1|427|Droid a855|1|528|Droid X|1|529|Triumph|1|530|Droid RAZR|1|531|Atrix 4G|1|532|Droid Bionic|1|533|Droid X2|1|534|Photon 4G|1|535|5230 Nuron|1|636|Lumia 900|1|637|N Series N900|1|638|Lumia 710|1|639|N Series N8|1|640|Lumia 800|1|641|Galaxy S II Epic 4G Touch|1|742|Galaxy S Captivate|1|743|Galaxy Note GT-N7000|1|744|SCH i510 Droid Charge|1|745|Galaxy S II LTE|1|746|XPERIA arc S|1|847|XPERIA Play|1|848|XPERIA X10 mini|1|849|47LV4400 47" 1080p HD LED LCD|2|450|INFINIA 42LK450 42" 1080p HD LCD|2|451|32LK330 32" 720p HD LCD|2|452|42LV4400 42" 1080p LED LCD|2|453|INFINIA 47LW5600 47" 3D-Ready 1080p HD LED LCD|2|454|42LW5300 42" 3D-Ready 1080p HD LED LCD|2|455|LG 55LV4400 55" 1080p HD LED LCD|2|4

Page 7: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

56|Viera TC-P55ST30 55" Full 3D 1080p HD Plasma Internet|2|957|Viera TC-P60ST30 60" Full 3D 1080p HD Plasma Internet|2|958|TC-P50S30 50" 1080p HD Plasma|2|959|Viera TC-P42ST30 42" Full 3D 1080p HD Plasma Internet|2|960|Viera TC-P46ST30 46" Full 3D 1080p HD Plasma Internet|2|961|Smart Viera E50 TC-L42E50 42" 1080p HD LED LCD|2|962|SyncMaster B2230HD 22" 1080p HD LCD|2|763|PN43D450 43" 720p HD Plasma|2|764|UN46D6050 46" 1080p HD LED LCD Internet TV|2|765|UN55D6050 55" 1080p HD LED LCD Internet TV|2|766|SyncMaster T23A350 23" 1080p HD LED LCD Television|2|767|LN32D403 32" 720p HD LCD Internet TV|2|768|AQUOS LC-60LE633U 60" 1080p HD LED LCD Internet|2|1069|AQUOS LC-80LE844U 80" Full 3D 1080p HD LED LCD Internet|2|1070|AQUOS LC-60LE832U 60" 1080p HD LED LCD Internet|2|1071|AQUOS LC-70LE632U 70" 1080p HD LED LCD Internet|2|1072|AQUOS LC-70LE733U 70" 1080p HD LCD Internet|2|1073|LC-80LE632U 80" 1080p HD LED LCD|2|1074|Bravia KDL-40BX421 40" 1080p HD LCD|2|1175|NSX32GT1 32" 1080p HD LED LCD Internet|2|1176|NSX40GT1 40" 1080p HD LED LCD Internet|2|1177|Bravia KDL-32EX400 32" 1080p HD LCD|2|1178|Bravia XBR-65HX929 64.5" Full 3D HD LED LCD|2|1179|Bravia KDL-40BX420 40" 1080p HD LCD|2|1180|24SL410U 24" 1080p HD LED LCD|2|1281|32C110U 32" 720p HD LCD|2|1282|42TL515U 42" Full 3D 1080p HD LED LCD|2|1283|32SL400U 32" 720p LED LCD|2|1284|55UX600U 55" 1080p HD LED LCD|2|1285|40E220U 40" 1080p HD LCD|2|1286|EOS 5D Mark II 21.1 MP|3|1387|EOS Rebel T3i / 600D 18.0 MP|3|1388|EOS Rebel T3 / 1100D 12.2 MP|3|1389|EOS 7D 18.0 MP|3|1390|EOS Rebel T2i / 550D 18.0 MP|3|1391|EOS 60D 18.0 MP|3|1392|FinePix X100 12.3 MP|3|1493|FinePix S2950 14.0 MP|3|1494|FinePix S3280 14.0 MP|3|1495|X series X10 12.0 MP|3|1496|X series X-Pro1 16.3 MP|3|1497|FinePix HS20 EXR 16.0 MP|3|1498|EASYSHARE Z5010 14.0 MP|3|1599|EASYSHARE C195 14.0 MP|3|15100|EASYSHARE MAX Z990 12.0 MP|3|15101|EASYSHARE C183 14.0 MP|3|15102|EASYSHARE Z981 14.0 MP|3|15103|EASYSHARE M530 12.2 MP|3|15104|D3100 14.2 MP|3|16105|D800 36.3 MP|3|16106|D700 12.1 MP|3|16107|D5100 16.2 MP|3|16108|D7000 16.2 MP|3|16109|COOLPIX S3300 16.0 MP|3|16110|PEN E-PL1 12.3 MP|3|17111|OM-D E-M5 16.1 MP|3|17112|PEN E-PL1 12.3 MP|3|17113|Stylus Tough 8010 / µ (mju) Tough 8010 14.0 MP|3|17114|PEN E-P3 12.3 MP|3|17115|Stylus Tough 6020 / µ (mju) Tough 6020 14.0 MP|3|17116|LUMIX DMC-LX5 10.1 MP|3|9117|LUMIX DMC-GF3K 12.1 MP|3|9118|LUMIX DMC-FZ150 12.1 MP|3|9119|LUMIX DMC-ZS8/DMC-TZ18 14.1 MP|3|9120|LUMIX DMC-GH2 16.0 MP|3|9121|LUMIX DMC-GF3X 12.1 MP|3|9122|MV800 16.1 MP|3|7123|PL120 14.0 MP|3|7124|DualView TL205 12.2 MP|3|7125|DV300F 16.0 MP|3|7126|WB150F 14.2 MP|3|7127|WB850F 16.0 MP|3|7128|? (alpha) NEX-5N 16.1 MP|3|11129|Cyber-shot DSC-HX9V 16.2 MP|3|11130|Cyber-shot DSC-W570 16.1 MP|3|11131|Cyber-shot DSC-WX9 16.2 MP|3|11132|? (alpha) NEX-3 14.2 MP|3|11

Page 8: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

133|? (alpha) NEX-5 14.2 MP|3|11

Valstis

Faila sql_loader_countries.bat saturs:sqlldr apps/******@RTU11G.ALISE.LV control='load_countries.ctl'

Faila load_countries.ctl saturs:load data infile * TRUNCATE INTO TABLE dwh_countries fields terminated by '|' TRAILING NULLCOLS ( --"dwh_country_id_seq.NEXTVAL", country_id INTEGER EXTERNAL, country_name CHAR(255) )begindata1|Latvija|2|Lietuva|3|Igaunija|4|Baltkrievija|5|Krievija|

Pilsētas

Faila sql_loader_cities.bat saturs:sqlldr apps/******@RTU11G.ALISE.LV control='load_cities.ctl'

Faila load_cities.ctl saturs:load data infile * TRUNCATE INTO TABLE dwh_cities fields terminated by '|' TRAILING NULLCOLS ( --city_id "dwh_city_id_seq.NEXTVAL", city_id INTEGER EXTERNAL, city_name CHAR(255), country_id INTEGER EXTERNAL )begindata1|Rīga|12|Ventspils|13|Liepāja|14|Daugavpils|15|Viļņa|26|Kauņa|27|Klaipēda|28|Šauļi|29|Tallina|310|Tartu|311|Pērnava|312|Narva|313|Minska|414|Vitebska|415|Bresta|416|Gormeļa|417|Maskava|518|Sanktpēterburga|519|Novosibirska|520|Jekaterinburga|5

Page 9: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Veikali

Faila sql_loader_stores.bat saturs:sqlldr apps/******@RTU11G.ALISE.LV control='load_stores.ctl'

Faila load_stores.ctl saturs:load data infile * TRUNCATE INTO TABLE dwh_stores fields terminated by '|' TRAILING NULLCOLS ( -- "dwh_store_id_seq.NEXTVAL", store_id INTEGER EXTERNAL, store_name CHAR(255), city_id INTEGER EXTERNAL )begindata1|42nd Street Photo|12|Bang & Olufsen|13|Best Buy|24|Costco|25|Dijital Fix|36|Focus Camera|47|GameStop|58|J&R Music and Computer World|59|P.C. Richard & Son|610|Radio Shack|711|Sterling Electronics|712|Wizard Electroland|813|Dijital Fix|914|P.C. Richard & Son|915|Costco|916|42nd Street Photo|1017|Wizard Electroland|1118|P.C. Richard & Son|1219|Wizard Electroland|1320|Best Buy|1321|Radio Shack|1422|42nd Street Photo|1523|Bang & Olufsen|1524|J&R Music and Computer World|1525|Dijital Fix|1626|Focus Camera|1727|Costco|1728|Focus Camera|1729|Wizard Electroland|1830|Bang & Olufsen|1931|GameStop|2032|Best Buy|20

Page 10: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Datu aizpildīšana – datu ģenerēšana

Laika tabulas aizpildīšana

DECLARE l_min_date NUMBER := TO_CHAR(TO_DATE('01.01.2000','dd.MM.yyyy'),'J'); -- No l_max_date NUMBER := TO_CHAR(TO_DATE('01.01.2010','dd.MM.yyyy'),'J'); -- Līdz l_random_date DATE; l_time_id NUMBER; l_count NUMBER := 0; l_existing_count NUMBER := 0; BEGIN DELETE FROM dwh_time; LOOP EXIT WHEN l_count = 1000; l_random_date := TO_DATE(TRUNC(DBMS_RANDOM.VALUE (l_min_date, l_max_date)),'J');

-- Pievieno jaunu laiku, ja tāds vēl nav bijis BEGIN SELECT time_id INTO l_time_id FROM dwh_time WHERE time = l_random_date;

dbms_output.put_line(l_random_date || ' jau eksistē...'); l_existing_count := l_existing_count + 1; EXCEPTION WHEN no_data_found THEN INSERT INTO dwh_time(time_id,time) VALUES(dwh_time_id_seq.NEXTVAL,l_random_date); END; l_count := l_count + 1; END LOOP; dbms_output.put_line('Apstrādāti '|| l_count || ' datumi...'); dbms_output.put_line(l_existing_count || ' dublikāti, kas netika pievienoti otrreiz...'); SELECT count(1) INTO l_count FROM dwh_time; dbms_output.put_line('Tabulā šobrīd '|| l_count|| ' ieraksti...');END;

Page 11: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

-- Sadalījums pa gadiem ir pārāk vienmērīgs (neinteresants), tāpēc izmainīsim toSELECT EXTRACT (YEAR FROM time), COUNT (1) FROM dwh_timeGROUP BY EXTRACT (YEAR FROM time)ORDER BY EXTRACT (YEAR FROM time);

-- 1UPDATE dwh_time SET TIME = add_months(TIME,12)WHERE EXTRACT (YEAR FROM time) = 2000 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2000)/100);

-- 2UPDATE dwh_time SET TIME = add_months(TIME,12)WHERE EXTRACT (YEAR FROM time) = 2001 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2001)/100);

-- 3UPDATE dwh_time SET TIME = add_months(TIME,12)WHERE EXTRACT (YEAR FROM time) = 2002 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2002)/100);

-- 4UPDATE dwh_time SET TIME = add_months(TIME,12)WHERE EXTRACT (YEAR FROM time) = 2003 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2003)/100);

-- 5 UPDATE dwh_time SET TIME = add_months(TIME,-12)WHERE EXTRACT (YEAR FROM time) = 2009 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2009)/100);

-- 6 UPDATE dwh_time SET TIME = add_months(TIME,-12)WHERE EXTRACT (YEAR FROM time) = 2008 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2008)/100);

Page 12: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

-- 7 UPDATE dwh_time SET TIME = add_months(TIME,-12)WHERE EXTRACT (YEAR FROM time) = 2007 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2007)/100);

-- 8 UPDATE dwh_time SET TIME = add_months(TIME,-12)WHERE EXTRACT (YEAR FROM time) = 2006 AND ROWNUM <= TRUNC(50*(SELECT COUNT(1)FROM dwh_time WHERE extract(YEAR FROM time)=2006)/100);

-- Sadalījums ir mainījies:

Page 13: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Faktu tabulas aizpildīšana

DECLARE l_count NUMBER := 1000; i NUMBER := 0; -- Preces l_min_product_id NUMBER; l_max_product_id NUMBER; l_random_product_id NUMBER; -- Veikali l_min_store_id NUMBER; l_max_store_id NUMBER; l_random_store_id NUMBER; -- Laiks l_min_time_id NUMBER; l_max_time_id NUMBER; l_random_time_id NUMBER; -- Minimālais un maksimālais pārdošanas apjoms 1 dienā l_min_sold NUMBER := 1; l_max_sold NUMBER := 10;BEGIN DELETE FROM dwh_facts; -- Robežas precēm SELECT MIN (product_id),MAX (product_id) INTO l_min_product_id,l_max_product_id FROM dwh_products;

-- Robežas veikaliem SELECT MIN (store_id),max(store_id) INTO l_min_store_id,l_max_store_id FROM dwh_stores;

-- Robežas laikiem SELECT MIN (time_id),max(time_id) INTO l_min_time_id,l_max_time_id FROM dwh_time; LOOP EXIT WHEN i = l_count;

-- Random preces ID SELECT TRUNC (DBMS_RANDOM.VALUE (l_min_product_id, l_max_product_id)) INTO l_random_product_id FROM DUAL;

-- Random veikala ID SELECT TRUNC (DBMS_RANDOM.VALUE (l_min_store_id, l_max_store_id)) INTO l_random_store_id FROM DUAL; -- Random laika ID SELECT TRUNC (DBMS_RANDOM.VALUE (l_min_time_id, l_max_time_id)) INTO l_random_time_id FROM DUAL;

-- Izveido faktu: "Pārdota prece (product_id) veikalā(store_id) laikā(time_id)" INSERT INTO dwh_facts (product_id,store_id,time_id,count) VALUES (l_random_product_id,l_random_store_id,l_random_time_id ,TRUNC(DBMS_RANDOM.VALUE (l_min_sold, l_max_sold))); i := i + 1; END LOOP; dbms_output.put_line('Izveidoto faktu skaits: '||i); END;

Page 14: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

-- Pārāk vienlīdzīgs pārdoto produktu tipu apjomsSELECT pt.type_name,sum(f.count) FROM dwh_product_types pt ,dwh_products p ,dwh_facts f WHERE pt.product_type_id = p.product_type_id AND p.product_id = f.product_idGROUP BY pt.type_name;

-- Samazināsim Televizoru pārdošanas apjomusUPDATE dwh_facts SET count = count - 2 WHERE count > 2 AND product_id IN(SELECT p.product_id FROM dwh_products p ,dwh_product_types pt WHERE p.product_type_id = pt.product_type_id AND pt.type_name = 'Televizori'); -- Palielināsim Mobilo telefonu pārdošanas apjomusUPDATE dwh_facts SET count = count + 2 WHERE 1 = 1 AND product_id IN(SELECT p.product_id FROM dwh_products p ,dwh_product_types pt WHERE p.product_type_id = pt.product_type_id AND pt.type_name = 'Mobilie telefoni');

-- Pārāk vienlīdzīgs sadalījums pa valstīmSELECT ctr.country_name,sum(f.count) FROM dwh_facts f ,dwh_stores s ,dwh_cities c ,dwh_countries ctr WHERE f.store_id = s.store_id AND s.city_id = c.city_id AND c.country_id = ctr.country_id GROUP BY ctr.country_name;

Page 15: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

-- Palielinām pārdoto LatvijāUPDATE dwh_facts SET COUNT = COUNT + 4 WHERE store_id IN (SELECT s.store_id FROM dwh_stores s ,dwh_cities c ,dwh_countries ctr WHERE s.city_id = c.city_id AND c.country_id = ctr.country_id AND ctr.country_name = 'Latvija');

-- Samazinām pārdoto KrievijāUPDATE dwh_facts SET COUNT = COUNT - decode(COUNT,2,1,3,2,3) WHERE COUNT > 1 AND store_id IN (SELECT s.store_id FROM dwh_stores s ,dwh_cities c ,dwh_countries ctr WHERE s.city_id = c.city_id AND c.country_id = ctr.country_id AND ctr.country_name = 'Krievija');-- Sadalījums pa valstīm ir mainījies:

Page 16: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

2. Kuba „šķēlēšana” (Slicing)

-- Izveidojam skatījumu ērtākai faktu un saistīto dimensiju aplūkošanai:CREATE OR REPLACE VIEW dwh_facts_v ASSELECT p.product_name ,s.store_name ,t.TIME ,SUM(f.count) sold FROM dwh_facts f ,dwh_products p ,dwh_stores s ,dwh_time tWHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY product_name,store_name,TIME;

-- Izveidojam līdzīgu skatījumu, tikai ar "CUBE" pielietojumu,-- kas jau skatījumā veic agregācijas visiem pieejamajiem datiemCREATE OR REPLACE VIEW dwh_fact_cube_v ASSELECT product_name ,store_name ,TIME ,SUM(f.count) sold --,count(1) FROM dwh_facts f ,dwh_products p ,dwh_stores s ,dwh_time tWHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY cube (product_name,store_name,TIME); -- "CUBE" vietā var lietot arī "ROLLUP"

-- Izveidojam vēl vienu "CUBE" skatījumu, kurā atmetam datumus un mēnešus:CREATE OR REPLACE VIEW dwh_fact_cube_YEAR_v ASSELECT product_name ,store_name ,EXTRACT(YEAR FROM time) YEAR -- Tikai gadi ,SUM(f.count) sold --,count(1) FROM dwh_facts f ,dwh_products p ,dwh_stores s ,dwh_time tWHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY cube (product_name,store_name,EXTRACT(YEAR FROM time));

Page 17: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

SELECT * -- sum(sold) FROM dwh_facts_v WHERE product_name = 'G2x' AND store_name = 'P.C. Richard & Son' AND EXTRACT (YEAR FROM time) = 2007;

-- CUBE YEAR skatījums SELECT * FROM dwh_fact_cube_Year_v WHERE 1=1 AND product_name = 'G2x' AND store_name = 'P.C. Richard & Son' AND YEAR = 2007;

Page 18: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

-- Parastais skatījums SELECT * -- sum(sold) FROM dwh_facts_v WHERE product_name = 'N Series N8' AND store_name = 'Wizard Electroland';

-- CUBE skatījums SELECT * FROM dwh_fact_cube_v WHERE product_name = 'N Series N8' AND store_name = 'Wizard Electroland' AND time IS NULL; -- Kopsumma

Page 19: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

SELECT * -- sum(sold) FROM dwh_facts_v WHERE product_name = 'XPERIA X10 mini' AND EXTRACT (YEAR FROM time) IN (2007,2008);

-- CUBE YEAR skatījums SELECT * FROM dwh_fact_cube_YEAR_v WHERE product_name = 'XPERIA X10 mini' AND YEAR IN (2007,2008) AND store_name IS NULL; -- Kopsummas pa veikaliem

Page 20: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

-- Parastais skatījums SELECT SUM(sold) FROM dwh_facts_v WHERE store_name = '42nd Street Photo';

-- CUBE skatījums SELECT * FROM dwh_fact_cube_v WHERE store_name = '42nd Street Photo' AND product_name IS NULL -- Kopsumma AND TIME IS NULL; -- Kopsumma

Page 21: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

3. OlapCube Writer datu analīze

OlapCube ir programma ar samērā vienkāršu interfeisu un ne īpaši padziļinātām funkcijām, bet pietiekoši,

lai apmierinātu vienkāršu aprēķinu vajadzības.

Instalācija:

Mūsu gadījumā izvēlamies datu avotu „Oracle”:

Page 22: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Izvēlamies Oracle Home:

Pieslēgšanās parametri:

Šajā brīdī tika konstatēts, ka vai nu Windows 7 64-bit operētājsistēma vai datubāzēs versija Oracle 11g

neļāva programmai pieslēgties:

Page 23: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Tāpēc tika pārnesta turpmākā darbība uz Windows XP mašīnas un Oracle 10g datubāzes:

Nākošajā solī būtu jāizvēlas tabulas, kas būs iesaistītas OLAP kuba veidošanā, bet nez kāpēc šis rīks neredz

SYSTEM shēmā veidotās tabulas, toties redz SYSMAN shēmas tabulas:

Tāpēc tika izveidoti sinonīmi šīm tabulām, lai SYSMAN shēma varētu redzēt vajadzīgās tabulas:CREATE SYNONYM sysman.dwh_products FOR system.dwh_products;CREATE SYNONYM sysman.dwh_stores FOR system.dwh_stores;CREATE SYNONYM sysman.dwh_time FOR system.dwh_time;CREATE SYNONYM sysman.dwh_facts FOR system.dwh_facts;CREATE SYNONYM sysman.dwh_manufacturers FOR system.dwh_manufacturers;CREATE SYNONYM sysman.dwh_product_types FOR system.dwh_product_types;CREATE SYNONYM sysman.dwh_cities FOR system.dwh_cities;CREATE SYNONYM sysman.dwh_countries FOR system.dwh_countries;

Page 24: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Pieslēdzamies vēlreiz un izņemam ķeksi „Show only tables” un izvēlamies vajadzīgās tabulas (sinonīmus):

Page 25: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Šajā brīdī visas tabulas ir ietvertas projektā, bet nav norādīta nekāda sasaiste starp tām. Vēlams saglabāt

projektu.

Page 26: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Sasaistes starp tabulām var norādīt ļoti elementāri - ar peles palīdzību (Drag & Drop), pārvelkot vajadzīgo

lauku no vienas tabulas uz otru. Izveidojam sasaisti starp tabulām tāpat kā sākotnējā tabulu sasaistes

shēmā:

Pievienojam galveno (mūsu piemērā vienīgo) aprēķinu – faktu tabulas lauku „count”, kurā glabājas

pārdošanas notikumā pārdoto preču skaits:

Tālāk pievienojam katru dimensiju, kuru vēlamies:

Page 27: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Šajā gadījumā tika pievienotas 6 dimensijas (Pilsētas, Valstis, Ražotāji, Preces, Veikali, Preču tipi):

Pievienojot septīto dimensiju – laiku – programma konstatē, ka tas ir datuma tipa lauks un piedāvā izvēlni

ar laika formātu. Lai arī mūsu gadījumā formā katrs ieraksts ir ar laika formātu dd.MM.yyyy, izvēlamies

noapaļot laiku līdz gadam:

Page 28: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Tālāk norāda kura dimensija ir kurai pakārtota (piemēram, Valsts -> Pilsēta -> Veikals). Kokā tās parādās

pakārtotas zem attiecīgās dimensijas:

Tagad struktūra ir gatava kuba būvēšanai:

Kad kubs ir veiksmīgi uzģenerēts, iespējams skatīt datus no dažādām dimensijām dažādu veidu

apkopojumos.

Page 29: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Sadalījums pa valstīm:

Page 30: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Par cik tika definēta arī saistība starp dimensiju līmeņiem (Valstis -> Pilsētas -> Veikali), ir iespējams ar peles

klikšķi nonākt vienu līmeni dziļāk (Drill-down) – attiecīgās valsts pilsētas:

Un tāpat var nokļūt vēl dziļāk nākošajā līmenī – attiecīgās pilsētas veikali:

Page 31: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Sadalījums pa preču tipiem:

Sadalījums pa ražotājiem:

Page 32: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Šādi izskatās sadalījums pa precēm:

Page 33: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Lai no iepriekšējās atskaites būtu kāda jēga, var parādīt, piemēram, desmit vispārdotākos produktus:

Laika dimensija kolonnu grafikā:

Page 34: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Ir iespējams apskatīt arī divas dimensijas vienlaicīgi kolonnu vai tabulārajā skatījumā. Atzīmē valstis un laika

dimensijas un rezultātā iegūst pārdotos apjomus pa gadiem katrā valstī:

Page 35: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Tabulārais grafiks: Pārdotais pilsētās pa gadiem:

Page 36: Testa datubāzes izveide (Sniegpārslas shēma) · Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „Lielu datu bāzu administrēšana”

Secinājumi

Jāsaka, ka neesmu piedalījies nevienā reālā datu noliktavas izstrādes vai uzturēšanas procesā, tāpēc darbā

nav īpaši dziļu domu, tikai tādi vienkāršākie piemēri. Bet šoreiz, būvējot visu no pamatiem, bija daudz

saprotamāk kā toreiz, kad mēģinājām MS Access OLAP vedni.

Par rīku OlapCube – pirmais, kas šķita pilnīgi nenopietni ir tas, ka uzreiz pēc pieslēgšanās datubāzei tiek

attēlotas VISU SHĒMU tabulas? Piemēram, ja manā datubāzē ir uzinstalēta kāda ERP sistēma, tad tajā dažās

shēmās vien ir jau vairāki tūkstoši tabulu. Respektīvi, normāli būtu, ja būtu pieejams kāds datubāzes

objektu filtrs. Pēc tā arī var spriest, ka rīks īsti nav paredzēts nekam nopietnam, tik vien kā kādai

prezentācijai klientam vai, kā manā gadījumā – nelielai datu vitrīnai.

Ļoti prasītos pēc kādas programmiņas, kurā varētu brīvi un ĒRTI pazīmēt tādus telpiskus attēlus kā OLAP

kubu šķelšanu. Darbā minēto 4 grafiku uzzīmēšana MS Visio aizņēma nesamērojami ilgu laiku.

Par pašu virzienu „Datu noliktavas” – šķiet prasa diezgan kompetentus/talantīgus prātus, lai rezultāts būtu

lietojams un pietiekoši elastīgs. Jo parasti jau runa ir par milzīgiem datu apjomiem un ir VISPIRMS kārtīgi

jāplāno kā, kad un kādās porcijās dati tiks sagatavoti, lai iegūtu vēlamo rezultātu. Manuprāt, lai

uzprojektētu datu noliktavu, nepieciešams vairāk kā tikai klienta un sistēmanalītiķa tikšanās – būtu jāsēžas

pie viena galda arī ar datu bāžu administratoriem, kas pārzina „dzelžu” darbību, atskaišu tehnoloģiju

speciālistiem utt.