morrySnow commented on code in PR #1613:
URL: https://github.com/apache/doris-website/pull/1613#discussion_r1897572845


##########
i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/query-acceleration/materialized-view/sync-materialized-view.md:
##########
@@ -558,3 +614,13 @@ show alter table materialized view from test_db;
 ```
 
 如果查询结果显示`status`字段不是`FINISHED`,那么需要等待,直到状态变为`FINISHED`后,物化视图才会变得可用。
+
+
+
+## 附录  
+  
+### 1. 物化视图相关开关介绍
+  
+| 开关 | 说明 |  
+| --- | --- |  
+| `SET enable_sync_mv_cost_based_rewrite = true;` | 
是否使用基于结构信息的方式对同步物化视图进行透明改写,默认为 `true`。此属性自 3.0.0 版本起开始支持。 |

Review Comment:
   这段需要删掉,2.1 没有这个开关



##########
i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/query-acceleration/materialized-view/sync-materialized-view.md:
##########
@@ -47,7 +47,7 @@ under the License.
 
 - SELECT 列表中,不能包含自增列,不能包含常量,不能有重复表达式,也不支持窗口函数。
 
-- 如果 SELECT 列表包含聚合函数,则聚合函数必须是根表达式(不支持 `sum(a) + 1`,支持 `sum(a + 
1)`),且聚合函数之后不能有其他非聚合函数表达式(例如,`SELECT x, sum(a)` 可以,而 `SELECT sum(a), x` 不行)。
+- 如果 SELECT 列表包含聚合函数,则聚合函数必须是根表达式(不支持 `sum(a) + 1`,支持 `sum(a + 
1)`),且聚合函数之后不能有其他非聚合函数表达式(例如,`SELECT x, sum(a)` 可以,而 `SELECT sum(a)`, x 不行)。

Review Comment:
   ```suggestion
   - 如果 SELECT 列表包含聚合函数,则聚合函数必须是根表达式(不支持 `sum(a) + 1`,支持 `sum(a + 
1)`),且聚合函数之后不能有其他非聚合函数表达式(例如,`SELECT x, sum(a)` 可以,而 `SELECT sum(a), x` 不行)。
   ```



##########
i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/query-acceleration/tuning/tuning-plan/transparent-rewriting-with-async-mv.md:
##########
@@ -24,23 +24,22 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-## 工作原理
+## 概述
 
-多表物化视图采用的是基于 SPJG(SELECT-PROJECT-JOIN-GROUP-BY)模式的透明改写算法。该算法能够分析查询 SQL 
的结构信息,自动寻找合适的物化视图,并尝试进行透明改写,以利用最优的物化视图来表达查询 
SQL。通过使用预计算的物化视图结果,可以显著提高查询性能,并降低计算成本。
+[多表物化视图](../../materialized-view/async-materialized-view/overview.md)采用的是基于 
SPJG(SELECT-PROJECT-JOIN-GROUP-BY)模式的透明改写算法。该算法能够分析查询 SQL 
的结构信息,自动寻找合适的物化视图,并尝试进行透明改写,以利用最优的物化视图来表达查询 
SQL。通过使用预计算的物化视图结果,可以显著提高查询性能,并降低计算成本。

Review Comment:
   ```suggestion
   [异步物化视图](../../materialized-view/async-materialized-view/overview.md)采用的是基于 
SPJG(SELECT-PROJECT-JOIN-GROUP-BY)模式的透明改写算法。该算法能够分析查询 SQL 
的结构信息,自动寻找合适的物化视图,并尝试进行透明改写,以利用最优的物化视图来表达查询 
SQL。通过使用预计算的物化视图结果,可以显著提高查询性能,并降低计算成本。
   ```



##########
i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/query-acceleration/tuning/tuning-plan/transparent-rewriting-with-async-mv.md:
##########
@@ -118,108 +114,55 @@ l_partkey,
 l_suppkey;
 ```
 
