feat(ods): реализован ODS слой и DAG загрузки из STG

- Зачем:
  - подготовлена учебная реализация ODS слоя с типизацией, UPSERT и DQ, чтобы продолжить работу от STG к DDS/DM.
- Что:
  - добавлены SQL-скрипты `sql/ods/*_ddl.sql`, `sql/ods/*_load.sql`, `sql/ods/*_dq.sql` для 9 сущностей bookings.
  - добавлены DAG `bookings_ods_ddl` и `bookings_to_gp_ods`, а также smoke-тесты для новых графов.
  - ODS DDL интегрирован в `sql/ddl_gp.sql`; документация и план обновлены под единый запуск через `make ddl-gp`.
- Проверка:
  - `make test`.
  - `make ddl-gp`.
This commit is contained in:
2026-02-23 01:51:40 +03:00
parent dc1dc9c66a
commit 03765d2808
37 changed files with 2704 additions and 25 deletions
+16 -10
View File
@@ -12,9 +12,9 @@
- построения ETL/ELT;
- работы с Airflow и Greenplum.
В курсовой у нас один источник данных — демо‑БД **bookings**. В стенде уже есть готовый учебный пример
загрузки **bookings → stg в Greenplum**, чтобы вы могли сфокусироваться на DWH‑части (ODS/DDS/DM) и
не тратить время на инфраструктуру.
В курсовой у нас один источник данных — демо‑БД **bookings**. В стенде уже есть готовые учебные примеры
загрузки **bookings → stg** и **stg -> ods** в Greenplum, чтобы вы могли сфокусироваться на DWH‑части
(ODS/DDS/DM) и не тратить время на инфраструктуру.
## Что внутри
@@ -44,7 +44,7 @@
Про PXF и технические детали стенда: [docs/stack.md](docs/stack.md).
## Быстрый старт (основной сценарий: bookings stg)
## Быстрый старт (основной сценарий: bookings -> stg -> ods)
1) Скопируйте настройки:
@@ -65,14 +65,16 @@ make up
make bookings-init
```
4) Подготовьте STGобъекты в Greenplum (выберите один вариант):
4) Подготовьте STG/ODS-объекты в Greenplum (выберите один вариант):
- Учебный вариант: в Airflow UI запустите DAG `bookings_stg_ddl`;
- Технический шорткат: `make ddl-gp` (применяет все DDL разом вручную).
- Учебный вариант: в Airflow UI запустите DAG `bookings_stg_ddl`, затем `bookings_ods_ddl`;
- Технический шорткат: `make ddl-gp` (применяет DDL для STG и ODS разом вручную).
5) Запустите основной DAG `bookings_to_gp_stage`.
6) Проверьте результат в Greenplum:
6) Запустите DAG `bookings_to_gp_ods`.
7) Проверьте результат в Greenplum:
```bash
make gp-psql
@@ -80,6 +82,8 @@ make gp-psql
SELECT COUNT(*) FROM stg.bookings;
SELECT COUNT(*) FROM stg.tickets;
SELECT * FROM stg.bookings ORDER BY src_created_at_ts DESC LIMIT 10;
SELECT COUNT(*) FROM ods.bookings;
SELECT COUNT(*) FROM ods.tickets;
```
Подробнее про логику DAG и проверки — `docs/bookings_to_gp_stage.md`.
@@ -88,10 +92,11 @@ SELECT * FROM stg.bookings ORDER BY src_created_at_ts DESC LIMIT 10;
Основные (для потока bookings → DWH):
- `bookings_stg_ddl` — создаёт `stg.bookings_ext`/`stg.bookings` и `stg.tickets_ext`/`stg.tickets` в Greenplum;
- `bookings_stg_ddl` — создаёт/обновляет весь STG слой для bookings (9 таблиц: bookings, tickets, airports, airplanes,
routes, seats, flights, segments, boarding_passes; включая внешние `*_ext` через PXF);
- `bookings_to_gp_stage` — генерирует учебный день в `bookings-db`, затем загружает данные в STG и выполняет DQ‑проверки.
- `bookings_ods_ddl` — создаёт/обновляет ODS-таблицы по домену bookings.
- `bookings_to_gp_ods` — загружает данные из STG в ODS (SCD1 UPSERT) и выполняет DQ‑проверки.
Вспомогательные (побочный трек с CSV):
@@ -106,7 +111,7 @@ make up # поднять стек
make logs # логи airflow-webserver и airflow-scheduler
make gp-psql # psql в Greenplum
make bookings-psql # psql в демо-БД bookings (Postgres)
make ddl-gp # применить DDL к Greenplum вручную (вместо DDL-DAG)
make ddl-gp # применить DDL STG+ODS к Greenplum вручную (вместо DDL-DAG)
make down # остановить и удалить контейнеры/сети (volumes сохраняются)
make clean # полный reset: удалить контейнеры/сети и volumes (данные будут потеряны)
```
@@ -136,6 +141,7 @@ make clean # полный reset: удалить контейнер
- Учебные задания: `educational-tasks.md`).
- План тестирования/проверок и негативные кейсы: `TESTING.md`.
- Дополнительные заметки и технические детали: `docs/README.md`.
- Детали по ODS DAG: `docs/bookings_to_gp_ods.md`.
## Типичные проблемы и решения