Postgresql 所有时间上的时间尺度连续聚合
我想问,如果我想从所有时间获得聚合值,而不是特定的时间限制,那么连续聚合是否是最佳解决方案 这是我起草的问题Postgresql 所有时间上的时间尺度连续聚合,postgresql,timescaledb,Postgresql,Timescaledb,我想问,如果我想从所有时间获得聚合值,而不是特定的时间限制,那么连续聚合是否是最佳解决方案 这是我起草的问题 CREATE VIEW device_summary WITH (timescaledb.continuous) AS SELECT time_bucket('1 day', module_timestamp) as bucket, sum(CAST(component_data->'common'->'bat' AS INT)) a
CREATE VIEW device_summary
WITH (timescaledb.continuous)
AS
SELECT
time_bucket('1 day', module_timestamp) as bucket,
sum(CAST(component_data->'common'->'bat' AS INT)) as bat_sum
FROM
main_componentmessage
GROUP BY bucket;
我想一个解决方案是将时间段增加到一个非常高的数字(比如说9999999周,包括“时间的开始”),但我不确定这是否有效,因为它与正常的聚合查询没有什么不同,因为时间段刷新间隔将非常高,这就违背了目的。我还不如对所有记录进行求和查询
第二个解决方案是在一天的带扣查询之上创建总和,这样我就可以得到总的总和,但我不确定它是否也有意义
SELECT SUM(bat_sum) from device_summary
关于如何实现这一点有什么建议吗?在内部,TimescaleDB中的连续聚合为每个bucket创建一个包含部分聚合的物化表。随着新数据添加到原始表中,这些数据将定期更新 因此,拥有一个非常宽的bucket不太可能给您带来任何性能提升,因为正如您所说,它与普通的聚合查询相同
如果您有较小的存储桶,然后计算所有这些存储桶的总和,那么您可能会获得性能改进,因为旧的存储桶不会重新计算,而是随着新数据进入新数据的部分聚合而计算。内部,TimescaleDB中的连续聚合为每个bucket创建一个包含部分聚合的物化表。随着新数据添加到原始表中,这些数据将定期更新 因此,拥有一个非常宽的bucket不太可能给您带来任何性能提升,因为正如您所说,它与普通的聚合查询相同 如果您有较小的存储桶,然后计算所有这些存储桶的总和,那么您可能会获得性能改进,因为旧的存储桶不会重新计算,而是随着新数据进入新数据的部分聚合,新数据的部分聚合将被计算