diff --git a/README.md b/README.md index 4f5d4a3..eacb37f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ Добро пожаловать в учебный стенд для изучения основ Data Engineering! Этот проект поможет вам освоить ключевые инструменты современных data pipeline: **Airflow** для оркестрации, **pandas/CSV** для подготовки данных, **Postgres** с демобазой **bookings** как источник и **Greenplum** как аналитическую базу данных. +Если вы проходите стенд как серию лабораторных, смотрите также файл с заданиями: `educational-tasks.md`. + ## 🎯 Что вы узнаете - Как настроить локальный стек данных с помощью Docker @@ -90,6 +92,8 @@ make up ## 🛠️ Подробная настройка (для уверенных пользователей) +> Если вы впервые запускаете стенд, этот раздел можно пролистать и вернуться к нему позже. + ### Установка Make (опционально) Для удобства работы с проектом рекомендуем установить `make`: @@ -232,6 +236,8 @@ docker compose -f docker-compose.yml exec bookings-db bash -lc 'PGPASSWORD="$POS ## 🔍 Продвинутые темы +> Этот раздел не обязателен при первом прохождении стенда; к нему удобно вернуться, когда базовый CSV‑pipeline уже понятен. + ### Архитектура pipeline **Поток данных в DAG `csv_to_greenplum`:** @@ -252,6 +258,8 @@ docker compose -f docker-compose.yml exec bookings-db bash -lc 'PGPASSWORD="$POS ### Пример DAG с SQL-скриптами (bookings → stg) +> Если вы ещё не дошли до части про bookings и слои DWH, этот подраздел можно пропустить на первом чтении. + В репозитории есть учебный DAG `bookings_to_gp_stage`, который показывает «канонический» способ работы с SQL в Airflow: - подключение к БД через Airflow Connections (`bookings_db`, `greenplum_conn`); @@ -284,6 +292,8 @@ load_bookings_to_stg = PostgresOperator( ## 🧩 Подключение к базам через DBeaver +> Необязательный раздел: нужен только если вы хотите смотреть данные через DBeaver. Для базовых заданий достаточно `make gp-psql`. + Ниже — краткая инструкция, как подключиться к Greenplum и демо-БД bookings из DBeaver. Перед этим убедитесь, что стенд запущен: - `cp .env.example .env` (если ещё не делали) @@ -347,16 +357,23 @@ load_bookings_to_stg = PostgresOperator( ## 📁 Структура проекта ``` -├── docker-compose.yml # Описание всех сервисов -├── .env.example # Шаблон настроек -├── Makefile # Удобные команды для работы +├── docker-compose.yml # Описание всех сервисов +├── .env.example # Шаблон настроек +├── Makefile # Удобные команды для работы +├── README.md # Обзор стенда +├── TESTING.md # Пошаговый план проверки +├── educational-tasks.md # Учебные задания для менти ├── airflow/ -│ └── dags/ # Файлы workflow (DAG) +│ └── dags/ # Файлы workflow (DAG) │ ├── csv_to_greenplum.py -│ └── data_quality_greenplum.py -├── bookings/ # Скрипты и вспомогательные файлы для демобазы bookings в Postgres -└── sql/ - └── ddl_gp.sql # Создание таблицы в Greenplum +│ ├── data_quality_greenplum.py +│ └── bookings_to_gp_stage.py +├── bookings/ # Скрипты и файлы для демобазы bookings в Postgres +├── sql/ +│ └── ddl_gp.sql # Общий DDL для Greenplum (подключает stg/src-скрипты) +├── docs/ # Дополнительные документы (архитектура, bookings/STG, PXF) +├── tests/ # Автоматические тесты (pytest) +└── pxf/ # Конфигурация и файлы для PXF ``` --- diff --git a/educational-tasks.md b/educational-tasks.md new file mode 100644 index 0000000..2125892 --- /dev/null +++ b/educational-tasks.md @@ -0,0 +1,118 @@ +# Учебные задания по стенду + +Этот документ собирает в одном месте задания для менти. +Он разбит на блоки: от базовой работы с CSV‑pipeline до более продвинутого сценария с демо‑БД bookings и слоем STG в Greenplum. + +Если вы только начинаете, выполняйте задания по порядку. К разделу про bookings можно вернуться позже. + +--- + +## 1. Базовый CSV‑pipeline (csv_to_greenplum) + +Основная цель этого блока — понять, как устроен простой ETL: генерация данных через pandas, сохранение в CSV и загрузка в Greenplum. + +### 1.1. Разбор готового pipeline + +1. Найдите DAG `csv_to_greenplum` в `airflow/dags/csv_to_greenplum.py`. +2. Ответьте себе на вопросы (можно коротко в отдельном файле/блокноте): + - какие задачи (tasks) входят в DAG и что делает каждая из них; + - какие таблицы создаются в Greenplum; + - где физически лежат CSV‑файлы; + - какие параметры управляют размером датасета. +3. Поднимите стенд и запустите DAG: + - `make up && make airflow-init` + - включите и запустите DAG `csv_to_greenplum` в Airflow UI. +4. Проверьте результат в Greenplum: + - `make gp-psql` + - `SELECT COUNT(*) FROM public.orders;` + - `SELECT * FROM public.orders LIMIT 5;` + +### 1.2. Изменение параметров генерации + +1. Найдите, где задаётся количество строк для генерации (`CSV_ROWS` в `.env` и параметр в DAG). +2. Поставьте другое значение и перезапустите DAG: + - оцените, как изменилось количество строк в `public.orders`; + - убедитесь, что пайплайн по‑прежнему работает без ошибок. +3. Попробуйте изменить схему данных (добавить колонку в CSV и таблицу в Greenplum): + - добавьте новую колонку в генерацию pandas; + - обновите DDL/SQL, чтобы колонка появилась в таблице `public.orders`; + - перезапустите DAG и убедитесь, что новая колонка заполняется. + +### 1.3. Собственные проверки качества данных + +1. Найдите DAG `greenplum_data_quality` в `airflow/dags/data_quality_greenplum.py`. +2. Посмотрите, какие проверки уже реализованы (наличие таблицы, схема, дубликаты). +3. Добавьте ещё одну простую проверку, например: + - проверка, что в таблице `public.orders` не больше N строк; + - проверка, что поле (например, `order_price`) не содержит отрицательных значений; + - проверка, что нет строк с `NULL` в ключевых колонках. +4. Запустите DAG `greenplum_data_quality` и убедитесь, что: + - новая проверка проходит на «хороших» данных; + - при нарушении условия DAG падает с понятной ошибкой. + +--- + +## 2. Greenplum и модель данных (введение) + +В следующих заданиях мы будем опираться на демо‑БД bookings (Postgres) и слой STG в Greenplum. +На этом этапе достаточно бегло посмотреть на структуру и понять общую идею, детальная проработка пойдёт позже. + +### 2.1. Знакомство с демо‑БД bookings + +1. Прочитайте `bookings/README.md` — какие сервисы и команды относятся к демобазе. +2. Поднимите стенд и выполните: + - `make up` + - `make bookings-init` +3. Подключитесь к демобазе: + - `make bookings-psql` + - посмотрите таблицы в схеме `bookings` (например, `\dt bookings.*`). +4. Найдите таблицу `bookings.bookings` и посмотрите на её структуру: + - какие типы колонок используются; + - какие поля выглядят как ключи, даты, суммы. + +### 2.2. Знакомство с STG в Greenplum + +1. Прочитайте `sql/stg/bookings_ddl.sql` и мини‑README `docs/internal/bookings_stg_readme.md` (если интересно — `docs/internal/bookings_stg_design.md`). +2. Ответьте себе на вопросы: + - чем внешняя таблица `stg.bookings_ext` отличается от внутренней `stg.bookings`; + - зачем нужны тех.колонки `src_created_at_ts`, `load_dttm`, `batch_id`; + - чем слой STG отличается от итоговых витрин (DDS/DM) с точки зрения моделирования. +3. Выполните `make ddl-gp`, затем зайдите в Greenplum (`make gp-psql`) и проверьте наличие схемы и таблиц: + - `\dn` и `\dt stg.*` + - `SELECT * FROM stg.bookings LIMIT 5;` (после запуска соответствующего DAG). + +--- + +## 3. DAG bookings_to_gp_stage (заготовка заданий) + +Этот DAG показывает путь данных от демо‑БД bookings в Postgres до сырого слоя STG в Greenplum. +Сейчас он уже реализован как учебный пример, а в будущем вокруг него появятся отдельные задания по моделированию DWH. + +### 3.1. Что есть сейчас + +1. Откройте `airflow/dags/bookings_to_gp_stage.py`. +2. Найдите в коде ссылки на SQL‑файлы: + - `sql/src/bookings_generate_day_if_missing.sql` + - `sql/stg/bookings_load.sql` + - `sql/stg/bookings_dq.sql` +3. Соотнесите шаги DAG с документом `docs/internal/bookings_stg_readme.md`: + - генерация учебного дня в `bookings.bookings`; + - загрузка инкремента в `stg.bookings`; + - проверка количества строк между источником и STG. + +На этом этапе достаточно понять общую цепочку. Детальные задания по переработке модели данных и построению ODS/DDS/DM слоёв будут добавлены позже. + +### 3.2. Идеи для будущих заданий (черновик) + +> Ниже — набросок задач, к которым мы вернёмся, когда базовые темы по Airflow и CSV‑pipeline будут освоены. + +Планируемые направления: + +- Спроектировать модель данных для основных сущностей демобазы bookings (рейсы, билеты, перелёты) в слоях ODS/DDS/DM. +- Реализовать слой ODS поверх STG, аккуратно работая с временными атрибутами и ключами. +- Построить витрины (DM) для типичных аналитических вопросов: загрузка рейсов, выручка по направлениям, динамика бронирований. +- Добавить DAG’и, которые используют `stg.bookings` как источник и строят следующие слои DWH. +- Расширить проверки качества данных для потоков bookings → STG → витрины. + +Когда будете готовы к этим темам, вернитесь к этому разделу — он станет основой для следующего «модуля» лабораторных заданий. +