
# 配置StarRocks同步物化视图查询
使用物化视图（materialized view）可以进行查询加速和数仓分层。同步物化视图下，所有对于基表的数据变更都会自动同步更新到物化视图中。您无需手动调用刷新命令，即可实现自动同步刷新物化视图。同步物化视图的管理成本和更新成本都比较低，适合实时场景下单表聚合查询的透明加速。
#### 前提条件
- 创建弹性云服务器，请参考[购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0112.html)章节。
- 已创建StarRocks集群，集群运行正常。
- 已安装MySQL客户端。
 
#### 创建物化视图
1. 连接StarRocks集群。具体方式请参见[手动安装MySQL客户端](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0494.html#cloudtable_01_0494__section531737153320)。
   
   ```
   ./mysql -uadmin -ppassword -h集群内网地址 -P9030
   ```
   
   
2. 创建表**sales_records** 。
   
   ```
   create table sales_records(
   record_id int comment "交易id",
   seller_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;
    ```
    ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002376662341.png "点击放大")
    
  
  - 再使用**EXPLAIN** 命令查询物化视图是否命中。查询计划树中的"OlapScanNode" 显示**PREAGGREGATION: ON** 和r**ollup: store_amt** ，表示该查询使用物化视图**store_amt** 的预先聚合计算结果，即查询已经命中到物化视图**store_amt** ，并直接从物化视图中读取数据。
    ```
    explain select store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;
    ```
    ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002376542429.png "点击放大")
    
   
- 删除物化视图。
  存在以下两种情形需要删除物化视图：
  - 误操作创建物化视图，需要撤销该操作。
  
  - 创建了大量的物化视图，导致数据导入速度过慢不满足业务需求，并且部分物化视图相互重复，查询频率极低，可容忍较高的查询延迟，此时需要删除部分物化视图。
   
  删除已经创建完成的物化视图命令如下：
  ```
  DROP MATERIALIZED VIEW IF EXISTS 物化视图名;
  ```
  例如：
  ```
  DROP MATERIALIZED VIEW IF EXISTS store_amt;
  ```
  
 
