使用TimescaleDB手动整合汇总数据的方式是什么?

时间:2019-07-09 13:03:54

标签: timescaledb

我设置了一个相当普通的时间序列:

  • TimescaleDB超表(数据)随时间推移跟踪一些指标。这些列是:时间戳记,标识符,指标。
  • 超级表具有一个连续的聚合表( aggregated_data ),该表通过存储多个统计值(平均,最小值,最大值)每小时对指标进行汇总。
  • 仅汇总指标会显示给用户

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

TimescaleDB实现此目的的方法是什么?

这是我想出的:

  • 为手动合并的数据创建常规表( consolidated_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;

我希望这种方法能够奏效,但是仍然存在许多未知数:

  • 合并表应该是超级表吗?这样会加快UNION操作的速度吗?
  • 我应该选择MERGE吗?
  • 使用我尚不知道的工具和实用程序有更聪明的方法吗?

1 个答案:

答案 0 :(得分:1)

肯定有人手动创建连续的聚合,您可以执行CRON作业来实现此目的。

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

我们的下一个发行版还将允许您在一个超表上具有多个连续聚合,并使涉及超表的JOIN更加高效。

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