2

我有一个相当常见的时间序列设置:

  • TimescaleDB Hypertable ( data ) 随着时间的推移跟踪一些指标。这些列是:时间戳、标识符、指标。
  • Hypertable 有一个连续的聚合表(aggregated_data),它通过存储几个统计值(avg、min、max)按小时聚合指标。
  • 只有汇总的指标才会显示给用户

我想介绍手动合并指标的可能性(例如编辑异常值、填补空白……)。这些合并后的值将与测量的指标一起显示给用户。

TimescaleDB 实现这一目标的方法是什么?

这是我想出的:

  • 为手动合并的数据创建一个常规表 ( solidated_data )
  • 此表将具有与aggregated_data视图相同的列
  • 然后我会联合这两个表并添加一些 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 操作吗?
  • 我应该更喜欢合并吗?
  • 有没有更聪明的方法来使用我还不知道的工具和实用程序?
4

1 回答 1

1

肯定有人手动创建连续聚合,您可以执行类似 CRON 的工作来实现这一目标。

话虽如此,如果您尽可能多地利用数据库,事情似乎会更容易。您可以使用我们的 gapfilling / LOCF 函数在查询期间填写最后一个值。

我们的下一个版本还将允许您在一个超表上拥有多个连续聚合,并使涉及超表的 JOIN 性能更高。

如果您的合并表不是太大,那么它似乎可以不是超表。

于 2019-07-09T16:54:58.290 回答