В статью добавлены ссылки на скрипты с учебным примером

This commit is contained in:
2025-11-08 22:16:11 +03:00
parent 3cbaeb5fc2
commit d5220adcf0
+30 -15
View File
@@ -519,13 +519,13 @@ quadrantChart
### **Этапы сборки** ### **Этапы сборки**
1. Из STG → ODS: 1. Из STG → ODS:
- `stg.orders_raw``ods.orders` (привели `order_date` к `DATE`); - `stg.orders_raw``ods.orders` (привели `order_date` к `DATE`);
2. Из ODS → DDS: 2. Из ODS → DDS:
- `ods.customers``dds.dim_customer` (SCD Type 2); - `ods.customers``dds.dim_customer` (SCD Type 2);
- `ods.products``dds.dim_product`; - `ods.products``dds.dim_product`;
- `ods.orders` + `ods.order_items``dds.fact_sales`; - `ods.orders` + `ods.order_items``dds.fact_sales`;
3. Из DDS → DM: 3. Из DDS → DM:
- `fact_sales` + `dim_*``mart_daily_sales`. - `fact_sales` + `dim_*``mart_daily_sales`.
```mermaid ```mermaid
@@ -539,6 +539,17 @@ flowchart LR
DM --> BI[Power BI] DM --> BI[Power BI]
``` ```
### **Готовые SQL-скрипты**
Все необходимые скрипты для построения хранилища находятся в папке [`sql/`](dwh-modeling/sql/)):
- [`01_ddl_stg-dds.sql`](dwh-modeling/sql/01_ddl_stg-dds.sql) — создание схем и таблиц (STG, ODS, DDS)
- [`02_dml_stg-dds.sql`](dwh-modeling/sql/02_dml_stg-dds.sql) — загрузка данных и трансформация
- [`03_demo_increment.sql`](dwh-modeling/sql/03_demo_increment.sql) — инкрементальная загрузка и SCD2
- [`04_validation.sql`](dwh-modeling/sql/04_validation.sql) — проверки качества данных
- [`05_ddl_dm.sql`](dwh-modeling/sql/05_ddl_dm.sql) — создание витрин (Data Marts)
- [`06_dml_dm.sql`](dwh-modeling/sql/06_dml_dm.sql) — наполнение витрин данными
### **Пример SQL-запроса для витрины** ### **Пример SQL-запроса для витрины**
```sql ```sql
@@ -551,11 +562,11 @@ SELECT
SUM(f.quantity) AS total_qty, SUM(f.quantity) AS total_qty,
SUM(f.amount) AS total_revenue SUM(f.amount) AS total_revenue
FROM dds.fact_sales f FROM dds.fact_sales f
JOIN dds.dim_date d JOIN dds.dim_date d
ON f.date_key = d.date_key ON f.date_key = d.date_key
JOIN dds.dim_product p JOIN dds.dim_product p
ON f.product_sk = p.product_sk ON f.product_sk = p.product_sk
JOIN dds.dim_customer c JOIN dds.dim_customer c
ON f.customer_sk = c.customer_sk ON f.customer_sk = c.customer_sk
AND f.order_date BETWEEN c.valid_from AND c.valid_to -- SCD! AND f.order_date BETWEEN c.valid_from AND c.valid_to -- SCD!
WHERE c.is_current = true -- или не фильтровать — тогда будет история WHERE c.is_current = true -- или не фильтровать — тогда будет история
@@ -747,9 +758,9 @@ SELECT 'OK' WHERE EXISTS (
## **ЧАСТЬ C. Мини-датасет (для практики)** ## **ЧАСТЬ C. Мини-датасет (для практики)**
Положите эти файлы в папку `data/` — и тренируйтесь: Все данные для практики находятся в папке [`data/`](dwh-modeling/data/)) — тренируйтесь:
**`customers.csv`** [**`customers.csv`**](dwh-modeling/data/customers.csv)):
```csv ```csv
customer_id,email,phone,city customer_id,email,phone,city
101,a@ex.com,700,Москва 101,a@ex.com,700,Москва
@@ -757,14 +768,14 @@ customer_id,email,phone,city
102,c@ex.com,701,СПб 102,c@ex.com,701,СПб
``` ```
**`orders.csv`** [**`orders.csv`**](dwh-modeling/data/orders.csv)):
```csv ```csv
order_id,order_date,customer_id order_id,order_date,customer_id
5001,2024-01-10,101 5001,2024-01-10,101
5002,2024-02-05,102 5002,2024-02-05,102
``` ```
**`order_items.csv`** [**`order_items.csv`**](dwh-modeling/data/order_items.csv)):
```csv ```csv
order_item_id,order_id,product_id,qty,price_at_sale order_item_id,order_id,product_id,qty,price_at_sale
1,5001,9001,2,100.00 1,5001,9001,2,100.00
@@ -772,26 +783,30 @@ order_item_id,order_id,product_id,qty,price_at_sale
3,5002,9001,1,100.00 3,5002,9001,1,100.00
``` ```
**`products.csv`** [**`products.csv`**](dwh-modeling/data/products.csv)):
```csv ```csv
product_id,name product_id,name
9001,Phone 9001,Phone
9002,Case 9002,Case
``` ```
**`prices.csv`** [**`prices.csv`**](dwh-modeling/data/prices.csv)):
```csv ```csv
product_id,valid_from,valid_to,price product_id,valid_from,valid_to,price
9001,2023-12-01,2024-01-31,100 9001,2023-12-01,2024-01-31,100
9001,2024-02-01,2999-12-31,110 9001,2024-02-01,2999-12-31,110
``` ```
> 📂 Примеры DDL, SQL-загрузки, SCD-скрипты — в [GitHub-репозитории к статье](https://github.com/dementev-dev/de-roadmap/). > 📂 Все SQL-скрипты для построения хранилища находятся в папке [`sql/`](dwh-modeling/sql/)).
--- ---
## **ЧАСТЬ D. DDL-скелеты (PostgreSQL)** ## **ЧАСТЬ D. DDL-скелеты (PostgreSQL)**
Полные DDL-скрипты для всех слоёв хранилища находятся в файле [`01_ddl_stg-dds.sql`](dwh-modeling/sql/01_ddl_stg-dds.sql).
Пример структуры основных таблиц DDS:
```sql ```sql
-- DDS: измерение клиента (SCD Type 2) -- DDS: измерение клиента (SCD Type 2)
CREATE TABLE dds.dim_customer ( CREATE TABLE dds.dim_customer (