Как TimescaleDB способ вручную консолидировать агрегированные данные? - PullRequest
1 голос
/ 09 июля 2019

У меня довольно распространенный временной ряд:

  • Hypertable TimescaleDB ( data ), отслеживающий некоторые метрики с течением времени. Столбцы: метка времени, идентификатор, метрика.
  • Hypertable имеет таблицу непрерывного агрегирования ( aggregated_data ), которая агрегирует метрику на почасовой основе, сохраняя несколько статистических значений (avg, min, max).
  • Пользователю будут показаны только агрегированные показатели

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

Каков TimescaleDB способ достичь этого?

Вот что я придумал:

  • Создание обычной таблицы ( консолидированных_данных ) для консолидированных данных вручную
  • Эта таблица будет иметь те же столбцы, что и aggregated_data view
  • Затем я объединил бы эти две таблицы и добавил бы SQL, чтобы избежать дублирования, идентифицировал консолидированные данные, ...

В этом случае операция UNION будет выглядеть примерно так (я на самом деле не выполнял / не проверял этот оператор):

SELECT DISTINCT timestamp, identifier FROM (
   SELECT timestamp, identifier, metric, true as consolidated FROM consolidated_data WHERE timestamp > NOW() - interval '7 days'
   UNION ALL
   SELECT timestamp, identifier, metric, false as consolidated FROM aggregated_data WHERE timestamp > NOW() - interval '7 days'
)
ORDER BY timestamp;

Я бы ожидал, что этот подход сработает, однако еще много неизвестных:

  • Должна ли консолидированная таблица быть Hypertable? Это ускорит операцию UNION?
  • Должен ли я предпочесть MERGE?
  • Есть ли более умный способ с инструментами и утилитами, о которых я еще не знаю?

1 Ответ

1 голос
/ 09 июля 2019

Конечно, есть люди, которые вручную создают непрерывные агрегаты, и вы можете сделать что-то вроде работы CRON, чтобы достичь этого.

При этом кажется, что все может быть проще, если вы максимально задействуете БД. Вы можете использовать наши функции разрыва / LOCF для заполнения последнего значения во время запроса.

Наш следующий выпуск также позволит вам иметь несколько непрерывных агрегатов в гипертаблице, а также сделает JOIN-файлы, включающие гипертаблицы, более производительными.

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

...