【发布时间】: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