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。
我是 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。