This is an automated email from the ASF dual-hosted git repository.
huajianlan pushed a commit to branch nested_column_prune
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/nested_column_prune by this
push:
new 049a0652e82 support enable_prune_nested_column variable
049a0652e82 is described below
commit 049a0652e82376c806a5682a790ee8010318356e
Author: 924060929 <[email protected]>
AuthorDate: Tue Oct 21 17:49:05 2025 +0800
support enable_prune_nested_column variable
---
.../apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java | 7 +++++++
.../apache/doris/nereids/rules/rewrite/NestedColumnPruning.java | 8 +++++---
.../src/main/java/org/apache/doris/qe/SessionVariable.java | 9 +++++++++
3 files changed, 21 insertions(+), 3 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java
index 4b6e9b6e09b..43a1e76751e 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ExpressionAnalyzer.java
@@ -93,6 +93,7 @@ import org.apache.doris.nereids.types.ArrayType;
import org.apache.doris.nereids.types.BigIntType;
import org.apache.doris.nereids.types.BooleanType;
import org.apache.doris.nereids.types.DataType;
+import org.apache.doris.nereids.types.NestedColumnPrunable;
import org.apache.doris.nereids.types.TinyIntType;
import org.apache.doris.nereids.util.ExpressionUtils;
import org.apache.doris.nereids.util.TypeCoercionUtils;
@@ -275,6 +276,9 @@ public class ExpressionAnalyzer extends
SubExprAnalyzer<ExpressionRewriteContext
}
outerScope.get().getCorrelatedSlots().add((Slot)
firstBound);
}
+ if (firstBound.getDataType() instanceof NestedColumnPrunable) {
+
context.cascadesContext.getStatementContext().setHasNestedColumns(true);
+ }
return firstBound;
default:
if (enableExactMatch) {
@@ -294,6 +298,9 @@ public class ExpressionAnalyzer extends
SubExprAnalyzer<ExpressionRewriteContext
.filter(bound -> unboundSlot.getNameParts().size()
== bound.getQualifier().size() + 1)
.collect(Collectors.toList());
if (exactMatch.size() == 1) {
+ if (exactMatch.get(0).getDataType() instanceof
NestedColumnPrunable) {
+
context.cascadesContext.getStatementContext().setHasNestedColumns(true);
+ }
return exactMatch.get(0);
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NestedColumnPruning.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NestedColumnPruning.java
index d6ac455149c..609b577c6a2 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NestedColumnPruning.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NestedColumnPruning.java
@@ -32,6 +32,7 @@ import org.apache.doris.nereids.types.MapType;
import org.apache.doris.nereids.types.NullType;
import org.apache.doris.nereids.types.StructField;
import org.apache.doris.nereids.types.StructType;
+import org.apache.doris.qe.SessionVariable;
import org.apache.doris.thrift.TAccessPathType;
import org.apache.doris.thrift.TColumnAccessPaths;
import org.apache.doris.thrift.TColumnNameAccessPath;
@@ -68,9 +69,10 @@ public class NestedColumnPruning implements CustomRewriter {
@Override
public Plan rewriteRoot(Plan plan, JobContext jobContext) {
StatementContext statementContext =
jobContext.getCascadesContext().getStatementContext();
- // if (!statementContext.hasNestedColumns()) {
- // return plan;
- // }
+ SessionVariable sessionVariable =
statementContext.getConnectContext().getSessionVariable();
+ if (!sessionVariable.enablePruneNestedColumns ||
!statementContext.hasNestedColumns()) {
+ return plan;
+ }
AccessPathPlanCollector collector = new AccessPathPlanCollector();
Map<Slot, List<CollectAccessPathResult>> slotToAccessPaths =
collector.collect(plan, statementContext);
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 6381773d09f..26085fa5361 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
@@ -384,6 +384,8 @@ public class SessionVariable implements Serializable,
Writable {
public static final String ENABLE_RUNTIME_FILTER_PARTITION_PRUNE =
"enable_runtime_filter_partition_prune";
+ public static final String ENABLE_PRUNE_NESTED_COLUMN =
"enable_prune_nested_column";
+
static final String SESSION_CONTEXT = "session_context";
public static final String DEFAULT_ORDER_BY_LIMIT =
"default_order_by_limit";
@@ -1511,6 +1513,13 @@ public class SessionVariable implements Serializable,
Writable {
varType = VariableAnnotation.EXPERIMENTAL)
public int topNLazyMaterializationThreshold = 1024;
+ @VariableMgr.VarAttr(name = ENABLE_PRUNE_NESTED_COLUMN, needForward = true,
+ fuzzy = false,
+ varType = VariableAnnotation.EXPERIMENTAL,
+ description = {"是否裁剪map/struct类型", "Whether to prune the type of
map/struct"}
+ )
+ public boolean enablePruneNestedColumns = true;
+
public boolean enableTopnLazyMaterialization() {
return ConnectContext.get() != null
&&
ConnectContext.get().getSessionVariable().topNLazyMaterializationThreshold > 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]