配置StarRocks同步物化视图查询
使用物化视图(materialized view)可以进行查询加速和数仓分层。同步物化视图下,所有对于基表的数据变更都会自动同步更新到物化视图中。您无需手动调用刷新命令,即可实现自动同步刷新物化视图。同步物化视图的管理成本和更新成本都比较低,适合实时场景下单表聚合查询的透明加速。
前提条件
- 创建弹性云服务器,请参考购买ECS章节。
- 已创建StarRocks集群,集群运行正常。
- 已安装MySQL客户端。
创建物化视图
- 连接StarRocks集群。具体方式请参见手动安装MySQL客户端。
./mysql -uadmin -ppassword -h集群内网地址 -P9030
- 创建表sales_records。
create table sales_records( record_id int comment "交易id", saller_id int comment "销售员", store_id int comment "售卖门店", sale_date date comment "销售时间", sale_amt bigint comment "销售金额" ) distributed BY hash(record_id) properties("replication_num" = "3"); - 插入数据。
insert into sales_records values(1,1001,1,"2021-11-18 12:00:00.00",100); insert into sales_records values(1,1001,1,"2021-11-13 12:00:00.00",100); insert into sales_records values(1,1001,2,"2021-11-12 12:00:00.00",100); insert into sales_records values(1,1001,2,"2021-11-14 12:00:00.00",100); insert into sales_records values(1,1001,3,"2021-11-15 12:00:00.00",100); insert into sales_records values(1,1001,3,"2021-11-15 12:00:00.00",100); insert into sales_records values(1,1001,3,"2021-11-16 12:00:00.00",100);
- 创建物化视图。
CREATE MATERIALIZED VIEW store_amt AS SELECT store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;
- 验证物化视图是否创建成功。
SHOW ALTER MATERIALIZED VIEW FROM db_name; SHOW ALTER TABLE ROLLUP FROM db_name;
- 物化视图创建完成前。
- 物化视图创建完成后。命令执行后回显结果中“State”列的值为“FINISHED”则表示物化视图已经创建完成。
- 查看已创建的物化视图。可以通过基表名查看一个基表的所有物化视图。
desc 表名 all;
同步物化视图常用命令
- 查询命中物化视图。
- 例如,在查询不同门店的销售量时,可直接使用创建物化视图“store_amt”中读取聚合好的数据。查询时依旧指定查询 sales_records 表。
SELECT store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;

- 再使用EXPLAIN命令查询物化视图是否命中。查询计划树中的“OlapScanNode” 显示PREAGGREGATION: ON和rollup: store_amt,表示该查询使用物化视图store_amt的预先聚合计算结果,即查询已经命中到物化视图store_amt,并直接从物化视图中读取数据。
explain select store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;

- 例如,在查询不同门店的销售量时,可直接使用创建物化视图“store_amt”中读取聚合好的数据。查询时依旧指定查询 sales_records 表。
- 删除物化视图。
存在以下两种情形需要删除物化视图:
- 误操作创建物化视图,需要撤销该操作。
- 创建了大量的物化视图,导致数据导入速度过慢不满足业务需求,并且部分物化视图相互重复,查询频率极低,可容忍较高的查询延迟,此时需要删除部分物化视图。
删除已经创建完成的物化视图命令如下:
DROP MATERIALIZED VIEW IF EXISTS 物化视图名;
例如:
DROP MATERIALIZED VIEW IF EXISTS store_amt;