docs(main): онбординг студента — гид, маркетинг, адаптация docs и docstrings
- Зачем:
- на main docs и DAG-docstrings утверждали «все реализовано», хотя 18 заглушек;
студент застревал после шага 6 без явного «что дальше».
- Что:
- README: маркетинг-баннер, шаг 6 (только эталонные таблицы), шаг 7 → задания.
- docs/assignment/README: полный гид студента (эталон → ТЗ → заглушки → validate).
- analyst_spec: DAG-интеграция — «таски уже подключены, менять DAG не нужно».
- docs ODS/DDS/DM: пометки заглушек, адаптация секций проверки результата.
- 4 DAG docstrings: эталон vs задания (заглушки).
- Проверка:
- make test (4 passed, 14 skipped), make lint (clean).
- grep «все 5 витрин|все реализован» — ложных утверждений без оговорок нет.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,18 +1,77 @@
|
||||
# Учебные задания
|
||||
|
||||
## Техническое задание
|
||||
## О чём задание
|
||||
|
||||
Основной документ: **[analyst_spec.md](analyst_spec.md)** — ТЗ от аналитика
|
||||
с описанием всех таблиц, маппингами, бизнес-правилами и подсказками.
|
||||
В стенде уже работает **эталонный вертикальный срез** — полная цепочка
|
||||
`STG → ODS → DDS → DM` для витрины `dm.sales_report`. Ваша задача —
|
||||
реализовать недостающие загрузки по аналогии с эталоном.
|
||||
|
||||
## Эталон для изучения
|
||||
На месте ваших заданий сейчас стоят **заглушки** (`SELECT 1;`). Вы замените
|
||||
их на реальную SQL-логику, и после этого весь DWH будет заполнен.
|
||||
|
||||
Перед началом работы изучите эталонный срез (витрина `dm.sales_report`
|
||||
и вся её цепочка STG → ODS → DDS → DM):
|
||||
## Перед началом
|
||||
|
||||
- SQL-скрипты: `sql/stg/`, `sql/ods/`, `sql/dds/`, `sql/dm/`
|
||||
- DAG-файлы: `airflow/dags/`
|
||||
- [Порядок запуска DAG-ов](../dag_execution_order.md)
|
||||
Убедитесь, что стенд запущен и данные загружены —
|
||||
пройдите шаги 1–6 из [README (Быстрый старт)](../../README.md#быстрый-старт-основной-сценарий-bookings--stg--ods--dds--dm).
|
||||
|
||||
После этого в Greenplum будут данные в эталонных таблицах (`stg.*`, `ods.bookings`,
|
||||
`dds.dim_airports`, `dds.fact_flight_sales`, `dm.sales_report` и др.).
|
||||
|
||||
## Шаг 1. Изучите эталон
|
||||
|
||||
Прежде чем писать код, разберите, как устроены эталонные загрузки.
|
||||
По одному файлу на каждый ключевой паттерн:
|
||||
|
||||
| Паттерн | Файл для изучения | Что посмотреть |
|
||||
|---------|-------------------|----------------|
|
||||
| ODS: TRUNCATE + INSERT (snapshot-справочник) | `sql/ods/airports_load.sql` | Фильтрация по `stg_batch_id`, дедупликация через `ROW_NUMBER()` |
|
||||
| DDS: SCD1 UPSERT (измерение) | `sql/dds/dim_airports_load.sql` | TEMP TABLE → UPDATE (`IS DISTINCT FROM`) → INSERT |
|
||||
| DM: витрина с UPSERT | `sql/dm/sales_report_load.sql` | HWM-инкремент, агрегация фактов по измерениям |
|
||||
|
||||
Описания каждого DAG — в `docs/`:
|
||||
[STG](../bookings_to_gp_stage.md) ·
|
||||
[ODS](../bookings_to_gp_ods.md) ·
|
||||
[DDS](../bookings_to_gp_dds.md) ·
|
||||
[DM](../bookings_to_gp_dm.md)
|
||||
|
||||
## Шаг 2. Откройте ТЗ
|
||||
|
||||
Техническое задание от аналитика: **[analyst_spec.md](analyst_spec.md)**.
|
||||
|
||||
Там описаны все таблицы, которые нужно реализовать, с маппингами, бизнес-правилами
|
||||
и подсказками. Рекомендуемый порядок (от простого к сложному):
|
||||
|
||||
1. ODS: `airplanes`, `seats`
|
||||
2. DDS: `dim_airplanes`, `dim_passengers` (SCD1)
|
||||
3. DDS: `dim_routes` (SCD2 — ключевой вызов курсовой)
|
||||
4. DM: `airport_traffic`, `route_performance`, `monthly_overview`, `passenger_loyalty`
|
||||
|
||||
## Шаг 3. Реализуйте задания
|
||||
|
||||
- **Файлы-заглушки уже на месте** — например, `sql/ods/airplanes_load.sql`
|
||||
содержит `SELECT 1;`. Ваша задача: заменить `SELECT 1;` на реальную SQL-логику.
|
||||
- **DDL уже создан** — таблицы существуют, создавать их не нужно.
|
||||
- **Таски в DAG-ах уже подключены** — `PostgresOperator` ссылается на ваши SQL-файлы.
|
||||
Менять Python-код DAG-ов не нужно.
|
||||
- **Нейминг полей:** сверяйтесь с `docs/design/naming_conventions.md`.
|
||||
|
||||
## Шаг 4. Проверьте себя валидационным DAG-ом
|
||||
|
||||
DAG **`bookings_validate`** — автоматическая проверка вашей реализации.
|
||||
|
||||
- Три группы проверок: `validate_ods`, `validate_dds`, `validate_dm` — запускаются
|
||||
параллельно. Можно проверять ODS, пока DDS ещё не готов.
|
||||
- Включает активный SCD2-тест для `dim_routes`: загружает изменённые данные
|
||||
и проверяет, что версионирование работает корректно.
|
||||
- Сообщения об ошибках подскажут, что именно не так и что делать дальше.
|
||||
|
||||
**Цель: все проверки зелёные.**
|
||||
|
||||
## Если застряли
|
||||
|
||||
- Изучите эталонные SQL-скрипты — в них те же паттерны, что нужны для заданий.
|
||||
- Загляните в `docs/design/naming_conventions.md` — единый источник нейминга полей.
|
||||
- Сверьтесь с **веткой `solution`** — там полная рабочая реализация.
|
||||
|
||||
## Для менторов
|
||||
|
||||
|
||||
Reference in New Issue
Block a user