График непрерывных агрегатов на все время - PullRequest
0 голосов
/ 30 апреля 2020

Я хотел бы спросить, является ли непрерывное агрегирование наиболее оптимальным решением, если я хочу получать агрегированные значения за все время, а не за конкретное время? Вот запрос, который я составил

 CREATE VIEW device_summary
WITH (timescaledb.continuous)
    AS
    SELECT
      time_bucket('1 day', module_timestamp) as bucket,
      sum(CAST(component_data->'common'->'bat' AS INT)) as bat_sum
    FROM
      main_componentmessage
    GROUP BY bucket;

Я думаю, один Решением было бы увеличить интервал времени до действительно большого числа (скажем, 999999 недель, чтобы включить «начало времени»), но опять же я не уверен, что это сработает, поскольку он не будет отличаться от обычного агрегированного запроса, так как интервал времени рефрема sh будет очень большим, и это побеждает цель. Я мог бы просто сделать запрос суммы для всех записей

Вторым решением было бы создать сумму поверх однодневных запросов с интервалом, чтобы я мог получить общую сумму, но я не уверен, имеет ли это смысл.

SELECT SUM(bat_sum) from device_summary

Любые предложения о том, как go об этом?

1 Ответ

1 голос
/ 03 мая 2020

Внутренне непрерывные агрегаты в TimescaleDB создают таблицу материализации с частичными агрегатами для каждого сегмента. Затем они регулярно обновляются по мере добавления новых данных в необработанную таблицу.

В результате, наличие очень широкого сегмента вряд ли даст вам какое-либо повышение производительности, поскольку, как вы говорите, это аналогично обычному агрегированному запросу.

Если у вас меньший сегмент, а затем вычислена сумма всех этих значений, вы можете получить улучшение производительности, поскольку старые сегменты не пересчитываются и вместо этого используются как новые данные. приходит в частичные агрегаты для новых данных вычисляется.

...