feat(dds): реализован слой dds для bookings

- Зачем:
  - подготовлен учебный Star Schema слой для перехода от ODS к аналитике и витринам.
- Что:
  - добавлены 21 SQL-файл для DDS (DDL/LOAD/DQ) с SCD1/SCD2 и фактом `fact_flight_sales`.
  - добавлены DAG `bookings_dds_ddl` и `bookings_to_gp_dds`, а также smoke-тесты структуры DAG.
  - обновлены `sql/ddl_gp.sql` и документация (`README`, `docs/*`, `db_schema`) под поток `stg -> ods -> dds`.
- Проверка:
  - make test.
This commit is contained in:
2026-02-28 22:13:11 +03:00
parent fc798aadd1
commit e592b35461
30 changed files with 1856 additions and 15 deletions
+15 -8
View File
@@ -13,8 +13,8 @@
- работы с Airflow и Greenplum.
В курсовой у нас один источник данных — демо‑БД **bookings**. В стенде уже есть готовые учебные примеры
загрузки **bookings → stg** и **stg -> ods** в Greenplum, чтобы вы могли сфокусироваться на DWH‑части
(ODS/DDS/DM) и не тратить время на инфраструктуру.
загрузки **bookings → stg**, **stg -> ods** и **ods -> dds** в Greenplum, чтобы вы могли сфокусироваться
на DWH‑части (ODS/DDS/DM) и не тратить время на инфраструктуру.
## Что внутри
@@ -44,7 +44,7 @@
Про PXF и технические детали стенда: [docs/stack.md](docs/stack.md).
## Быстрый старт (основной сценарий: bookings -> stg -> ods)
## Быстрый старт (основной сценарий: bookings -> stg -> ods -> dds)
1) Скопируйте настройки:
@@ -65,16 +65,18 @@ make up
make bookings-init
```
4) Подготовьте STG/ODS-объекты в Greenplum (выберите один вариант):
4) Подготовьте STG/ODS/DDS-объекты в Greenplum (выберите один вариант):
- Учебный вариант: в Airflow UI запустите DAG `bookings_stg_ddl`, затем `bookings_ods_ddl`;
- Технический шорткат: `make ddl-gp` (применяет DDL для STG и ODS разом вручную).
- Учебный вариант: в Airflow UI запустите DAG `bookings_stg_ddl`, затем `bookings_ods_ddl`, затем `bookings_dds_ddl`;
- Технический шорткат: `make ddl-gp` (применяет DDL для STG, ODS и DDS разом вручную).
5) Запустите основной DAG `bookings_to_gp_stage`.
6) Запустите DAG `bookings_to_gp_ods`.
7) Проверьте результат в Greenplum:
7) Запустите DAG `bookings_to_gp_dds`.
8) Проверьте результат в Greenplum:
```bash
make gp-psql
@@ -84,6 +86,8 @@ 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;
SELECT COUNT(*) FROM dds.dim_routes;
SELECT COUNT(*) FROM dds.fact_flight_sales;
```
Подробнее про логику DAG и проверки — `docs/bookings_to_gp_stage.md`.
@@ -97,6 +101,8 @@ SELECT COUNT(*) FROM ods.tickets;
- `bookings_to_gp_stage` — генерирует учебный день в `bookings-db`, затем загружает данные в STG и выполняет DQ‑проверки.
- `bookings_ods_ddl` — создаёт/обновляет ODS-таблицы по домену bookings.
- `bookings_to_gp_ods` — загружает данные из STG в ODS (SCD1 UPSERT) и выполняет DQ‑проверки.
- `bookings_dds_ddl` — создаёт/обновляет DDS-таблицы (`dim_*`, `fact_flight_sales`) по домену bookings.
- `bookings_to_gp_dds` — загружает данные из ODS в DDS (SCD1/SCD2 + факт) и выполняет DQ‑проверки.
Вспомогательные (побочный трек с CSV):
@@ -111,7 +117,7 @@ make up # поднять стек
make logs # логи airflow-webserver и airflow-scheduler
make gp-psql # psql в Greenplum
make bookings-psql # psql в демо-БД bookings (Postgres)
make ddl-gp # применить DDL STG+ODS к Greenplum вручную (вместо DDL-DAG)
make ddl-gp # применить DDL STG+ODS+DDS к Greenplum вручную (вместо DDL-DAG)
make down # остановить и удалить контейнеры/сети (volumes сохраняются)
make clean # полный reset: удалить контейнеры/сети и volumes (данные будут потеряны)
```
@@ -142,6 +148,7 @@ make clean # полный reset: удалить контейнер
- План тестирования/проверок и негативные кейсы: `TESTING.md`.
- Дополнительные заметки и технические детали: `docs/README.md`.
- Детали по ODS DAG: `docs/bookings_to_gp_ods.md`.
- Детали по DDS DAG: `docs/bookings_to_gp_dds.md`.
## Типичные проблемы и решения