docs(solution): маркетинг-баннер, шаг 7, навигатор по реализации
- Зачем: - на 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 <noreply@anthropic.com>
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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 — не найдено.
|
||||
@@ -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)
|
||||
|
||||
## Для менторов
|
||||
|
||||
Reference in New Issue
Block a user