-### 3 查看物化视图元信息
+### 使用物化视图进行透明改写
 
 ```sql
-SELECT * FROM mv_infos("database"="tpch") WHERE Name="mv1";
+mysql> explain shape plan SELECT l_shipdate, SUM(o_totalprice) AS total_price
+    -> FROM lineitem
+    -> LEFT JOIN orders ON lineitem.l_orderkey = orders.o_orderkey AND 
l_shipdate = o_orderdate
+    -> WHERE l_partkey = 2 AND l_suppkey = 3
+    -> GROUP BY l_shipdate;
++-------------------------------------------------------------------+
+| Explain String(Nereids Planner)                                   |
++-------------------------------------------------------------------+
+| PhysicalResultSink                                                |
+| --PhysicalDistribute[DistributionSpecGather]                      |
+| ----PhysicalProject                                               |
+| ------hashAgg[GLOBAL]                                             |
+| --------PhysicalDistribute[DistributionSpecHash]                  |
+| ----------hashAgg[LOCAL]                                          |
+| ------------PhysicalProject                                       |
+| --------------filter((mv1.l_partkey = 2) and (mv1.l_suppkey = 3)) |
+| ----------------PhysicalOlapScan[mv1]                             |
++-------------------------------------------------------------------+
 ```
 
-### 4 刷新物化视图
-
-首先查看分区列表:
-
-```sql
-SHOW PARTITIONS FROM mv1;
-```
-
-然后刷新特定分区:
-
-```sql
-REFRESH MATERIALIZED VIEW mv1 PARTITIONS(p_20231017_20231018);
-```
-
-### 5 任务管理
-
-管理物化视图的作业,包括查看作业、暂停定时调度、恢复定时调度以及查看和取消任务。
-
-- 查看物化视图 Job
-
-    ```sql
-    SELECT * FROM jobs("type"="mv") ORDER BY CreateTime;
-    ```
-
-- 暂停物化视图 Job 定时调度
-
-    ```sql
-    PAUSE MATERIALIZED VIEW JOB ON mv1;
-    ```
-
-- 恢复物化视图 Job 定时调度
-
-    ```sql
-    RESUME MATERIALIZED VIEW JOB ON mv1;
-    ```
-
-- 查看物化视图的 Task
-
-    ```sql
-    SELECT * FROM tasks("type"="mv");
-    ```
-
-- 取消物化视图的 Task:假设 `realTaskId` 为 123
-
-    ```sql
-    CANCEL MATERIALIZED VIEW TASK 123 ON mv1;
-    ```
-
-### 6 修改物化视图
+通过 explain shape plan 可见经过 mv1 透明改写后的计划已经命中 mv1。通过 explain 也可以查看当前计划经过 mv 
改写的状态,包括是否命中以及命中的 mv 等信息,如下所示:
 
 ```sql
-ALTER MATERIALIZED VIEW mv1 SET("grace_period"="3333");
+| ========== MATERIALIZATIONS ==========                                       
     |
+|                                                                              
     |
+| MaterializedView                                                             
     |
+| MaterializedViewRewriteSuccessAndChose:                                      
     |
+|   internal.tpch.mv1 chose,                                                   
     |
+|                                                                              
     |
+| MaterializedViewRewriteSuccessButNotChose:                                   
     |
+|   not chose: none,                                                           
     |
+|                                                                              
     |
+| MaterializedViewRewriteFail:                                                 
     |
 ```
 
