статусы задач

This commit is contained in:
2026-01-18 21:53:28 +03:00
parent 8946df4a28
commit 761cf5dd93
+13 -11
View File
@@ -42,27 +42,29 @@
Файлы: `sql/stg/routes_ddl.sql`, `sql/stg/flights_ddl.sql`, `sql/stg/segments_ddl.sql`, `sql/stg/boarding_passes_ddl.sql`. Файлы: `sql/stg/routes_ddl.sql`, `sql/stg/flights_ddl.sql`, `sql/stg/segments_ddl.sql`, `sql/stg/boarding_passes_ddl.sql`.
### 2.2. DQ-проверки ссылочной целостности: “текущий батч” vs “вся история” (статус: зафиксировано и частично усилено) ### 2.2. DQ-проверки ссылочной целостности: “текущий батч” vs “вся история” (статус: исправлено)
Часть DQ-скриптов проверяет наличие “родительских” записей в таблице **без фильтра `batch_id`**. Часть DQ-скриптов проверяет наличие “родительских” записей в таблице **без фильтра `batch_id`**.
При append-only истории это может скрыть проблемы текущей загрузки: При append-only истории это может скрыть проблемы текущей загрузки:
родитель был загружен в прошлом батче → проверка пройдёт, даже если текущий батч родителя не загрузил. родитель был загружен в прошлом батче → проверка пройдёт, даже если текущий батч родителя не загрузил.
Что сделано для справочников (snapshot), которые загружаются каждый запуск: Что сделано:
- `routes_dq.sql`: проверка airports/airplanes стала батч-строгой (`batch_id = текущий батч`). - `routes_dq.sql`: проверка airports/airplanes стала батч-строгой (`batch_id = текущий батч`).
- `seats_dq.sql`: проверка airplanes стала батч-строгой (`batch_id = текущий батч`). - `seats_dq.sql`: проверка airplanes стала батч-строгой (`batch_id = текущий батч`).
- `flights_dq.sql`: проверка routes стала батч-строгой (`batch_id = текущий батч`). - `flights_dq.sql`: проверка routes стала батч-строгой (`batch_id = текущий батч`).
Почему не всё делаем батч-строго: Примечание (почему не везде `batch_id = текущий батч`):
- Для инкрементальных таблиц (например, `segments`) ссылки могут указывать на данные, - Если дочерняя таблица грузится инкрементом, то ссылки могут указывать на “исторические” записи,
загруженные в предыдущих батчах → там корректнее проверять “существует в STG вообще”, а не “существует в текущем батче”. загруженные в предыдущих батчах → для таких связей корректнее проверять “существует в STG вообще”.
- Для `boarding_passes` (full snapshot) ссылки на `tickets/segments` также проверяются по STG-истории,
потому что `tickets/segments` не перезагружаются полным снэпшотом каждый запуск.
### 2.3. Smoke-тесты DAG’ов (статус: исправлено) ### 2.3. Smoke-тесты DAG’ов (статус: исправлено)
Что сделано: Что сделано:
- Тесты усилены: теперь проверяются ключевые зависимости графа через `get_direct_relatives("downstream")`. - Тесты усилены: теперь проверяются ключевые зависимости графа через `get_direct_relatives("downstream")`.
### 2.4. Документация по DAG (статус: синхронизировано базово) ### 2.4. Документация по DAG (статус: синхронизировано)
Что сделано: Что сделано:
- `docs/bookings_to_gp_stage.md` обновлён так, чтобы отражать текущий набор таблиц и шагов пайплайна. - `docs/bookings_to_gp_stage.md` обновлён так, чтобы отражать текущий набор таблиц и шагов пайплайна.
@@ -71,11 +73,11 @@
## 3) Рекомендации по качеству и читаемости (Clean Code для SQL и DAG) ## 3) Рекомендации по качеству и читаемости (Clean Code для SQL и DAG)
### 3.1. “Empty window” в инкременте: договориться о политике (fail vs skip) ### 3.1. “Empty window” в инкременте: договориться о политике (fail vs skip) (статус: исправлено)
Сейчас поведение разное: Раньше поведение было разным:
- `bookings_dq.sql` / `tickets_dq.sql` / `flights_dq.sql` / `segments_dq.sql` падают, если в окне инкремента 0 строк; - часть DQ-скриптов падала, если в окне инкремента 0 строк;
- `boarding_passes_dq.sql` делает `RAISE NOTICE` и `RETURN`. - `boarding_passes_dq.sql` делал `RAISE NOTICE` и `RETURN`.
Обе стратегии допустимы, но в учебном решении важно выбрать одну и объяснить: Обе стратегии допустимы, но в учебном решении важно выбрать одну и объяснить:
- **Fail** полезен, когда “ожидаем данные в каждом запуске” (например, учебный генератор должен добавлять день); - **Fail** полезен, когда “ожидаем данные в каждом запуске” (например, учебный генератор должен добавлять день);
@@ -138,7 +140,7 @@ assert airports_load in tickets_dq.get_direct_relatives("downstream")
## 5) Чек-лист “готово как эталон” ## 5) Чек-лист “готово как эталон”
- [x] В DDL-комментариях нет неверных обещаний про co-location/уникальность ключей. - [x] В DDL-комментариях нет неверных обещаний про co-location/уникальность ключей.
- [ ] Для DQ определена и описана политика “0 строк”: где fail, где skip. - [x] Для DQ определена и описана политика “0 строк”: где fail, где skip.
- [x] DQ ссылочной целостности не маскирует проблемы текущего батча (batch-строгие проверки там, где это уместно). - [x] DQ ссылочной целостности не маскирует проблемы текущего батча (batch-строгие проверки там, где это уместно).
- [x] `docs/bookings_to_gp_stage.md` соответствует фактическому DAG. - [x] `docs/bookings_to_gp_stage.md` соответствует фактическому DAG.
- [x] Smoke-тесты проверяют хотя бы критические зависимости графа. - [x] Smoke-тесты проверяют хотя бы критические зависимости графа.