Rafał Kowalski
1
Hurtownie Danych na platformie ORACLE
ĆWICZENIE:
Tworzenie struktur logicznych i fizycznych
wielowymiarowej bazy danych
Rafał Kowalski
2
Wymiar daty
(struktura funkcjonalna)
DATY
faktów
MIESIĄCE
KWARTAŁY
LATA
Styczeń
Luty
Grudzień
Maj
Wrzesień
Styczeń
I
II
III
I
IV
1999
2000
Rafał Kowalski
3
Wymiar daty
(postać logiczna)
kwartaly
dni
miesiace
dni_tygodnia
pory_roku
lata
POZIOMY
POZIOMY
POZIOMY
H
IE
R
A
R
C
H
IE
„wszystko”
lata
lata
Rafał Kowalski
4
ZADANIA DO WYKONANIA
ZADANIE 1:
Wykonaj ćwiczenia: [a], [b], [c], [d] - na podstawie załączonych
materiałów.
ZADANIE 2:
Opracuj, stwórz i zweryfikuj prawidłową strukturę fizyczną i logiczną
wymiaru daty.
ĆWICZENIA:
[a] Tworzenie fizycznej struktury tabeli
etl_date
do obsługi wymiaru
daty.
[b] Wypełnienie tabeli
etl_date
wierszami danych i przyłączenie do
układu gwiazdy hurtowni danych.
[c] Stworzenie logicznej struktury wymiaru
daty_wy
.
[d] Weryfikacja wymiaru
daty_wy
.
Rafał Kowalski
5
numyear
numquarter
nummonth
nammonth
CREATE TABLE etl_date (
time_id
NUMBER(10) NOT NULL
, dateday
DATE
. . .
ĆWICZENIE [a]
Tworzenie fizycznej struktury tabeli
etl_date
do obsługi
wymiaru daty
DATA
DROP TABLE etl_date cascade constraints;
CREATE TABLE etl_date
( time_id DATE NOT NULL
, nummonth NUMBER(2)
, nammonth VARCHAR2(20)
, numquarter NUMBER(1)
, numyear NUMBER(4)
);
kwartaly
kwartaly
miesiace
miesiace
lata
lata
Rozwiązanie
alternatywne
„wszystko”
time_id
dni
dni
time_id
nummonth
nammonth
numquarter
numyear
10/03/0
4
3
marzec
1
2004
Rafał Kowalski
6
ĆWICZENIE [b]
Wypełnienie tabeli
etl_date
wierszami danych i
przyłączenie do układu gwiazdy hurtowni danych.
CREATE UNIQUE INDEX date_pk ON etl_date(time_id);
ALTER TABLE etl_date ADD CONSTRAINT date_pk
PRIMARY KEY (time_id);
ALTER TABLE etl_sales ADD CONSTRAINT sales_time_fk
FOREIGN KEY (time_id) REFERENCES etl_date;
CREATE UNIQUE INDEX date_pk ON etl_date(time_id);
ALTER TABLE etl_date ADD CONSTRAINT date_pk
PRIMARY KEY (time_id);
ALTER TABLE etl_sales ADD CONSTRAINT sales_time_fk
FOREIGN KEY (time_id) REFERENCES etl_date;
INSERT INTO etl_date
SELECT DISTINCT time_id
, to_char(time_id,'MM')
, to_char(time_id,'Month')
, to_char(time_id,'Q')
, to_char(time_id,'YYYY')
FROM etl_sales;
COMMIT;
Teraz już można
stworzyć
złączenie
Rafał Kowalski
7
ĆWICZENIE [b]
Uzupełniony schemat ETL
ETL_DATE
Rafał Kowalski
8
ĆWICZENIE [c]
Stworzenie logicznej struktury wymiaru DATY_WY.
DATY
DROP DIMENSION daty_wy;
CREATE DIMENSION daty_wy
LEVEL dni IS etl_date.time_id
LEVEL miesiace IS etl_date.nummonth
LEVEL kwartaly IS etl_date.numquarter
LEVEL lata IS etl_date.numyear
HIERARCHY kalendarz_hi (
dni CHILD OF
miesiace CHILD OF
kwartaly CHILD OF lata)
ATTRIBUTE miesiace DETERMINES
etl_date.nammonth ;
DROP DIMENSION daty_wy;
CREATE DIMENSION daty_wy
LEVEL dni IS etl_date.time_id
LEVEL miesiace IS etl_date.nummonth
LEVEL kwartaly IS etl_date.numquarter
LEVEL lata IS etl_date.numyear
HIERARCHY kalendarz_hi (
dni CHILD OF
miesiace CHILD OF
kwartaly CHILD OF lata)
ATTRIBUTE miesiace DETERMINES
etl_date.nammonth ;
numyear
numquarter
nummonth
nammonth
kwartaly
kwartaly
miesiace
miesiace
lata
lata
„wszystko”
time_id
dni
dni
Rafał Kowalski
9
ĆWICZENIE [e]
Weryfikacja wymiaru DATY_WY.
DATY
1.
Wyświetl strukturę wymiaru przy pomocy
procedury
dbms_dimension.describe_dimension()
2.
Zweryfikuj poprawność wymiaru przy pomocy
procedury
dbms_dimension.validate_dimension()
3.
Dokonaj interpretacji i wyjaśnienia wyników.
1.
Wyświetl strukturę wymiaru przy pomocy
procedury
dbms_dimension.describe_dimension()
2.
Zweryfikuj poprawność wymiaru przy pomocy
procedury
dbms_dimension.validate_dimension()
3.
Dokonaj interpretacji i wyjaśnienia wyników.
numyear
numquarter
nummonth
nammonth
kwartaly
kwartaly
miesiace
miesiace
lata
lata
„wszystko”
time_id
dni
dni
Rafał Kowalski
10
numyear
yeaqua
numquarter
yeamonth
nummonth
nammonth
ĆWICZENIE [a]
Tworzenie fizycznej struktury tabeli etl_date do obsługi
wymiaru daty
DATY
CREATE TABLE etl_date(
time_id DATE
, yearmon NUMBER(6) -- YYYYMM klucz poziomu
, nummonth NUMBER(2) -- MM
, nammonth VARCHAR2(20) -- Month
, yearqua NUMBER(5) -- YYYYQ klucz poziomu
, numquarter NUMBER(1) -- Q
, numyear NUMBER(4) -- YYYY klucz poziomu
);
CREATE TABLE etl_date(
time_id DATE
, yearmon NUMBER(6) -- YYYYMM klucz poziomu
, nummonth NUMBER(2) -- MM
, nammonth VARCHAR2(20) -- Month
, yearqua NUMBER(5) -- YYYYQ klucz poziomu
, numquarter NUMBER(1) -- Q
, numyear NUMBER(4) -- YYYY klucz poziomu
);
kwartaly
kwartaly
miesiace
miesiace
lata
lata
„wszystko”
time_id
dni
dni
time_id
yeamo
n
nummon
th
nammon
th
yeaqu
a
numquart
er
numye
ar
10/03/0
4
20040
3
3 marzec
2004
1
1
2004
Rafał Kowalski
11
ZADANIE 2:
Opracuj, stwórz i zweryfikuj prawidłową strukturę
fizyczną i logiczną wymiaru daty.
DATY
kwartaly
dni
miesiace
dni_tygodnia
pory_roku
lata
„wszystko”
1.
Opracuj.
2.
Stwórz.
3.
Zweryfikuj.
1.
Opracuj.
2.
Stwórz.
3.
Zweryfikuj.
lata
lata
Rafał Kowalski
12
ZADANIE 2:
Finalna postać schematu danych.
ETL_DATE
Rafał Kowalski
13
KONIEC