Files
de-roadmap/dwh-modeling-ds.md
T
2025-11-04 21:26:13 +03:00

363 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Отлично! Я умею рисовать Mermaid-схемы и с удовольствием добавлю их в план. Вот переработанный вариант с дополнительными визуализациями для ключевых концепций.
---
### **Структура статьи про хранилище данных (с визуализацией Mermaid)**
```mermaid
flowchart TD
A[ ] --> B[1. Введение<br>Проблема аналитики в OLTP]
B --> C[2. Учебный пример<br>Интернет-магазин]
C --> D[3. Архитектура<br>Зачем слои?]
D --> E[4. Путешествие данных<br>STG→ODS→DDS→DM]
E --> F[5. Базовые понятия<br>Факты, Измерения, SCD]
F --> G[6. Модели данных<br>3NF, DV, Звезда]
G --> H[7. Практикум<br>Собираем витрину]
H --> I[8. Выбор модели<br>Дерево решений]
I --> J[9. Эксплуатация<br>Качество и эволюция]
J --> K[10. Заключение]
```
---
#### **1. Введение: Аналитика — это не оперативка**
```mermaid
flowchart LR
subgraph OLTP[OLTP - Операционные системы]
A[CRM]
B[Заказы]
C[Склад]
end
subgraph DWH[DWH - Аналитическое хранилище]
D[Единая модель<br>для анализа]
end
OLTP -- Сложные JOIN<br>Медленные отчеты --> X[Проблемы]
X -- Слоистая архитектура<br>Оптимизированные модели --> DWH
```
**Ключевые тезисы**:
- OLTP vs OLAP: транзакции против анализа
- Почему "одна большая таблица" не работает на истории
- 3 преимущества слоев: управляемость, производительность, прозрачность
---
#### **2. Учебный пример: интернет-магазин**
*(Оставляю вашу отличную ER-диаграмму без изменений)*
```mermaid
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ ORDER_ITEM : contains
PRODUCT ||--o{ ORDER_ITEM : referenced
PRODUCT ||--o{ PRICE : has
PROMO ||--o{ ORDER_ITEM : applied
```
---
#### **3. Архитектура хранилища: зачем делить на слои?**
```mermaid
flowchart TD
subgraph Sources[Источники OLTP]
A[CRM]
B[Заказы]
C[Склад]
end
A --> STG
B --> STG
C --> STG
subgraph STG[STG - Сырые данные]
D[Таблицы-клоны<br>сырые данные]
end
STG --> ODS
subgraph ODS[ODS - Очищенные данные]
E[Стандартизированные<br>типы и форматы]
end
ODS --> DDS
subgraph DDS[DDS - Интегрированная модель]
F[Бизнес-сущности<br>SCD, интеграция]
end
DDS --> DM
subgraph DM[DM - Витрины для аналитики]
G[Звезда/снежинка<br>агрегаты]
end
DM --> BI[BI-системы<br>и отчеты]
```
---
#### **4. Путешествие данных по слоям**
```mermaid
flowchart LR
subgraph STG[STG - Сырье]
A[raw_orders.json]
B[raw_customers.csv]
C[Формат как в источнике]
end
subgraph ODS[ODS - Очистка]
D[stg_orders]
E[stg_customers]
F[Типизация, валидация]
end
subgraph DDS[DDS - Интеграция]
G[dim_customer<br>SCD Type 2]
H[fact_orders<br>с суррогатными ключами]
end
subgraph DM[DM - Готовые решения]
I[mart_sales<br>агрегированные данные]
J[mart_customer_360<br>обзор по клиентам]
end
STG --> ODS
ODS --> DDS
DDS --> DM
```
---
#### **5. Базовые понятия: Факты, Измерения, Ключи**
```mermaid
erDiagram
dim_date ||--o{ fact_sales : "дата"
dim_customer ||--o{ fact_sales : "клиент"
dim_product ||--o{ fact_sales : "товар"
dim_customer {
bigint customer_sk PK
varchar customer_bk
varchar customer_name
varchar email
date valid_from
date valid_to
boolean is_current
}
fact_sales {
bigint sale_id PK
bigint customer_sk FK
bigint product_sk FK
date date_sk FK
int quantity
decimal amount
}
```
**SCD Type 2 - Визуализация истории**:
```mermaid
gantt
title SCD Type 2: История изменений клиента (ID = 123)
dateFormat YYYY-MM-DD
axisFormat %Y-%m
section Москва, premium@email.com
Версия 1 :active, 2023-01-01, 2023-05-15
section Москва, new_premium@email.com
Версия 2 :active, 2023-05-16, 2023-09-30
section Санкт-Петербург, new_premium@email.com
Версия 3 :active, 2023-10-01, 2024-12-31
```
---
#### **6. Модели данных для DDS**
**Data Vault 2.0**:
```mermaid
erDiagram
hub_customer ||--o{ sat_customer_info : "хаб"
hub_order ||--o{ sat_order_details : "хаб"
hub_product ||--o{ sat_product_info : "хаб"
hub_customer ||--o{ link_order_customer : "участвует"
hub_order ||--o{ link_order_customer : "включает"
hub_order ||--o{ link_order_product : "содержит"
hub_product ||--o{ link_order_product : "входит в"
hub_customer {
string customer_hash_key PK
string customer_id BK
datetime load_dttm
}
sat_customer_info {
string customer_hash_key PK,FK
datetime load_dttm PK
string customer_name
string email
string phone
}
link_order_customer {
string order_customer_hash_key PK
string order_hash_key FK
string customer_hash_key FK
datetime load_dttm
}
```
**Сравнение моделей**:
```mermaid
quadrantChart
title Сравнение моделей данных по сложности и гибкости
x-axis "Низкая сложность" --> "Высокая сложность"
y-axis "Низкая гибкость" --> "Высокая гибкость"
"Звезда": [0.2, 0.3]
"3NF": [0.6, 0.5]
"Data Vault": [0.8, 0.8]
"Anchor": [0.9, 0.9]
```
---
#### **7. Практикум: собираем витрину**
```mermaid
flowchart TD
A[Источники] --> STG
STG[STG: сырые заказы, товары] --> ODS
ODS[ODS: очищенные данные] --> DDS
subgraph DDS[DDS: интегрированная модель]
B[dim_customer<br>SCD Type 2]
C[dim_product]
D[dim_date]
E[fact_sales]
end
DDS --> F{Сборка витрины}
F --> G[mart_daily_sales]
F --> H[mart_customer_lifetime]
G --> I[Дашборд продаж]
H --> J[Отчет по клиентам]
```
**Пример SQL для витрины**:
```sql
-- Витрина ежедневных продаж
CREATE TABLE mart_daily_sales AS
SELECT
d.date,
p.product_name,
c.customer_segment,
SUM(f.quantity) as total_quantity,
SUM(f.amount) as total_amount
FROM fact_sales f
JOIN dim_date d ON f.date_key = d.date_key
JOIN dim_product p ON f.product_key = p.product_key
JOIN dim_customer c ON f.customer_key = c.customer_key
WHERE c.is_current = true
GROUP BY d.date, p.product_name, c.customer_segment;
```
---
#### **8. Выбор модели: дерево решений**
```mermaid
flowchart TD
Start[Выбор модели DDS] --> Q1{Количество источников?}
Q1 -->|Один источник| Q2{Требования к истории?}
Q1 -->|Несколько источников| Q3{Частота изменений схемы?}
Q2 -->|Простая история| Model1[Звезда/Снежинка]
Q2 -->|Полная аудируемая история| Model2[Data Vault]
Q3 -->|Редко| Model3[3NF]
Q3 -->|Часто| Model4[Data Vault]
Model1 --> Final[Рекомендация]
Model2 --> Final
Model3 --> Final
Model4 --> Final
```
---
#### **9. Эксплуатация: качество и эволюция**
```mermaid
graph TB
A[Данные] --> B{Контроль качества}
B --> C[Проверка уникальности]
B --> D[Проверка полноты]
B --> E[Валидация форматов]
B --> F[Свежесть данных]
C --> G[✅ Успех]
D --> G
E --> G
F --> G
C --> H[❌ Ошибка]
D --> H
E --> H
F --> H
G --> I[Загрузка в слой]
H --> J[Оповещение<br>и остановка]
```
---
#### **10. Заключение: главное — понимать "почему"**
```mermaid
mindmap
root((Хранилище данных))
Архитектура
Слои STG→ODS→DDS→DM
Разделение ответственности
Управляемость изменений
Модели данных
3NF: Целостность
Data Vault: Масштабируемость
Звезда: Производительность
Ключевые понятия
Факты и измерения
Суррогатные ключи
SCD Type 2
Практика
Понимать бизнес-задачу
Выбирать подходящую модель
Строить итеративно
```
---
Такой визуализированный план поможет студентам:
1. **Быстрее понять сложные концепции** через схемы
2. **Увидеть связи между разделами** через общую навигацию
3. **Запомнить ключевые отличия** моделей через сравнительные диаграммы
4. **Поножить практическое применение** через конкретные примеры
Все схемы готовы к использованию в статье и будут отлично работать в Markdown-редакторах с поддержкой Mermaid.