AdvancedTopics: olap_fact_order_product.sql

File olap_fact_order_product.sql, 3.5 KB (added by 231123, 4 days ago)

OLAP факт табела за нарачки на продукти

Line 
1-- FactOrderProduct
2
3
4CREATE TABLE FactOrderProduct (
5 order_product_key BIGSERIAL,
6
7 date_key INTEGER NOT NULL,
8 customer_key INTEGER NOT NULL,
9 hotel_key INTEGER NOT NULL,
10 product_key INTEGER NOT NULL,
11
12 quantity INTEGER NOT NULL,
13 unit_price NUMERIC(10,2) NOT NULL,
14 total_price NUMERIC(10,2) NOT NULL,
15 order_status VARCHAR(20) NOT NULL,
16 delivery_status VARCHAR(20)
17)
18 PARTITION BY RANGE (date_key);
19
20CREATE TABLE FactOrderProduct_2015
21 PARTITION OF FactOrderProduct
22 FOR VALUES FROM (20150101) TO (20160101);
23
24CREATE TABLE FactOrderProduct_2016
25 PARTITION OF FactOrderProduct
26 FOR VALUES FROM (20160101) TO (20170101);
27
28CREATE TABLE FactOrderProduct_2017
29 PARTITION OF FactOrderProduct
30 FOR VALUES FROM (20170101) TO (20180101);
31
32CREATE TABLE FactOrderProduct_2018
33 PARTITION OF FactOrderProduct
34 FOR VALUES FROM (20180101) TO (20190101);
35
36CREATE TABLE FactOrderProduct_2019
37 PARTITION OF FactOrderProduct
38 FOR VALUES FROM (20190101) TO (20200101);
39
40CREATE TABLE FactOrderProduct_2020
41 PARTITION OF FactOrderProduct
42 FOR VALUES FROM (20200101) TO (20210101);
43
44CREATE TABLE FactOrderProduct_2021
45 PARTITION OF FactOrderProduct
46 FOR VALUES FROM (20210101) TO (20220101);
47
48CREATE TABLE FactOrderProduct_2022
49 PARTITION OF FactOrderProduct
50 FOR VALUES FROM (20220101) TO (20230101);
51
52CREATE TABLE FactOrderProduct_2023
53 PARTITION OF FactOrderProduct
54 FOR VALUES FROM (20230101) TO (20240101);
55
56CREATE TABLE FactOrderProduct_2024
57 PARTITION OF FactOrderProduct
58 FOR VALUES FROM (20240101) TO (20250101);
59
60CREATE TABLE FactOrderProduct_2025
61 PARTITION OF FactOrderProduct
62 FOR VALUES FROM (20250101) TO (20260101);
63
64CREATE TABLE FactOrderProduct_2026
65 PARTITION OF FactOrderProduct
66 FOR VALUES FROM (20260101) TO (20270101);
67
68CREATE TABLE FactOrderProduct_2027
69 PARTITION OF FactOrderProduct
70 FOR VALUES FROM (20270101) TO (20280101);
71
72CREATE INDEX idx_factop_product
73 ON FactOrderProduct(product_key);
74
75CREATE INDEX idx_factop_customer
76 ON FactOrderProduct(customer_key);
77
78CREATE INDEX idx_factop_hotel
79 ON FactOrderProduct(hotel_key);
80
81
82
83-- ETL
84
85INSERT INTO FactOrderProduct (
86 date_key,
87 customer_key,
88 hotel_key,
89 product_key,
90 quantity,
91 unit_price,
92 total_price,
93 order_status,
94 delivery_status
95)
96SELECT
97 TO_CHAR(o.order_date, 'YYYYMMDD')::INTEGER,
98 dc.customer_key,
99 dh.hotel_key,
100 dp.product_key,
101 op.quantity,
102 op.unit_price,
103 (op.quantity * op.unit_price),
104 os.name,
105 ds.name
106FROM OrderProduct op
107 JOIN "Order" o ON o.order_id = op.order_id
108 JOIN OrderStatus os ON os.order_status_id = o.status_id
109 JOIN DimCustomer dc ON dc.customer_id = o.customer_id
110 AND dc.is_current = TRUE
111 JOIN DimHotel dh ON dh.hotel_id = o.hotel_id
112 JOIN DimProduct dp ON dp.product_id = op.product_id
113 LEFT JOIN Delivery d ON d.purchase_id = op.orderproduct_id
114 LEFT JOIN DeliveryStatus ds ON ds.delivery_status_id = d.status_id;