TimeScaleDB 连续聚合刷新策略结束偏移未按预期工作

问题描述

我是 TimeScaleDB 的新手,我创建了一个连续的聚合视图

CREATE MATERIALIZED VIEW minute_data 
WITH (timescaledb.continuous)
AS
SELECT
   time_bucket('1 min',time_stamp) as bucket,thing_key,avg(pulse_l) as avg_pulse_l,avg(pulse_h) as avg_pulse_h,max(pulse_l) as max_pulse_l,max(pulse_h) as max_pulse_h,min(pulse_l) as min_pulse_l,min(pulse_h) as min_pulse_h,count(thing_key) as counts,sum(pulse_l) as sum_pulse_l,sum(pulse_h) as sum_pulse_h
FROM
 water_meter
GROUP BY thing_key,bucket
WITH NO DATA;

我为此视图创建了刷新策略:

SELECT add_continuous_aggregate_policy('minute_data',start_offset => INTERVAL '1 day',end_offset => INTERVAL '1 hour',schedule_interval => INTERVAL '1 minute');

即使在将结束偏移设置为 1 小时后,我也会获得最新添加的数据。

刷新日志:

 2021-07-14 08:09:39.597 UTC [1268] LOG:  refreshing continuous aggregate "minute_data" in window [ 2021-07-13 08:10:00+00,2021-07-14 07:09:00+00 ]

但是物化视图包含了结束偏移之外的数据,虽然开始偏移设置工作正常

以下是物化视图中的数据: Materialized view

编辑:我甚至在政策刷新之前就获得了最新数据。

解决方法

上述策略将每分钟运行一次(schedule_interval)。当它运行时,它会根据定义连续聚合的查询,将其执行时间的 1 天 (start_offset) 和 1 小时 (end_offset) 之间的数据具体化。

即使在将结束偏移设置为 1 小时后,我也会获得最新添加的数据。

每分钟刷新一次信息将每分钟在视图中提供最新信息。我看到日志时间是 08:09:39,而您的最新数据来自 08:08:00。有什么不一致之处?

您介意在这里分享更多关于您的期望的细节吗?

,

现在我明白你的意思了。而且,这是查询的预期行为,因为它实时聚合所有结果。即使存储桶仍然打开,您也可以查看结果。

请记住,您可以与您的实际时间做一些简单的比较,以了解蜡烛是否打开。

让我们尝试探索它:

tsdb=> select now();
┌───────────────────────────────┐
│              now              │
├───────────────────────────────┤
│ 2021-07-16 12:50:48.471078+00 │
└───────────────────────────────┘
(1 row)

tsdb=> select time_bucket('1 min',now());
┌────────────────────────┐
│      time_bucket       │
├────────────────────────┤
│ 2021-07-16 12:51:00+00 │
└────────────────────────┘
(1 row)
                                                         ^
tsdb=> select time_bucket('1 min',now()) < now() - interval '1 min' as closed_bucket;
┌───────────────┐
│ closed_bucket │
├───────────────┤
│ f             │
└───────────────┘
(1 row)

也许您可以使用一些具有类似表达式的额外列来过滤唯一的 closed_bucket。