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)
新架构 FAQ
集群部署 FAQ
SQL 查询 FAQ
MatrixGate FAQ
运维 FAQ
监控告警 FAQ
PXF FAQ
PLPython FAQ
性能 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
手动设定为 false
(默认为 true
):
=# 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');