Дашборд показывает вчерашние заказы на 90% ниже. Найдите и исправьте ошибку запроса, из-за которой падение ложное.
Плитка дневных заказов показывает вчера на 90% ниже нормы. Ограничения: orders грузится батчевым ETL, чья партиция за день дозагружается около полудня, поэтому вчера была загружена лишь частично на момент запуска плитки. Таблица _load_status(load_date, is_complete) фиксирует, когда партиция дня полностью приземлилась.
-- Плитка дневных заказов — вчера читается на 90% ниже нормы
SELECT order_date, COUNT(*) AS orders
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '14 days'
GROUP BY order_date
ORDER BY order_date;
Объясните, почему вчера выглядит пустым, и добавьте защиту, отсекающую неполные партиции.
Падение — артефакт полноты данных: вчерашняя партиция ещё грузится, поэтому COUNT видит лишь приземлившиеся строки. Подтвердите за секунды по статусу загрузки. Почините плитку, отбрасывая день, чья партиция не помечена полной: JOIN к _load_status и фильтр по is_complete.
- ✗Считать неполную партицию реальным обвалом
- ✗Расширять окно вместо защиты по полноте
- ✗Винить дедупликацию вместо свежести данных
- →Какая одна проверка подтвердит полноту партиции меньше чем за минуту?
- →Как в следующий раз не дать этому поднять тревогу у команды?
Число за вчера низкое не потому, что заказов не было, а потому, что партиция ещё дозагружается (backfill около полудня): COUNT(*) считает только успевшие приземлиться строки. Быстрая проверка за секунды — свериться с _load_status, полна ли партиция. Чинят JOIN к _load_status и фильтром is_complete, чтобы неполные дни вообще не попадали в плитку:
-- Guard: only count days whose partition is fully loaded
SELECT o.order_date, COUNT(*) AS orders
FROM orders o
JOIN _load_status s
ON s.load_date = o.order_date AND s.is_complete
WHERE o.order_date >= CURRENT_DATE - INTERVAL '14 days'
GROUP BY o.order_date
ORDER BY o.order_date;
INNER JOIN по is_complete отбрасывает вчерашний день, пока он не помечен полным, — плитка показывает только целые дни, а частичная партиция не рисуется как обвал.