0Pricing
SQL Academy · Урок

Непрерывные агрегаты

Предварительно агрегируйте данные временных рядов с помощью материализованных представлений CONTINUOUS AGGREGATE и инкрементального обновления

«Непрерывные агрегаты» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Что такое непрерывный агрегат?

Предварительно вычисленный агрегат над гипертаблицей, обновляемый по мере поступления данных. Это похоже на материализованное представление, которое разумно обновляется при появлении новых данных.

Создание непрерывного агрегата

Средние значения по устройствам за каждый час:

CREATE MATERIALIZED VIEW metrics_hourly
WITH (timescaledb.continuous) AS
SELECT device_id,
       time_bucket('1 hour', ts) AS hour,
       AVG(value) AS avg_value,
       COUNT(*)   AS samples
FROM metrics
GROUP BY device_id, hour;

Политика обновления

TimescaleDB автоматически обновляет данные:

SELECT add_continuous_aggregate_policy('metrics_hourly',
  start_offset => INTERVAL '1 day',
  end_offset   => INTERVAL '1 hour',
  schedule_interval => INTERVAL '15 minutes');
-- Every 15 minutes, refresh the window from 1 day ago to 1 hour ago.

Запросы

Просто используйте SELECT — TimescaleDB объединяет материализованные данные с необработанными данными за последний ещё не материализованный период:

SELECT * FROM metrics_hourly
WHERE device_id = 42
  AND hour >= NOW() - INTERVAL '7 days'
ORDER BY hour;

Агрегация в реальном времени

По умолчанию непрерывные агрегаты показывают предварительно вычисленные данные PLUS необработанные данные за ещё не материализованный хвост. Вы всегда видите самые свежие значения, но вычисление хвоста выполняется на лету.

Режим только материализованных данных

Для полностью предварительно вычисленных панелей мониторинга, без вычислений на лету, отключите агрегацию в реальном времени:

ALTER MATERIALIZED VIEW metrics_hourly
  SET (timescaledb.materialized_only = true);

Многоуровневая агрегация

Постройте уровни «почасовой → ежедневный → ежемесячный»:

-- daily aggregate from the hourly cagg
CREATE MATERIALIZED VIEW metrics_daily
WITH (timescaledb.continuous) AS
SELECT device_id, time_bucket('1 day', hour) AS day,
       AVG(avg_value) AS avg_value
FROM metrics_hourly
GROUP BY device_id, day;

Сжатие гипертаблицы не блокирует агрегацию

Вы можете сжать базовую гипертаблицу, при этом непрерывные агрегаты продолжат работать.

Когда непрерывные агрегаты лучше материализованных представлений

  • Данные временных рядов: встроенная семантика времени
  • Инкрементальное обновление — не нужно повторно сканировать всю историю
  • Интеграция хвоста в реальном времени
  • Многоуровневое свёртывание

Совместимость

Непрерывные агрегаты работают с гипертаблицами TimescaleDB. Для PostgreSQL без TS вам придётся самостоятельно реализовать материализованное представление и логику его обновления.

Дозаполнение исторических данных

Вручную обновите исторические данные, если изменили определение агрегата:

CALL refresh_continuous_aggregate('metrics_hourly',
  NULL, NOW());
-- Recompute from the beginning of time.

Итоги

Непрерывные агрегаты — это материализованные представления для данных временных рядов.

  • Определяются с помощью WITH (timescaledb.continuous)
  • Политика автоматического обновления
  • Сочетание данных в реальном времени и материализованных данных
  • Ежедневные и еженедельные уровни поверх почасового

Быстрая проверка

Почему непрерывный агрегат TimescaleDB обновляется эффективнее, чем при использовании REFRESH MATERIALIZED VIEW?

Часто задаваемые вопросы

Урок «Непрерывные агрегаты» бесплатный?

Да — полный текст урока «Непрерывные агрегаты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Непрерывные агрегаты»?

Предварительно агрегируйте данные временных рядов с помощью материализованных представлений CONTINUOUS AGGREGATE и инкрементального обновления Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Непрерывные агрегаты»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Гипертаблицы TimescaleDB
  2. Непрерывные агрегаты
  3. Политики сжатия и хранения
  4. Выбор индексов для временных рядов
← Назад к SQL Academy