feat(main): заглушки студенческих файлов, ослабление DQ, адаптация тестов
- fact_flight_sales_dq: student SK (passenger/route/airplane) → NOTICE, airport_sk → порог 1% (эталон через ods.routes) - routes_dq: закомментирован RI airplane_code → ods.airplanes - ODS DAG: убрана зависимость dq_ods_airplanes → load_ods_routes - 18 студенческих файлов заменены заглушками (ODS/DDS/DM load+dq) - test_ods_sql_contract: SNAPSHOT_ENTITIES без airplanes/seats - test_dags_smoke: убран assert dq_ods_airplanes → dq_ods_routes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,59 +1,3 @@
|
||||
-- DQ проверки для витрины dm.route_performance.
|
||||
--
|
||||
-- Учебные цели:
|
||||
-- 1. Использование PL/pgSQL блоков (DO $$ ...) для кастомных проверок.
|
||||
-- 2. Валидация бизнес-инвариантов после загрузки Full Rebuild.
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
row_count INTEGER;
|
||||
duplicate_count INTEGER;
|
||||
invalid_metrics_count INTEGER;
|
||||
null_attributes_count INTEGER;
|
||||
BEGIN
|
||||
-- 1. Проверка на наполненность
|
||||
SELECT COUNT(*) INTO row_count FROM dm.route_performance;
|
||||
IF row_count = 0 THEN
|
||||
RAISE EXCEPTION 'DQ Error: Таблица dm.route_performance пуста после загрузки.';
|
||||
END IF;
|
||||
|
||||
-- 2. Проверка на уникальность бизнес-ключа
|
||||
SELECT COUNT(*) INTO duplicate_count
|
||||
FROM (
|
||||
SELECT route_bk FROM dm.route_performance
|
||||
GROUP BY route_bk HAVING COUNT(*) > 1
|
||||
) AS q;
|
||||
IF duplicate_count > 0 THEN
|
||||
RAISE EXCEPTION 'DQ Error: В dm.route_performance обнаружены дубликаты по route_bk (% шт).', duplicate_count;
|
||||
END IF;
|
||||
|
||||
-- 3. Проверка бизнес-метрик (инварианты)
|
||||
-- Load factor не может быть отрицательным или физически невозможным (например, более 200%)
|
||||
SELECT COUNT(*) INTO invalid_metrics_count
|
||||
FROM dm.route_performance
|
||||
WHERE avg_load_factor < 0 OR avg_load_factor > 2.0;
|
||||
|
||||
IF invalid_metrics_count > 0 THEN
|
||||
RAISE EXCEPTION 'DQ Error: В dm.route_performance обнаружены некорректные показатели load factor (% строк).', invalid_metrics_count;
|
||||
END IF;
|
||||
|
||||
-- 4. Проверка обязательных атрибутов на NULL
|
||||
SELECT COUNT(*) INTO null_attributes_count
|
||||
FROM dm.route_performance
|
||||
WHERE departure_city IS NULL OR arrival_city IS NULL OR airplane_model IS NULL;
|
||||
|
||||
IF null_attributes_count > 0 THEN
|
||||
RAISE EXCEPTION 'DQ Error: В dm.route_performance обнаружены NULL-значения в обязательных полях (% строк).', null_attributes_count;
|
||||
END IF;
|
||||
|
||||
-- 5. Проверка: посаженных не может быть больше, чем купивших билет
|
||||
SELECT COUNT(*) INTO invalid_metrics_count
|
||||
FROM dm.route_performance
|
||||
WHERE total_boarded > total_tickets;
|
||||
|
||||
IF invalid_metrics_count > 0 THEN
|
||||
RAISE EXCEPTION 'DQ Error: В dm.route_performance total_boarded > total_tickets (% строк).', invalid_metrics_count;
|
||||
END IF;
|
||||
|
||||
RAISE NOTICE 'DQ Success: dm.route_performance успешно прошла все проверки (% строк).', row_count;
|
||||
END $$;
|
||||
-- TODO: реализуйте проверки качества данных для dm.route_performance
|
||||
-- Эталонную реализацию можно найти в ветке solution.
|
||||
SELECT 1;
|
||||
|
||||
Reference in New Issue
Block a user