- Зачем:
- генерация с нуля занимала часы, boarding_passes были пустыми, данные
пропадали после docker compose down/up.
- Что:
- обновлён demodb до коммита 866e56f, добавлен патч install_connstr_no_hardcode.
- BOOKINGS_INIT_DAYS увеличен до 60, BOOKINGS_JOBS по умолчанию 2.
- добавлен seed-дамп bookings/seed/demo.sql.xz (42 MB, xz вместо 7z).
- make bookings-init восстанавливает из дампа (~18 сек) и применяет GUC из .env.
- make bookings-generate — генерация с нуля для разработчиков.
- generate_next_day.sql: COMMIT после continue(), pg_sleep(3) для jobs>1, synchronous_commit=on + CHECKPOINT.
- bookings-check-jobs: добавлена валидация нечисловых значений BOOKINGS_JOBS.
- bookings-init теперь вызывает bookings-check-jobs как prerequisite.
- синхронизированы внутренние документы (коммит demodb, init_days=60).
- Проверка:
- make bookings-init && make bookings-generate-day BOOKINGS_JOBS=2.
- make test.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
9.3 KiB
TODO (maintainers / mentors)
Этот файл собирает задачи по подготовке стенда к курсовой работе и идеи по доработке, которые не критичны для текущих задач менти.
Контекст и стратегия: docs/internal/PRD.md. Дизайн задания: docs/internal/assignment_design.md.
Подготовка курсовой
Дедлайн: ~2-3 недели (первый студент может подойти к курсовой).
Этап 1. Вынос CSV-пайплайна
Инструмент: Sonnet / Gemini / ChatGPT — механическая работа, перенос файлов.
- Перенести в airflow-manual:
csv_to_greenplum.py,csv_to_greenplum_dq.py,ddl_greenplum_base.py,helpers/greenplum.py,sql/base/orders_ddl.sql, связанные тесты - Убрать CSV-зависимости из docker-compose / .env (
CSV_DIR,CSV_ROWS) - Обновить README (убрать упоминания CSV-пайплайна)
Этап 1.5. Полировка эталона
Инструмент: Opus (глубокий анализ кода и контекста проекта)
- ручное тестирование (make up, запуск DAG'ов, проверка данных).
- Протестировать полный ETL-цикл с нуля (make up → bookings-init (восстановление из дампа) → STG → ODS → DDS → DM)
- Прогнать инкремент (bookings-generate-day → повторный запуск DAG'ов)
- Почистить код эталонного среза
- Актуализировать README и документацию
- Убедиться, что
make testиmake lintпроходят - Проверить, что стенд поднимается на чистой машине
Этап 2. Подготовка main
Инструмент: Sonnet — удаление файлов и добавление заглушек по списку из assignment_design.md.
- Оставить только эталонный срез (sales_report + цепочка)
- Убрать реализации таблиц-заданий (airplanes, seats, routes в STG/ODS; dim_airplanes, dim_passengers, dim_routes в DDS; 4 витрины DM)
- Добавить TODO-маркеры / заглушки в DAG'ах для студенческих тасков
- Обновить
ddl_gp.sql(убрать\iдля таблиц-заданий)
Этап 3. ТЗ от аналитика
Инструмент: Opus — нужно глубокое понимание предметной области, маппингов между слоями, SCD-паттернов и педагогического контекста.
- Создать
docs/assignment/analyst_spec.md - Для каждой таблицы-задания: имя, описание, поля, маппинг, бизнес-правила, тип SCD, гранулярность, distribution key
- Для dim_routes (SCD2): пошаговый алгоритм текстом, формула hashdiff
- Рекомендуемый порядок выполнения
Этап 4. Валидационный DAG
Инструмент: Sonnet (шаблонная работа, структура в assignment_design.md)
- Opus для финальной вычитки.
- Создать
airflow/dags/bookings_validate.py - Создать SQL-скрипты в
sql/validate/ - Таски по слоям: STG, ODS, DDS, DM
- Дружелюбные сообщения об ошибках с подсказками
Этап 5. Ветка solution
Инструмент: Вручную / Sonnet — реализация уже есть в ветке
chore/bookings-etl, нужно собрать в ветку solution.
- Создать ветку
solutionот main (после подготовки) - Добавить полные реализации всех таблиц-заданий
- Проверить, что всё работает end-to-end
Прочее (бэклог)
- Протестировать устойчивость
bookings-dbпосле остановки контейнеров:- прогнать сценарии
make stop->make upиmake down->make up; - зафиксировать, ломается ли генератор/данные в
bookings-db; - при необходимости добавить шаги восстановления и обновить документацию.
- прогнать сценарии
Выполнено
-
Сделать REST API Airflow основным способом тестирования ETL вместо CLI-вызовов через
docker compose exec ... airflow ...:- обновить
TESTING.md, сместив фокус на REST API сценарии; - оставить CLI как резервный вариант для локальной отладки;
- проверить, что шаги тестирования воспроизводимы без входа в контейнер Airflow.
- обновить
-
Собрать свой образ Airflow поверх
apache/airflow:2.9.2:- вынести установку Python‑зависимостей из runtime (
pip install ...при старте контейнеров) в отдельныйDockerfile; - переключить
docker-compose.ymlна использование этого образа дляairflow-webserver,airflow-schedulerиairflow-init; - обновить документацию (README/TESTING) под новую схему сборки.
- вынести установку Python‑зависимостей из runtime (
-
Переключить Airflow с
SequentialExecutor(SequentialScheduler) наLocalExecutorдля docker‑стенда:- проверить, какие параметры достаточно поменять в env/конфиге (
AIRFLOW__CORE__EXECUTOR) для образаapache/airflow:2.9.2; - убедиться, что примерные DAG'и (
csv_to_greenplum,bookings_to_gp_stage) ведут себя предсказуемо в режиме параллельного исполнения; - при необходимости скорректировать тесты и документацию (README/TESTING) с учётом нового executor'а.
- проверить, какие параметры достаточно поменять в env/конфиге (
-
Разобрать и стабилизировать интеграцию с Greenplum/PXF:
- убедиться, что PXF в контейнере
greenplumвсегда корректно инициализируется (нет ошибок видаprotocol "pxf" does not existпри первом запускеmake ddl-gp); - при необходимости доработать init‑скрипты в
pxf/init/и/или документацию, чтобы порядок действий для ментей был однозначным и воспроизводимым; - добавить краткий раздел в README/TESTING о типичных ошибках PXF/Greenplum и шагах по их устранению.
- диагностика текущего кейса:
docs/internal/pxf_bookings.md(раздел «Известная проблема»).
- убедиться, что PXF в контейнере
-
Разобраться с генератором demodb:
- после
make bookings-generateтаблицаbookings.bookingsостаётся пустой; - патчи
bookings/patches/engine_jobs1_sync.patchиbookings/patches/install_drop_if_exists.patchпадают при применении (hunk failed / garbage in patch); - из‑за этого DAG
bookings_to_gp_stageвалится на проверках (источник пустой). - план:
plans/bookings-demodb-bugfix-plan.md
- после
-
Добавить раздел «Благодарности» в
README.md:- явно поблагодарить Postgres Pro за демо‑БД bookings (репозиторий
postgrespro/demodb); - указать автора Docker‑сборки Greenplum (
woblerr/docker-greenplum, образwoblerr/greenplum); - при необходимости сослаться на соответствующие лицензии/README исходных проектов.
- явно поблагодарить Postgres Pro за демо‑БД bookings (репозиторий
-
Добавить в образ Airflow установку
psql, чтобы тестировать загрузку CSV из CLI внутри контейнера (без root и дополнительных зависимостей на хосте). -
Денормализовать
dds.dim_routes(добавить departure_city, arrival_city, airplane_model, total_seats):- привести измерение в соответствие с принципом Кимбалла («самодостаточное измерение»);
- упростить
dm.route_performanceс 4-JOIN до 1-JOIN; - обновить DAG-зависимости: airports+airplanes DQ → routes load;
- подробный план:
docs/internal/dim_routes_denormalization_plan.md.