Files
mini-lakehouse-lab/docs/course_prd.md
T
ddadmin 7514e5a625 docs(course): обновлены PRD и программа курса
- Зачем:
  - нужно выровнять учебную программу с PRD и явно отделить стартовый onboarding от практики в ноутбуках.
- Что:
  - обновлены название курса и файл программы, а структура материалов пересобрана вокруг стартовой документации, 8 практических модулей и вспомогательных артефактов.
  - добавлены трассировка Learning Outcomes, hands-on упражнение для модуля 2 и уточнения по доставке учебного data bundle.
  - зафиксированы acceptance criteria, минимальный scope glossary и статус partitioning как legacy-темы вне обязательного трека v1.
- Проверка:
  - просмотрен git diff HEAD~1 -- docs/course_prd.md docs/course_program.md.
  - проверен git diff --cached --stat перед amend.
2026-03-06 23:19:20 +03:00

198 lines
16 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.
# Product Requirements Document (PRD): Учебный курс «Lakehouse без магии»
## 1. Product Vision & Value Proposition
**Видение:** создать практический курс, который помогает студенту перейти от привычной картины мира классических СУБД к базовой рабочей модели Lakehouse без лишнего стресса и без опасных иллюзий про "магическую" распределенную платформу.
**Ценность:** дать безопасную и наглядную песочницу на базе локального стенда (`Spark + Trino + Iceberg + MinIO + PostgreSQL`), в которой студент может руками повторить типовые повседневные действия Data Engineer и понять, как устроена современная Lakehouse-архитектура.
## 2. Target Audience & Prerequisites
**Основная аудитория:** студент курса [`de-roadmap`](https://github.com/dementev-dev/de-roadmap), который уже прошел или уверенно знает:
* SQL
* Python
* Git
* Airflow
* Greenplum
**Дополнительно:** возможно, уже поверхностно знаком с `NiFi` или `Kafka`, но это не является обязательным требованием.
**Важно:** курс рассчитан не на абсолютного новичка, а на человека, который уже понимает базовые DE-процессы и хочет перенести это понимание в мир Lakehouse.
## 3. Problem Statement & JTBD
**Ключевая проблема:** при первом столкновении с Lakehouse студент часто не понимает:
* как набор файлов в объектном хранилище может быть "таблицей";
* зачем отдельно нужны `storage`, `catalog` и `compute`;
* почему один движок может писать данные, а другой читать те же самые таблицы;
* как безопасно работать с такими таблицами, не ломая данные и не теряя воспроизводимость пайплайна.
В результате Lakehouse воспринимается либо как непонятная магия, либо как хаотичный набор технологий без общей модели.
**Основной JTBD:** «Когда я попадаю в команду, где есть Lakehouse-стек, я хочу быстро понять, как он устроен и как в нем выполнять простые рабочие задачи, чтобы не быть опасным для окружения и не тратить недели на распаковку базовых концепций».
**Вторичный JTBD:** «Я хочу руками пощупать популярный стек `Spark + Trino + Iceberg + S3-compatible storage`, чтобы увереннее обсуждать такие системы на собеседованиях и в работе».
## 4. Product Goals
Курс должен помочь студенту:
1. Получить практический, а не только теоретический, ввод в Lakehouse.
2. Освоить безопасный набор базовых ежедневных действий, полезных на старте работы.
3. Понять архитектуру ровно настолько, чтобы осознанно пользоваться инструментами и не допускать грубых ошибок.
4. Сопоставить новые концепции с уже знакомой картиной мира `PostgreSQL/Greenplum` и классических DWH-слоев.
## 5. Learning Outcomes
После прохождения курса студент:
1. Понимает различие между `storage`, `catalog` и `compute`, и может объяснить роль `MinIO`, `PostgreSQL`, `Spark` и `Trino` в этом стенде.
2. Умеет поднять локальный стенд, проверить его базовую работоспособность и использовать логи/веб-интерфейсы для первичной диагностики проблем.
3. Умеет загрузить raw-данные, прочитать их в `Spark`, проверить схему и подготовить данные к дальнейшей обработке.
4. Умеет создать и заполнить `Iceberg`-таблицу как основной табличный формат курса.
5. Умеет реализовать простой поток `raw -> bronze -> silver` с базовыми трансформациями и сохранением воспроизводимости шагов.
6. Умеет читать одну и ту же таблицу из `Spark` и `Trino` и понимает, почему это возможно без копирования данных.
7. Умеет выполнить базовые безопасные операции с таблицей: изменение схемы, просмотр snapshot-ов, чтение предыдущего состояния, базовый `compaction` и `vacuum`.
Трассировка этих outcomes на модули и checkpoints фиксируется в [course_program.md](./course_program.md).
## 6. Teaching Principles
**Принцип 1. Практика первична.** Курс не должен превращаться в обзорную лекцию. Теория нужна для объяснения того, что студент делает руками.
**Принцип 2. Ноутбук как учебник и тренажер.** В ноутбуках должны быть:
* готовые демонстрационные ячейки с объяснением подхода;
* обязательные самостоятельные задания на похожее действие;
* `checkpoints` с ожидаемым результатом.
**Принцип 3. Постоянный мостик к знакомому миру.** Новые концепции объясняются через короткие сравнения с `PostgreSQL/Greenplum` и классической нотацией слоев `stg/ods/dds`, где это уместно.
**Принцип 4. Безопасность важнее глубины.** Курс должен в первую очередь снижать риск типовых ошибок новичка, а не учить всем возможностям стека.
## 7. Risk Reduction / Common Mistakes
Курс должен явно учить не допускать следующие ошибки:
1. Путать `storage`, `catalog` и `compute`, не понимая, где реально лежат данные и кто отвечает за метаданные.
2. Воспринимать Lakehouse как "одну базу данных", скрывающую физическую структуру хранения.
3. Делать разрушительные операции вслепую: неаккуратный `overwrite`, `drop`, неконтролируемую перезапись слоя.
4. Смешивать роли слоев `raw`, `bronze`, `silver`, из-за чего теряется происхождение и воспроизводимость данных.
5. Менять схему и типы данных без понимания влияния на downstream-чтение и на другие движки.
## 8. Scope
**В первой версии курса в скоупе:**
* архитектурная модель `storage + catalog + compute`;
* один основной табличный формат: `Iceberg`;
* работа с raw-данными;
* построение слоев `bronze` и `silver`;
* чтение и запись через `Spark`;
* чтение через `Trino`;
* базовое schema evolution;
* snapshot/time travel на прикладном уровне;
* базовый `compaction/vacuum` с параллелями к `Greenplum AppendOnly`;
* набор практик в Jupyter Notebooks с обязательными заданиями и checkpoints;
* стартовая документация до первого ноутбука: prerequisites, запуск стенда, вход в Jupyter и базовый troubleshooting.
Ориентировочная программа курса вынесена в отдельный документ: **[course_program.md](./course_program.md)**.
## 9. Dataset Strategy
**Основной датасет курса:** `NYC TLC Yellow Taxi Trip Records` + `Taxi Zone Lookup`.
**Почему он выбран:**
* это узнаваемый и реалистичный DE-кейс;
* он хорошо подходит для слоев `raw -> bronze -> silver`;
* его удобно использовать для демонстрации работы `Spark`, `Trino` и `Iceberg`;
* он поставляется в `PARQUET`, что делает raw-слой ближе к реальной жизни.
**Режимы использования данных:**
* `Default`: 3-6 месяцев данных для стандартного прохождения курса;
* `Extended`: до полного года данных для более тяжелого режима или будущего расширения курса.
**Методическое решение:** курс строится вокруг одного домена данных, но не требует жесткого сквозного проекта. Основной формат курса - набор связанных практик на одном и том же наборе данных.
**Механика доставки данных в v1:**
* raw-датасет не хранится в репозитории целиком;
* стартовая документация должна давать воспроизводимый способ получить фиксированный учебный набор данных (`Default` или `Extended`) из публичного источника;
* `Taxi Zone Lookup` доставляется тем же способом, что и основной датасет;
* перед началом модуля про raw-данные студент должен иметь локальный data bundle на хосте;
* в модуле про raw-ingest студент загружает уже полученные файлы в raw-зону `MinIO`, а не ищет и не скачивает данные вручную прямо из ноутбука;
* ручная загрузка файлов через UI допускается только как fallback-сценарий, а не как основной путь прохождения.
## 10. User Experience / Learning Flow
Курс строится по модели **"объяснение -> демонстрация -> самостоятельное повторение -> checkpoint"**.
Каждый урок должен:
1. Коротко объяснить новую концепцию.
2. Показать готовый рабочий пример.
3. Дать студенту похожее задание для самостоятельного выполнения.
4. Заканчиваться проверяемым результатом.
**Формат прохождения:** желательно с ментором, но курс должен быть самодостаточным и для самостоятельного изучения.
## 11. Product Targets & Acceptance Criteria
**Ориентиры продукта:**
Это целевые ориентиры курса, но не blocking acceptance criteria для материалов.
1. Студент проходит курс за `~12-15 часов` вдумчивой работы.
2. Студент после курса способен безопасно выполнить базовые операции в Lakehouse-стенде без постоянной внешней помощи.
3. Студент может внятно объяснить ключевые архитектурные принципы Lakehouse на уровне junior/middle interview readiness.
**Acceptance Criteria для учебных материалов и результата:**
1. В составе курса есть стартовая документация до первого ноутбука, включая prerequisites, запуск стенда, вход в `Jupyter` и получение учебного data bundle.
2. Студент проходит обязательные `checkpoints` по урокам.
3. Студент самостоятельно выполняет набор практик на одном датасете, включая:
* загрузку raw-данных;
* построение `bronze`;
* построение `silver`;
* создание/чтение `Iceberg`-таблицы;
* чтение одной и той же таблицы через `Spark` и `Trino`;
* демонстрацию базового schema evolution;
* демонстрацию snapshot/time travel;
* демонстрацию базового `compaction/vacuum`.
4. Студент может своими словами объяснить:
* что такое `Lakehouse` и чем он отличается от классической БД;
* как разделены `storage`, `catalog`, `compute`;
* что такое `Iceberg` в практическом смысле;
* почему `Spark` может писать, а `Trino` читать одни и те же таблицы;
* зачем нужны слои `raw -> bronze -> silver`.
## 12. Technical Requirements
**В скоупе:**
* использование существующего `docker-compose.yml` (`Spark`, `Trino`, `MinIO`, `PostgreSQL`, `Jupyter`);
* подготовка учебных датасетов и/или инструкций по их загрузке в репозиторий;
* наличие воспроизводимого способа получить учебный data bundle без ручного поиска по внешним сайтам;
* поддержка выполнения запросов к `Trino` из ноутбуков;
* подготовка Jupyter Notebooks как основного формата практической части курса;
* подготовка стартовой документации для входа в курс до первого запуска ноутбуков;
* наличие воспроизводимых шагов для старта, сброса и повторного прохождения практик.
## 13. Out of Scope (v1)
**Вне первой версии курса:**
* `gold`-слой и полноценные бизнес-витрины;
* `Airflow`, `Kafka`, `NiFi`, `streaming`, `CDC`;
* сложные `MERGE`-сценарии, row-level deletes и update-heavy кейсы;
* партиционирование и `partition pruning` как отдельная учебная тема первой версии;
* глубокий performance tuning;
* production security, governance, multi-user setup;
* Kubernetes / облачное развертывание;
* детальное сравнение нескольких типов catalog;
* глубокий разбор internals `Iceberg` на уровне спецификации.