From e78d5a1a35966b0f1f8a61c91412f06b518ca5a5 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sat, 14 Mar 2026 19:55:03 +0300 Subject: [PATCH 1/2] =?UTF-8?q?docs(readme):=20=D1=80=D0=B5=D0=BE=D1=80?= =?UTF-8?q?=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D0=B5=D0=BA=D1=86=D0=B8=D1=8F=20Greenplum=20=D0=B8=20?= =?UTF-8?q?=D0=BA=D1=83=D1=80=D1=81=D0=BE=D0=B2=D0=BE=D0=B9=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - упрощение роадмапа: курсовая и практика Greenplum теперь используют один стенд. - Что: - курс Yandex по Greenplum выделен как основной. - практика по Greenplum привязана к стенду airflow-dwh-gp-lab. - курсовая работа переписана под использование того же стенда. - добавлено описание эталонного DWH и автоматической проверки. - удалена секция "Стенд в Docker Compose" из оглавления. - Проверка: - git diff HEAD~1 README.md. --- README.md | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index ad4ef50..7734778 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,6 @@ - [Фундаментальная теория](#фундаментальная-теория) - [Знакомство с Greenplum](#знакомство-с-greenplum) - [Курсовая работа](#курсовая-работа) - - [Стенд в Docker Compose](#стенд-в-docker-compose) - [Понятие сложности алгоритмов](#понятие-сложности-алгоритмов) - [Карьера и менторство](#карьера-и-менторство) - [Менторство по этому роадмапу](#менторство-по-этому-роадмапу) @@ -308,40 +307,42 @@ Apache Airflow — инструмент для оркестрации ETL-про - Зачем: Это объясняет, почему Greenplum устроен именно так. Без этого вы будете пытаться работать с ним как с обычным Postgres. ### Знакомство с Greenplum -Теперь, понимая теорию, смотрим, как это реализовано в конкретном инструменте.- Простое введение: [Greenplum | Что это такое и как оно работает? - Youtube](https://www.youtube.com/watch?v=rLG9Z_HcKPY) +Теперь, понимая теорию, смотрим, как это реализовано в конкретном инструменте. + +- Простое введение: [Greenplum | Что это такое и как оно работает? - Youtube](https://www.youtube.com/watch?v=rLG9Z_HcKPY) - Оно же, но текстом: https://halltape.github.io/HalltapeRoadmapDE/GREENPLUM/ - [Визуализатор распределения Greenplum](https://gpskew.rzvde.pro/) -- Бесплатный, но большой учебный курс от Yandex: https://yandex.cloud/ru/training/greenplum -- [Учебный курс по Greenplum от datafinder](https://datafinder.ru/products/uchebnyy-kurs-po-greenplum) — взять только отдельные главы. -Практика: -- [DE Starter Kit — Airflow + Greenplum + CSV](https://github.com/dementev-dev/airflow-greenplum) +**Курс Yandex по Greenplum** — основной учебный курс, рекомендуется пройти целиком: +- [Бесплатный курс Yandex Cloud по Greenplum](https://yandex.cloud/ru/training/greenplum) +- Практику по курсу удобно делать на стенде [airflow-dwh-gp-lab](https://github.com/dementev-dev/airflow-greenplum) — `make up` поднимает рабочий Greenplum с PXF, не нужен облачный кластер. +- Стенд покрывает основные темы курса: типы таблиц (heap / appendonly), политики дистрибуции, сжатие, PXF, анализ планов выполнения (`EXPLAIN`). +- Единственное ограничение: cloud-специфичные темы (тема 2 курса — развёртывание в Yandex Cloud) на локальном стенде не покрыты. -Сложные варианты с виртуалками — только если менти сильно захочет, в базовый путь не включаем. +Дополнительно: +- [Учебный курс по Greenplum от datafinder](https://datafinder.ru/products/uchebnyy-kurs-po-greenplum) — отдельные главы для углубления. **Когда блок Greenplum считаем пройденным:** - вы понимаете, как данные распределяются по сегментам, что такое skew и как его увидеть; -- на базе учебного стенда (например, DE Starter Kit) можете загружать и выгружать данные в Greenplum, выполнять запросы и разбирать планы выполнения (`EXPLAIN`); +- на базе стенда `airflow-dwh-gp-lab` можете загружать и выгружать данные в Greenplum, выполнять запросы и разбирать планы выполнения (`EXPLAIN`); - можете объяснить, в чём практическая разница между MPP-хранилищем и одиночным Postgres на уровне типичных задач DE и собеседований. ## Курсовая работа -К финалу роадмапа мы собираем небольшую end-to-end курсовую работу — свой первый «боеподобный» data-проект. +Курсовая работа — важный майлстоун роадмапа: ваш первый end-to-end data-проект. После неё у вас есть ключевые технические навыки для старта карьеры в Data Engineering. -### Стенд в Docker Compose -- Apache Airflow — оркестратор; - - источник данных — TelecomX (или аналогичный открытый датасет); -- Greenplum — основное хранилище; -- вспомогательный Postgres (по желанию); -- ETL-скрипты и DAG'и; -- исходные коды всего — в отдельном Git-репозитории. +Курсовая выполняется на том же стенде [airflow-dwh-gp-lab](https://github.com/dementev-dev/airflow-greenplum), который вы уже использовали для практики по Greenplum. -В качестве альтернативы файловому источнику можно использовать генератор данных для демо-базы `bookings` от Postgres Pro: https://github.com/postgrespro/demodb. -Его удобнее всего встроить в стенд DE Starter Kit (Airflow + Greenplum) как отдельный сервис Postgres с регулярно генерируемыми данными и уже оттуда забирать их в Greenplum (в том числе через PXF, если хочется усложнить архитектуру). +**Что внутри:** +- Стенд содержит DWH с реализованным эталонным срезом (STG → ODS → DDS → DM) — это ваш образец для подражания. +- Задача — довести DWH до полного, реализовав недостающие загрузки по аналогии с эталоном. +- Есть готовый план от аналитика (ТЗ с маппингами и бизнес-правилами) — не нужно придумывать, что делать. +- Встроенная автоматическая проверка реализации поможет убедиться в корректности до проверки ментором. +- Ветка `main` — рабочая (с заготовками для реализации), ветка `solution` — эталон для сверки. **Когда блок курсовой работы считаем пройденным:** -- у вас есть отдельный репозиторий с docker-compose, DAG'ами Airflow, SQL-скриптами и README по проекту; -- стенд поднимается локально, DAG'и успешно прогоняются на тестовых данных от загрузки сырья до витрин; -- вы можете на собеседовании за 5–10 минут рассказать архитектуру курсового проекта, его цели и показать ключевые части кода. +- все загрузки реализованы, DWH заполняется полностью (STG → ODS → DDS → DM); +- автоматическая проверка (валидационный DAG) проходит без ошибок; +- вы можете на собеседовании за 5–10 минут рассказать архитектуру проекта, его цели и показать ключевые части кода. ## Понятие сложности алгоритмов В Data Engineering редко требуется писать сложные алгоритмы, но важно понимать, как оценивать эффективность кода: From 515fa6a5de697103e5ce1b13c553bbf889b8da49 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sat, 14 Mar 2026 22:04:45 +0300 Subject: [PATCH 2/2] =?UTF-8?q?docs(readme):=20=D0=B4=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=D0=BD=20=D1=80=D0=BE=D0=B0=D0=B4=D0=BC?= =?UTF-8?q?=D0=B0=D0=BF=20=E2=80=94=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=81=D0=B5=D0=BA=D1=86=D0=B8=D0=B8,=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=81=D1=81=D1=8B?= =?UTF-8?q?=D0=BB=D0=BA=D0=B8,=20=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=B3=D0=BB=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - убраны мёртвые и архивные ссылки на чужой форк (HalltapeRoadmapDE), наполнены пустые секции, добавлены недостающие темы - Что: - оглавление упрощено до H1/H2, убран self-link - исправлен casing GreenPlum → Greenplum - убраны 4 архивные ссылки на HalltapeRoadmapDE (Greenplum, DWH, Spark, dbt) - добавлена подсекция venv перед Jupyter Lab в формате буллет-группы - NiFi и Kafka объединены в секцию «Streaming (NiFi + Kafka)» с единым стендом nifi-kafka-postgres-lab - добавлена preview-секция «Lakehouse (Spark, Iceberg, Trino)» с русскоязычным видео и стендом mini-lakehouse-lab - секция dbt наполнена: quickstart, перевод документации, практика с jaffle-shop - обновлены вводный текст и критерии прохождения блока «Расширенные навыки» - Проверка: - визуально проверить рендеринг якорей оглавления в GitHub Co-Authored-By: Claude Opus 4.6 --- README.md | 98 ++++++++++++++++++++----------------------------------- 1 file changed, 35 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 7734778..9d34608 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Этот роадмап — конспект моих подходов к обучению Data Engineering. Он подойдёт тем, кто хочет: - системно войти в профессию с нуля или близкого к нулю уровня; -- закрыть пробелы в базе (SQL, Git, Python, DWH, Airflow, GreenPlum); +- закрыть пробелы в базе (SQL, Git, Python, DWH, Airflow, Greenplum); - подготовиться к собеседованиям и первым рабочим задачам. Роадмап можно проходить самостоятельно или вместе со мной в формате менторства. @@ -11,50 +11,12 @@ ## Оглавление -- [О роадмапе](#о-роадмапе) - - [Оглавление](#оглавление) -- [Основные знания](#основные-знания) - - [Git и базовые инструменты](#git-и-базовые-инструменты) - - [База по Git](#база-по-git) - - [Основы Markdown](#основы-markdown) - - [Базы данных: SQL и моделирование данных](#базы-данных-sql-и-моделирование-данных) - - [База по SQL](#база-по-sql) - - [Повышение знаний SQL](#повышение-знаний-sql) - - [Моделирование данных](#моделирование-данных) - - [Python](#python) - - [Методологии разработки](#методологии-разработки) - - [1. Основы и сравнение подходов](#1-основы-и-сравнение-подходов) - - [2. Agile: Философия гибкости](#2-agile-философия-гибкости) - - [3. Scrum (Скрам)](#3-scrum-скрам) - - [4. Kanban (Канбан)](#4-kanban-канбан) - - [Практика: Как это выглядит в жизни](#практика-как-это-выглядит-в-жизни) - - [1. Jira (Мировой стандарт)](#1-jira-мировой-стандарт) - - [2. Yandex Tracker (Российский стандарт)](#2-yandex-tracker-российский-стандарт) - - [Технические навыки](#технические-навыки) - - [Продвинутый Git](#продвинутый-git) - - [Docker](#docker) - - [Запись встреч](#запись-встреч) -- [Практика и инструменты](#практика-и-инструменты) - - [Airflow](#airflow) - - [Greenplum](#greenplum) - - [Фундаментальная теория](#фундаментальная-теория) - - [Знакомство с Greenplum](#знакомство-с-greenplum) - - [Курсовая работа](#курсовая-работа) - - [Понятие сложности алгоритмов](#понятие-сложности-алгоритмов) -- [Карьера и менторство](#карьера-и-менторство) - - [Менторство по этому роадмапу](#менторство-по-этому-роадмапу) - - [Подготовка к собеседованиям](#подготовка-к-собеседованиям) - - [Помощь в подготовке резюме](#помощь-в-подготовке-резюме) - - [Навыки поиска работы с HH и Habr карьера](#навыки-поиска-работы-с-hh-и-habr-карьера) - - [Помощь с прохождением испытательного срока](#помощь-с-прохождением-испытательного-срока) -- [Расширенные навыки](#расширенные-навыки) - - [ClickHouse](#clickhouse) - - [NiFi](#nifi) - - [Kafka](#kafka) - - [dbt](#dbt) +- [Основные знания](#основные-знания) — Git, SQL, Python, методологии, Docker +- [Практика и инструменты](#практика-и-инструменты) — Airflow, Greenplum, курсовая работа +- [Карьера и менторство](#карьера-и-менторство) — резюме, собеседования, испытательный срок +- [Расширенные навыки](#расширенные-навыки) — ClickHouse, Streaming, Lakehouse, dbt - [Софт скиллы](#софт-скиллы) - [Дополнительные материалы](#дополнительные-материалы) - - [Записи ОМ](#записи-ом) Рекомендуемый способ использования: - двигаться по разделам последовательно, не перепрыгивая через базу; @@ -116,7 +78,7 @@ SQL и моделирование данных специально идут р - Глава 9 - Транзакции - Глава 10 - Повышение производительности + ДЗ -Вопросы оптимизации запросов хорошо описаны в курсе [QPT](https://postgrespro.ru/education/courses/QPT) от Postgres Pro. Полученные навыки применимы для работы в том числе с GreenPlum, и частично, другими БД. +Вопросы оптимизации запросов хорошо описаны в курсе [QPT](https://postgrespro.ru/education/courses/QPT) от Postgres Pro. Полученные навыки применимы для работы в том числе с Greenplum, и частично, другими БД. На момент написания, видеолекции были доступны только для старой версии Postgres 13, но ее вполне достаточно. ### Моделирование данных @@ -144,7 +106,6 @@ SQL и моделирование данных специально идут р - [Гибкие методологии проектирования Data Vault и Anchor Modeling | Евгений Ермаков | karpov.courses](https://www.youtube.com/watch?v=fNGIOb8SJvU) - Лекция в рамках курса по DWH: именно [«Основы Data Vault, создаем первую модель»](https://www.youtube.com/watch?v=65b99XCuiR4) — хороший формат: теория + пример. - Доклад - практический пример: [Денис Лукьянов — Data Vault 2.0. Когда внедрять, проблемы применения при построении DWH на Greenplum](https://www.youtube.com/watch?v=oGwQbeP5iss) -- Краткая теория про [DWH](https://halltape.github.io/HalltapeRoadmapDE/DWH/) - повторим еще раз, в другом изложении - Хорошее общее введение в модели данных дано в статье и докладе от Yandex: [Как мы внедрили свою модель хранения данных — highly Normalized hybrid Model. Доклад Яндекса](https://habr.com/ru/companies/yandex/articles/557140/) **Когда блок «Базы данных» считаем пройденным:** @@ -170,6 +131,9 @@ 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/) - Готовая реализация Jupyter Lab, включающая в себя Spark, в Docker: https://github.com/dementev-dev/jupyter-spark-docker @@ -180,7 +144,6 @@ SQL и моделирование данных специально идут р - [Хабр (RUVDS): «Моя шпаргалка по pandas»](https://habr.com/ru/companies/ruvds/articles/494720/) - [Tproger: «Наглядная шпаргалка по операциям с DataFrame»](https://tproger.ru/articles/pandas-data-wrangling-cheatsheet) - Полезно, но дороговато и не обязательно: хорошее комбо SQL + Python — ["Поколение Python": профи + ООП + SQL – Stepik](https://stepik.org/course/233341/promo?search=7181036958) Цель — уверенно решать простые задачи на Python в формате live-coding; дальше эти навыки пригодятся для создания DAG Airflow. @@ -310,7 +273,6 @@ Apache Airflow — инструмент для оркестрации ETL-про Теперь, понимая теорию, смотрим, как это реализовано в конкретном инструменте. - Простое введение: [Greenplum | Что это такое и как оно работает? - Youtube](https://www.youtube.com/watch?v=rLG9Z_HcKPY) -- Оно же, но текстом: https://halltape.github.io/HalltapeRoadmapDE/GREENPLUM/ - [Визуализатор распределения Greenplum](https://gpskew.rzvde.pro/) **Курс Yandex по Greenplum** — основной учебный курс, рекомендуется пройти целиком: @@ -412,41 +374,51 @@ Apache Airflow — инструмент для оркестрации ETL-про Мы кратко знакомимся с: -- **Apache NiFi** и **Kafka** — инструментами для построения потоковых и интеграционных пайплайнов; +- **Streaming** (NiFi + Kafka) — инструментами для построения потоковых и интеграционных пайплайнов; - **ClickHouse** — колоночной СУБД для высоконагруженной аналитики; +- **Lakehouse** (Spark, Iceberg, Trino) — архитектурой, построенной на разделении compute и storage; - **dbt** — подходом к трансформации данных как кода. -Практика ограничивается минимальным рабочим примером (например, запуск в Docker, простой пайплайн или SQL-модель). - +Практика ограничивается минимальным рабочим примером (запуск в Docker, простой пайплайн или SQL-модель). Этого достаточно, чтобы уверенно говорить об инструменте на собеседовании и понимать его место в архитектуре — а всё остальное при необходимости осваивается уже на проекте. ## ClickHouse Бесплатный курс https://yandex.cloud/ru/training/clickhouse Платный курс [ClickHouse для аналитика – Stepik](https://stepik.org/course/100210/promo?search=6551441002) -## NiFi -Плейлист [Apache NiFi с нуля за 3 часа. Конструктор вместо кода - Youtube](https://youtube.com/playlist?list=PL4MpKy3QjNp_rOEEibc4Ro8UK4g8vLX6_&si=W_hidjHmBOZ_aUfS) — первые 4 видео, дальше — по желанию. +## Streaming (NiFi + Kafka) +NiFi — визуальный конструктор потоков данных, Kafka — распределённая очередь сообщений. Вместе они закрывают типичный сценарий: принять данные, буферизовать, доставить в хранилище. -Практика: -- собираем отдельный стенд в Docker Compose с Postgres и NiFi; -- в NiFi настраиваем простой генератор данных. +Материалы: +- [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) -## Kafka -[Лучший Гайд по 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. -Практика: -- расширяем предыдущий стенд, добавляя Kafka; -- строим поток данных: NiFi → Kafka; -- добавляем обратный поток: Kafka → NiFi → Postgres. +## Lakehouse (Spark, Iceberg, Trino) + +> Секция в разработке. Lakehouse — отдельное направление в DE, построенное на разделении compute и storage, открытых табличных форматах (Iceberg, Delta) и движках распределённой обработки (Spark, Trino). Этот роадмап фокусируется на классическом DWH-стеке, поэтому полноценный блок пока не готов — ниже только отправные точки для самостоятельного изучения. + +- [DataLearn: «Что такое Apache Spark»](https://youtu.be/Tl9YzC-dQLI) — введение в Spark с нуля, ~40 минут +- Стенд для экспериментов: [mini-lakehouse-lab](https://github.com/dementev-dev/mini-lakehouse-lab) (Spark + Iceberg + Trino + MinIO) ## dbt dbt (data build tool) — инструмент для трансформации данных в хранилище. Мы рассматриваем его как альтернативу «ручному» написанию сложных CTE и для понимания современного подхода к моделированию данных как кода. +Материалы: +- [dbt quickstart (официальный гайд)](https://docs.getdbt.com/guides/manual-install?step=1) +- [Перевод документации dbt на русский](https://docs.getdbt.tech/) + +Практика: +- Клонировать [jaffle-shop](https://github.com/dbt-labs/jaffle-shop), установить dbt-duckdb, прогнать `dbt build`, `dbt test`, `dbt docs generate && dbt docs serve` — этого достаточно, чтобы увидеть весь цикл. + **Когда блок расширенных навыков считаем пройденным:** -- вы можете на собеседовании кратко объяснить, когда уместны NiFi/Kafka, ClickHouse и dbt, и чем они дополняют базовый стек (Postgres, Airflow, Greenplum); -- понимаете типичные сценарии: потоковые интеграции и очереди (Kafka/NiFi), аналитические витрины и отчёты на ClickHouse, трансформации данных в dbt; +- вы можете на собеседовании кратко объяснить, когда уместны Streaming (NiFi/Kafka), ClickHouse, Lakehouse-стек и dbt, и чем они дополняют базовый стек (Postgres, Airflow, Greenplum); +- понимаете типичные сценарии: потоковые интеграции и очереди (NiFi + Kafka), аналитические витрины и отчёты на ClickHouse, Lakehouse-архитектура (Spark/Iceberg/Trino), трансформации данных как код (dbt); - не боитесь увидеть эти инструменты в описании вакансии и можете поддержать содержательный разговор об их месте в архитектуре. ---