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

TimeScaleDB continuous aggregate refresh policy end offset is not working as expected

我是 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)。根据定义连续聚合的查询,当它 运行s 时,它将在执行时间的 1 天 (start_offset) 到 1 小时 (end_offset) 之间具体化数据。

Even after setting the end offset to 1 hour I am getting the latest added data in the aggregate.

每分钟刷新一次信息将使视图中每隔一分钟提供最新信息。我看到日志时间是 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。