Короткий ответ
Единственно верного ответа нет: решение зависит от требуемой свежести данных, количества и разнообразия нужных разрезов, объёма данных и стоимости вычислений — предагрегация выигрывает в скорости чтения и предсказуемой стоимости, но жертвует гибкостью разрезов и добавляет инфраструктурную сложность пайплайна обновления.
Как это работает подробнее
предагрегированные таблицы (построенные по расписанию через ETL/ELT) заранее сворачивают детальные данные до нужных измерений, резко уменьшая объём, который читается при каждом запросе отчёта; расчёт «на лету» всегда обращается к детальным данным и пересчитывает агрегаты заново при каждом запуске, что проще поддерживать, но дороже по ресурсам при росте объёма и частоты обращений.
Компромисс. нет universal правильного порога объёма данных или частоты запросов, при котором нужно переходить к предагрегации — решение требует измерения реальной стоимости и задержки текущего подхода и сопоставления с инфраструктурными затратами на поддержку пайплайна обновления, включая риск устаревания данных при сбое обновления.
Пример кода
-- Предагрегированная таблица, обновляемая раз в сутки
CREATE TABLE agg_daily_sales AS
SELECT DATE_TRUNC('day', order_date) AS day, region, category, SUM(amount) AS revenue
FROM orders
GROUP BY 1, 2, 3;Что использовать на практике
- Практика. типичный компромиссный путь — предагрегировать только самые частые и тяжёлые разрезы (например, по дням и по топ-уровню категорий), оставляя редкие ad-hoc разрезы для расчёта на лету по детальным данным; при этом важно явно документировать, какие именно разрезы предрасчитаны, чтобы аналитики не путали «есть только по дням» с «можно получить любой разрез».
- Проверка. Проверка: сравнить время ответа дашборда на
agg_daily_salesпротив прямого запроса кordersна актуальном объёме данных, и явно замерить задержку между событием и его появлением в агрегированной таблице после обновления.
Подводные камни
- Частая ошибка. предагрегируют слишком много разрезов «на будущее», не имея подтверждённого спроса на них, что увеличивает сложность пайплайна без реальной выгоды; либо, наоборот, затягивают с предагрегацией до момента, когда расчёты на лету уже создают заметные проблемы с задержкой и стоимостью, и переход становится болезненным и срочным.