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:
@@ -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,16 +65,16 @@ make up
|
||||
make bookings-init
|
||||
```
|
||||
|
||||
Важно: генератор `bookings` в этом стенде поддерживается только в режиме `BOOKINGS_JOBS=1`.
|
||||
4) Подготовьте STG/ODS-объекты в Greenplum (выберите один вариант):
|
||||
|
||||
4) Подготовьте STG‑объекты в 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
|
||||
@@ -82,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`.
|
||||
@@ -90,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):
|
||||
|
||||
@@ -108,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 (данные будут потеряны)
|
||||
```
|
||||
@@ -138,6 +141,7 @@ make clean # полный reset: удалить контейнер
|
||||
- Учебные задания: `educational-tasks.md`).
|
||||
- План тестирования/проверок и негативные кейсы: `TESTING.md`.
|
||||
- Дополнительные заметки и технические детали: `docs/README.md`.
|
||||
- Детали по ODS DAG: `docs/bookings_to_gp_ods.md`.
|
||||
|
||||
## Типичные проблемы и решения
|
||||
|
||||
|
||||
Reference in New Issue
Block a user