Skip to content

Commit bd5189a

Browse files
committed
fix nereids mv plan
1 parent f2aac10 commit bd5189a

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

fe/fe-core/src/main/java/org/apache/doris/nereids/util/RelationUtil.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
3636
import org.apache.doris.qe.ConnectContext;
3737
import org.apache.doris.qe.OriginStatement;
38+
import org.apache.doris.qe.SessionVariable;
3839

3940
import com.google.common.base.Strings;
4041
import com.google.common.collect.ImmutableList;
@@ -50,6 +51,13 @@
5051
* relation util
5152
*/
5253
public class RelationUtil {
54+
private static final String SYNC_MV_PLANER_DISABLE_RULES = "OLAP_SCAN_PARTITION_PRUNE, PRUNE_EMPTY_PARTITION, "
55+
+ "ELIMINATE_GROUP_BY_KEY_BY_UNIFORM, HAVING_TO_FILTER, ELIMINATE_GROUP_BY, SIMPLIFY_AGG_GROUP_BY, "
56+
+ "MERGE_PERCENTILE_TO_ARRAY, VARIANT_SUB_PATH_PRUNING, INFER_PREDICATES, INFER_AGG_NOT_NULL, "
57+
+ "INFER_SET_OPERATOR_DISTINCT, INFER_FILTER_NOT_NULL, INFER_JOIN_NOT_NULL, MAX_MIN_FILTER_PUSH_DOWN, "
58+
+ "ELIMINATE_SORT, ELIMINATE_AGGREGATE, ELIMINATE_LIMIT, ELIMINATE_SEMI_JOIN, ELIMINATE_NOT_NULL, "
59+
+ "ELIMINATE_JOIN_BY_UK, ELIMINATE_JOIN_BY_FK, ELIMINATE_GROUP_BY_KEY, ELIMINATE_GROUP_BY_KEY_BY_UNIFORM, "
60+
+ "ELIMINATE_FILTER_GROUP_BY_KEY";
5361

5462
/**
5563
* get table qualifier
@@ -138,15 +146,29 @@ public static Set<String> getMvUsedColumnNames(MaterializedIndexMeta meta) {
138146
Optional<String> querySql = new NereidsParser().parseForSyncMv(createMvSql);
139147
if (querySql.isPresent()) {
140148
LogicalPlan unboundMvPlan = new NereidsParser().parseSingle(querySql.get());
141-
StatementContext statementContext = new StatementContext(ConnectContext.get(),
149+
ConnectContext connectContext = ConnectContext.get();
150+
StatementContext statementContext = new StatementContext(connectContext,
142151
new OriginStatement(querySql.get(), 0));
143152
NereidsPlanner planner = new NereidsPlanner(statementContext);
144153
if (statementContext.getConnectContext().getStatementContext() == null) {
145154
statementContext.getConnectContext().setStatementContext(statementContext);
146155
}
147-
planner.planWithLock(unboundMvPlan, PhysicalProperties.ANY, ExplainCommand.ExplainLevel.REWRITTEN_PLAN);
148-
LogicalPlan logicalPlan = (LogicalPlan) planner.getCascadesContext().getRewritePlan();
149-
156+
Set<String> tempDisableRules = connectContext.getSessionVariable().getDisableNereidsRuleNames();
157+
connectContext.getSessionVariable().setDisableNereidsRules(SYNC_MV_PLANER_DISABLE_RULES);
158+
connectContext.getStatementContext().invalidCache(SessionVariable.DISABLE_NEREIDS_RULES);
159+
LogicalPlan logicalPlan;
160+
try {
161+
// disable rbo sync mv rewrite
162+
connectContext.getSessionVariable().setVarOnce(SessionVariable.ENABLE_SYNC_MV_COST_BASED_REWRITE, "true");
163+
// disable constant fold
164+
connectContext.getSessionVariable().setVarOnce(SessionVariable.DEBUG_SKIP_FOLD_CONSTANT, "true");
165+
planner.planWithLock(unboundMvPlan, PhysicalProperties.ANY, ExplainCommand.ExplainLevel.REWRITTEN_PLAN);
166+
logicalPlan = (LogicalPlan) planner.getCascadesContext().getRewritePlan();
167+
} finally {
168+
// after operate, roll back the disable rules
169+
connectContext.getSessionVariable().setDisableNereidsRules(String.join(",", tempDisableRules));
170+
connectContext.getStatementContext().invalidCache(SessionVariable.DISABLE_NEREIDS_RULES);
171+
}
150172
Map<Boolean, List<Object>> partitionedPlan = logicalPlan
151173
.collect(plan -> true)
152174
.stream()

0 commit comments

Comments
 (0)