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]