- Зачем: - нужно выровнять учебную программу с 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.
198 lines
16 KiB
Markdown
198 lines
16 KiB
Markdown
# 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` на уровне спецификации.
|