From d3f2f42e38011750524677a052516d8dc6ed61ef Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Fri, 13 Mar 2026 11:07:52 +0300 Subject: [PATCH] =?UTF-8?q?docs(solution):=20=D0=BC=D0=B0=D1=80=D0=BA?= =?UTF-8?q?=D0=B5=D1=82=D0=B8=D0=BD=D0=B3-=D0=B1=D0=B0=D0=BD=D0=BD=D0=B5?= =?UTF-8?q?=D1=80,=20=D1=88=D0=B0=D0=B3=207,=20=D0=BD=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=B3=D0=B0=D1=82=D0=BE=D1=80=20=D0=BF=D0=BE=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - на solution не было явного «что дальше» после шага 6 и навигации по паттернам. - Что: - README: маркетинг-баннер + шаг 7 «Изучите готовую реализацию». - docs/assignment/README: навигатор по всем паттернам (ODS → DDS → DM) с файлами. - архивирован план онбординга в docs/archive/. - Проверка: - make test (4 passed), make lint (clean). - grep «заглушки/SELECT 1» в README и docs/assignment/README — не найдено. Co-Authored-By: Claude Opus 4.6 --- README.md | 10 +++++ .../2026-03-13_onboarding-marketing.md | 34 ++++++++++++++ docs/assignment/README.md | 45 ++++++++++++++++--- 3 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 docs/archive/2026-03-13_onboarding-marketing.md diff --git a/README.md b/README.md index fd8ebf9..b21d7a6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # airflow-dwh-gp-lab +> Этот стенд можно использовать самостоятельно, но он также является курсовой работой +> плана обучения [Data Engineering Roadmap](https://github.com/dementev-dev/de-roadmap). +> Нужна помощь? Обратитесь к автору материалов — ментору [@dementev_dev](https://t.me/dementev_dev). + Учебный стенд для лабораторных по Data Engineering: **Airflow** оркестрирует загрузку данных из демо‑БД **bookings** (Postgres) в **Greenplum**. @@ -95,6 +99,12 @@ SELECT COUNT(*) FROM dm.route_performance; Подробнее про логику DAG и проверки — `docs/bookings_to_gp_stage.md`. +7) Изучите готовую реализацию: + +Весь пайплайн `STG → ODS → DDS → DM` на этой ветке полностью реализован. +Переходите к [навигатору по реализации](docs/assignment/README.md) — +там описана структура, ключевые паттерны и рекомендуемый порядок изучения. + ## DAG-и в стенде Основные (для потока bookings → DWH): diff --git a/docs/archive/2026-03-13_onboarding-marketing.md b/docs/archive/2026-03-13_onboarding-marketing.md new file mode 100644 index 0000000..03bb5e1 --- /dev/null +++ b/docs/archive/2026-03-13_onboarding-marketing.md @@ -0,0 +1,34 @@ +# План: Онбординг студента + маркетинг (v4) + +> Статус: выполнен (2026-03-13) + +## Контекст + +Ментор опционален. Студент, клонировав main, проходит «Быстрый старт» — и застревает: +нет явного «что дальше», ссылка на задания спрятана, validate DAG не объяснён, нет маркетинга. +На main есть противоречия: docs и DAG-docstrings говорят «все реализовано», +фактически стоят заглушки `SELECT 1;`. + +## Что было сделано + +### На main (10 файлов) + +1. **README.md** — маркетинг-баннер, шаг 6 (только эталонные таблицы), шаг 7 → задания. +2. **docs/assignment/README.md** — полный гид студента (эталон → ТЗ → заглушки → validate). +3. **docs/assignment/analyst_spec.md** — DAG-интеграция: «таски уже подключены, DAG менять не нужно». +4. **docs/bookings_to_gp_dm.md** — пометки заглушек, адаптация секций проверки. +5. **docs/bookings_to_gp_ods.md** — пометки заглушек airplanes/seats. +6. **docs/bookings_to_gp_dds.md** — пометки заглушек dim_routes/dim_passengers/dim_airplanes. +7-10. **4 DAG docstrings** — эталон vs задания (заглушки). + +### На solution (follow-up) + +- README.md — маркетинг-баннер + шаг 7 (solution-specific: «Изучите готовую реализацию»). +- docs/assignment/README.md — навигационный гид по всем паттернам (ODS → DDS → DM). +- Этот план архивирован в docs/archive/. + +## Верификация + +- `make test` — passed на обеих ветках. +- `make lint` — clean на обеих ветках. +- Grep «заглушки/SELECT 1» в README.md и docs/assignment/README.md на solution — не найдено. diff --git a/docs/assignment/README.md b/docs/assignment/README.md index 561bd40..9bd1234 100644 --- a/docs/assignment/README.md +++ b/docs/assignment/README.md @@ -1,17 +1,50 @@ # Учебные задания +> Это ветка `solution` — здесь всё уже реализовано. +> Используйте её как справочник, а задания выполняйте на ветке `main`. + +## Навигатор по реализации + +На этой ветке полностью работает пайплайн `STG → ODS → DDS → DM`. +Ниже — рекомендуемый порядок изучения: от простых паттернов к сложным. + +### ODS: загрузка из STG + +| Паттерн | Файл | Что посмотреть | +|---------|------|----------------| +| TRUNCATE + INSERT (snapshot-справочник) | `sql/ods/airports_load.sql` | Фильтрация по `stg_batch_id`, дедупликация через `ROW_NUMBER()` | +| SCD1 UPSERT (транзакционные данные) | `sql/ods/bookings_load.sql` | TEMP TABLE → UPDATE (`IS DISTINCT FROM`) → INSERT, HWM | + +### DDS: измерения и факт + +| Паттерн | Файл | Что посмотреть | +|---------|------|----------------| +| SCD1 (простое измерение) | `sql/dds/dim_airports_load.sql` | UPSERT с суррогатным ключом | +| SCD1 с обогащением | `sql/dds/dim_airplanes_load.sql` | JOIN с `ods.seats` для `total_seats` | +| SCD2 (версионирование) | `sql/dds/dim_routes_load.sql` | `hashdiff`, `valid_from`/`valid_to`, денормализация | +| Факт с point-in-time JOIN | `sql/dds/fact_flight_sales_load.sql` | SCD2 lookup, защитные LEFT JOIN | + +### DM: витрины + +| Паттерн | Файл | Что посмотреть | +|---------|------|----------------| +| UPSERT с HWM по датам | `sql/dm/sales_report_load.sql` | Инкрементальная агрегация фактов | +| Full Rebuild (AO Column) | `sql/dm/route_performance_load.sql` | TRUNCATE + INSERT, агрегация по SCD2 `route_bk` | +| UNION ALL (dual-role dimension) | `sql/dm/airport_traffic_load.sql` | Разворот факта: departure + arrival | +| Двухуровневая агрегация | `sql/dm/monthly_overview_load.sql` | Честный `avg_load_factor` через 2 уровня | +| Метод затронутых ключей | `sql/dm/passenger_loyalty_load.sql` | HWM по пассажирам, пересчёт полной истории | + ## Техническое задание Основной документ: **[analyst_spec.md](analyst_spec.md)** — ТЗ от аналитика с описанием всех таблиц, маппингами, бизнес-правилами и подсказками. -## Эталон для изучения +## Описания DAG-ов -Перед началом работы изучите эталонный срез (витрина `dm.sales_report` -и вся её цепочка STG → ODS → DDS → DM): - -- SQL-скрипты: `sql/stg/`, `sql/ods/`, `sql/dds/`, `sql/dm/` -- DAG-файлы: `airflow/dags/` +- [STG](../bookings_to_gp_stage.md) · + [ODS](../bookings_to_gp_ods.md) · + [DDS](../bookings_to_gp_dds.md) · + [DM](../bookings_to_gp_dm.md) - [Порядок запуска DAG-ов](../reference/dag_execution_order.md) ## Для менторов