docs(docs): обновлены ссылки и основная программа роадмапа
Deploy MkDocs to VPS / deploy (push) Successful in 7s

- Зачем: восстановлен доступ к GitHub, изменились учебные стенды и требования к основной программе.
- Что: ссылки для менти возвращены на GitHub; ClickHouse, Kafka и курсовая Clickstream включены в основную программу; уточнены подготовка окружения Python, управление памятью, практика Airflow и вход в DEV1.
- Что: обновлены описание публикации через Gitea и бэклог; убрана ссылка на неподходящий курс ClickHouse.
- Проверка: строгая сборка MkDocs и проверка пробелов прошли; ссылки и задания сверены с учебными репозиториями.
This commit is contained in:
ddadmin committed 2026-09-27 15:36:07 -04:00
1 parent 242a066f42
commit 806417c1bd
6 files changed
+213 -84

No files matched your search

+152 -63
View File
@@ -4,7 +4,7 @@
Он подойдёт тем, кто хочет:
- системно войти в профессию с нуля или близкого к нулю уровня;
- закрыть пробелы в базе (SQL, Git, Python, DWH, Airflow, Greenplum);
- закрыть пробелы в базе (SQL, Git, Python, DWH, Airflow, Greenplum, Kafka, ClickHouse);
- подготовиться к собеседованиям и первым рабочим задачам.
Роадмап можно проходить самостоятельно или вместе со мной в формате менторства.
@@ -13,9 +13,9 @@
### Оглавление
- [Основные знания](#основные-знания) — Linux, Git, SQL, Python, методологии, Docker
- [Практика и инструменты](#практика-и-инструменты) — Airflow, Greenplum, курсовая работа
- [Практика и инструменты](#практика-и-инструменты) - Airflow, Greenplum, Streaming, ClickHouse, две курсовые
- [Карьера и менторство](#карьера-и-менторство) — резюме, собеседования, испытательный срок
- [Расширенные навыки](#расширенные-навыки) — Streaming, ClickHouse, Lakehouse, dbt
- [Расширенные навыки](#расширенные-навыки) - Lakehouse, dbt
- [Софт скиллы](#софт-скиллы)
- [Дополнительные материалы](#дополнительные-материалы)
@@ -25,6 +25,11 @@
- выполнять практику и домашки, а не только смотреть материалы;
- возвращаться к разделам по мере появления реальных задач.
Основная программа включает две курсовые: сначала хранилище на Greenplum,
затем [Clickstream на ClickHouse](#большая-курсовая-clickstream).
Streaming и ClickHouse входят в обязательную часть подготовки к трудоустройству.
Lakehouse и dbt можно изучать после нее, под задачи и интересующие вакансии.
---
## Основные знания
@@ -85,12 +90,17 @@ SQL и моделирование данных специально идут р
#### Повышение знаний SQL
**Перед DEV1: запустите учебную базу.** Для практики рекомендую
[стенд PostgreSQL с базой bookings](https://github.com/dementev-dev/de-roadmap/tree/main/postgres-bookings).
В README стенда описаны запуск в Docker, подключение через `psql` и DBeaver.
Это наше первое знакомство с Docker: пока достаточно научиться запускать
и останавливать стенд, смотреть его статус и подключаться к базе.
Подробный [блок Docker](#docker) будет дальше.
Смотрим курс от Postgres Pro [DEV1](https://postgrespro.ru/education/courses/DEV1)
Темы - от "Введение" до "SQL" включительно, "Управление доступом", "Резервное копирование". Для лучшего усваивания материала проделываем все примеры и домашние задания из конспектов лекций.
С темой "PL/pgSQL" можно ознакомиться обзорно.
Для развития навыков инженера будет полезно лабораторные работы делать не в виртуальной машине, а в docker контейнере. Предложенный (не обязательный) вариант - в каталоге `postgres-bookings` репозитория.
Для дальнейшего закрепления материала - читаем книгу [PostgreSQL. Основы языка SQL](https://postgrespro.ru/education/books/sqlprimer)
- Глава 8 - Индексы + ДЗ
@@ -98,7 +108,7 @@ SQL и моделирование данных специально идут р
- Глава 10 - Повышение производительности + ДЗ
Вопросы оптимизации запросов хорошо описаны в курсе [QPT](https://postgrespro.ru/education/courses/QPT) от Postgres Pro. Полученные навыки применимы для работы в том числе с Greenplum, и частично, другими БД.
На момент написания, видеолекции были доступны только для старой версии Postgres 13, но ее вполне достаточно.
На странице курса выбирайте материалы и видеозаписи для PostgreSQL 16.
#### Моделирование данных
Понимание того, **как устроены данные и зачем они нужны**, — ключ к качественным ETL-процессам.
@@ -120,7 +130,9 @@ SQL и моделирование данных специально идут р
- Теория про Slowly Changing Dimensions: [SCD](dwh-modeling/SCD.md)
- (Опционально) Ральф Кимбалл — «Инструментарий хранения и анализа данных» (The Data Warehouse Toolkit) - первые 3 главы
- Практика по моделированию статусов клиента: [домашка STG → ODS → DDS → DM](dwh-modeling/Homework_Customer_Status_DDS_DM.md)
- Еще про Data Vault:
- Data Vault и Anchor Modeling изучаем обзорно, для знакомства с основными
понятиями. Глубокий разбор и самостоятельное проектирование на этом этапе
не требуются. Материалы для знакомства:
- Конспект и примеры из этого репозитория: [DataVault.md](dwh-modeling/DataVault.md)
- [DataVault за 10 минут - Youtube](https://www.youtube.com/watch?v=9oQs_wJ045I)
- Статья [«Что такое Data Vault: моделирование КХД для архитектора Big Data»](https://bigdataschool.ru/blog/what-is-data-vault/) — обзор, плюсы/минусы, контекст применения.
@@ -139,13 +151,36 @@ SQL и моделирование данных специально идут р
### Python
- Если совсем не знакомы с Python, начинаем с курса ["Поколение Python": курс для начинающих – Stepik](https://stepik.org/course/58852/info)
Если совсем не знакомы с Python, начинаем с курса ["Поколение Python": курс для начинающих - Stepik](https://stepik.org/course/58852/info).
Перед курсом для продвинутых подготовьте рабочую среду. Она пригодится для
экспериментов с кодом и домашних заданий.
- Виртуальные окружения (venv) изолируют зависимости проекта:
- [Habr: как настроить виртуальное окружение](https://habr.com/ru/articles/889670/)
- [SkillFactory: Виртуальные окружения в Python](https://blog.skillfactory.ru/venv-virtualnoe-okruzhenie-v-python/)
- [Создание venv и установка пакетов: документация Python](https://docs.python.org/3/tutorial/venv.html)
- JupyterLab позволяет выполнять код по ячейкам и сохранять пояснения рядом с результатами:
- [Блог Практикума: что такое Jupyter Notebook](https://practicum.yandex.ru/blog/chto-takoe-jupyter-notebook/)
- [Установка JupyterLab](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html)
Создайте venv, установите в него JupyterLab и запустите из этого же окружения.
В новом ноутбуке выполните несколько ячеек, сохраните `.ipynb`, перезапустите
ядро и выполните все ячейки по порядку. В Git сохраняйте ноутбуки и скрипты,
а каталог `.venv/` добавьте в `.gitignore`.
Теперь продолжаем изучать Python:
- Изучаем глубже и "оттачиваем" live coding: ["Поколение Python": курс для продвинутых – Stepik](https://stepik.org/course/68343/info)
- Продолжение "базы", спрашиваемой на собеседованиях, по Python: ["Поколение Python": курс для профессионалов](https://stepik.org/course/82541/promo). Курс очень полезный, но платный. Вместо него можно почитать "продвинутые" темы дальше.
- "Продвинутые" темы:
- [Полезные функции](https://pyneng.readthedocs.io/ru/latest/book/10_useful_functions/index.html)
- [Работа с файлами в формате CSV, JSON, YAML](https://pyneng.readthedocs.io/ru/latest/book/17_serialization/index.html)
- [Итераторы, итерируемые объекты и генераторы](https://pyneng.readthedocs.io/ru/latest/book/13_iterator_generator/index.html)
- Управление памятью (документация на английском):
- [Объекты, ссылки и изменяемость](https://docs.python.org/3/reference/datamodel.html#objects-values-and-types) - почему два имени могут указывать на один список и что происходит при его изменении.
- [Как Python управляет памятью](https://docs.python.org/3/faq/design.html#how-does-python-manage-memory) - подсчет ссылок и сборка циклов в CPython; особенности других реализаций Python.
- [Модуль gc](https://docs.python.org/3/library/gc.html) - справочник для экспериментов со сборщиком мусора. Детали поколений и порогов смотрите для своей версии Python.
- [Декораторы Python: пошаговое руководство](https://habr.com/ru/companies/otus/articles/727590/)
- Работа с датой/временем: [официальная документация по модулю datetime](https://docs.python.org/3/library/datetime.html)
- [Сложность алгоритмов. Разбор Big O](https://habr.com/ru/articles/782608/) — короткий материал, чтобы понимать O(n) vs O(n²) на собеседованиях и в коде
@@ -154,12 +189,6 @@ SQL и моделирование данных специально идут р
- Введение в [ООП](https://metanit.com/python/tutorial/7.1.php)
- [Яндекс Учебник: «Объектная модель Python: классы, поля и методы»](https://education.yandex.ru/handbook/python/article/obuektnaya-model-python-klassy-polya-i-metody)
- [Real Python: OOP in Python (tutorial)](https://realpython.com/python3-object-oriented-programming/)
- Виртуальные окружения (venv) — изолируют зависимости проекта; настройте перед установкой Jupyter и библиотек
- [Habr: как настроить виртуальное окружение](https://habr.com/ru/articles/889670/)
- [SkillFactory: Виртуальные окружения в Python](https://blog.skillfactory.ru/venv-virtualnoe-okruzhenie-v-python/)
- Jupyter Lab
- [Блог Практикума: «Что такое Jupyter Notebook: как установить и открыть»](https://practicum.yandex.ru/blog/chto-takoe-jupyter-notebook/)
- Готовый Docker-образ Jupyter Lab со Spark: [Jupyter Docker Stacks, pyspark-notebook](https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-pyspark-notebook)
- Pandas
- [GeeksforGeeks: “Why Pandas is Used in Python”](https://www.geeksforgeeks.org/pandas/why-pandas-is-used-in-python/)
- [Skillbox: «Для чего нужна библиотека Pandas»](https://skillbox.ru/media/code/rabotaem-s-pandas-osnovnye-ponyatiya-i-realnye-dannye/)
@@ -173,10 +202,14 @@ SQL и моделирование данных специально идут р
**Когда блок Python считаем пройденным:**
- создаете venv, устанавливаете в него пакеты и запускаете JupyterLab; можете повторить вычисления в ноутбуке после перезапуска ядра;
- вы без подсказок пишете небольшие скрипты с циклами, функциями, обработкой ошибок и работой с коллекциями;
- умеете читать и модифицировать чужой код, в том числе с использованием pandas и DataFrame;
- уверенно проходите простой live-coding по Python для DE: прочитать CSV/JSON, отфильтровать, сгруппировать данные и посчитать агрегаты.
- можете отвечать как на простые вопросы собеседований (циклы, списки, словари), так и продвинутые (итераторы, декораторы, управление памятью, базовые понятия ООП)
- можете отвечать как на простые вопросы собеседований (циклы, списки, словари), так и продвинутые (итераторы, декораторы, базовые понятия ООП);
- на примере со списком объясняете разницу между объектом и ссылкой на него,
почему `del` одного имени не обязательно уничтожает объект и зачем CPython
нужен сборщик циклического мусора.
### Методологии разработки
@@ -283,12 +316,21 @@ Apache Airflow — инструмент для оркестрации ETL-про
Материалы:
- [Учебник по Airflow](https://git.dementev.space/ddmitry/airflow-manual)
- [Учебник по Airflow](https://github.com/dementev-dev/airflow-manual)
- [Практические задания на стенде](https://github.com/dementev-dev/airflow-manual/blob/main/airflow-docker/educational-tasks.md)
Задания выполняем параллельно с чтением учебника. Начинаем с простых DAG
и SQL, затем обрабатываем файлы, загружаем CSV в PostgreSQL и добавляем
проверки качества. Дальше расширяем ETL, разбираем ветвление, повторные
попытки и логирование. Здесь Python и SQL впервые работают вместе
в пайплайне, которым управляет Airflow.
**Когда блок Airflow считаем пройденным:**
- вы можете объяснить, что такое DAG, задачи, операторы и сенсоры, и как между ними задаются зависимости;
- на базе учебного стенда подготавливаете, отлаживаете и запускаете свои DAG'и с расписанием и несколькими шагами (например, загрузка данных и последующие трансформации);
- расширяете загрузку CSV в PostgreSQL: меняете генерацию данных, схему таблицы и загрузку новой колонки;
- добавляете свою проверку качества и убеждаетесь, что она обнаруживает подготовленную ошибку в данных;
- уверенно смотрите логи, находите место падения и понимаете, как перезапустить задачу.
### Greenplum
@@ -313,7 +355,7 @@ Apache Airflow — инструмент для оркестрации ETL-про
**Курс Yandex по Greenplum** — основной учебный курс, рекомендуется пройти целиком:
- [Бесплатный курс Yandex Cloud по Greenplum](https://yandex.cloud/ru/training/greenplum)
- Практику по курсу удобно делать на стенде [airflow-dwh-gp-lab](https://git.dementev.space/ddmitry/airflow-greenplum) — `make up` поднимает рабочий Greenplum с PXF, не нужен облачный кластер.
- Практику по курсу удобно делать на стенде [airflow-dwh-gp-lab](https://github.com/dementev-dev/airflow-greenplum) — `make up` поднимает рабочий Greenplum с PXF, не нужен облачный кластер.
- Стенд покрывает основные темы курса: типы таблиц (heap / appendonly), политики дистрибуции, сжатие, PXF, анализ планов выполнения (`EXPLAIN`).
- Единственное ограничение: cloud-специфичные темы (тема 2 курса — развёртывание в Yandex Cloud) на локальном стенде не покрыты.
@@ -324,9 +366,10 @@ Apache Airflow — инструмент для оркестрации ETL-про
- можете объяснить, в чём практическая разница между MPP-хранилищем и одиночным Postgres на уровне типичных задач DE и собеседований.
### Курсовая работа
Курсовая работа — важный майлстоун роадмапа: ваш первый end-to-end data-проект. После неё у вас есть ключевые технические навыки для старта карьеры в Data Engineering.
Первая курсовая собирает изученное в один проект: загрузку данных из PostgreSQL,
слои хранилища в Greenplum и управление обработкой через Airflow.
Курсовая выполняется на том же стенде [airflow-dwh-gp-lab](https://git.dementev.space/ddmitry/airflow-greenplum), который вы уже использовали для практики по Greenplum.
Курсовая выполняется на том же стенде [airflow-dwh-gp-lab](https://github.com/dementev-dev/airflow-greenplum), который вы уже использовали для практики по Greenplum.
**Что внутри:**
@@ -342,6 +385,86 @@ Apache Airflow — инструмент для оркестрации ETL-про
- автоматическая проверка (валидационный DAG) проходит без ошибок;
- вы можете на собеседовании за 5–10 минут рассказать архитектуру проекта, его цели и показать ключевые части кода.
После этой работы переходим к потокам событий и ClickHouse. Они понадобятся
для [большой курсовой Clickstream](#большая-курсовая-clickstream).
### Streaming (NiFi + Kafka)
В первой курсовой мы загружали данные из базы. Теперь разберем прием потока
событий: как доставить их в хранилище и продолжить чтение после остановки
обработчика. NiFi помогает собрать поток обработки визуально, Kafka хранит
события в распределенном журнале и позволяет потребителям читать их независимо.
Материалы:
- [Apache NiFi с нуля за 3 часа (Youtube-плейлист)](https://youtube.com/playlist?list=PL4MpKy3QjNp_rOEEibc4Ro8UK4g8vLX6_&si=W_hidjHmBOZ_aUfS) — первые 4 видео, дальше — по желанию
- [Лучший Гайд по Kafka для Начинающих За 1 Час (Youtube)](https://www.youtube.com/watch?v=hbseyn-CfXY)
Практика — на стенде [nifi-kafka-postgres-lab](https://github.com/dementev-dev/nifi-kafka-postgres-lab) (Docker Compose с NiFi, Kafka и Postgres):
- настраиваем в NiFi простой генератор данных и поток в Postgres;
- строим поток NiFi → Kafka → NiFi → Postgres.
**Перед большой курсовой нужно уметь:**
- объяснить связь между топиком, партицией, consumer group и offset;
- отправить сообщения в Kafka и прочитать их потребителем;
- показать на учебном потоке, откуда продолжится чтение после перезапуска,
и объяснить, почему при повторной доставке могут появиться дубли.
В [курсовой Clickstream](#большая-курсовая-clickstream) события и заказы
поступают через Kafka в ClickHouse. Вернемся к этим вопросам, когда будем
разбирать прием данных и их обработку в хранилище.
### ClickHouse
ClickHouse используем для аналитики по событиям и заказам. Здесь нужно
разобраться, как хранить данные, выбирать ключ сортировки и строить витрины.
Затем применим это в большой курсовой.
Материалы:
- Бесплатный курс [ClickHouse от Yandex Cloud](https://yandex.cloud/ru/training/clickhouse) берем за основу.
Практика:
Упражнения по самой СУБД можно выполнять локально на
[clickhouse-learning-cluster](https://github.com/dementev-dev/clickhouse-learning-cluster):
четыре узла ClickHouse в Docker Compose, репликация, шардинг и HAProxy.
Задания по облачной инфраструктуре требуют Yandex Cloud и оплаты ресурсов.
**Когда готовы переходить к курсовой:**
- создаете таблицы семейства MergeTree и объясняете выбор `ORDER BY` и `PARTITION BY`;
- различаете шардирование и репликацию, понимаете роль таблиц Distributed;
- загружаете данные, пишете аналитические запросы и можете объяснить,
как устройство таблицы влияет на чтение данных.
### Большая курсовая: Clickstream
На стенде [clickstream-data-platform](https://github.com/dementev-dev/clickstream-data-platform)
работаем с хранилищем интернет-магазина. Генератор создает события посетителей
и заказы, Kafka доставляет их в ClickHouse. Данные проходят слои STG, ODS,
DDS и DM; Airflow управляет обработкой, Superset показывает отчеты.
Часть хранилища уже работает. В заданиях вы строите свои витрины, разбираете
готовые загрузки и меняете их, сверяя результат с исходными данными.
Проверки качества и мониторинг нужны здесь для конкретных задач: заметить
потери и дубли, найти причину расхождения, проверить результат своей правки.
Начните с запуска по README репозитория, затем прочитайте
[путеводитель по стенду](https://github.com/dementev-dev/clickstream-data-platform/blob/main/docs/handbook/README.md)
и переходите к [учебным заданиям](https://github.com/dementev-dev/clickstream-data-platform/blob/main/docs/labs/README.md).
В основной программе семь ступеней: пять витрин DM, свой график в Superset,
самостоятельная нарезка сессий, изменение расчета сессий в конвейере,
проверки и обработка заказов, разбор сырых событий, мониторинг.
Факультативные расследования можно взять после основной программы.
**Когда большую курсовую считаем пройденной:**
- выполнены семь ступеней основной программы и проверки из заданий;
- пять учебных витрин проходят `homework_check`, в Superset построен свой график;
- можете проследить путь события от Kafka до отчета, объяснить свои изменения
и показать, как проверяли их корректность.
---
## Карьера и менторство
@@ -394,49 +517,12 @@ Apache Airflow — инструмент для оркестрации ETL-про
---
## Расширенные навыки
Эти темы выходят за рамки базового минимума для старта в Data Engineering, но дают более полное представление об экосистеме.
Их цель — понимать, зачем и когда используется тот или иной инструмент, а не осваивать его на уровне администратора или DevOps-инженера.
После двух курсовых можно расширить стек: попробовать обработку файлов
в Lakehouse и управление SQL-моделями через dbt. Выбирайте тему под задачи,
с которыми хотите работать.
[[к оглавлению]](#оглавление)
Мы кратко знакомимся с:
- **Streaming** (NiFi + Kafka) — инструментами для построения потоковых и интеграционных пайплайнов;
- **ClickHouse** — колоночной СУБД для высоконагруженной аналитики;
- **Lakehouse** (Spark, Iceberg, Trino) — архитектурой, построенной на разделении compute и storage;
- **dbt** — подходом к трансформации данных как кода.
Практика ограничивается минимальным рабочим примером (запуск в Docker, простой пайплайн или SQL-модель).
Этого достаточно, чтобы уверенно говорить об инструменте на собеседовании и понимать его место в архитектуре — а всё остальное при необходимости осваивается уже на проекте.
### Streaming (NiFi + Kafka)
NiFi — визуальный конструктор потоков данных, Kafka — распределённая очередь сообщений. Вместе они закрывают типичный сценарий: принять данные, буферизовать, доставить в хранилище.
Материалы:
- [Apache NiFi с нуля за 3 часа (Youtube-плейлист)](https://youtube.com/playlist?list=PL4MpKy3QjNp_rOEEibc4Ro8UK4g8vLX6_&si=W_hidjHmBOZ_aUfS) — первые 4 видео, дальше — по желанию
- [Лучший Гайд по Kafka для Начинающих За 1 Час (Youtube)](https://www.youtube.com/watch?v=hbseyn-CfXY)
Практика — на стенде [nifi-kafka-postgres-lab](https://git.dementev.space/ddmitry/nifi-kafka-postgres-lab) (Docker Compose с NiFi, Kafka и Postgres):
- настраиваем в NiFi простой генератор данных и поток в Postgres;
- строим поток NiFi → Kafka → NiFi → Postgres.
Знакомство с Kafka здесь пригодится и дальше: стенд по ClickHouse в следующей секции принимает данные именно через Kafka.
### ClickHouse
ClickHouse — колоночная СУБД для аналитики на больших объёмах: миллиарды строк, агрегации за секунды. В российских компаниях это фактический стандарт для витрин, отчётности и продуктовой аналитики, поэтому на собеседованиях тема всплывает часто.
Материалы:
- Бесплатный курс [ClickHouse от Yandex Cloud](https://yandex.cloud/ru/training/clickhouse) — берём за основу, в нём много упражнений
- Платный курс [ClickHouse для аналитика – Stepik](https://stepik.org/course/100210/promo?search=6551441002)
Практика:
- Упражнения курса Яндекса можно выполнять в их облаке (с оплатой за ресурсы) или бесплатно у себя — на учебном кластере [clickhouse-learning-cluster](https://git.dementev.space/ddmitry/clickhouse-learning-cluster): 4 узла ClickHouse в Docker Compose, репликация, шардинг, балансировка через HAProxy.
- Следующий шаг — стенд [clickstream-ch-kafka-superset-demo](https://git.dementev.space/ddmitry/clickstream-ch-kafka-superset-demo), имитирующий полноценное аналитическое хранилище на ClickHouse: Kafka, Airflow, дашборды в Superset, мониторинг (Prometheus/Grafana), слои STG → ODS → DDS → DM. Внутри — собственный продвинутый курс «Кликстрим на ClickHouse» с уроками прямо на стенде.
### Lakehouse (Spark, Iceberg, Trino)
Lakehouse — архитектурный подход, который соединяет гибкость Data Lake с гарантиями классического DWH.
@@ -450,7 +536,7 @@ Lakehouse — архитектурный подход, который соеди
- Введение в тему: [«Как не утонуть в данных: выбираем между DWH, Data Lake и Lakehouse» (Habr, Arenadata)](https://habr.com/ru/companies/arenadata/articles/885722/) — что такое Lakehouse, чем он отличается от классического DWH и Data Lake и зачем появился
- [DataLearn: «Что такое Apache Spark»](https://youtu.be/Tl9YzC-dQLI) — введение в Spark с нуля, ~40 минут
Практика — курс [«Lakehouse без магии»](https://git.dementev.space/ddmitry/mini-lakehouse-lab) на стенде mini-lakehouse-lab (Spark + Iceberg + Trino + MinIO, всё локально в Docker, без облаков и регистраций):
Практика — курс [«Lakehouse без магии»](https://github.com/dementev-dev/mini-lakehouse-lab) на стенде mini-lakehouse-lab (Spark + Iceberg + Trino + MinIO, всё локально в Docker, без облаков и регистраций):
- 8 модулей на ~12–15 часов самостоятельной работы; в каждом — объяснение, демонстрация, задание и checkpoint;
- пайплайн `raw → bronze → silver` на реальном датасете NYC Taxi;
@@ -480,9 +566,12 @@ dbt (data build tool) — инструмент для трансформации
**Когда блок расширенных навыков считаем пройденным:**
- вы можете на собеседовании кратко объяснить, когда уместны Streaming (NiFi/Kafka), ClickHouse, Lakehouse-стек и dbt, и чем они дополняют базовый стек (Postgres, Airflow, Greenplum);
- понимаете типичные сценарии: потоковые интеграции и очереди (NiFi + Kafka), аналитические витрины и отчёты на ClickHouse, Lakehouse-архитектура (Spark/Iceberg/Trino), трансформации данных как код (dbt);
- не боитесь увидеть эти инструменты в описании вакансии и можете поддержать содержательный разговор об их месте в архитектуре.
Оценивайте выбранную тему по результату практики:
- для Lakehouse можете записать таблицу через Spark, прочитать ее через Trino
и объяснить роль Iceberg, каталога и объектного хранилища;
- для dbt можете изменить SQL-модель, выполнить сборку и тесты,
посмотреть зависимости в документации проекта.
---
+3 -3
View File
@@ -540,7 +540,7 @@ flowchart TD
### Готовые SQL-скрипты
Все необходимые скрипты для построения хранилища находятся в папке [`sql/`](https://git.dementev.space/ddmitry/de-roadmap/src/branch/main/dwh-modeling/sql):
Все необходимые скрипты для построения хранилища находятся в папке [`sql/`](https://github.com/dementev-dev/de-roadmap/tree/main/dwh-modeling/sql):
- [`01_ddl_stg-dds.sql`](sql/01_ddl_stg-dds.sql) — создание схем и таблиц (STG, ODS, DDS);
- [`02_dml_stg-dds.sql`](sql/02_dml_stg-dds.sql) — первичная загрузка данных и демонстрация SCD2 через полный пересчёт (`full backfill`) из STG;
@@ -791,7 +791,7 @@ SELECT 'OK' WHERE EXISTS (
### Мини-датасет (для практики)
Все данные для практики находятся в папке [`data/`](https://git.dementev.space/ddmitry/de-roadmap/src/branch/main/dwh-modeling/data) — тренируйтесь:
Все данные для практики находятся в папке [`data/`](https://github.com/dementev-dev/de-roadmap/tree/main/dwh-modeling/data) — тренируйтесь:
[`customers.csv`](data/customers.csv):
```csv
@@ -832,7 +832,7 @@ product_id,valid_from,valid_to,price
9002,2023-01-01,,50
```
> 📂 Все SQL-скрипты для построения хранилища находятся в папке [`sql/`](https://git.dementev.space/ddmitry/de-roadmap/src/branch/main/dwh-modeling/sql).
> 📂 Все SQL-скрипты для построения хранилища находятся в папке [`sql/`](https://github.com/dementev-dev/de-roadmap/tree/main/dwh-modeling/sql).
---
+6 -6
View File
@@ -1,10 +1,10 @@
site_name: "DE Roadmap — Data Engineering с нуля до middle"
site_url: https://de.dementev.space/
site_description: "Роадмап по Data Engineering: SQL, Python, Airflow, Greenplum и далее"
site_description: "Роадмап по Data Engineering: SQL, Python, Airflow, Greenplum, Kafka и ClickHouse"
site_author: Dmitry Dementev
repo_url: https://git.dementev.space/ddmitry/de-roadmap
repo_name: ddmitry/de-roadmap
repo_url: https://github.com/dementev-dev/de-roadmap
repo_name: dementev-dev/de-roadmap
docs_dir: .
site_dir: site
@@ -76,9 +76,9 @@ markdown_extensions:
extra:
social:
- icon: simple/gitea
link: https://git.dementev.space/ddmitry/de-roadmap
name: Gitea
- icon: fontawesome/brands/github
link: https://github.com/dementev-dev/de-roadmap
name: GitHub
- icon: fontawesome/brands/telegram
link: https://t.me/dementev_dev
name: Написать в Telegram
+7 -4
View File
@@ -8,10 +8,13 @@
### Текущее состояние
Роадмап по Data Engineering живёт как Git-репозиторий. Основной origin
размещён в собственной Gitea
([ddmitry/de-roadmap](https://git.dementev.space/ddmitry/de-roadmap)), а
GitHub Pages сохраняется как резерв после восстановления доступа к GitHub:
Роадмап по Data Engineering живет как Git-репозиторий. Основной origin
и работа над материалами остаются в собственной Gitea
([ddmitry/de-roadmap](https://git.dementev.space/ddmitry/de-roadmap)).
После восстановления аккаунта GitHub изменения зеркалируются туда средствами
Gitea. Ссылки для менти ведут на [GitHub](https://github.com/dementev-dev/de-roadmap),
откуда удобно клонировать стенды и делать свои форки. Сайт по-прежнему
публикуется через Gitea Actions на VPS; GitHub Pages сохраняется как резерв.
- Основной контент — монолитный `README.md` (~700 строк) с полным учебным планом.
- Дополнительные материалы — в подпапках (`dwh-modeling/`, `postgres-bookings/`): теория DWH-моделирования, SCD, Data Vault, домашние задания, скрипты.
+27
View File
@@ -2,8 +2,25 @@
Приоритеты: P1 — делаем в первую очередь; P2 — полезно, когда дойдут руки; P3 — идеи под вопросом.
## P1
- [ ] **Проверить синхронизацию GitHub-зеркала `airflow-greenplum`.**
Проверка через `git ls-remote` 2026-09-27: GitHub отстает от Gitea
на коммит `4ed7e6f`, меняющий только `docs/agents/triage-labels.md`.
Учебные материалы совпадают. У `airflow-manual`, `mini-lakehouse-lab`
и `de-roadmap` ветки `main` в Gitea и GitHub совпали; прежнее подозрение
об их отставании по ответам API не подтвердилось.
## P2
- [ ] **Дополнить практику Kafka перед Clickstream.**
В `nifi-kafka-postgres-lab` добавить опыты на существующем потоке:
остановить потребителя и дочитать накопившиеся сообщения; прочитать
события двумя независимыми consumer groups; повторить чтение и проверить
дубли в PostgreSQL. Для каждого опыта описать исходное состояние,
действия и проверку результата. Идея согласована 2026-09-27;
реализация в репозитории стенда еще не начата.
- [ ] **Перенос учебника Airflow в de-roadmap.**
Перенести 9 глав учебника из `airflow-manual` в `airflow/` (de-roadmap).
В `airflow-manual` оставить только стенд (`airflow-docker/`).
@@ -39,6 +56,16 @@
## Сделано
- [x] **Актуализация маршрута и учебных ссылок** - 2026-09-27:
ссылки на стенды, SQL и данные, кнопки репозитория на сайте возвращены
на GitHub; рабочий origin и публикация сайта остаются в Gitea.
Streaming и ClickHouse включены в основную программу перед трудоустройством,
`clickstream-data-platform` стал второй, большой курсовой с критериями
прохождения. Ссылка на курс ClickHouse для аналитика удалена.
venv и JupyterLab перенесены перед курсом Python для продвинутых;
в альтернативу курсу для профи добавлены материалы по управлению памятью
и критерий проверки понимания.
- [x] **Публикация сайта перенесена на Gitea Actions и VPS** —
2026-08-05: настроены repository-scoped host runner, строгая сборка MkDocs,
атомарные релизы, nginx и TLS для `de.dementev.space`; GitHub Pages сохранён
@@ -1,7 +1,8 @@
# Публикация сайта через Gitea Actions и VPS
Статус: реализовано 2026-08-05; механизм синхронизации GitHub-резерва требует
отдельного решения после восстановления доступа к GitHub. Инструкции по
Статус: публикация на VPS реализована 2026-08-05. После восстановления
доступа к GitHub выбран встроенный push mirror Gitea для синхронизации
репозиториев; рабочий origin остается в Gitea. Инструкции по
восстановлению и эксплуатации находятся в
[`project/ops/gitea-vps-site/README.md`](../ops/gitea-vps-site/README.md).
@@ -66,7 +67,11 @@ TLS-сертификат для `de.dementev.space` получает и прод
### Резерв на GitHub Pages
После восстановления доступа к GitHub существующий GitHub workflow продолжает собирать сайт из GitHub-репозитория. Чтобы резерв оставался актуальным, изменения из основной Gitea должны автоматически синхронизироваться с GitHub. Предпочтительный кандидат — встроенный Gitea push mirror; окончательный механизм и его права будут согласованы отдельно после восстановления учётной записи. Резерв доступен по стандартному адресу GitHub Pages, но основной домен направлен на VPS.
Изменения из основной Gitea передаются на GitHub встроенным push mirror.
Ссылки для учащихся ведут на GitHub-зеркала, основной домен остается на VPS.
Workflow в `.github/workflows/deploy-site.yml` сохранен для резервной
публикации. Перед использованием резерва нужно проверить настройки Pages
и успешный деплой: наличие зеркала репозитория само по себе этого не подтверждает.
GitHub Pages считается тёплым резервом контента и холодным резервом домена. При отказе VPS владелец вручную переключает DNS и при необходимости повторно активирует custom domain в настройках GitHub Pages. Допустимы задержка распространения DNS и ожидание выпуска TLS-сертификата; автоматический failover не требуется.
@@ -87,10 +92,10 @@ GitHub Pages считается тёплым резервом контента
| Ошибка сборки ломает опубликованный сайт | Сборка в отдельной версии и атомарное переключение только после успеха |
| Сторонний action выполняет неожиданный код | Workflow состоит из собственных команд и не использует `uses:` |
| Gitea временно недоступна | Уже опубликованный сайт обслуживается независимо от Gitea |
| VPS недоступна или потеряна | Исходники остаются в Gitea; GitHub Pages служит ручным резервом после восстановления GitHub |
| VPS недоступна или потеряна | Исходники остаются в Gitea; GitHub Pages служит ручным резервом после проверки резервной публикации |
| После переключения DNS HTTPS ещё не готов | DNS TTL уменьшается заранее; Certbot запускается сразу после подтверждения публичного HTTP; короткий перерыв принят как допустимый |
| Сертификат GitHub Pages не готов во время аварии | Допускается задержка; на время восстановления используется стандартный адрес GitHub Pages |
| GitHub-резерв отстаёт от Gitea | После восстановления GitHub настраивается автоматическая синхронизация; до выбора механизма резерв не считается тёплым |
| GitHub-резерв отстает от Gitea | Проверяем результат push mirror, совпадение коммитов и резервную сборку; до успешной проверки резерв не считается готовым |
## Проверка реализации
@@ -109,8 +114,13 @@ GitHub Pages считается тёплым резервом контента
Эта спецификация заменяет решения о публикации и custom domain из `project/ADR.md`. Решения того документа о MkDocs Material, структуре файлов и dual-compatible links остаются актуальными.
После реализации нужно обновить `AGENTS.md`, `project/PRD.md` и `project/TODO.md`, чтобы они описывали фактический основной контур публикации. Ссылку на исходный репозиторий в `mkdocs.yml` следует направить на Gitea; ссылку на GitHub можно сохранить как дополнительную после восстановления доступа.
Документация проекта описывает Gitea Actions и VPS как основной контур
публикации. Ссылки репозитория в `mkdocs.yml` направлены на GitHub для менти;
рабочий origin остается в Gitea.
## Открытый вопрос
## Синхронизация GitHub
После восстановления GitHub нужно окончательно выбрать способ автоматической синхронизации резервного репозитория. Базовый кандидат — Gitea push mirror с синхронизацией при каждом push; GitHub при этом становится read-only зеркалом, поскольку mirror перезаписывает расходящиеся изменения.
Способ синхронизации выбран: встроенный Gitea push mirror. Рабочие изменения
вносятся в Gitea, GitHub используется как зеркало для чтения и создания
учебных форков. Нужно отдельно проверить работу зеркал всех стендов и
готовность резервной публикации Pages.