更新时间:2026-01-06 GMT+08:00
分享

配置StarRocks同步物化视图查询

使用物化视图(materialized view)可以进行查询加速和数仓分层。同步物化视图下,所有对于基表的数据变更都会自动同步更新到物化视图中。您无需手动调用刷新命令,即可实现自动同步刷新物化视图。同步物化视图的管理成本和更新成本都比较低,适合实时场景下单表聚合查询的透明加速。

前提条件

  • 创建弹性云服务器,请参考购买ECS章节。
  • 已创建StarRocks集群,集群运行正常。
  • 已安装MySQL客户端。

创建物化视图

  1. 连接StarRocks集群。具体方式请参见手动安装MySQL客户端

    ./mysql -uadmin -ppassword -h集群内网地址 -P9030

  2. 创建表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");

  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);

  4. 创建物化视图。

    CREATE MATERIALIZED VIEW store_amt AS
    SELECT store_id, SUM(sale_amt)
    FROM sales_records
    GROUP BY store_id;

  5. 验证物化视图是否创建成功。

    SHOW ALTER MATERIALIZED VIEW FROM db_name;
    SHOW ALTER TABLE ROLLUP FROM db_name;
    • 物化视图创建完成前。
    • 物化视图创建完成后。命令执行后回显结果中“State”列的值为“FINISHED”则表示物化视图已经创建完成。

  6. 查看已创建的物化视图。可以通过基表名查看一个基表的所有物化视图。

    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;

  • 删除物化视图。
    存在以下两种情形需要删除物化视图:
    • 误操作创建物化视图,需要撤销该操作。
    • 创建了大量的物化视图,导致数据导入速度过慢不满足业务需求,并且部分物化视图相互重复,查询频率极低,可容忍较高的查询延迟,此时需要删除部分物化视图。

    删除已经创建完成的物化视图命令如下:

    DROP MATERIALIZED VIEW IF EXISTS 物化视图名;

    例如:

    DROP MATERIALIZED VIEW IF EXISTS store_amt;

相关文档