Короткий ответ
Вычислите MAX(loaded_at) и задержку относительно текущего времени. Проверка успешна, если задержка не превышает допустимый интервал для конкретного набора.
Как это работает подробнее
Техническое поле загрузки показывает, когда строка попала в DWH. Поле бизнес-события может быть старым даже при исправно работающем пайплайне или новым после поздней повторной загрузки.
- Порог. Для часовой таблицы и ежедневной витрины нужны разные SLA.
- Полнота. Вместе со временем последней строки проверяйте ожидаемое количество записей или партиций.
Пример кода
check_freshness.sql
SELECT
MAX(loaded_at) AS last_load_at,
CURRENT_TIMESTAMP - MAX(loaded_at) AS staleness
FROM warehouse.fact_orders
HAVING CURRENT_TIMESTAMP - MAX(loaded_at) <= INTERVAL '25 hours';Что использовать на практике
- Автоматизируйте проверку до обновления зависимых отчётов.
- Храните результат и отправляйте оповещение владельцу только после превышения согласованного SLA.
Подводные камни
- Неверное поле.
created_atсобытия не доказывает успешность последней загрузки. - Пустая таблица.
MAXвернётNULL; этот случай нужно считать ошибкой отдельно.