Learning Platform
Глоссарий Troubleshooting
Урок 06.01 · 24 мин
Средний
Data WarehouseStar SchemaSnowflake SchemaData VaultDimensional ModelingSCD

Data Warehouse Design для System Design

Зачем проектировать Warehouse

Data Warehouse — центральное хранилище аналитических данных. Правильный выбор модели определяет производительность запросов, гибкость schema evolution и стоимость поддержки.

Dimensional Modeling: Fact и Dimension Tables

Dimensional model разделяет данные на два типа таблиц:

Fact Table (события/метрики):
  - order_id, customer_id, product_id, date_id
  - amount, quantity, discount
  - Миллионы/миллиарды строк
  - Append-only (immutable events)

Dimension Table (контекст):
  - customer: id, name, email, segment, city
  - product: id, name, category, brand, price
  - date: id, date, month, quarter, year, is_holiday
  - Тысячи/миллионы строк
  - Slowly changing (SCD)
Star Schema: Fact + Dimensions
dim_customer
dim_date
fact_orders
dim_product
dim_store

Star vs Snowflake vs Data Vault

Star Schema

Dimensions денормализованы — один уровень JOIN от fact:

SELECT d.segment, SUM(f.amount)
FROM fact_orders f
JOIN dim_customer d ON f.customer_id = d.customer_id
GROUP BY d.segment
-- Один JOIN, максимальная скорость
Денормализованные wide tables в ClickHouse Part anatomy — физический уровень хранения ClickHouse

Snowflake Schema

Dimensions нормализованы — несколько уровней:

dim_customer → dim_city → dim_country
-- Экономит storage, но запросы сложнее и медленнее
-- Используется редко в modern warehouses

Data Vault

Разделяет на Hubs (бизнес-ключи), Links (связи), Satellites (атрибуты с историей):

Hub_Customer: hash_key, business_key, load_date
Sat_Customer: hash_key, name, email, load_date, source
Link_Order_Customer: hash_key, hub_order_key, hub_customer_key
-- Максимальная гибкость, сложная реализация
-- Подходит для enterprise с множеством источников
МодельJoinsГибкостьСложностьUse Case
Star1 уровеньСредняяНизкаяBI, аналитика (90% случаев)
SnowflakeN уровнейСредняяСредняяЭкономия storage
Data VaultЧерез Hubs/LinksВысокаяВысокаяEnterprise, множество sources

SCD — Slowly Changing Dimensions

Как обрабатывать изменения в dimension tables:

SCD TypeСтратегияИсторияПример
Type 0Не обновлятьНетДата рождения
Type 1OverwriteНетИсправление опечатки
Type 2Новая строка + valid_from/toПолнаяСмена города клиента
Type 3Доп. колонка (prev_value)Частичнаяcurrent_city + previous_city
SCD Type 2 — самый распространённый:

customer_id | name  | city     | valid_from | valid_to   | is_current
1           | Иван  | Москва   | 2023-01-01 | 2024-06-15 | false
1           | Иван  | Казань   | 2024-06-15 | 9999-12-31 | true

JOIN fact → dimension по date range для historical accuracy
SCD в ClickHouse — практическая реализация

Warehouse vs Lakehouse — когда что

Warehouse (BigQuery, Snowflake, Redshift):
  [OK] SQL-first, BI оптимизирован
  [OK] Managed, auto-scaling
  [OK] Structured data only
  [NO] Дорого при TB+ scale
  [NO] Vendor lock-in

Lakehouse (Databricks, Delta/Iceberg + Spark):
  [OK] Open formats, no lock-in
  [OK] ML + SQL на одних данных
  [OK] Semi-structured data
  [NO] Больше operational overhead
  [NO] Оптимизация требует экспертизы
TIP

Правило выбора: Если 90%+ workload — SQL аналитика и BI → warehouse. Если есть ML, data science, streaming или unstructured data → lakehouse. Гибридный вариант: lakehouse для raw/staging + warehouse для serving layer.

Проверка знанийKnowledge check
ОтветAnswer

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 3. Аналитик жалуется на медленные запросы: каждый BI-отчёт делает 7 JOINs через нормализованные таблицы. Какая модель решит проблему?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 1