| 1 | -- FactServiceUsage
|
|---|
| 2 |
|
|---|
| 3 | CREATE 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 |
|
|---|
| 18 | CREATE TABLE FactServiceUsage_2015
|
|---|
| 19 | PARTITION OF FactServiceUsage
|
|---|
| 20 | FOR VALUES FROM (20150101) TO (20160101);
|
|---|
| 21 |
|
|---|
| 22 | CREATE TABLE FactServiceUsage_2016
|
|---|
| 23 | PARTITION OF FactServiceUsage
|
|---|
| 24 | FOR VALUES FROM (20160101) TO (20170101);
|
|---|
| 25 |
|
|---|
| 26 | CREATE TABLE FactServiceUsage_2017
|
|---|
| 27 | PARTITION OF FactServiceUsage
|
|---|
| 28 | FOR VALUES FROM (20170101) TO (20180101);
|
|---|
| 29 |
|
|---|
| 30 | CREATE TABLE FactServiceUsage_2018
|
|---|
| 31 | PARTITION OF FactServiceUsage
|
|---|
| 32 | FOR VALUES FROM (20180101) TO (20190101);
|
|---|
| 33 |
|
|---|
| 34 | CREATE TABLE FactServiceUsage_2019
|
|---|
| 35 | PARTITION OF FactServiceUsage
|
|---|
| 36 | FOR VALUES FROM (20190101) TO (20200101);
|
|---|
| 37 |
|
|---|
| 38 | CREATE TABLE FactServiceUsage_2020
|
|---|
| 39 | PARTITION OF FactServiceUsage
|
|---|
| 40 | FOR VALUES FROM (20200101) TO (20210101);
|
|---|
| 41 |
|
|---|
| 42 | CREATE TABLE FactServiceUsage_2021
|
|---|
| 43 | PARTITION OF FactServiceUsage
|
|---|
| 44 | FOR VALUES FROM (20210101) TO (20220101);
|
|---|
| 45 |
|
|---|
| 46 | CREATE TABLE FactServiceUsage_2022
|
|---|
| 47 | PARTITION OF FactServiceUsage
|
|---|
| 48 | FOR VALUES FROM (20220101) TO (20230101);
|
|---|
| 49 |
|
|---|
| 50 | CREATE TABLE FactServiceUsage_2023
|
|---|
| 51 | PARTITION OF FactServiceUsage
|
|---|
| 52 | FOR VALUES FROM (20230101) TO (20240101);
|
|---|
| 53 |
|
|---|
| 54 | CREATE TABLE FactServiceUsage_2024
|
|---|
| 55 | PARTITION OF FactServiceUsage
|
|---|
| 56 | FOR VALUES FROM (20240101) TO (20250101);
|
|---|
| 57 |
|
|---|
| 58 | CREATE TABLE FactServiceUsage_2025
|
|---|
| 59 | PARTITION OF FactServiceUsage
|
|---|
| 60 | FOR VALUES FROM (20250101) TO (20260101);
|
|---|
| 61 |
|
|---|
| 62 | CREATE TABLE FactServiceUsage_2026
|
|---|
| 63 | PARTITION OF FactServiceUsage
|
|---|
| 64 | FOR VALUES FROM (20260101) TO (20270101);
|
|---|
| 65 |
|
|---|
| 66 | CREATE TABLE FactServiceUsage_2027
|
|---|
| 67 | PARTITION OF FactServiceUsage
|
|---|
| 68 | FOR VALUES FROM (20270101) TO (20280101);
|
|---|
| 69 |
|
|---|
| 70 | CREATE INDEX idx_factsvc_service
|
|---|
| 71 | ON FactServiceUsage(service_key);
|
|---|
| 72 |
|
|---|
| 73 | CREATE INDEX idx_factsvc_pet
|
|---|
| 74 | ON FactServiceUsage(pet_key);
|
|---|
| 75 |
|
|---|
| 76 | CREATE INDEX idx_factsvc_hotel
|
|---|
| 77 | ON FactServiceUsage(hotel_key);
|
|---|
| 78 |
|
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 | -- ETL
|
|---|
| 82 |
|
|---|
| 83 | INSERT 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 | )
|
|---|
| 93 | SELECT
|
|---|
| 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
|
|---|
| 102 | FROM 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; |
|---|