Commit Graph
219 Commits
Author SHA1 Message Date
ddadmin ad663efcea Отладка 2026-02-28 22:11:44 +03:00
ddadmin 897a76588d Первая версия dag 2026-02-28 22:11:44 +03:00
ddadmin c23bbed10c План работ 2026-02-28 22:11:44 +03:00
ddadmin ffd9585ef4 fix(bookings): добавлено явное ограничение генератора на jobs=1
- Зачем:
  - исключить нестабильные режимы генератора, в которых bookings может перестать пополняться.
  - сделать причину ошибки понятной студенту сразу при запуске команд и SQL-скриптов.
- Что:
  - добавлен precheck `bookings-check-jobs` в Makefile и подключён к `bookings-init` и `bookings-generate-day`.
  - добавлены явные проверки `bookings.jobs = 1` в `bookings/generate_next_day.sql` и `sql/src/bookings_generate_day_if_missing.sql`.
  - обновлена документация и `.env.example`: зафиксировано, что в стенде поддерживается только `BOOKINGS_JOBS=1`.
- Проверка:
  - uv run make fmt.
  - uv run make test.
  - env BOOKINGS_JOBS=2 make bookings-init.
  - env BOOKINGS_JOBS=2 make bookings-generate-day.
  - make bookings-init.
  - make bookings-generate-day.
2026-02-28 22:00:27 +03:00
ddadmin a10cbff906 fix(bookings): откатаны ошибочные изменения в инициализации demodb
- Зачем:
  - предыдущий фикс ломал make bookings-init из-за невалидного SQL в Makefile.
- Что:
  - удалены SQL-блоки постобработки reference-данных и cume_dist из bookings-init.
  - удалён случайно добавленный gitlink _vendor/demodb.
  - удалён SET LOCAL application_name из generate_next_day.sql.
- Проверка:
  - uv run make fmt.
  - uv run make test.
  - make bookings-init.
  - make bookings-generate-day.
2026-02-28 19:54:57 +03:00
ddadmin 09c940ea0e fix(bookings): исправлен бесконечный цикл busy() и генерации имён пассажиров
- Зачем:
  - генератор demodb зависал при jobs=1 из-за самоблокировки busy()
  - get_passenger_name() попадал в бесконечный цикл из-за NULL в cume_dist
- Что:
  - добавлен SET LOCAL application_name = 'psql' после вызова generate/continue
  - добавлена загрузка firstnames.dat и lastnames.dat в Makefile
  - добавлено заполнение cume_dist для firstnames, lastnames и airport_to_prob
- Проверка:
  - make bookings-generate-day выполняется успешно, создаётся ~45K бронирований
2026-02-28 19:36:48 +03:00
ddadmin 25f04fd0f0 Merge branch 'main' into chore/bookings-etl 2026-02-28 14:54:53 +03:00
ddadmin acdbb8be3e docs(agents): реструктуризация инструкций, добавлено правило баланса сложности
- Зачем:
  - документ разросся и стал неструктурированным; нужно выделить ключевое правило про баланс production-ready и KISS для начинающих Data инженеров.
- Что:
  - реструктуризация: введена нумерация разделов (1-6), удалены дублирующиеся детали команд и стиля кода.
  - добавлен раздел 1 "Главное правило генерации кода (Баланс)" с принципами Production-ready, KISS и Фокус на «Почему».
  - расширена карта проекта: добавлены все слои DWH (src/, stg/, ods/, dds/, dm/) и naming conventions.
  - добавлен раздел 6 "Порядок работы Агента" с чек-листом валидации.
- Проверка:
  - cat AGENTS.md && git log -1
2026-02-28 14:53:09 +03:00
ddadminandClaude Opus 4.6 e986222d46 docs(dm): добавлен дизайн-документ DM-слоя
- Зачем:
  - зафиксировать архитектуру 5 витрин DM перед реализацией и отдать на ревью.
- Что:
  - создан docs/internal/bookings_dm_design.md с описанием всех витрин, DAG-структуры, DQ-проверок и порядка реализации.
- Проверка:
  - cat docs/internal/bookings_dm_design.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 23:37:26 +03:00
ddadmin 8fd5ae1069 fix(ods): исправлена загрузка flights для ссылок из segments
- Зачем:
  - dq_ods_segments падал на непустых батчах из-за orphan flight_id в ods.segments.
- Что:
  - доработан sql/ods/flights_load.sql: добавлено добирание рейсов из истории stg.flights для flight_id из stg.segments текущего batch.
  - добавлен контрактный тест в tests/test_ods_sql_contract.py на покрытие flight_id из segments.
  - обновлена документация DAG в docs/bookings_to_gp_ods.md.
- Проверка:
  - make test.
  - airflow dags trigger bookings_to_gp_ods -c '{"stg_batch_id":"manual__2026-01-18T18:47:18.316091+00:00"}'.
2026-02-25 23:12:27 +03:00
ddadmin d25c753eb4 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.
2026-02-25 23:05:43 +03:00
ddadmin 9dbfc3572d docs(dwh): актуализирована db_schema для ODS и DDS
- Зачем:
  - синхронизировать db_schema.md с фактическим состоянием репозитория и текущим DDS-планом.
