Содержание курса
Модуль 1. Введение в Data Warehouse
6 уроков
1.
О курсе: как проходить обучение и канал «Логово Дата-Инженера»
↗
2.
Зачем нужно Data Warehouse: почему аналитику не делают на…
↗
3.
OLTP против OLAP: две разные вселенные работы с данными
↗
4.
История DWH: от Кодда и Kimball до современных озёр и Lakehouse
↗
5.
Кто такой DWH-инженер и чем он отличается от обычного…
↗
6.
Карта курса: от первой размерной модели до продакшн-хранилища
↗
Модуль 2. Данные и бизнес-процессы
7 уроков
1.
Бизнес-процесс как источник данных: что мы измеряем и зачем
↗
2.
Событие и его атрибуты: что произошло, когда и с кем
↗
3.
Измерение: кто, что, где, когда — контекст события
↗
4.
Факт: числовая мера бизнес-события
↗
5.
Зерно: на каком уровне детализации хранится факт
↗
6.
Метрика и KPI: от сырых фактов к бизнес-показателям
↗
7.
Декомпозиция требований: от вопроса бизнеса к структуре данных
↗
Модуль 3. Реляционная база для DWH
8 уроков
1.
Установка PostgreSQL 16 и первый запуск psql
↗
2.
Таблицы и схемы: CREATE TABLE, DROP, ALTER — первые команды DDL
↗
3.
Типы данных для аналитики: INT, NUMERIC, VARCHAR, DATE…
↗
4.
Первичные и внешние ключи: целостность на уровне базы данных
↗
5.
Нормализация: 1NF, 2NF, 3NF — зачем нужна и какой ценой…
↗
6.
Индексы: B-tree, как они ускоряют SELECT и замедляют INSERT
↗
7.
EXPLAIN и план запроса: читаем, что PostgreSQL делает под…
↗
8.
Практикум: проектируем схему учёта продаж в третьей…
↗
Модуль 4. SQL для аналитика
8 уроков
1.
SELECT, FROM, WHERE: базовый каркас любого аналитического…
↗
2.
GROUP BY и HAVING: агрегация строк и фильтрация групп
↗
3.
JOIN глубоко: INNER, LEFT, RIGHT, FULL, CROSS — когда и зачем
↗
4.
Подзапросы: в SELECT, FROM, WHERE — correlated и uncorrelated
↗
5.
UNION, INTERSECT, EXCEPT: теория множеств средствами SQL
↗
6.
Оконные функции: OVER, PARTITION BY, ORDER BY и рамки окна
↗
7.
CTE и рекурсивные запросы: WITH … AS — читаемый и мощный SQL
↗
8.
Аналитические агрегаты: FILTER, GROUPING SETS, ROLLUP, CUBE
↗
Модуль 5. ETL-основы
6 уроков
1.
Что такое ETL и чем отличается ELT: извлечение…
↗
2.
Staging-слой: временная зона для сырых данных перед…
↗
3.
Трансформация данных: очистка, приведение типов, обогащение
↗
4.
Загрузка в DWH: INSERT, COPY и FOREIGN TABLE — обзор подходов
↗
5.
Инкрементальная загрузка против полной: когда что выбирать
↗
6.
Простой ETL-пайплайн на Python и PostgreSQL: от идеи до…
↗
Модуль 6. Размерное моделирование
7 уроков
1.
Что такое размерная модель и почему она сделана «для людей»
↗
2.
Схема «звезда»: одна таблица фактов в окружении измерений
↗
3.
Схема «снежинка»: нормализованные измерения и когда они…
↗
4.
Факты и измерения: как отличить одно от другого в любой…
↗
5.
Суррогатные ключи: зачем нужны и почему бизнес-ключ не годится
↗
6.
Зерно факта: самая важная декларация в размерном моделировании
↗
7.
Аддитивность фактов: что можно складывать, а что нельзя
↗
Модуль 7. Таблицы фактов
8 уроков
1.
Транзакционные факты: одна строка — одно бизнес-событие
↗
2.
Периодические снимки: состояние на определённый момент времени
↗
3.
Накопительные снимки: отслеживаем жизненный цикл процесса
↗
4.
Бесфактовые факты: события без числовых мер — когда они нужны
↗
5.
Дегенеративные измерения: когда атрибут факта не заслуживает…
↗
6.
Факты с разным зерном: несколько уровней детализации в одной…
↗
7.
Выбор зерна факта: практические критерии и неизбежные…
↗
8.
Проектируем таблицы фактов для интернет-магазина: сквозной…
↗
Модуль 8. Измерения
7 уроков
1.
Conformed dimensions: единые измерения для всего хранилища…
↗
2.
Role-playing dimensions: одно измерение в нескольких ролях —…
↗
3.
Junk dimensions: корзина для флажков и низкокардинальных…
↗
4.
Degenerate dimensions в таблице фактов: когда измерение…
↗
5.
Проблема Slowly Changing Dimensions: почему атрибуты меняются…
↗
6.
Mini-dimensions: выносим часто меняющиеся атрибуты в…
↗
7.
Outriggers: когда одно измерение ссылается на другое —…
↗
Модуль 9. Slowly Changing Dimensions
8 уроков
1.
SCD Type 0: сохраняем как было — атрибут фиксируется навсегда
↗
2.
SCD Type 1: перезаписываем значение — история теряется
↗
3.
SCD Type 2: добавляем новую строку — храним полную историю…
↗
4.
Суррогатные ключи для SCD2: почему business key не…
↗
5.
Effective dates и current flag: как определить актуальную версию
↗
6.
SCD Type 3: добавляем колонку для предыдущего значения —…
↗
7.
SCD Type 4, 5, 6, 7: гибридные подходы и ситуации, в которых…
↗
8.
Выбор SCD-стратегии: практическое руководство по компромиссам
↗
Модуль 10. Иерархии и связи многие-ко-многим
7 уроков
1.
Иерархии родитель-потомок: классическая модель дерева в одной…
↗
2.
Ragged hierarchies: когда глубина дерева разная в разных ветках
↗
3.
Bridge tables: моделирование связи многие-ко-многим в…
↗
4.
Многие-ко-многим между фактами и измерениями: когда одной…
↗
5.
Рекурсивные CTE для обхода иерархий любой глубины
↗
6.
Пути в иерархии: materialized path и nested sets — обзор…
↗
7.
Проектируем иерархию продуктов: от категории до SKU
↗
Модуль 11. Проектирование DWH
8 уроков
1.
Bus Matrix: главный инструмент архитектора хранилища данных
↗
2.
Четыре шага Kimball: от бизнес-процесса до готовой размерной…
↗
3.
Декларация зерна: как не ошибиться в самом важном решении
↗
4.
Conformed dimensions на практике: договариваемся о единых…
↗
5.
Data profiling: изучаем источник данных перед проектированием
↗
6.
Source-to-target mapping: документируем путь данных от…
↗
7.
Проектируем DWH интернет-магазина: полный сквозной пример
↗
8.
Антипаттерны размерного моделирования: типичные ошибки и как…
↗
Модуль 12. Staging и загрузка данных
7 уроков
1.
Архитектура staging-слоя: full refresh против incremental…
↗
2.
Полная загрузка: когда можно просто перезалить всё и не думать
↗
3.
Инкрементальная загрузка: high-water mark и журналы изменений
↗
4.
Change Data Capture: триггеры, логи транзакций и Debezium —…
↗
5.
Дедупликация на staging: как не размножить данные при…
↗
6.
Late-arriving facts: что делать с транзакциями, пришедшими с…
↗
7.
Late-arriving dimensions: когда справочник обновляется позже…
↗
Модуль 13. Трансформация данных
7 уроков
1.
Очистка данных: trim, NULL-обработка, некорректные форматы и…
↗
2.
Нормализация значений: единые справочники, маппинги, синонимы
↗
3.
Дедупликация в размерной модели: методы поиска и устранения…
↗
4.
Lookup-обогащение: подстановка суррогатных ключей из измерений
↗
5.
Агрегация: от сырых фактов к предрасчитанным витринам
↗
6.
Стратегии генерации и присвоения суррогатных ключей
↗
7.
Обработка ошибок трансформации: логирование, dead-letter и…
↗
Модуль 14. Качество данных
7 уроков
1.
Измерения качества данных: полнота, точность…
↗
2.
Полнота: проверяем, что все ожидаемые данные действительно…
↗
3.
Точность: сверяем суммы и количество строк с источником
↗
4.
Согласованность: единые форматы, допустимые диапазоны и…
↗
5.
Своевременность: мониторинг отставания загрузки от расписания
↗
6.
Уникальность: проверка на дубликаты первичных ключей в DWH
↗
7.
Фреймворк DQ-проверок: пишем переиспользуемые тесты качества…
↗
Модуль 15. Оркестрация и ETL-фреймворки
7 уроков
1.
Зачем нужна оркестрация: зависимости задач, расписания и…
↗
2.
DAG загрузки: направленный ациклический граф зависимостей
↗
3.
Расписания и триггеры: cron-выражения, сенсоры и событийный…
↗
4.
Retry и backoff: стратегии поведения при падении пайплайна
↗
5.
Backfill: как перезалить исторические данные и не сломать…
↗
6.
Apache Airflow: архитектура, DAG, Operator — первый запуск и…
↗
7.
dbt: трансформация как код — модели, тесты и документация данных
↗
Модуль 16. Оптимизация DWH
7 уроков
1.
Партиционирование: делим большие таблицы по дате или ключу
↗
2.
Индексы для DWH: какие индексы действительно нужны фактам и…
↗
3.
Материализованные представления: кэшируем предрасчитанные…
↗
4.
Строчное и колоночное хранение: почему ориентация данных…
↗
5.
Parquet и ORC: колоночные форматы вне базы данных — как они…
↗
6.
Сжатие данных: типы компрессии и их влияние на скорость запросов
↗
7.
VACUUM и ANALYZE: как PostgreSQL управляет дисковым…
↗
Модуль 17. Методология Inmon и 3NF-хранилище
5 уроков
1.
Философия Билла Инмона: EDW как единый источник корпоративной…
↗
2.
Нормализация до 3NF: почему Inmon настаивает на нормальной…
↗
3.
Data Mart поверх EDW: витрины как проекции для…
↗
4.
Inmon против Kimball: детальное сравнение двух школ — не…
↗
5.
Гибридные подходы: когда и как взять лучшее из обоих миров
↗
Модуль 18. Data Vault 2.0
7 уроков
1.
Что такое Data Vault и какую проблему он решает: гибкость и…
↗
2.
Hub: бизнес-ключ как центр вселенной — храним только…
↗
3.
Link: связь между хабами — отношение, а не атрибут
↗
4.
Satellite: все атрибуты и их полная история во времени
↗
5.
Hash keys: почему Data Vault строит первичные ключи из…
↗
6.
PIT-таблицы и Bridge-таблицы: ускоряем запросы к Data Vault
↗
7.
Raw Vault против Business Vault: где живут бизнес-правила и…
↗
Модуль 19. Сравнение методологий и выбор архитектуры
6 уроков
1.
Kimball против Inmon против Data Vault: сводная таблица…
↗
2.
Критерии выбора: размер команды, скорость изменений и…
↗
3.
Гибридные архитектуры: Kimball-витрины поверх Data Vault или…
↗
4.
Case study: выбираем и обосновываем архитектуру DWH для…
↗
5.
Case study: выбираем архитектуру хранилища для банковской…
↗
6.
Эволюция архитектуры: когда и как переезжать с одной…
↗
Модуль 20. Data Lake и Lakehouse
8 уроков
1.
Что такое Data Lake и почему озеро данных — не просто свалка…
↗
2.
Облачные хранилища: Amazon S3, Google Cloud Storage, Azure…
↗
3.
Форматы файлов для аналитики: Parquet, Avro, ORC — обзор и…
↗
4.
Табличные форматы: Apache Iceberg, Delta Lake и Apache Hudi —…
↗
5.
Medallion Architecture: Bronze → Silver → Gold — слои…
↗
6.
Schema evolution: как менять схему без перезаписи петабайтов…
↗
7.
Time travel: запрос данных на любой момент в прошлом — как…
↗
8.
Lakehouse: когда озеро данных становится полноценным хранилищем
↗
Модуль 21. Облачные DWH-платформы
6 уроков
1.
Облачные хранилища данных: зачем компании массово уходят в…
↗
2.
Snowflake: разделение storage и compute — архитектура и…
↗
3.
Google BigQuery: serverless, слоты и Dremel под капотом
↗
4.
Amazon Redshift: колоночное хранение, ключи распределения и…
↗
5.
ClickHouse: колоночная СУБД для real-time аналитики — когда и…
↗
6.
Выбор облачного DWH: сравниваем по стоимости, скорости и…
↗
Модуль 22. Observability и data governance
7 уроков
1.
Data lineage: отслеживаем происхождение данных от источника…
↗
2.
Data catalog: Amundsen, DataHub, Apache Atlas — поиск и…
↗
3.
Data ownership: кто отвечает за качество этих данных и как…
↗
4.
SLA и SLO для данных: формализуем ожидания бизнеса от хранилища
↗
5.
Freshness monitoring: как вовремя узнать, что данные устарели
↗
6.
Reconciliation: сверка источника и хранилища — всё ли совпадает
↗
7.
Alerting: когда, как и кого оповещать о проблемах с данными
↗
Модуль 23. Безопасность и комплаенс в DWH
6 уроков
1.
Ролевая модель доступа (RBAC): кто и что может видеть в…
↗
2.
Маскирование данных: скрываем чувствительную информацию на лету
↗
3.
Row-level security: фильтрация строк на основе роли пользователя
↗
4.
GDPR и персональные данные: право на забвение в хранилище данных
↗
5.
Audit logging: полный журнал — кто, когда и какой запрос…
↗
6.
Шифрование данных: at rest и in transit — защита на диске и в…
↗
Модуль 24. Итоговый проект: DWH интернет-магазина
7 уроков
1.
Постановка задачи: интернет-магазин — источники, требования и…
↗
2.
Проектирование архитектуры: bus matrix, зерно, измерения и факты
↗
3.
Реализация слоёв данных: staging, core DWH (звезда) и data marts
↗
4.
ETL-пайплайны: инкрементальная загрузка, трансформации и…
↗
5.
Витрины и аналитика: ключевые отчёты для бизнес-пользователей
↗
6.
Тестирование и приёмка: сверка, проверки качества и защита…
↗
7.
Дорожная карта: Data Mesh, real-time DWH и дальнейший…
↗