【问题标题】:What is the TimescaleDB way to manually consolidate aggregated data?TimescaleDB 手动整合聚合数据的方法是什么?
【发布时间】:2019-11-19 01:13:49
【问题描述】:

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

  • 一个 TimescaleDB 超表(数据)随着时间的推移跟踪一些指标。这些列是:时间戳、标识符、指标。
  • Hypertable 有一个连续聚合表 (aggregated_data),它通过存储多个统计值(平均、最小值、最大值)按小时聚合指标。
  • 只会向用户显示汇总的指标

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

TimescaleDB 的实现方式是什么?

这是我想出的:

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

【问题讨论】:

  • 另一个想法是用编辑后的值直接更新超表中的数据 - 并且可能将原件复制到另一个表(例如撤消编辑)
  • @TmTron 谢谢。这意味着用户必须编辑“原始”数据(可能是很多指标)上的值。我更愿意让用户编辑聚合值。

标签: timescaledb


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复。我可能必须重新提出一些问题以使事情更清楚:我希望“手动”聚合; TimescaleDB 提供的工具完美地完成了这项任务。我想为可视化聚合数据的用户提供手动覆盖它们的能力(例如,用更合理的值替换异常值)。然后这些覆盖将存储在 consolidated_data 表中。
  • 好的,我为你进一步调查了这个。唯一的方法是找到一种方法来执行类似的操作 - 删除进入该 agg 的所有值,然后存储新的 agg。我不会自己触摸连续的 agg,因为那样你最终可能会破坏东西。所以不幸的是,没有很好的解决方法。由于我们确实支持失效,也许您可​​以执行以下操作 - 选择影响给定 agg 的所有行,然后为更新 agg 的时间范围插入一个新测量值。不过对我来说似乎很危险。
猜你喜欢
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 2010-10-25
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多