This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 0b04cc9fe23 branch-3.0: [feature](nereids) support explain command
return empty string to test planner performance (#54422) (#55038)
0b04cc9fe23 is described below
commit 0b04cc9fe2311a77aaeb1eedd0a73ca836e3cdef
Author: 924060929 <[email protected]>
AuthorDate: Thu Sep 4 15:22:28 2025 +0800
branch-3.0: [feature](nereids) support explain command return empty string
to test planner performance (#54422) (#55038)
cherry pick from #54422
---
.../java/org/apache/doris/nereids/NereidsPlanner.java | 4 ++++
.../main/java/org/apache/doris/planner/Planner.java | 5 +++++
.../java/org/apache/doris/qe/SessionVariable.java | 8 ++++++++
.../nereids/trees/plans/ExplainInsertCommandTest.java | 19 +++++++++++++++++++
4 files changed, 36 insertions(+)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
index 584b0e67c13..ca2b17ac775 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
@@ -653,6 +653,10 @@ public class NereidsPlanner extends Planner {
@Override
public String getExplainString(ExplainOptions explainOptions) {
+ ConnectContext context = cascadesContext == null ?
ConnectContext.get() : cascadesContext.getConnectContext();
+ if (context.getSessionVariable().enableExplainNone) {
+ return "";
+ }
ExplainLevel explainLevel = getExplainLevel(explainOptions);
String plan = "";
String mvSummary = "";
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java
b/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java
index cfcd27af8fa..71755840726 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java
@@ -24,6 +24,7 @@ import org.apache.doris.common.UserException;
import org.apache.doris.common.profile.PlanTreeBuilder;
import org.apache.doris.common.profile.PlanTreePrinter;
import org.apache.doris.nereids.trees.plans.physical.TopnFilter;
+import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.ResultSet;
import org.apache.doris.thrift.TQueryOptions;
@@ -53,6 +54,10 @@ public abstract class Planner {
public String getExplainString(ExplainOptions explainOptions) {
Preconditions.checkNotNull(explainOptions);
+ ConnectContext connectContext = ConnectContext.get();
+ if (connectContext != null &&
connectContext.getSessionVariable().enableExplainNone) {
+ return "";
+ }
if (explainOptions.isGraph()) {
// print the plan graph
PlanTreeBuilder builder = new PlanTreeBuilder(fragments);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index e05ca844f58..3bc7c92ca8b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -2216,6 +2216,8 @@ public class SessionVariable implements Serializable,
Writable {
public static final String IGNORE_SHAPE_NODE = "ignore_shape_nodes";
+ public static final String ENABLE_EXPLAIN_NONE = "enable_explain_none";
+
public static final String DETAIL_SHAPE_NODES = "detail_shape_nodes";
public static final String ENABLE_SEGMENT_CACHE = "enable_segment_cache";
@@ -2238,6 +2240,12 @@ public class SessionVariable implements Serializable,
Writable {
"the plan node type show detail in 'explain shape plan'
command"})
public String detailShapePlanNodes = "";
+ @VariableMgr.VarAttr(name = ENABLE_EXPLAIN_NONE, needForward = true,
description = {
+ "执行explain命令,但不打印explain结果",
+ "execute explain command and return nothing"
+ })
+ public boolean enableExplainNone = false;
+
private Set<String> detailShapePlanNodesSet = ImmutableSet.of();
public Set<String> getDetailShapePlanNodesSet() {
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
index d4756746e98..94e5bae2c75 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
@@ -17,6 +17,7 @@
package org.apache.doris.nereids.trees.plans;
+import org.apache.doris.analysis.ExplainOptions;
import org.apache.doris.nereids.NereidsPlanner;
import org.apache.doris.nereids.StatementContext;
import org.apache.doris.nereids.exceptions.AnalysisException;
@@ -26,10 +27,12 @@ import org.apache.doris.nereids.parser.NereidsParser;
import org.apache.doris.nereids.properties.PhysicalProperties;
import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
import org.apache.doris.nereids.trees.plans.commands.ExplainCommand;
+import
org.apache.doris.nereids.trees.plans.commands.ExplainCommand.ExplainLevel;
import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
import org.apache.doris.nereids.util.MemoTestUtils;
import org.apache.doris.planner.PlanFragment;
+import org.apache.doris.qe.StmtExecutor;
import org.apache.doris.utframe.TestWithFeService;
import org.junit.jupiter.api.Assertions;
@@ -134,6 +137,22 @@ public class ExplainInsertCommandTest extends
TestWithFeService {
Assertions.assertEquals(8,
getOutputFragment(sql).getOutputExprs().size());
}
+ @Test
+ public void explainNone() throws Exception {
+ String sql = "explain insert into agg_have_dup_base select -4, -4, -4,
'd'";
+ connectContext.getSessionVariable().enableExplainNone = false;
+ StmtExecutor sqlStmtExecutor = getSqlStmtExecutor(sql);
+ String explainString = sqlStmtExecutor.planner()
+ .getExplainString(new ExplainOptions(ExplainLevel.VERBOSE,
false));
+ Assertions.assertNotEquals("", explainString);
+
+ connectContext.getSessionVariable().enableExplainNone = true;
+ sqlStmtExecutor = getSqlStmtExecutor(sql);
+ explainString = sqlStmtExecutor.planner()
+ .getExplainString(new ExplainOptions(ExplainLevel.VERBOSE,
false));
+ Assertions.assertEquals("", explainString);
+ }
+
private PlanFragment getOutputFragment(String sql) throws Exception {
StatementScopeIdGenerator.clear();
StatementContext statementContext =
MemoTestUtils.createStatementContext(connectContext, sql);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]