- Что:
  - обновлён статус слоёв: STG/ODS отмечены как реализованные, DDS как слой в проектировании.
  - приведены к актуальному виду DDS-объекты и нейминг (`dds.dim_*`, `dds.fact_flight_sales`, `dds.dim_routes` SCD2).
  - обновлены mermaid-диаграмма, обучающие пояснения, TODO, связанные документы и история изменений.
- Проверка:
  - git diff -- docs/internal/db_schema.md
2026-02-24 00:09:14 +03:00
ddadmin e98821f28d fix(dwh): доработан DDS-план после повторного ревью
- Зачем:
  - закрыть оставшиеся риски и противоречия в проектировании DDS перед реализацией.
- Что:
  - добавлена обработка исчезнувших маршрутов в SCD2 (`UPDATE missing`) и уточнён паттерн идемпотентности.
  - уточнены правила SCD2 на DATE-гранулярности (`valid_from <= valid_to`) и добавлена DQ-проверка current-среза DDS vs ODS.
  - расширены DQ-требования (покрытие календаря по датам flights, route-related FK), исправлены критерии готовности и текстовые несоответствия.
- Проверка:
  - git diff -- docs/internal/bookings_dds_design.md
2026-02-24 00:03:37 +03:00
ddadminandClaude Opus 4.6 06a5b7bc4c fix(dwh): исправлены 5 замечаний ревью плана DDS
- Зачем:
  - устранить противоречия и пробелы в плане DDS перед реализацией.
- Что:
  - HIGH: факт теперь использует point-in-time SCD2 lookup для routes,
    UPDATE факта не перезаписывает dimension SK (историчность сохранена).
  - MEDIUM: явная политика NULL FK в факте (3 группы: обязательные,
    зависят от маршрута, зависят от расписания) + DQ с порогом 1%.
  - MEDIUM: добавлены DQ-проверки SCD2 интервалов (valid_from < valid_to,
    нет перекрытий версий).
  - MEDIUM: DQ факта теперь проверяет calendar_sk и route_sk IS NULL
    с порогом.
  - LOW: добавлен стабильный tie-breaker (ticket_no) при дедупликации
    passengers.
  - добавлена секция backfill/reprocess политики.
- Проверка:
  - cat docs/internal/bookings_dds_design.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:05:16 +03:00
ddadminandClaude Opus 4.6 e6e923794c docs(dwh): добавлен план реализации DDS слоя (Star Schema)
- Зачем:
  - зафиксировать архитектурные решения DDS до начала реализации (для Codex).
- Что:
  - создан docs/internal/bookings_dds_design.md с полным планом DDS.
  - 6 измерений (calendar, airports, airplanes, tariffs, passengers, routes) + факт flight_sales.
  - dim_routes реализует классический SCD2 с hashdiff.
  - все остальные измерения — SCD1 UPSERT со стабильными SK.
  - факт — инкрементальный UPSERT по зерну (ticket_no, flight_id).
- Проверка:
  - cat docs/internal/bookings_dds_design.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 22:55:07 +03:00
