AdvancedTopics: olap_fact_service_usage.sql

File olap_fact_service_usage.sql, 3.7 KB (added by 231123, 4 days ago)

OLAP факт табела за сервиси

Line 
1-- FactServiceUsage
2
3CREATE TABLE FactServiceUsage (
4 service_usage_key BIGSERIAL,
5
6 date_key INTEGER NOT NULL,
7 hotel_key INTEGER NOT NULL,
8 pet_key INTEGER NOT NULL,
9 employee_key INTEGER NOT NULL,
10 service_key INTEGER NOT NULL,
11
12 price NUMERIC(10,2) NOT NULL,
13 duration_minutes INTEGER NOT NULL,
14 status VARCHAR(20) NOT NULL
15)
16 PARTITION BY RANGE (date_key);
17
18CREATE TABLE FactServiceUsage_2015
19 PARTITION OF FactServiceUsage
20 FOR VALUES FROM (20150101) TO (20160101);
21
22CREATE TABLE FactServiceUsage_2016
23 PARTITION OF FactServiceUsage
24 FOR VALUES FROM (20160101) TO (20170101);
25
26CREATE TABLE FactServiceUsage_2017
27 PARTITION OF FactServiceUsage
28 FOR VALUES FROM (20170101) TO (20180101);
29
30CREATE TABLE FactServiceUsage_2018
31 PARTITION OF FactServiceUsage
32 FOR VALUES FROM (20180101) TO (20190101);
33
34CREATE TABLE FactServiceUsage_2019
35 PARTITION OF FactServiceUsage
36 FOR VALUES FROM (20190101) TO (20200101);
37
38CREATE TABLE FactServiceUsage_2020
39 PARTITION OF FactServiceUsage
40 FOR VALUES FROM (20200101) TO (20210101);
41
42CREATE TABLE FactServiceUsage_2021
43 PARTITION OF FactServiceUsage
44 FOR VALUES FROM (20210101) TO (20220101);
45
46CREATE TABLE FactServiceUsage_2022
47 PARTITION OF FactServiceUsage
48 FOR VALUES FROM (20220101) TO (20230101);
49
50CREATE TABLE FactServiceUsage_2023
51 PARTITION OF FactServiceUsage
52 FOR VALUES FROM (20230101) TO (20240101);
53
54CREATE TABLE FactServiceUsage_2024
55 PARTITION OF FactServiceUsage
56 FOR VALUES FROM (20240101) TO (20250101);
57
58CREATE TABLE FactServiceUsage_2025
59 PARTITION OF FactServiceUsage
60 FOR VALUES FROM (20250101) TO (20260101);
61
62CREATE TABLE FactServiceUsage_2026
63 PARTITION OF FactServiceUsage
64 FOR VALUES FROM (20260101) TO (20270101);
65
66CREATE TABLE FactServiceUsage_2027
67 PARTITION OF FactServiceUsage
68 FOR VALUES FROM (20270101) TO (20280101);
69
70CREATE INDEX idx_factsvc_service
71 ON FactServiceUsage(service_key);
72
73CREATE INDEX idx_factsvc_pet
74 ON FactServiceUsage(pet_key);
75
76CREATE INDEX idx_factsvc_hotel
77 ON FactServiceUsage(hotel_key);
78
79
80
81-- ETL
82
83INSERT INTO FactServiceUsage (
84 date_key,
85 hotel_key,
86 pet_key,
87 employee_key,
88 service_key,
89 price,
90 duration_minutes,
91 status
92)
93SELECT
94 TO_CHAR(sr.scheduled_date, 'YYYYMMDD')::INTEGER,
95 dh.hotel_key,
96 dp.pet_key,
97 de.employee_key,
98 ds_svc.service_key,
99 s.price,
100 s.duration_minutes,
101 srs.name
102FROM ServiceReservation sr
103
104 JOIN ServiceReservationStatus srs
105 ON srs.service_reservation_status_id = sr.status_id
106
107 JOIN Reservation r ON r.reservation_id = sr.reservation_id
108 JOIN DimService ds_svc ON ds_svc.service_id = sr.service_id
109 JOIN DimPet dp ON dp.pet_id = r.pet_id
110 AND dp.is_current = TRUE
111 JOIN DimEmployee de ON de.employee_id = r.employee_id
112 AND de.is_current = TRUE
113 JOIN Service s ON s.service_id = sr.service_id
114
115 JOIN RoomReservation rr ON rr.reservation_id = r.reservation_id
116 JOIN DimRoom dr ON dr.room_id = rr.room_id
117 AND dr.is_current = TRUE
118 JOIN DimHotel dh ON dh.hotel_key = dr.hotel_key;