- Зачем:
- ветка содержала устаревшие ссылки, артефакты CSV-пайплайна и метки «черновик»
для полностью реализованных слоёв STG→ODS→DDS→DM.
- Что:
- AGENTS.md: заменена фраза «в будущем» на перечисление реальных слоёв ODS/DDS/DM.
- TESTING.md: удалены две строки про каталог data/ (артефакт CSV-пайплайна).
- README.md: список документации заменён на кликабельные markdown-ссылки, добавлены STG и DM DAG.
- docs/README.md: добавлен DM DAG в «Быстрый путь», DM design в «Технические детали»; убраны метки «(черновик)».
- docs/internal/bookings_stg_design.md: убран заголовок «черновик», исправлены описания слоёв и DDL.
- docs/internal/PRD.md: битая ссылка на analyst_spec.md заменена текстом с пометкой TODO.
- TODO.md: ссылка на plans/ обновлена на docs/internal/bookings_db_issues.md.
- docs/bookings_to_gp_dm.md: создан новый документ по аналогии с DDS doc (5 витрин, граф, DQ, ошибки).
- plans/ и docs/chore/: каталоги удалены (планы выполнены, история сохранена в git).
- Проверка:
- make lint && make test — прошло чисто.
- grep -n "черновик|data/|в будущем|plans/" — пустой результат.
9.5 KiB
9.5 KiB
План тестирования (для студентов)
Этот документ — пошаговый чек‑лист, как проверить, что всё работает: от «быстрых локальных проверок» до запуска стенда в Docker и просмотра данных в Greenplum. Подходит начинающим: просто выполняйте шаги по порядку.
Если что‑то пошло не так, смотрите раздел «Быстрый reset» ниже.
1. Быстрая проверка окружения
uv sync— подтягиваем Python и зависимости изpyproject.toml/uv.lock.- Проверяем версию uv:
uv --version(ожидаем ≥ 0.9). - Убедитесь, что
docker compose versionдоступна и Docker запущен.
2. Локальные автоматические проверки (без Docker)
make test— короткие unit-тесты (tests/test_greenplum_helpers.py,tests/test_dags_smoke.py).- Smoke-тесты DAG автоматически
skip, если Airflow не установлен в venv, поэтому прогонится за миллисекунды.
- Smoke-тесты DAG автоматически
make lint— black/isort в режиме проверки (послеmake fmtдолжен проходить без ошибок).make fmt— автоисправление форматирования; полезно запускать перед пушем.- (опционально)
uv run pytest -q -k dags_smoke— только DAG smoke.
3. Подготовка Docker-стенда
cp .env.example .env(если файла ещё нет) и проверьте переменные:GP_PORT— внутренний порт Greenplum в Docker-сети (по умолчанию 5432, менять не нужно); внешний порт для подключения с хоста фиксирован на5435, поэтому локальный PostgreSQL на 5432 не помешает.GP_USE_AIRFLOW_CONN=trueпри желании использовать Airflow Connection;false— fallback на ENV.
- Если меняли
airflow/requirements.txtилиDockerfile.airflow, выполнитеmake buildпередmake up. make up— поднимаем все сервисы. Важно дождаться статусаhealthyуpgmetaиgreenplum(docker compose ps);greenplumсчитаетсяhealthyтолько когда поднят и Greenplum, и PXF.make logs— следим, пока webserver и scheduler не перейдут в рабочее состояние (Listening at: http://0.0.0.0:8080).
4. Smoke тесты DAG в Airflow UI
- Открыть http://localhost:8080 (admin/admin).
- (опционально) Зайти в Admin → Connections и убедиться, что DAG’и видят подключения:
greenplum_connиbookings_dbзадаются через переменныеAIRFLOW_CONN_...в docker-compose и могут не отображаться в списке, ноairflow connections get greenplum_conn/bookings_dbвнутри контейнера должны отрабатывать без ошибок.
-
DAG
bookings_to_gp_stage(полная проверка цепочки bookings → Greenplum STG):- предварительно выполнить один раз:
make bookings-init(быстрое восстановление демобазыdemoиз seed-дампа, ~18 сек) иmake ddl-gp(создаёт STG/ODS/DDS слои в Greenplum, включая внешние*_extчерез PXF); - перед Trigger проверить, что в source реально есть данные (все значения должны быть
> 0):docker compose exec bookings-db psql -U bookings -d demo -At -c "SELECT COUNT(*) FROM bookings.bookings;"docker compose exec bookings-db psql -U bookings -d demo -At -c "SELECT COUNT(*) FROM bookings.airports_data;"docker compose exec bookings-db psql -U bookings -d demo -At -c "SELECT COUNT(*) FROM bookings.airplanes_data;"
- если хотя бы один
COUNT(*) = 0, не запускать DAG: повторитьmake bookings-init; если после этогоbookings.bookingsвсё ещё пустая, выполнитьmake bookings-generate-dayи снова проверитьCOUNT(*); - важно: DAG
bookings_stg_ddlне создаёт базуdemoвbookings-db; если вы делалиdocker compose down -v/make clean,make bookings-initобязателен (быстрое восстановление из seed-дампа); - включить DAG
bookings_to_gp_stageи запуститьTrigger DAG; - убедиться, что все задачи завершились со статусом Success (включая загрузки справочников/транзакций и DQ);
- при желании проверить данные: в
bookings-dbпоявился новый день, а в Greenplum вstg.bookings— строки с актуальнымbatch_id(см. пример запросов в разделе 5).
- предварительно выполнить один раз:
-
(опционально, для менторов/разработчиков) Smoke-тест DAG через Airflow CLI без UI:
docker compose -f docker-compose.yml exec airflow-webserver airflow dags test bookings_to_gp_stage 2024-01-01— прогоняетbookings_to_gp_stageцеликом в «off-line» режиме;docker compose -f docker-compose.yml exec airflow-webserver airflow dags trigger bookings_to_gp_stage— создаёт реальный запуск DAG (логи и статус можно смотреть либо через UI, либо командойairflow tasks list/airflow tasks logsвнутри контейнера).
5. Проверка данных в Greenplum
make gp-psql— запустить psql в контейнере от имениgpadmin.- (опционально) Проверить, что PXF действительно запущен:
docker compose exec greenplum bash -lc "su - gpadmin -c '/usr/local/pxf/bin/pxf cluster status'"
- Команды внутри psql:
\dt public.*— таблицы схему public.- (после настройки PXF)
SELECT COUNT(*) FROM public.ext_bookings_bookings;— проверка чтения из демо-БД bookings через PXF. - (после настройки PXF)
SELECT * FROM public.ext_bookings_bookings LIMIT 5;— визуальное сравнение с таблицейbookings.bookingsв исходной БД.
- Завершить
\q.
6. Негативные сценарии и fallback
- Проблемы с подключением: временно изменить
GP_HOSTилиGP_PORTна несуществующий, перезапуститьmake up, убедиться, что DAG падает с понятной ошибкой (psycopg2.OperationalError). - Fallback без Airflow Connection: установить
GP_USE_AIRFLOW_CONN=false, перезапустить стек (make down && make up), удостовериться, что загрузка и DQ работают через ENV. - PXF и демобаза bookings (после настройки PXF и выполнения
make ddl-gp): временно остановитьbookings-db(docker compose stop bookings-db) и попробовать выполнитьSELECT COUNT(*) FROM public.ext_bookings_bookings;вmake gp-psql— ожидается ошибка подключения. Затем запуститьbookings-db(docker compose start bookings-db) и убедиться, что запрос снова работает.
7. Быстрый reset (если «что-то сломалось»)
- Перезапустить стенд:
- Мягкий вариант (сохранить данные):
make stop, затемmake up. - Полный reset (очистить данные в Docker-томах):
make clean, затемmake up(Greenplum/Airflow/bookings будут подняты и инициализированы с нуля).
- Мягкий вариант (сохранить данные):
- Иногда Greenplum не стартует после «грязных» остановок (из‑за старых внутренних файлов). Лечение: всегда делайте
make downперед повторнымmake up.
8. Снятие метрик и мониторинг
- Контейнеры:
docker compose ps,docker stats(по желанию). - Логи задач: в Airflow UI → конкретный таск → Log.
9. Завершение работы
make down— выключает сервисы и удаляет контейнеры/сети (volumes сохраняются).- Полный сброс данных (удаляет volumes):
make clean.
Текущий статус (пример успешного прогона)
uv run pytest -q— 14 passed, 9 smoke-тестов DAG пропущены (Airflow не установлен в venv).make lint— проходит (DAG‑файлы отформатированы black/isort).- Docker-стенд не запускался в рамках этой сессии; ожидается, что инструкции выше обеспечат полноценную проверку.