From 26d0ab3d87a24374cdcf0def28f657975d3839dd Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sun, 22 Feb 2026 21:08:17 +0300 Subject: [PATCH] =?UTF-8?q?docs(testing):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20source-=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20DAG-=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - исключены ложные падения 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 --- TESTING.md | 5 +++++ docs/agent-dag-testing.md | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/TESTING.md b/TESTING.md index 38d3288..3e58938 100644 --- a/TESTING.md +++ b/TESTING.md @@ -39,6 +39,11 @@ - DAG `bookings_to_gp_stage` (полная проверка цепочки bookings → Greenplum STG): - предварительно выполнить один раз: `make bookings-init` (установка демобазы `demo` в контейнере `bookings-db`) и `make ddl-gp` (создаёт STG слой в 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` обязателен; - включить DAG `bookings_to_gp_stage` и запустить `Trigger DAG`; - убедиться, что все задачи завершились со статусом Success (включая загрузки справочников/транзакций и DQ); diff --git a/docs/agent-dag-testing.md b/docs/agent-dag-testing.md index 06386d6..d973fa6 100644 --- a/docs/agent-dag-testing.md +++ b/docs/agent-dag-testing.md @@ -24,6 +24,25 @@ make ddl-gp # создать STG-слой и внешние PXF- Если стек ранее сносился (`make clean`), шаги 1-3 обязательны. +Перед запуском `bookings_to_gp_stage` обязательно проверьте, что source непустой: + +```bash +# Все значения ниже должны быть > 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**: +1. Выполните `make bookings-init`. +2. Повторите проверки `COUNT(*)`. +3. Если `bookings.bookings` всё ещё пустая, выполните `make bookings-generate-day` и проверьте снова. + --- ## Уровень 1. Локальные проверки (без Docker) @@ -341,3 +360,4 @@ generate_bookings_day → load_bookings → check_bookings_dq | Greenplum `unhealthy` | PXF не стартовал (долгая инициализация) | Подождать 2-3 минуты, проверить `docker compose ps` | | `relation ... does not exist` | Не применён DDL | Выполнить `make ddl-gp` | | Пустые таблицы stg | Не выполнен `make bookings-init` | Выполнить `make bookings-init`, затем перезапустить DAG | +| `check_airports_dq` / `check_airplanes_dq` падают с `..._ext нет строк` | Source-таблицы в `bookings-db` пустые | Проверить `COUNT(*)` в `bookings.bookings`, `bookings.airports_data`, `bookings.airplanes_data`; затем `make bookings-init`/`make bookings-generate-day` |