From 9d855c9b581b57c247abb20cf6a8e1b0a810af29 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Fri, 6 Mar 2026 21:06:46 +0300 Subject: [PATCH] =?UTF-8?q?feat(docs):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20PRD=20=D0=B8=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=20=D0=BE=D0=B1=D1=83=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D1=83?= =?UTF-8?q?=D1=80=D1=81=D0=B0=20=D0=BF=D0=BE=20Lakehouse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - Формализовать цели, аудиторию и структуру учебного курса для плавного погружения джунов в Lakehouse-архитектуру. - Что: - Создан docs/PRD_Course.md с описанием JTBD, "Aha-moments" и метрик успеха. - Создан docs/COURSE_PLAN.md с детальной программой из 10 интерактивных уроков. - Проверка: - Файлы присутствуют в директории docs и корректно ссылаются друг на друга. --- docs/COURSE_PLAN.md | 44 ++++++++++++++++++++++++++++++++++ docs/PRD_Course.md | 58 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 docs/COURSE_PLAN.md create mode 100644 docs/PRD_Course.md diff --git a/docs/COURSE_PLAN.md b/docs/COURSE_PLAN.md new file mode 100644 index 0000000..b37a06f --- /dev/null +++ b/docs/COURSE_PLAN.md @@ -0,0 +1,44 @@ +# Программа учебного курса: Введение в Lakehouse + +Ориентировочная разбивка на 10 интерактивных уроков (Jupyter Notebooks). +Каждый урок рассчитан на 1-1.5 часа вдумчивой работы (теория + самостоятельная практика). + +## Блок I. Основы Lakehouse (Storage + Format) + +* **01_intro_and_storage.ipynb** + * Что такое Lakehouse. Разделение хранения и вычислений. + * Загрузка сырых файлов (CSV/JSON) в MinIO (S3). +* **02_first_iceberg_table.ipynb** + * Создание первой Iceberg-таблицы через Spark. + * Изучение структуры файлов (data, metadata, manifests) в MinIO. + +## Блок II. Единая точка правды (Catalog + Compute) + +* **03_the_catalog.ipynb** + * Роль JDBC-каталога (PostgreSQL). + * Как разные движки находят таблицы. +* **04_spark_meets_trino.ipynb** + * Разделение ролей (Spark пишет, Trino читает). + * Выполнение SQL-запросов к Iceberg-таблицам через Trino (интеграция вызовов Trino прямо в Jupyter). + +## Блок III. Инженерия данных (Data Pipelines) + +* **05_bronze_layer.ipynb** + * Чтение сырых данных Spark'ом и инжест "как есть" (Raw to Bronze). +* **06_silver_layer_and_schema_evolution.ipynb** + * Очистка данных. + * *Практика:* самостоятельное применение Schema Evolution (добавление/изменение колонок). +* **07_gold_layer_and_partitioning.ipynb** + * Агрегации бизнес-метрик. + * *Практика:* самостоятельное партиционирование таблиц для ускорения запросов (Partition Pruning). + +## Блок IV. Продвинутые фичи Lakehouse + +* **08_time_travel_and_snapshots.ipynb** + * Работа со снапшотами (Snapshots). + * *Практика:* восстановление таблицы после ошибочных `DELETE`/`UPDATE`, чтение "исторических" данных. +* **09_lakehouse_maintenance.ipynb** + * Проблема мелких файлов. + * Компактизация (Compaction) и очистка старых версий (Vacuum). +* **10_final_pipeline.ipynb** + * *Практика:* самостоятельный финальный end-to-end мини-пайплайн (Bronze -> Silver -> Gold), объединяющий все пройденные концепции. \ No newline at end of file diff --git a/docs/PRD_Course.md b/docs/PRD_Course.md new file mode 100644 index 0000000..ca76cfd --- /dev/null +++ b/docs/PRD_Course.md @@ -0,0 +1,58 @@ +# Product Requirements Document (PRD): Учебный курс «Введение в Lakehouse» + +## 1. Product Vision & Value Proposition + +**Видение:** Создать интерактивный практический курс, который "сломает" привычную картину мира монолитных баз данных (PostgreSQL/Greenplum) и плавно перестроит мышление студентов на парадигму распределенных систем (Lakehouse). +**Ценность:** Дать безопасную, наглядную "песочницу" для старта работы с современным Lakehouse, чтобы переход от классических БД к связке S3 + Iceberg + Spark/Trino прошел легко, предсказуемо и с минимальным трением. + +## 2. Target Audience (Целевая аудитория) + +* **Кто:** Junior Data Engineers, менти, студенты. +* **Их текущая картина мира:** Привыкли к классическим СУБД. Для них база данных — это единый "черный ящик", где движок вычислений (Compute) и жесткие диски (Storage) неразделимы, строго реляционны и транзакционны. +* **Бэкграунд:** Уверенно пишут SQL, знают Python, понимают классические слои DWH (Raw, ODS, DDS), умеют работать с Docker. + +## 3. Problem Statement & Jobs-To-Be-Done (JTBD) + +**Ключевая проблема:** +Когнитивный диссонанс при столкновении с Big Data и Lakehouse. Студенты не понимают, как набор Parquet-файлов в папках (S3) может быть "базой данных", зачем нужен отдельный каталог метаданных (Iceberg/Hive) и почему для записи мы используем один инструмент (Spark), а для чтения — другой (Trino). У них нет четкой ментальной модели распределенных систем. + +**Jobs-To-Be-Done (JTBD):** +* *Основной JTBD:* «Когда я перехожу на новый проект или получаю задачу, связанную с Lakehouse, я хочу **быстро понять общую архитектуру и влиться в работу с минимальным трением**, чтобы не чувствовать себя слепым котенком и не сломать прод из-за непонимания распределенной природы данных». +* *Вторичный JTBD:* «Я хочу получить практический обзор современных технологий (Spark, Iceberg, Trino), чтобы уверенно отвечать на вопросы на собеседованиях и расширить свой кругозор за пределы PostgreSQL». + +## 4. Ключевые "Aha-Moments" (Моменты озарения) + +Курс должен быть спроектирован так, чтобы студент через практику испытал следующие инсайты: +1. **Storage is Just Files:** «Ого, таблица в Lakehouse — это просто набор Parquet-файлов в бакете MinIO!» +2. **Decoupled Compute:** «Вау, я могу писать данные Spark'ом, а читать Trino, и они оба смотрят на одни и те же файлы без их копирования!» +3. **The Magic of Metadata:** «Так вот зачем нужен Iceberg! Это просто умный JSON-манифест, который говорит движкам, какие именно файлы читать для Time Travel или партиционирования». + +## 5. Метрики Успеха и Формат (Goals & Success Metrics) + +**Цели продукта:** +1. Студент может пройти курс от начала до конца за **~12 часов** вдумчивой работы в браузере (Jupyter + MinIO UI + Trino UI). +2. Студент может своими словами (на собеседовании или коллегам) объяснить архитектуру Lakehouse (Storage, Compute, Catalog) и зачем нужен табличный формат (Iceberg). +3. Студент умеет самостоятельно реализовать базовый пайплайн (чтение, трансформация, запись) в парадигме Lakehouse. + +**User Experience / Flow (Пользовательский опыт):** +Подход **«50/50 (Теория + Самостоятельная практика)»**. Ноутбуки предоставляют теорию, демистифицирующую Lakehouse (нацеленную на вызов "Aha-Moments"), примеры кода (50%) и заготовки ячеек. Студент изучает пример, а затем самостоятельно дописывает код для решения задачи, закрепляя новые концепции на практике. Финал курса — самостоятельный сквозной мини-пайплайн. + +--- + +## 6. Содержание (Scope) + +Ориентировочная программа на 10 интерактивных уроков (Jupyter Notebooks) вынесена в отдельный документ: **[COURSE_PLAN.md](./COURSE_PLAN.md)**. + +--- + +## 7. Технические Требования и Ограничения + +**Technical Requirements (В скоупе)** +* Использование существующего `docker-compose.yml` (Spark, Trino, MinIO, PostgreSQL, Jupyter). +* Установка дополнительных библиотек в образ Jupyter (например, `trino-python-client`), чтобы студенты могли выполнять запросы к Trino прямо из ноутбука. +* Подготовка небольших, но реалистичных датасетов (CSV/JSON) в папке репозитория. + +**Out of Scope (Вне скоупа / На будущее)** +* Оркестрация пайплайнов (Airflow, Dagster). +* Развертывание в Kubernetes / Облаках. +* Тюнинг производительности Spark на больших объемах данных.