-### 7 删除物化视图
-
-```sql
-DROP MATERIALIZED VIEW mv1;
-```
-
-### 8 使用物化视图进行查询
-
-- 直接查询
-
-    ```sql
-    SELECT l_shipdate, sum_total 
-    FROM mv1 
-    WHERE l_partkey = 2 AND l_suppkey = 3;
-    ```
-
-- 通过透明改写查询(查询优化器会自动使用物化视图)
-
-    ```sql
-    SELECT l_shipdate, SUM(o_totalprice) AS total_price
-    FROM lineitem
-    LEFT JOIN orders ON lineitem.l_orderkey = orders.o_orderkey AND l_shipdate 
= o_orderdate
-    WHERE l_partkey = 2 AND l_suppkey = 3
-    GROUP BY l_shipdate;
-    ```
-
-上述例子,完整展示了异步物化视图的生命周期,包括创建、管理、使用和删除。
-
 ## 总结
 
-通过使用物化视图,可以显著提高查询性能,特别是对于复杂的聚合查询。在使用的时候需要注意:
-
-1. 预计算结果:物化视图将查询结果预先计算并存储,避免了每次查询时重复计算的开销。这对于需要频繁执行的复杂查询尤其有效。
-
-2. 减少联接操作:物化视图可以将多个表的数据合并到一个视图中,减少了查询时的联接操作,从而提高查询效率。
-
-3. 自动更新:当基表数据发生变化时,物化视图可以自动更新,以保持数据的一致性。这确保了查询结果始终反映最新的数据状态。
-
-4. 空间开销:物化视图需要额外的存储空间来保存预计算的结果。在创建物化视图时,需要权衡查询性能提升和存储空间消耗。
-
-5. 维护成本:物化视图的维护需要一定的系统资源和时间。频繁更新的基表可能导致物化视图的更新开销较大。因此,需要根据实际情况选择合适的刷新策略。
+通过使用多表物化视图, 可以显著提高查询性能, 特别是对于复杂的连接和聚合查询。在使用的时候需要注意:
 
-6. 适用场景:物化视图适用于数据变化频率较低、查询频率较高的场景。对于经常变化的数据,实时计算可能更为合适。
+:::tip 使用建议
+- 预计算结果: 物化视图将查询结果预先计算并存储,避免了每次查询时重复计算的开销。这对于需要频繁执行的复杂查询尤其有效。
+- 减少联接操作: 物化视图可以将多个表的数据合并到一个视图中,减少了查询时的联接操作,从而提高查询效率。
+- 自动更新: 当基表数据发生变化时,物化视图可以自动更新,以保持数据的一致性。这确保了查询结果始终反映最新的数据状态。
+- 空间开销: 物化视图需要额外的存储空间来保存预计算的结果。在创建物化视图时,需要权衡查询性能提升和存储空间消耗。
+- 维护成本: 物化视图的维护需要一定的系统资源和时间。频繁更新的基表可能导致物化视图的更新开销较大。因此,需要根据实际情况选择合适的刷新策略。
+- 适用场景: 物化视图适用于数据变化频率较低、查询频率较高的场景。对于经常变化的数据,实时计算可能更为合适。
+:::
 
-合理利用物化视图,可以显著改善数据库的查询性能,特别是在复杂查询和大数据量的情况下。同时,也需要综合考虑存储、维护等因素,以实现性能和成本的平衡。
+合理利用多表物化视图,可以显著改善数据库的查询性能,特别是在复杂查询和大数据量的情况下。同时,也需要综合考虑存储、维护等因素,以实现性能和成本的平衡。

Review Comment:
   ```suggestion
   合理利用异步物化视图,可以显著改善数据库的查询性能,特别是在复杂查询和大数据量的情况下。同时,也需要综合考虑存储、维护等因素,以实现性能和成本的平衡。
   ```



##########
i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/query-acceleration/tuning/tuning-plan/transparent-rewriting-with-async-mv.md:
##########


Review Comment:
   将所有的多表物化视图,改成异步物化视图吧



