This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new 8b50b365c51 branch-3.1: [feature](nereids) support explain command
return empty string to test planner performance #54422 (#54457)
8b50b365c51 is described below
commit 8b50b365c51e01fd7d55707ecb3484f085bef504
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Aug 8 10:11:20 2025 +0800
branch-3.1: [feature](nereids) support explain command return empty string
to test planner performance #54422 (#54457)
Cherry-picked from #54422
Co-authored-by: 924060929 <[email protected]>
---
.../java/org/apache/doris/nereids/NereidsPlanner.java | 5 ++++-
.../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(+), 1 deletion(-)
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 b091309d391..c2410e51d83 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
@@ -667,6 +667,9 @@ public class NereidsPlanner extends Planner {
@Override
public String getExplainString(ExplainOptions explainOptions) {
+ if (getConnectContext().getSessionVariable().enableExplainNone) {
+ return "";
+ }
ExplainLevel explainLevel = getExplainLevel(explainOptions);
String plan = "";
String mvSummary = "";
@@ -817,7 +820,7 @@ public class NereidsPlanner extends Planner {
}
public ConnectContext getConnectContext() {
- return cascadesContext.getConnectContext();
+ return cascadesContext == null ? ConnectContext.get() :
cascadesContext.getConnectContext();
}
public StatementContext getStatementContext() {
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 39199a16496..4f739717037 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
@@ -2283,6 +2283,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";
@@ -2305,6 +2307,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]