- Зачем:
- подготовлена учебная реализация 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`.
- Зачем:
- codex нашёл баги, которые сломали бы первый прогон ODS.
- Что:
- resolve batch: MAX(batch_id) заменён на ORDER BY load_dttm DESC LIMIT 1
(run_id — строка, лексикографический MAX не гарантирует хронологию).
- ручная проверка: добавлен make ddl-gp-ods (без него ODS-объекты не создадутся).
- routes/flights FK: расширено пояснение, почему проверка по route_no без
validity допустима в ODS и что учитывать при join в DDS.
- Проверка:
- make test (11 passed, 4 skipped).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- v2 содержал баги (CTE scope, distribution key), неточности маппинга
колонок и пробелы в описании DAG-контракта, что сломало бы реализацию.
- Что:
- исправлен CTE scope: дублирование CTE в UPDATE и INSERT statements.
- ods.tickets: DISTRIBUTED BY (ticket_no) вместо book_ref для UPSERT.
- добавлен Python-сниппет resolve_stg_batch_id (PythonOperator + XCom).
- заменены {{ params.stg_batch_id }} → {{ ti.xcom_pull(...) }} во всех SQL.
- <> заменён на IS DISTINCT FROM (NULL-safe change detection).
- DISTINCT ON заменён на ROW_NUMBER() (стандартный DE-паттерн).
- добавлена секция 4.3 с полной таблицей маппинга STG → ODS.
- routes: scheduled_departure_time → departure_time, duration без rename.
- DAG-граф: resolve_stg_batch_id как корневой таск, параллельные ветки.
- DQ: добавлена проверка «батч не пустой» для snapshot-справочников.
- DoD: убрано valid_from/valid_to, оставлено _load_id/_load_ts/event_ts.
- Проверка:
- make test (11 passed, 4 skipped).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- нужен единый стандарт именования полей, чтобы новые слои не расходились с учебными материалами.
- Что:
- добавлен единый документ с правилами нейминга `docs/internal/naming_conventions.md`.
- полностью переписан `docs/internal/bookings_ods_design.md` в эталонный учебный план ODS (SCD1, батч-контракт, DQ, граф DAG).
- добавлены ссылки на стандарт нейминга в `docs/README.md`, `docs/internal/db_schema.md` и `AGENTS.md`.
- Проверка:
- проверен diff по измененным файлам (`git diff`).
- Зачем:
- зафиксировать архитектурное решение для ODS слоя перед началом разработки.
- Что:
- создан файл docs/internal/bookings_ods_design.md.
- описана архитектура ODS и отличия от STG слоя.
- добавлены схемы таблиц (справочники с SCD Type 2, транзакции с UPSERT).
- Проверка:
- git show --stat HEAD