400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
本文档介绍了 YMatrix 的持续聚集特性。
实际场景中,聚集查询十分常见,因为聚集查询一般基于较大数量级的基础数据集,并对其进行归纳分组聚合运算,所以通常被认为是一种耗时相对较高的查询种类,且多用于分析型的场景。另外,实际场景中对聚集查询的执行频率越来越频繁,同时对聚集查询的响应时间要求也越来越高。
持续聚集即是一种能快速响应聚集查询的机制。创建持续聚集后,在数据写入过程中,系统自动实时对原数据进行聚集计算,因为和原表数据事务级同步,建议用户尽可能直接查询持续聚集视图。
持续聚集依赖 matrixts
扩展,首先创建扩展:
=# CREATE EXTENSION matrixts;
数据表即原始数据表:
=# CREATE TABLE metrics(
time timestamp,
tag_id int,
sensor float4
)
USING MARS3
DISTRIBUTED BY (tag_id)
ORDER BY (time,tag_id);
持续聚集使用物化视图来存储聚集后的结果,需要在创建视图时给出 WITH (CONTINUOUS)
关键字,和聚集语句:
=# CREATE VIEW cv1 WITH (CONTINUOUS) AS
SELECT tag_id, COUNT(*), SUM(sensor)
FROM metrics GROUP BY tag_id;
=# INSERT INTO metrics VALUES(NOW(), 1, 1.1);
=# INSERT INTO metrics VALUES(NOW(), 1, 1.2);
=# INSERT INTO metrics VALUES(NOW(), 2, 2.1);
=# INSERT INTO metrics VALUES(NOW(), 2, 2.2);
使用持续聚集时,只要向原始数据表插入时序数据,物化视图就会自动计算好结果:
=# SELECT * FROM cv1 ORDER BY tag_id;
tag_id | count | sum
--------+-------+-----------
1 | 2 | 2.3000002
2 | 2 | 4.3
(2 rows)
物化视图的结果与对原表进行聚合计算的结果相同:
=# SELECT tag_id, COUNT(*), SUM(sensor)
FROM metrics
GROUP BY tag_id
ORDER BY tag_id;
tag_id | count | sum
--------+-------+-----------
1 | 2 | 2.3000002
2 | 2 | 4.3
(2 rows)
如果在创建持续聚集时源表已经有数据,默认不会将数据同步过来。如果需要同步的话,在创建视图时需要将参数 populate
手动设定为 true
(默认为 false
):
=# CREATE VIEW cv1 WITH (CONTINUOUS, POPULATE=false) AS
SELECT tag_id, COUNT(*), SUM(sensor)
FROM metrics GROUP BY tag_id;
YMatrix 提供了对持续聚集进行维护的 UDF(User Defined Functions):
matrixts_internal.analyze_continuous_view(rel REGCLASS)
ANALYZE 物化视图,可以更新统计信息,有利于优化器做计算:
SELECT matrixts_internal.analyze_continuous_view('cv1');
matrixts_internal.vacuum_continuous_view(rel REGCLASS, full BOOL)
VACUUM 物化视图,可以清理 Dead Tuple,使空间重复利用;第二个参数为 true 的话会重建表文件、减少存储空间:
SELECT matrixts_internal.vacuum_continuous_view('cv1', true);
matrixts_internal.rebuild_continuous_view(rel REGCLASS)
重建物化视图,适用于源数据表做了更新删除,重新全量同步数据的场景:
SELECT matrixts_internal.rebuild_continuous_view('cv1');