timescaledb:创建real-time aggregate

发布于:2024-06-22 ⋅ 阅读:(154) ⋅ 点赞:(0)

创建hypertable【chz_a】

create table chz_a (
       time timestamp,
       device_id int8, 
       value double precision,
       primary key (time)
);
SELECT create_hypertable(
    'chz_a', 
    by_range('time')
);

往表里面写入数据

# 当天的数据
insert into chz_a (time, device_id, value)
values
(now()::timestamp, 1, 1);

# 一天前的数据
insert into chz_a (time, device_id, value)
values
(now()::timestamp - '1 day'::interval, 1, 1);

# 两天前的数据
insert into chz_a (time, device_id, value)
values
(now()::timestamp - '2 day'::interval, 1, 1);

查下表【chz_a】看下里面的数据,执行【select * from chz_a】
在这里插入图片描述

创建cagg【chz_a_cagg】,注意【WITH NO DATA】这个参数很重要

CREATE MATERIALIZED VIEW chz_a_cagg
WITH (timescaledb.continuous) AS
SELECT device_id,
   time_bucket(INTERVAL '1 day', time) AS bucket,
   sum(value)
FROM chz_a
GROUP BY device_id, bucket
WITH NO DATA;

刷新策略:每天一次,刷新两月前到两天前的数据范围

SELECT add_continuous_aggregate_policy('chz_a_cagg',
  start_offset => INTERVAL '1 month',
  end_offset   => INTERVAL '1 day',
  schedule_interval => INTERVAL '1 day'
);

手动刷新一下数据两天之前的数据范围

CALL refresh_continuous_aggregate(
       'chz_a_cagg',
       NULL,
       localtimestamp - INTERVAL '1 day'
);

查看【chz_a_cagg】里面的数据,执行【select * from chz_a_cagg】:
在这里插入图片描述
可以看到只有【06-19】的数据被查出来了。

将cagg修改为【real-time】模式

ALTER MATERIALIZED VIEW chz_a_cagg set (timescaledb.materialized_only = false);

查看【chz_a_cagg】里面的数据,执行【select * from chz_a_cagg】:
在这里插入图片描述
可以看到【06-20、06-21】的数据也被查出来了。


网站公告

今日签到

点亮在社区的每一天
去签到