ddadmin 03765d2808 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`.
2026-02-23 01:51:40 +03:00
ddadminandClaude Opus 4.6 dc1dc9c66a fix(dwh): исправлены 3 замечания codex-ревью плана ODS
- Зачем:
  - 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>
2026-02-22 23:44:08 +03:00
ddadminandClaude Opus 4.6 7bdb5acfcb docs(dwh): исправлен план ODS после ревью (v2 → v3)
- Зачем:
  - 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>
2026-02-22 23:39:16 +03:00
ddadmin 6ceff7b027 docs(dwh): зафиксированы конвенции нейминга и обновлён план ODS
- Зачем:
  - нужен единый стандарт именования полей, чтобы новые слои не расходились с учебными материалами.
- Что:
  - добавлен единый документ с правилами нейминга `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`).
2026-02-22 22:45:53 +03:00
ddadmin d1e81099c7 docs(internal): добавлен план реализации ODS слоя
- Зачем:
  - зафиксировать архитектурное решение для ODS слоя перед началом разработки.
- Что:
  - создан файл docs/internal/bookings_ods_design.md.
  - описана архитектура ODS и отличия от STG слоя.
  - добавлены схемы таблиц (справочники с SCD Type 2, транзакции с UPSERT).
- Проверка:
  - git show --stat HEAD
2026-02-22 21:31:14 +03:00
ddadmin 26d0ab3d87 docs(testing): добавлены проверки source-данных перед DAG-тестами
- Зачем:
  - исключены ложные падения DQ при пустом source в bookings-db.
- Что:
  - в TESTING.md добавлены pre-check команды COUNT(*) перед Trigger DAG.
  - в docs/agent-dag-testing.md добавлена обязательная проверка source и fallback при COUNT(*) = 0.
  - в таблицу типичных проблем добавлен кейс падения check_airports_dq/check_airplanes_dq с ошибкой "..._ext нет строк".
- Проверка:
  - rg -n "source непустой|COUNT\(\*\) = 0|bookings-generate-day|check_airports_dq" TESTING.md docs/agent-dag-testing.md
2026-02-22 21:08:17 +03:00
ddadminandClaude Sonnet 4.6 2fb60e67ed docs(agents): добавлен гайд по программному тестированию DAG
- Зачем:
  - AI-агенты пытались тестировать DAG через браузер вместо CLI/API,
    так как не было явных инструкций по программному подходу.
- Что:
  - добавлен docs/agent-dag-testing.md: CLI, REST API Airflow,
    проверка параллельности, запросы в Greenplum, E2E-тест, шпаргалка команд.
  - в AGENTS.md добавлена ссылка на новый гайд в раздел «Тестирование».
  - из docs/README.md убрана ссылка (файл для людей, не для агентов).
- Проверка:
  - cat docs/agent-dag-testing.md && grep agent-dag-testing AGENTS.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 20:54:02 +03:00
ddadmin cb5dd0528b docs: добавлен CLAUDE.md с инструкциями для AI-ассистента
- Зачем:
  - необходимо зафиксировать контекст и правила работы с проектом для Claude AI.
- Что:
  - создан файл CLAUDE.md с описанием структуры проекта.
  - добавлены инструкции по коммитам и стилю кода.
- Проверка:
  - git show --stat HEAD
2026-02-22 20:27:16 +03:00
ddadminandClaude Opus 4.6 69651f98ff refactor(dags): параллелизован граф DAG bookings_to_gp_stage
- Зачем:
  - линейный граф маскировал реальные зависимости данных; для эталонного
    стенда важно показать менти параллельный граф там, где данные независимы.
- Что:
  - airports и airplanes грузятся параллельно после check_tickets_dq.
  - routes ждёт обоих (DQ проверяет ссылочную целостность на оба справочника).
  - seats зависит только от airplanes и работает параллельно с веткой
    routes → flights → segments → boarding_passes.
  - finish_summary ждёт обе ветки (check_boarding_passes_dq + check_seats_dq).
  - datetime.utcnow() заменён на datetime.now(UTC) в csv_to_greenplum.py.
  - smoke-тесты дополнены проверкой параллельности и второй ветки.
  - документация обновлена с ASCII-схемой нового графа.
- Проверка:
  - make test (11 passed, 4 skipped), make lint — чисто.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 20:19:58 +03:00
ddadmin a0258fd63e Доводка стилистики документации 2026-01-18 22:52:49 +03:00
ddadmin 9e08bc181c Улучшение тестов 2026-01-18 22:32:57 +03:00
ddadmin 843500cf52 Улучшение DQ проверки 2026-01-18 22:24:06 +03:00
ddadmin e5a9a07f01 Улучшения комментариев 2026-01-18 21:56:17 +03:00
ddadmin 761cf5dd93 статусы задач 2026-01-18 21:53:28 +03:00
ddadmin 8946df4a28 Допустимость пустых данных по некоторым таблицам 2026-01-18 21:48:47 +03:00
ddadmin ba74b521dc Исправлены критические замечания 2026-01-18 21:33:46 +03:00
ddadmin 762d539d52 Ревью решения 2026-01-18 21:22:00 +03:00
ddadmin 4718b3bdb7 Отладка потоков 2026-01-18 13:47:09 +03:00
ddadmin 9c033b39aa Генерация dds слоя по ТЗ - без тестов 2026-01-18 11:04:46 +03:00
ddadmin 15081384f4 Замечания от codex 2026-01-18 10:37:59 +03:00
ddadmin 457b47e415 план работ by glm 2026-01-17 23:53:20 +03:00
ddadmin d525cf56c4 Финальные доработки 2026-01-17 23:19:37 +03:00
ddadmin 520eacbfe2 Доработки GLM 2026-01-17 23:14:49 +03:00
ddadmin fec67dfad2 доработки плана 2026-01-17 22:41:25 +03:00
ddadmin 10a36b6dfb план витрин до stg слоя 2026-01-17 22:27:05 +03:00
ddadmin 9ec7e82f5f Полировка кода 2026-01-17 21:43:02 +03:00
ddadmin f36a98497a Проверка/рецензирование доработки 2026-01-17 19:36:02 +03:00
ddadmin 93ba59c1c9 актуализация "что делали" 2026-01-17 19:11:10 +03:00
ddadmin 875746972c Отладка 2026-01-17 15:47:59 +03:00
ddadmin 464e631eea Первая версия dag 2026-01-17 15:09:08 +03:00
ddadmin 0208e6fd71 План работ 2026-01-17 15:05:11 +03:00
ddadmin 23581b4f4a Вынесена настройка портов всех сервисов 2026-01-09 20:48:25 +03:00
ddadmin 61103847aa Полировка документации 2026-01-09 20:48:05 +03:00
ddadmin cf1438fceb Merge branch 'docs/main-docs' 2026-01-09 19:46:54 +03:00
ddadmin 2d76789050 мелкие правки 2026-01-09 19:39:42 +03:00