##########
i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/query-acceleration/materialized-view/sync-materialized-view.md:
##########
@@ -181,65 +181,95 @@ explain select store_id, sum(sale_amt) from sales_records 
group by store_id;
 结果如下:
 
 ```sql
-+-----------------------------------------------------------------------------------------------+
-| Explain String(Nereids Planner)                                              
                 |
-+-----------------------------------------------------------------------------------------------+
-| PLAN FRAGMENT 0                                                              
                 |
-|   OUTPUT EXPRS:                                                              
                 |
-|     store_id[#11]                                                            
                 |
-|     sum(sale_amt)[#12]                                                       
                 |
-|   PARTITION: HASH_PARTITIONED: mv_store_id[#7]                               
                 |
-|                                                                              
                 |
-|   HAS_COLO_PLAN_NODE: false                                                  
                 |
-|                                                                              
                 |
-|   VRESULT SINK                                                               
                 |
-|      MYSQL_PROTOCAL                                                          
                 |
-|                                                                              
                 |
-|   3:VAGGREGATE (merge finalize)(145)                                         
                 |
-|   |  output: sum(partial_sum(mva_SUM__sale_amt)[#8])[#10]                    
                 |
-|   |  group by: mv_store_id[#7]                                               
                 |
-|   |  sortByGroupKey:false                                                    
                 |
-|   |  cardinality=1                                                           
                 |
-|   |  final projections: mv_store_id[#9], sum(mva_SUM__sale_amt)[#10]         
                 |
-|   |  final project output tuple id: 4                                        
                 |
-|   |  distribute expr lists: mv_store_id[#7]                                  
                 |
-|   |                                                                          
                 |
-|   2:VEXCHANGE                                                                
                 |
-|      offset: 0                                                               
                 |
-|      distribute expr lists:                                                  
                 |
-|                                                                              
                 |
-| PLAN FRAGMENT 1                                                              
                 |
-|                                                                              
                 |
-|   PARTITION: HASH_PARTITIONED: record_id[#2]                                 
                 |
-|                                                                              
                 |
-|   HAS_COLO_PLAN_NODE: false                                                  
                 |
-|                                                                              
                 |
-|   STREAM DATA SINK                                                           
                 |
-|     EXCHANGE ID: 02                                                          
                 |
-|     HASH_PARTITIONED: mv_store_id[#7]                                        
                 |
-|                                                                              
                 |
-|   1:VAGGREGATE (update serialize)(139)                                       
                 |
-|   |  STREAMING                                                               
                 |
-|   |  output: partial_sum(mva_SUM__sale_amt[#1])[#8]                          
                 |
-|   |  group by: mv_store_id[#0]                                               
                 |
-|   |  sortByGroupKey:false                                                    
                 |
-|   |  cardinality=1                                                           
                 |
-|   |  distribute expr lists:                                                  
                 |
-|   |                                                                          
                 |
-|   0:VOlapScanNode(136)                                                       
                 |
-|      TABLE: test_db.sales_records(store_amt), PREAGGREGATION: ON |
-|      partitions=1/1 (sales_records)                                          
                 |
-|      tablets=10/10, tabletList=494505,494507,494509 ...                      
                 |
-|      cardinality=1, avgRowSize=0.0, numNodes=1                               
                 |
-|      pushAggOp=NONE                                                          
                 |
-|                                                                              
                 |
-|                                                                              
                 |
-| Statistics                                                                   
                 |
-|  planed with unknown column statistics                                       
                 |
-+-----------------------------------------------------------------------------------------------+
++------------------------------------------------------------------------+

Review Comment:
   这个explain得改回来,2.1 的和 master 的不同



##########
i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/query-acceleration/materialized-view/sync-materialized-view.md:
##########
@@ -181,65 +181,95 @@ explain select store_id, sum(sale_amt) from sales_records 
group by store_id;
 结果如下:
 
 ```sql
-+-----------------------------------------------------------------------------------------------+
-| Explain String(Nereids Planner)                                              
                 |
-+-----------------------------------------------------------------------------------------------+
-| PLAN FRAGMENT 0                                                              
                 |
-|   OUTPUT EXPRS:                                                              
                 |
