## О роадмапе Этот роадмап — конспект моих подходов к обучению Data Engineering. Он подойдёт тем, кто хочет: - системно войти в профессию с нуля или близкого к нулю уровня; - закрыть пробелы в базе (SQL, Git, Python, DWH, Airflow, Greenplum, Kafka, ClickHouse); - подготовиться к собеседованиям и первым рабочим задачам. Роадмап можно проходить самостоятельно или вместе со мной в формате менторства. Если хотите идти с поддержкой ментора — напишите в Telegram: [@dementev_dev](https://t.me/dementev_dev). ### Оглавление - [Основные знания](#основные-знания) — Linux, Git, SQL, Python, методологии, Docker - [Практика и инструменты](#практика-и-инструменты) - Airflow, Greenplum, Streaming, ClickHouse, две курсовые - [Карьера и менторство](#карьера-и-менторство) — резюме, собеседования, испытательный срок - [Расширенные навыки](#расширенные-навыки) - Lakehouse, dbt - [Софт скиллы](#софт-скиллы) - [Дополнительные материалы](#дополнительные-материалы) Рекомендуемый способ использования: - двигаться по разделам последовательно, не перепрыгивая через базу; - выполнять практику и домашки, а не только смотреть материалы; - возвращаться к разделам по мере появления реальных задач. Основная программа включает две курсовые: сначала хранилище на Greenplum, затем [Clickstream на ClickHouse](#большая-курсовая-clickstream). Streaming и ClickHouse входят в обязательную часть подготовки к трудоустройству. Lakehouse и dbt можно изучать после нее, под задачи и интересующие вакансии. --- ## Основные знания [[к оглавлению]](#оглавление) ### Git и базовые инструменты #### Linux и терминал Командная строка — рабочее место дата-инженера: docker, psql, git, подключение к серверам живут именно там. Отдельная практика не нужна — все стенды этого роадмапа консольные, команды закрепятся сами. На Windows поставьте [WSL](https://learn.microsoft.com/ru-ru/windows/wsl/install) — полноценный Linux внутри Windows. - [Основы Linux для начинающих за 1.5 часа - Youtube](https://www.youtube.com/watch?v=Be6tB59b7D0) — что такое терминал, навигация, файлы, права, ssh: мягкий вход перед статьями - [Linux: Файлы, навигация и поиск - Habr](https://habr.com/ru/articles/1003550/) — перемещение по каталогам, чтение файлов и логов: less, tail, grep - [Права доступа к файлам и папкам в Linux - FirstVDS](https://firstvds.ru/technology/linux-permissions) — rwx, chmod, chown - [SSH для начинающих - Cloud.ru](https://cloud.ru/blog/ssh-dlya-nachinayuschikh) — подключение к удалённой машине - [Основы командной строки - Hexlet](https://ru.hexlet.io/programs/cli-basics) — опционально: бесплатный интерактивный курс с терминалом прямо в браузере; достаточно уроков про навигацию, grep и права доступа #### База по Git Что такое контроль версий, когда используется, ПОЧЕМУ и как мы в обучении будем использовать. Как создать репозиторий на GitHub, сохранять в нем изменения. - [Что такое Git для Начинающих / GitHub за 30 минут / Git Уроки - Youtube](https://www.youtube.com/watch?v=VJm_AjiTEEc) - [Git: Конфликты для Начинающих // Git Cherry Pick, Git Revert, Git Reset - Youtube](https://www.youtube.com/watch?v=F7FnnfnB9YY) - Книга [Pro Git](https://git-scm.com/book/ru/v2) - читать главу 1 #### Основы Markdown - [Язык Markdown и файл README | Git и GitHub для начинающих - Youtube](https://www.youtube.com/watch?v=8lEDTrr-G4U) - [Markdown и его возможности: простой способ оформления текста](https://kurshub.ru/journal/blog/markdown-chto-eto/) - [Синтаксис Markdown: подробная шпаргалка для веб-разработчиков / Skillbox Media](https://skillbox.ru/media/code/yazyk-razmetki-markdown-shpargalka-po-sintaksisu-s-primerami/) Домашки по остальным темам тренируемся делать в Git, там же пишем документацию. **Когда блок Git и базовые инструменты считаем пройденным:** - ориентируетесь в терминале: перемещаетесь по каталогам и находите нужное в логах (grep, tail, less); - понимаете права файлов (rwx, chmod) и знаете, как подключиться к серверу по ssh; - вы уверенно создаёте репозиторий, коммитите изменения и отправляете их на GitHub; - имеете представление о работе с ветками: создание, переключение, что такое merge/PR и разруливание простых конфликтов; - оформляете базовую документацию в Markdown (README, заголовки, списки, ссылки, кодовые блоки). ### Базы данных: SQL и моделирование данных SQL и моделирование данных специально идут рядом: сначала учимся уверенно извлекать данные запросами, затем — понимать и проектировать структуру данных, чтобы ETL/витрины были осмысленными. #### База по SQL Книга: [PostgreSQL. Основы языка SQL](https://postgrespro.ru/education/books/sqlprimer) - Глава 1 "Введение в базы данных и SQL" + ДЗ Бесплатный тренажер: [Интерактивный тренажер по SQL – Stepik](https://stepik.org/course/63054/promo) Целевой уровень знания SQL - Live кодинг на собесе. Проверяем на первом мок-интервью **CTE** - Зачем нам CTE: [Getting started with CTEs | dbt Labs](https://www.getdbt.com/blog/getting-started-with-cte) - Подробнее про синтаксис: [PostgreSQL : Документация: 17: 7.8. Запросы WITH (Общие табличные выражения) : Компания Postgres Professional](https://postgrespro.ru/docs/postgresql/17/queries-with) Для дальнейшей тренировки и поддержания уровня можно использовать [Database - LeetCode](https://leetcode.com/problem-list/database/). Хорошая подборка задачек: [SQL 50 - Study Plan - LeetCode](https://leetcode.com/studyplan/top-sql-50/) #### Повышение знаний 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" можно ознакомиться обзорно. Для дальнейшего закрепления материала - читаем книгу [PostgreSQL. Основы языка SQL](https://postgrespro.ru/education/books/sqlprimer) - Глава 8 - Индексы + ДЗ - Глава 9 - Транзакции - Глава 10 - Повышение производительности + ДЗ Вопросы оптимизации запросов хорошо описаны в курсе [QPT](https://postgrespro.ru/education/courses/QPT) от Postgres Pro. Полученные навыки применимы для работы в том числе с Greenplum, и частично, другими БД. На странице курса выбирайте материалы и видеозаписи для PostgreSQL 16. #### Моделирование данных Понимание того, **как устроены данные и зачем они нужны**, — ключ к качественным ETL-процессам. Мы кратко разбираем: - Основные подходы: нормализованные (3NF) vs денормализованные (звезда, снежинка) - Что такое staging, marts, слои raw / clean / business - Как проектировать таблицы под конкретные сценарии использования Цель — не стать архитектором, а **уметь читать и объяснять структуру данных**, чтобы писать осмысленные запросы и трансформации. Материалы (включая демо DWH-модель из этого репозитория): - Мартин Клеппман — «Высоконагруженные приложения» - Глава 2: Модели данных и языки запросов. - Для понимания, чем реляционная модель (SQL) отличается от документной (NoSQL) и графовой, и почему для аналитики мы всё ещё любим таблицы (Важно: не перепутайте главу 2 с Частью 2 про распределенные данные!). - [Яндекс Практикум: что такое нормализация, простыми словами (для самых начинающих)](https://practicum.yandex.ru/blog/chto-takoe-normalizaciya-dannyh/) - [Базы данных. 1,2,3 нормальные формы. - Youtube](https://www.youtube.com/watch?v=zwQzL80U51c) - [Введение в структуру хранилища данных](dwh-modeling/README.md) - Теория про 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 и 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/) — обзор, плюсы/минусы, контекст применения. - [Гибкие методологии проектирования 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) - Хорошее общее введение в модели данных дано в статье и докладе от Yandex: [Как мы внедрили свою модель хранения данных — highly Normalized hybrid Model. Доклад Яндекса](https://habr.com/ru/companies/yandex/articles/557140/) **Когда блок «Базы данных» считаем пройденным:** - вы уверенно пишете запросы с JOIN, агрегатами, подзапросами и CTE; - можете подробно объяснить план запроса в Postgres, понимаете где планировщик отработал корректно, а где - есть возможность улучшить; - можете объяснить простую модель данных (3NF/звезда) и прочитать схему DWH; - решаете типовые задачи уровня SQL live-coding без долгих пауз. ### Python Если совсем не знакомы с 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²) на собеседованиях и в коде - ООП - [Tproger: «ООП простыми словами»](https://tproger.ru/experts/oop-in-simple-words) - Введение в [ООП](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/) - 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/) - [Official: “10 minutes to pandas”](https://pandas.pydata.org/docs/user_guide/10min.html) - [Хабр (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. **Когда блок Python считаем пройденным:** - создаете venv, устанавливаете в него пакеты и запускаете JupyterLab; можете повторить вычисления в ноутбуке после перезапуска ядра; - вы без подсказок пишете небольшие скрипты с циклами, функциями, обработкой ошибок и работой с коллекциями; - умеете читать и модифицировать чужой код, в том числе с использованием pandas и DataFrame; - уверенно проходите простой live-coding по Python для DE: прочитать CSV/JSON, отфильтровать, сгруппировать данные и посчитать агрегаты. - можете отвечать как на простые вопросы собеседований (циклы, списки, словари), так и продвинутые (итераторы, декораторы, базовые понятия ООП); - на примере со списком объясняете разницу между объектом и ссылкой на него, почему `del` одного имени не обязательно уничтожает объект и зачем CPython нужен сборщик циклического мусора. ### Методологии разработки > **Зачем это разработчику?** > 1. **Работа в команде.** Вам нужно понимать «правила игры». Почему задачи двигаются именно так? Зачем мы встречаемся каждое утро на 15 минут? Почему нельзя просто взять задачу из середины списка? > 2. **Собеседование и «легенда».** Когда вас спросят: «Как строилась работа в вашей прошлой команде?», вы должны ответить грамотно. Использование правильной терминологии (спринты, груминг, ретроспектива, WIP-лимиты) — это маркер профессионализма. Это показывает, что вы не просто писали код в вакууме, а были частью налаженного процесса. #### 1. Основы и сравнение подходов Для начала нужно понять глобальную разницу между жестким планированием (Waterfall) и гибкой разработкой (Agile). - [Waterfall или Agile, Scrum или Kanban: что выбрать](https://habr.com/ru/companies/kaiten/articles/906006/) — *Базовая статья. Читать внимательно, закрывает вопросы и по Waterfall, и по выбору пути.* - [Agile, Scrum, Kanban - обзор, отличия, мифы](https://www.youtube.com/watch?v=LhA5aWjHTJw) — *Видео для закрепления. Помогает разложить кашу в голове по полочкам.* #### 2. Agile: Философия гибкости Agile — это не метод, а философия. Scrum и Kanban — это инструменты этой философии. - [Scrum vs Kanban: отличия и разница Agile методов](https://kaiten.ru/blog/kanban-vs-scrum/) — *Сравнение двух главных фреймворков. Важно понять, где заканчивается один и начинается другой.* #### 3. Scrum (Скрам) Используется, когда мы создаем продукт и работаем спринтами (циклами). *Часто встречается в продуктовых командах, где DE работает в связке с Backend/Frontend.* - [Методология Scrum: принципы, ценности, этапы](https://kaiten.ru/blog/chto-takoie-scrum-i-kak-ispolzovat/) #### 4. Kanban (Канбан) Используется для управления потоком задач и поддержки. *Наиболее популярен в Data Engineering и DevOps, так как данные поступают непрерывно, и их сложно «запереть» в двухнедельный спринт.* - [Канбан: метод, инструменты и принципы](https://kaiten.ru/blog/cto-takoe-kanban/) #### Практика: Как это выглядит в жизни Теория — это хорошо, но на работе вы увидите конкретный интерфейс (Jira или Yandex Tracker). Важно понимать, куда нажимать и как двигать задачи. ##### 1. Jira (Мировой стандарт) Самый популярный инструмент. Скорее всего, вы столкнетесь именно с ним. * [Как работать с Jira на реальных проектах](https://www.youtube.com/watch?v=oPgm-fsHVfM) (15 мин) — *Отличное видео, где показывают базу: как создать задачу, как перетащить её по доске (Kanban) и что писать в комментариях. Смотреть с 04:00, где начинается практика.* * [Создание и настройка Scrum-досок в JIRA](https://www.youtube.com/watch?v=u-u8NRyApUs) — *Если хотите увидеть, как выглядит Спринт и Бэклог изнутри.* ##### 2. Yandex Tracker (Российский стандарт) Активно внедряется в крупных компаниях РФ. Логика та же, но интерфейс другой. * [Начало работы в Яндекс.Трекере](https://www.youtube.com/watch?v=pdlYiijjn70) (3 мин) — *Супер-короткий официальный гайд. За 3 минуты показывают всё: очереди, доски, карточки.* * [Настройка процесса разработки в Tracker](https://www.youtube.com/watch?v=EdKlYJR2ph0&t=397s) (c 06:37) — *Более глубокий разбор: как выглядит очередь задач разработчика и жизненный цикл тикета.* > **💡 Совет:** > Не бойтесь кнопок. Главное правило любого трекера: **«Взял задачу в работу — переведи статус в In Progress»**. Это сигнал команде, что вы заняты и вас лучше не отвлекать. **Когда блок «Методологии разработки» считаем пройденным:** - вы в общих чертах можете объяснить разницу Waterfall vs Agile и Scrum vs Kanban; - знаете основные мероприятия Scrum (planning / daily / review / retro) и что от вас ожидается на каждом; - умеете работать с трекером (Jira/Tracker): создать/уточнить задачу, взять в работу, корректно двигать статусы и оставлять понятные комментарии; - умеете своевременно сообщать о блокерах и уточнять требования, если задача «не бьётся» или в ней не хватает входных данных. ### Технические навыки #### Продвинутый Git - Сжатый, но емкий видеогайд: [GIT, GitHub, GitLab. Полный АКТУАЛЬНЫЙ гайд ЗА ПОЛТОРА ЧАСА. Без этого выгонят с работы - Youtube](https://www.youtube.com/watch?v=0Y-fneoUIO8) - Книга: [Pro Git](https://git-scm.com/book/ru/v2) - главы - 2 Основы Git - 3 Ветвление в Git - 5 Распределённый Git - 6 GitHub - [Курс работы с Git и GitLab - ЭФКО ЦПР | YouTube плейлист](https://www.youtube.com/playlist?list=PLbf8m52BvqlFlblJqQKPuEU26pwgqe7zK). Настоятельно рекомендую проделать за лектором все те действия что он показывает. Целевой уровень знания - понимание процесса GitFlow. Как создать ветку, влить изменения в другие ветки. Понимание, зачем. На собесах обычно не спрашивают, но нужно в работе. #### Docker - Курс [Docker от karpov.courses](https://karpov.courses/docker) Основное предназначение для нас - учебные стенды, где мы разбираем и тренируемся с разными технологиями. На работе - иногда пригождается. На собесах спрашивают редко. #### Запись встреч OBS Studio - Руководство по OBS: [OBS Studio - Настройка ОБС для Записи Игр и Стрима | Настройка Микрофона в Обс и т.д - Youtube](https://www.youtube.com/watch?v=bj8VEphZ65U) - [Как записывать собеседования](https://docs.google.com/document/d/1qd8uRYlAaZp9c5zpvCVBOvYQCEukGHI9PEPjnjahI1k/) **Когда блок технических навыков считаем пройденным:** - вы понимаете базовый GitFlow: как организована работа с ветками в команде и как ваши коммиты попадают в прод; - используете Docker для учебных стендов: запускаете контейнеры, смотрите логи и при необходимости перезапускаете сервисы; - при необходимости умеете настроить запись экрана/созвонов, чтобы сохранять материалы обучения. --- ## Практика и инструменты [[к оглавлению]](#оглавление) ### Airflow Apache Airflow — инструмент для оркестрации ETL-процессов. Мы используем его для: - планирования задач, - отслеживания зависимостей между шагами, - визуализации статуса выполнения. Материалы: - [Учебник по 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 Разбираем, чем Greenplum отличается от PostgreSQL и зачем нужны MPP-хранилища. #### Фундаментальная теория Прежде чем нажимать кнопки, нужно понять "физику" больших данных. Почему обычный Postgres начинает тормозить? - Мартин Клеппман, "Высоконагруженные приложения": - Глава 1. Надежность, масштабируемость. (Разбираемся, чем вертикальное масштабирование отличается от горизонтального). - Глава 3 (только конец главы). Читаем разделы: - «Обработка транзакций или аналитика?» (OLTP or OLAP?) — ключевое различие нагрузок. - «Хранение по столбцам» — почему аналитика требует другого способа записи данных на диск. - Зачем: Это объясняет, почему Greenplum устроен именно так. Без этого вы будете пытаться работать с ним как с обычным Postgres. #### Знакомство с Greenplum Теперь, понимая теорию, смотрим, как это реализовано в конкретном инструменте. - Простое введение: [Greenplum | Что это такое и как оно работает? - Youtube](https://www.youtube.com/watch?v=rLG9Z_HcKPY) - [Визуализатор распределения Greenplum](https://gpskew.rzvde.pro/) **Курс 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 считаем пройденным:** - вы понимаете, как данные распределяются по сегментам, что такое skew и как его увидеть; - на базе стенда `airflow-dwh-gp-lab` можете загружать и выгружать данные в Greenplum, выполнять запросы и разбирать планы выполнения (`EXPLAIN`); - можете объяснить, в чём практическая разница между MPP-хранилищем и одиночным Postgres на уровне типичных задач DE и собеседований. ### Курсовая работа Первая курсовая собирает изученное в один проект: загрузку данных из PostgreSQL, слои хранилища в Greenplum и управление обработкой через Airflow. Курсовая выполняется на том же стенде [airflow-dwh-gp-lab](https://github.com/dementev-dev/airflow-greenplum), который вы уже использовали для практики по Greenplum. **Что внутри:** - Стенд содержит DWH с реализованным эталонным срезом (STG → ODS → DDS → DM) — это ваш образец для подражания. - Задача — довести DWH до полного, реализовав недостающие загрузки по аналогии с эталоном. - Есть готовый план от аналитика (ТЗ с маппингами и бизнес-правилами) — не нужно придумывать, что делать. - Встроенная автоматическая проверка реализации поможет убедиться в корректности до проверки ментором. - Ветка `main` — рабочая (с заготовками для реализации), ветка `solution` — эталон для сверки. **Когда блок курсовой работы считаем пройденным:** - все загрузки реализованы, DWH заполняется полностью (STG → ODS → DDS → DM); - автоматическая проверка (валидационный 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 до отчета, объяснить свои изменения и показать, как проверяли их корректность. --- ## Карьера и менторство [[к оглавлению]](#оглавление) ### Менторство по этому роадмапу Если вы нашли этот роадмап в интернете и хотите пройти его не в одиночку, а с поддержкой ментора, можно присоединиться ко мне. **Что даёт менторство:** - структурный план прохождения роадмапа под вашу ситуацию; - разбор вопросов по SQL / DWH / Airflow и другим темам из этого документа; - разбор домашних заданий и код-ревью; - помощь с подготовкой к собеседованиям (резюме, мок-интервью). **Как записаться** Просто напишите мне в Telegram: [@dementev_dev](https://t.me/dementev_dev) со словами «Хочу пройти роадмап с ментором» — дальше всё обсудим. ### Подготовка к собеседованиям Цель блока — сформировать «опыт от 2 лет» и уметь корректно его показать в резюме и на собеседовании. #### Помощь в подготовке резюме - Видео от ОМ по составлению резюме - [Как накрутить опыт в резюме | «Ультимативный гайд» @digital_ninja](https://www.youtube.com/watch?v=EPuogJuYsvY) - [Как писать резюме, чтобы его читали - доклад - Boosty](https://boosty.to/m0rtymerr/posts/71b02a6b-8116-466a-b945-b2ed793abd8f) - [Как грамотно продать себя на собеседовании / Созвон сообщества - Boosty](https://boosty.to/m0rtymerr/posts/7289cd23-60c6-4010-bb1c-a5b28dac399a) - Практика: совместная работа над резюме — ментор помогает переработать опыт, сформировать убедительную карьерную историю и подготовиться к вопросам по ней. #### Поиск работы и собеседования - [Как подтвердить опыт без трудовой / Хабр против работяг](https://www.youtube.com/watch?v=GHqABzA1zi8) - Практика: мок-собеседования с ментором — тренировка ответов, разбор слабых мест, психологическая подготовка к реальным интервью. #### Помощь с прохождением испытательного срока - [Как успешно пройти испытательный срок в IT | «Ультимативный гайд» c @digital_ninja - Youtube](https://www.youtube.com/watch?v=r1lWP5rYVdk) - [Испытательный срок - доклад - Boosty](https://boosty.to/m0rtymerr/posts/40e7f17e-022b-495c-8d03-dabbe4383b8e) **Когда блок подготовки к собеседованиям считаем пройденным:** - у вас есть актуальное резюме под DE с понятными примерами проектов вместо «пустого» опыта; - вы умеете искать и отбирать вакансии на HH и Habr Карьера, адаптируя отклики под конкретную позицию; - вы прошли хотя бы пару мок-собеседований, получили обратную связь и по результатам доработали резюме и стратегию поиска. --- ## Расширенные навыки После двух курсовых можно расширить стек: попробовать обработку файлов в Lakehouse и управление SQL-моделями через dbt. Выбирайте тему под задачи, с которыми хотите работать. [[к оглавлению]](#оглавление) ### Lakehouse (Spark, Iceberg, Trino) Lakehouse — архитектурный подход, который соединяет гибкость Data Lake с гарантиями классического DWH. В классическом DWH данные и вычисления живут внутри одной СУБД, в её закрытом формате. В Lakehouse они разделены. Данные лежат файлами в дешёвом хранилище (обычно объектном, вроде S3). Открытый табличный формат (Iceberg, Delta, Hudi) добавляет поверх файлов привычные по СУБД вещи: схемы, транзакции, историю изменений. А вычислительные движки (Spark, Trino, Flink и другие) подключаются к данным снаружи — хоть несколько разных к одним и тем же таблицам. Роадмап фокусируется на классическом DWH-стеке, поэтому цель здесь — знакомство, но с настоящей практикой: стенд ниже собирает один из типовых наборов этого конструктора. Материалы: - Введение в тему: [«Как не утонуть в данных: выбираем между 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://github.com/dementev-dev/mini-lakehouse-lab) на стенде mini-lakehouse-lab (Spark + Iceberg + Trino + MinIO, всё локально в Docker, без облаков и регистраций): - 8 модулей на ~12–15 часов самостоятельной работы; в каждом — объяснение, демонстрация, задание и checkpoint; - пайплайн `raw → bronze → silver` на реальном датасете NYC Taxi; - одна таблица из двух движков: запись через Spark, чтение через Trino — и почему это работает без копирования данных; - schema evolution, time travel и обслуживание таблиц (compaction, expire_snapshots) — с параллелями к знакомым VACUUM/REORGANIZE из мира Postgres/Greenplum. Глубже про Iceberg (опционально, лучше после практики на стенде): - [«Как на самом деле работает Apache Iceberg» — Владимир Озеров, HighLoad Channel (Youtube)](https://www.youtube.com/watch?v=_3fsE2a2FO4) - [Введение в устройство Parquet и Iceberg (Habr, VK Tech)](https://habr.com/ru/companies/vktech/articles/959398/) — подробный и местами непростой разбор форматов изнутри - [Введение в Apache Iceberg: основы, архитектура, как работает](https://ivan-shamaev.ru/apache-iceberg-tutorial-architecture-how-to-work/#__Apache_Iceberg-2) - [Spark + Iceberg in 1 Hour: Memory Tuning, Joins, Partition (Youtube, англ.)](https://www.youtube.com/watch?v=3R-SLYK-P_0) ### 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` — этого достаточно, чтобы увидеть весь цикл. **Когда блок расширенных навыков считаем пройденным:** Оценивайте выбранную тему по результату практики: - для Lakehouse можете записать таблицу через Spark, прочитать ее через Trino и объяснить роль Iceberg, каталога и объектного хранилища; - для dbt можете изменить SQL-модель, выполнить сборку и тесты, посмотреть зависимости в документации проекта. --- ## Софт скиллы [[к оглавлению]](#оглавление) - [Все ветви дохода в IT / Полный гайд по деньгам](https://youtube.com/live/JHClTWwK1EM) - [Гайд как писать отзывы](https://boosty.to/m0rtymerr/posts/b04040ec-0f46-4524-9c75-188a513140ad?share=post_link) - [Гайд по Антистрессу](https://youtu.be/bu0YiXOKaoU) --- ## Дополнительные материалы [[к оглавлению]](#оглавление) - [ananevsyu/SandBox_DB_public: Песочница для изучения различных технологий связанных с инженерией данных](https://gitflic.ru/project/ananevsyu/sandbox_db_public) - Клон проекта [dementev_dev/sandbox_db_public-форк](https://gitflic.ru/project/dementev_dev/sandbox_db_public-fork) - [System Design. Разбор книги "Высоконагруженные приложения". Глава 1 - Youtube](https://www.youtube.com/watch?v=owjrIB_5go8) — отличный видео-конспект первой главы Клеппмана на русском. - [Индексы в БД - Youtube](https://www.youtube.com/watch?v=DyqtBiDrz3g) - [Алгоритмы: теория и практика. Методы – Stepik](https://stepik.org/course/217/info) - [Алгоритмы: теория и практика. Структуры данных – Stepik](https://stepik.org/course/1547/promo) - [Apache Hadoop для самых маленьких: HDFS, RACK-AWARENESS, репликация и Data Locality - Youtube](https://youtu.be/0fsY5bW2l84) - [Книга. Введение в Apache Kafka для системных аналитиков и проектировщиков интеграций](https://systems.education/kafka) - [Перевод документации dbt на русский язык](https://docs.getdbt.tech/) ### Записи ОМ - [Как пройти собеседование на программиста | Ультимативный гайд с ‪@om_nazarov‬ - Youtube](https://www.youtube.com/watch?v=tzSdiYZ52kI) - [Как стать программистом в 2025 | «Ультимативный гайд» с ‪@om_nazarov‬](https://www.youtube.com/watch?v=6151ekTOl38)