seawinde commented on code in PR #28596:
URL: https://github.com/apache/doris/pull/28596#discussion_r1430953008


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewRule.java:
##########
@@ -151,14 +184,101 @@ protected List<Plan> rewrite(Plan queryPlan, 
CascadesContext cascadesContext) {
                         rewritedPlan,
                         materializationContext);
                 if (rewritedPlan == null) {
+                    logger.info(currentClassName + " rewrite query by view 
fail so continue");
                     continue;
                 }
+                if (!checkPartitionIsValid(queryStructInfo, 
materializationContext, cascadesContext)) {
+                    logger.info(currentClassName + " check partition 
validation fail so continue");
+                    continue;
+                }
+                // run rbo job on mv rewritten plan
+                CascadesContext rewrittenPlanContext =
+                        
CascadesContext.initContext(cascadesContext.getStatementContext(), rewritedPlan,
+                                
cascadesContext.getCurrentJobContext().getRequiredProperties());
+                Rewriter.getWholeTreeRewriter(cascadesContext).execute();
+                rewritedPlan = rewrittenPlanContext.getRewritePlan();
+                logger.info(currentClassName + "rewrite by materialized view 
success");
                 rewriteResults.add(rewritedPlan);
             }
         }
         return rewriteResults;
     }
 
+    protected boolean checkPartitionIsValid(
+            StructInfo queryInfo,
+            MaterializationContext materializationContext,
+            CascadesContext cascadesContext) {
+        // check partition is valid or not
+        MTMV mtmv = materializationContext.getMtmv();
+        PartitionInfo mvPartitionInfo = mtmv.getPartitionInfo();
+        if (PartitionType.UNPARTITIONED.equals(mvPartitionInfo.getType())) {
+            // if not partition, if rewrite success, it means mv is available
+            return true;
+        }
+        // check mv related table partition is valid or not
+        MTMVPartitionInfo mvCustomPartitionInfo = mtmv.getMvPartitionInfo();
+        BaseTableInfo relatedPartitionTable = 
mvCustomPartitionInfo.getRelatedTable();
+        if (relatedPartitionTable == null) {
+            return true;
+        }
+        Optional<LogicalOlapScan> relatedTableRelation = 
queryInfo.getRelations().stream()
+                .filter(relation -> relatedPartitionTable.equals(new 
BaseTableInfo(relation.getTable()))
+                        && relation instanceof LogicalOlapScan)
+                .map(relation -> (LogicalOlapScan) relation)
+                .findFirst();

Review Comment:
   Have fixed if



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewRule.java:
##########
@@ -151,14 +184,101 @@ protected List<Plan> rewrite(Plan queryPlan, 
CascadesContext cascadesContext) {
                         rewritedPlan,
                         materializationContext);
                 if (rewritedPlan == null) {
+                    logger.info(currentClassName + " rewrite query by view 
fail so continue");
                     continue;
                 }
+                if (!checkPartitionIsValid(queryStructInfo, 
materializationContext, cascadesContext)) {
+                    logger.info(currentClassName + " check partition 
validation fail so continue");
+                    continue;
+                }
+                // run rbo job on mv rewritten plan
+                CascadesContext rewrittenPlanContext =
+                        
CascadesContext.initContext(cascadesContext.getStatementContext(), rewritedPlan,
+                                
cascadesContext.getCurrentJobContext().getRequiredProperties());
+                Rewriter.getWholeTreeRewriter(cascadesContext).execute();
+                rewritedPlan = rewrittenPlanContext.getRewritePlan();
+                logger.info(currentClassName + "rewrite by materialized view 
success");
                 rewriteResults.add(rewritedPlan);
             }
         }
         return rewriteResults;
     }
 
+    protected boolean checkPartitionIsValid(
+            StructInfo queryInfo,
+            MaterializationContext materializationContext,
+            CascadesContext cascadesContext) {
+        // check partition is valid or not
+        MTMV mtmv = materializationContext.getMtmv();
+        PartitionInfo mvPartitionInfo = mtmv.getPartitionInfo();
+        if (PartitionType.UNPARTITIONED.equals(mvPartitionInfo.getType())) {
+            // if not partition, if rewrite success, it means mv is available
+            return true;
+        }
+        // check mv related table partition is valid or not
+        MTMVPartitionInfo mvCustomPartitionInfo = mtmv.getMvPartitionInfo();
+        BaseTableInfo relatedPartitionTable = 
mvCustomPartitionInfo.getRelatedTable();
+        if (relatedPartitionTable == null) {
+            return true;
+        }
+        Optional<LogicalOlapScan> relatedTableRelation = 
queryInfo.getRelations().stream()
+                .filter(relation -> relatedPartitionTable.equals(new 
BaseTableInfo(relation.getTable()))
+                        && relation instanceof LogicalOlapScan)
+                .map(relation -> (LogicalOlapScan) relation)
+                .findFirst();

Review Comment:
   Have fixed it



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to