-|     store_id[#11]                                                            
                 |
-|     sum(sale_amt)[#12]                                                       
                 |
-|   PARTITION: HASH_PARTITIONED: mv_store_id[#7]                               
                 |
-|                                                                              
                 |
-|   HAS_COLO_PLAN_NODE: false                                                  
                 |
-|                                                                              
                 |
-|   VRESULT SINK                                                               
                 |
-|      MYSQL_PROTOCAL                                                          
                 |
-|                                                                              
                 |
-|   3:VAGGREGATE (merge finalize)(145)                                         
                 |
-|   |  output: sum(partial_sum(mva_SUM__sale_amt)[#8])[#10]                    
                 |
-|   |  group by: mv_store_id[#7]                                               
                 |
-|   |  sortByGroupKey:false                                                    
                 |
-|   |  cardinality=1                                                           
                 |
-|   |  final projections: mv_store_id[#9], sum(mva_SUM__sale_amt)[#10]         
                 |
-|   |  final project output tuple id: 4                                        
                 |
-|   |  distribute expr lists: mv_store_id[#7]                                  
                 |
-|   |                                                                          
                 |
-|   2:VEXCHANGE                                                                
                 |
-|      offset: 0                                                               
                 |
-|      distribute expr lists:                                                  
                 |
-|                                                                              
                 |
-| PLAN FRAGMENT 1                                                              
                 |
-|                                                                              
                 |
-|   PARTITION: HASH_PARTITIONED: record_id[#2]                                 
                 |
-|                                                                              
                 |
-|   HAS_COLO_PLAN_NODE: false                                                  
                 |
-|                                                                              
                 |
-|   STREAM DATA SINK                                                           
                 |
-|     EXCHANGE ID: 02                                                          
                 |
-|     HASH_PARTITIONED: mv_store_id[#7]                                        
                 |
-|                                                                              
                 |
-|   1:VAGGREGATE (update serialize)(139)                                       
                 |
-|   |  STREAMING                                                               
                 |
-|   |  output: partial_sum(mva_SUM__sale_amt[#1])[#8]                          
                 |
-|   |  group by: mv_store_id[#0]                                               
                 |
-|   |  sortByGroupKey:false                                                    
                 |
-|   |  cardinality=1                                                           
                 |
-|   |  distribute expr lists:                                                  
                 |
-|   |                                                                          
                 |
-|   0:VOlapScanNode(136)                                                       
                 |
-|      TABLE: test_db.sales_records(store_amt), PREAGGREGATION: ON |
-|      partitions=1/1 (sales_records)                                          
                 |
-|      tablets=10/10, tabletList=494505,494507,494509 ...                      
                 |
-|      cardinality=1, avgRowSize=0.0, numNodes=1                               
                 |
-|      pushAggOp=NONE                                                          
                 |
-|                                                                              
                 |
-|                                                                              
                 |
-| Statistics                                                                   
                 |
-|  planed with unknown column statistics                                       
                 |
-+-----------------------------------------------------------------------------------------------+
++------------------------------------------------------------------------+
+| Explain String(Nereids Planner)                                        |
++------------------------------------------------------------------------+
+| PLAN FRAGMENT 0                                                        |
+|   OUTPUT EXPRS:                                                        |
+|     store_id[#11]                                                      |
+|     sum(sale_amt)[#12]                                                 |
+|   PARTITION: HASH_PARTITIONED: mv_store_id[#7]                         |
+|                                                                        |
+|   HAS_COLO_PLAN_NODE: true                                             |
+|                                                                        |
+|   VRESULT SINK                                                         |
+|      MYSQL_PROTOCAL                                                    |
+|                                                                        |
+|   3:VAGGREGATE (merge finalize)(384)                                   |
+|   |  output: sum(partial_sum(mva_SUM__`sale_amt`)[#8])[#10]            |
+|   |  group by: mv_store_id[#7]                                         |
+|   |  sortByGroupKey:false                                              |
+|   |  cardinality=1                                                     |
+|   |  final projections: mv_store_id[#9], sum(mva_SUM__`sale_amt`)[#10] |
+|   |  final project output tuple id: 4                                  |
+|   |  distribute expr lists: mv_store_id[#7]                            |
+|   |                                                                    |
+|   2:VEXCHANGE                                                          |
+|      offset: 0                                                         |
+|      distribute expr lists:                                            |
+|                                                                        |
+| PLAN FRAGMENT 1                                                        |
+|                                                                        |
+|   PARTITION: HASH_PARTITIONED: record_id[#2]                           |
+|                                                                        |
+|   HAS_COLO_PLAN_NODE: false                                            |
+|                                                                        |
+|   STREAM DATA SINK                                                     |
+|     EXCHANGE ID: 02                                                    |
+|     HASH_PARTITIONED: mv_store_id[#7]                                  |
+|                                                                        |
+|   1:VAGGREGATE (update serialize)(374)                                 |
+|   |  STREAMING                                                         |
+|   |  output: partial_sum(mva_SUM__`sale_amt`[#1])[#8]                  |
+|   |  group by: mv_store_id[#0]                                         |
+|   |  sortByGroupKey:false                                              |
+|   |  cardinality=1                                                     |
+|   |  distribute expr lists:                                            |
+|   |                                                                    |
+|   0:VOlapScanNode(369)                                                 |
+|      TABLE: test_db.sales_records(store_amt), PREAGGREGATION: ON       |
+|      partitions=1/1 (sales_records)                                    |
+|      tablets=10/10, tabletList=266568,266570,266572 ...                |
+|      cardinality=1, avgRowSize=1805.0, numNodes=1                      |
+|      pushAggOp=NONE                                                    |
+|                                                                        |
+|                                                                        |
+| ========== MATERIALIZATIONS ==========                                 |
+|                                                                        |
+| MaterializedView                                                       |
+| MaterializedViewRewriteSuccessAndChose:                                |
+|   internal.test_db.sales_records.store_amt chose,                      |
+|                                                                        |
+| MaterializedViewRewriteSuccessButNotChose:                             |
+|   not chose: none,                                                     |
+|                                                                        |
+| MaterializedViewRewriteFail:                                           |
+|                                                                        |
+|                                                                        |
+| ========== STATISTICS ==========                                       |
+| planed with unknown column statistics                                  |
++------------------------------------------------------------------------+
 ```
 
-从底部`VOlapScanNode`的`test_db.sales_records(store_amt)`可以表明,该查询命中了`store_amt`这个物化视图。值得注意的是,如果表中没有数据,那么可能不会命中物化视图。
+
+`MaterializedViewRewriteSuccessAndChose` 会展示被成功命中的物化视图,具体示例如下:
+
+```sql
++------------------------------------------------------------------------+
+| MaterializedViewRewriteSuccessAndChose:                                |  
+|   internal.test_db.sales_records.store_amt chose,                      |
++------------------------------------------------------------------------+
+```
+
+上述内容表明,查询成功命中了名为 `store_amt` 的物化视图。值得注意的是,若目标表中无任何数据,则可能不会触发对物化视图的命中。
+
+关于 MATERIALIZATIONS 的详细说明:
+
+- **MaterializedViewRewriteSuccessAndChose**:展示被成功选中并用于查询优化的物化视图。
+
+- 
**MaterializedViewRewriteSuccessButNotChose**:展示匹配成功但未被选中的物化视图(优化器会基于物化视图的成本进行最优选择,这些匹配但未被选中的物化视图,表示它们并非最优选择)。
+
+- **MaterializedViewRewriteFail**:展示未能匹配的物化视图,即原始 SQL 
查询与现有物化视图无法匹配,因此无法使用物化视图进行优化。
 

Review Comment:
   2.1 的同步物化视图命中与否,是通过表名后面括号里面的rollup名字来判断的,而不是通过下面的输出



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to