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 7f9a9465893 only support prune olapTable/parquet/orc
7f9a9465893 is described below

commit 7f9a9465893ac9e4af8286eb02f2215340f45bcd
Author: 924060929 <[email protected]>
AuthorDate: Thu Oct 30 18:08:44 2025 +0800

    only support prune olapTable/parquet/orc
---
 .../doris/datasource/hive/HMSExternalTable.java    | 40 ++++++++++++++++++++++
 .../doris/datasource/hive/source/HiveScanNode.java | 37 +-------------------
 .../nereids/rules/rewrite/SlotTypeReplacer.java    | 11 ++++++
 .../trees/expressions/functions/table/File.java    |  8 ++++-
 .../trees/expressions/functions/table/Hdfs.java    |  9 ++++-
 .../trees/expressions/functions/table/Local.java   |  9 ++++-
 .../trees/expressions/functions/table/S3.java      |  9 ++++-
 .../trees/plans/logical/LogicalFileScan.java       | 31 ++++++++++++++++-
 .../trees/plans/logical/LogicalOlapScan.java       |  7 +++-
 .../plans/logical/SupportPruneNestedColumn.java    | 24 +++++++++++++
 .../logical/SupportPruneNestedColumnFormats.java   | 39 +++++++++++++++++++++
 11 files changed, 182 insertions(+), 42 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java
index babbb099372..526b4c3d071 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java
@@ -58,6 +58,7 @@ import org.apache.doris.mtmv.MTMVSnapshotIf;
 import org.apache.doris.nereids.exceptions.NotSupportedException;
 import 
org.apache.doris.nereids.trees.plans.logical.LogicalFileScan.SelectedPartitions;
 import org.apache.doris.qe.GlobalVariable;
+import org.apache.doris.qe.SessionVariable;
 import org.apache.doris.statistics.AnalysisInfo;
 import org.apache.doris.statistics.BaseAnalysisTask;
 import org.apache.doris.statistics.ColumnStatistic;
@@ -65,6 +66,7 @@ import org.apache.doris.statistics.ColumnStatisticBuilder;
 import org.apache.doris.statistics.HMSAnalysisTask;
 import org.apache.doris.statistics.StatsType;
 import org.apache.doris.statistics.util.StatisticsUtil;
+import org.apache.doris.thrift.TFileFormatType;
 import org.apache.doris.thrift.THiveTable;
 import org.apache.doris.thrift.TTableDescriptor;
 import org.apache.doris.thrift.TTableType;
@@ -1188,6 +1190,44 @@ public class HMSExternalTable extends ExternalTable 
implements MTMVRelatedTableI
         }
     }
 
+    public TFileFormatType getFileFormatType(SessionVariable sessionVariable) 
throws UserException {
+        TFileFormatType type = null;
+        Table table = getRemoteTable();
+        String inputFormatName = table.getSd().getInputFormat();
+        String hiveFormat = 
HiveMetaStoreClientHelper.HiveFileFormat.getFormat(inputFormatName);
+        if 
(hiveFormat.equals(HiveMetaStoreClientHelper.HiveFileFormat.PARQUET.getDesc())) 
{
+            type = TFileFormatType.FORMAT_PARQUET;
+        } else if 
(hiveFormat.equals(HiveMetaStoreClientHelper.HiveFileFormat.ORC.getDesc())) {
+            type = TFileFormatType.FORMAT_ORC;
+        } else if 
(hiveFormat.equals(HiveMetaStoreClientHelper.HiveFileFormat.TEXT_FILE.getDesc()))
 {
+            String serDeLib = 
table.getSd().getSerdeInfo().getSerializationLib();
+            if (serDeLib.equals(HiveMetaStoreClientHelper.HIVE_JSON_SERDE)
+                    || 
serDeLib.equals(HiveMetaStoreClientHelper.LEGACY_HIVE_JSON_SERDE)) {
+                type = TFileFormatType.FORMAT_JSON;
+            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.OPENX_JSON_SERDE)) {
+                if (!sessionVariable.isReadHiveJsonInOneColumn()) {
+                    type = TFileFormatType.FORMAT_JSON;
+                } else if (sessionVariable.isReadHiveJsonInOneColumn() && 
firstColumnIsString()) {
+                    type = TFileFormatType.FORMAT_CSV_PLAIN;
+                } else {
+                    throw new UserException("You set 
read_hive_json_in_one_column = true, but the first column of "
+                            + "table " + getName()
+                            + " is not a string column.");
+                }
+            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.HIVE_TEXT_SERDE)) {
+                type = TFileFormatType.FORMAT_TEXT;
+            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.HIVE_OPEN_CSV_SERDE)) {
+                type = TFileFormatType.FORMAT_CSV_PLAIN;
+            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.HIVE_MULTI_DELIMIT_SERDE)) {
+                type = TFileFormatType.FORMAT_TEXT;
+            } else {
+                throw new UserException("Unsupported hive table serde: " + 
serDeLib);
+            }
+        }
+        return type;
+    }
+
+
     private Table loadHiveTable() {
         HMSCachedClient client = ((HMSExternalCatalog) catalog).getClient();
         return client.getTable(getRemoteDbName(), remoteName);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java
index a11dc6d247e..2a524a4138d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/source/HiveScanNode.java
@@ -409,44 +409,9 @@ public class HiveScanNode extends FileQueryScanNode {
 
     @Override
     public TFileFormatType getFileFormatType() throws UserException {
-        TFileFormatType type = null;
-        Table table = hmsTable.getRemoteTable();
-        String inputFormatName = table.getSd().getInputFormat();
-        String hiveFormat = 
HiveMetaStoreClientHelper.HiveFileFormat.getFormat(inputFormatName);
-        if 
(hiveFormat.equals(HiveMetaStoreClientHelper.HiveFileFormat.PARQUET.getDesc())) 
{
-            type = TFileFormatType.FORMAT_PARQUET;
-        } else if 
(hiveFormat.equals(HiveMetaStoreClientHelper.HiveFileFormat.ORC.getDesc())) {
-            type = TFileFormatType.FORMAT_ORC;
-        } else if 
(hiveFormat.equals(HiveMetaStoreClientHelper.HiveFileFormat.TEXT_FILE.getDesc()))
 {
-            String serDeLib = 
table.getSd().getSerdeInfo().getSerializationLib();
-            if (serDeLib.equals(HiveMetaStoreClientHelper.HIVE_JSON_SERDE)
-                    || 
serDeLib.equals(HiveMetaStoreClientHelper.LEGACY_HIVE_JSON_SERDE)) {
-                type = TFileFormatType.FORMAT_JSON;
-            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.OPENX_JSON_SERDE)) {
-                if (!sessionVariable.isReadHiveJsonInOneColumn()) {
-                    type = TFileFormatType.FORMAT_JSON;
-                } else if (sessionVariable.isReadHiveJsonInOneColumn()
-                        && hmsTable.firstColumnIsString()) {
-                    type = TFileFormatType.FORMAT_CSV_PLAIN;
-                } else {
-                    throw new UserException("You set 
read_hive_json_in_one_column = true, but the first column of "
-                            + "table " + hmsTable.getName()
-                            + " is not a string column.");
-                }
-            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.HIVE_TEXT_SERDE)) {
-                type = TFileFormatType.FORMAT_TEXT;
-            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.HIVE_OPEN_CSV_SERDE)) {
-                type = TFileFormatType.FORMAT_CSV_PLAIN;
-            } else if 
(serDeLib.equals(HiveMetaStoreClientHelper.HIVE_MULTI_DELIMIT_SERDE)) {
-                type = TFileFormatType.FORMAT_TEXT;
-            } else {
-                throw new UserException("Unsupported hive table serde: " + 
serDeLib);
-            }
-        }
-        return type;
+        return hmsTable.getFileFormatType(sessionVariable);
     }
 
-
     @Override
     protected void setScanParams(TFileRangeDesc rangeDesc, Split split) {
         if (split instanceof  HiveSplit) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SlotTypeReplacer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SlotTypeReplacer.java
index 459c7362758..9ce5de48061 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SlotTypeReplacer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SlotTypeReplacer.java
@@ -32,6 +32,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
 import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.expressions.functions.Function;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Lambda;
+import 
org.apache.doris.nereids.trees.expressions.functions.table.TableValuedFunction;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
 import org.apache.doris.nereids.trees.plans.logical.LogicalCTEConsumer;
@@ -56,6 +57,7 @@ import 
org.apache.doris.nereids.trees.plans.logical.LogicalTVFRelation;
 import org.apache.doris.nereids.trees.plans.logical.LogicalTopN;
 import org.apache.doris.nereids.trees.plans.logical.LogicalUnion;
 import org.apache.doris.nereids.trees.plans.logical.LogicalWindow;
+import org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumn;
 import org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter;
 import org.apache.doris.nereids.types.ArrayType;
 import org.apache.doris.nereids.types.DataType;
@@ -374,6 +376,10 @@ public class SlotTypeReplacer extends 
DefaultPlanRewriter<Void> {
 
     @Override
     public Plan visitLogicalFileScan(LogicalFileScan fileScan, Void context) {
+        if (!fileScan.supportPruneNestedColumn()) {
+            return fileScan;
+        }
+
         Pair<Boolean, List<Slot>> replaced = 
replaceExpressions(fileScan.getOutput(), false, true);
         if (replaced.first) {
             List<Slot> replaceSlots = new ArrayList<>(replaced.second);
@@ -407,6 +413,11 @@ public class SlotTypeReplacer extends 
DefaultPlanRewriter<Void> {
 
     @Override
     public Plan visitLogicalTVFRelation(LogicalTVFRelation tvfRelation, Void 
context) {
+        TableValuedFunction function = tvfRelation.getFunction();
+        if (!(function instanceof SupportPruneNestedColumn)
+                || !((SupportPruneNestedColumn) 
function).supportPruneNestedColumn()) {
+            return tvfRelation;
+        }
         Pair<Boolean, List<Slot>> replaced
                 = replaceExpressions(tvfRelation.getOutput(), false, true);
         if (replaced.first) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/File.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/File.java
index aed17d7b5a8..660dfad4874 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/File.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/File.java
@@ -21,6 +21,8 @@ import org.apache.doris.catalog.FunctionSignature;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.trees.expressions.Properties;
 import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumn;
+import 
org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumnFormats;
 import org.apache.doris.nereids.types.coercion.AnyDataType;
 import org.apache.doris.tablefunction.FileTableValuedFunction;
 import org.apache.doris.tablefunction.TableValuedFunctionIf;
@@ -30,7 +32,7 @@ import java.util.Map;
 /**
  * File Tvf
  */
-public class File extends TableValuedFunction {
+public class File extends TableValuedFunction implements 
SupportPruneNestedColumn {
     public File(Properties properties) {
         super("file", properties);
     }
@@ -55,4 +57,8 @@ public class File extends TableValuedFunction {
         return visitor.visitFile(this, context);
     }
 
+    @Override
+    public boolean supportPruneNestedColumn() {
+        return 
SupportPruneNestedColumnFormats.supportFormat(getTVFProperties());
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Hdfs.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Hdfs.java
index 5f8651ed61c..8389892f6cf 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Hdfs.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Hdfs.java
@@ -21,6 +21,8 @@ import org.apache.doris.catalog.FunctionSignature;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.trees.expressions.Properties;
 import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumn;
+import 
org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumnFormats;
 import org.apache.doris.nereids.types.coercion.AnyDataType;
 import org.apache.doris.tablefunction.HdfsTableValuedFunction;
 import org.apache.doris.tablefunction.TableValuedFunctionIf;
@@ -29,7 +31,7 @@ import java.util.List;
 import java.util.Map;
 
 /** hdfs */
-public class Hdfs extends TableValuedFunction {
+public class Hdfs extends TableValuedFunction implements 
SupportPruneNestedColumn {
     public Hdfs(Properties properties) {
         super("hdfs", properties);
     }
@@ -53,4 +55,9 @@ public class Hdfs extends TableValuedFunction {
     public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
         return visitor.visitHdfs(this, context);
     }
+
+    @Override
+    public boolean supportPruneNestedColumn() {
+        return 
SupportPruneNestedColumnFormats.supportFormat(getTVFProperties());
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Local.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Local.java
index 4330980ee86..094324e895b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Local.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/Local.java
@@ -21,6 +21,8 @@ import org.apache.doris.catalog.FunctionSignature;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.trees.expressions.Properties;
 import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumn;
+import 
org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumnFormats;
 import org.apache.doris.nereids.types.coercion.AnyDataType;
 import org.apache.doris.tablefunction.LocalTableValuedFunction;
 import org.apache.doris.tablefunction.TableValuedFunctionIf;
@@ -30,7 +32,7 @@ import java.util.Map;
 /**
  * local
  */
-public class Local extends TableValuedFunction {
+public class Local extends TableValuedFunction implements 
SupportPruneNestedColumn {
     public Local(Properties properties) {
         super("local", properties);
     }
@@ -54,4 +56,9 @@ public class Local extends TableValuedFunction {
     public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
         return visitor.visitLocal(this, context);
     }
+
+    @Override
+    public boolean supportPruneNestedColumn() {
+        return 
SupportPruneNestedColumnFormats.supportFormat(getTVFProperties());
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/S3.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/S3.java
index d2623d8fd3c..3c4c924d7f4 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/S3.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/table/S3.java
@@ -21,6 +21,8 @@ import org.apache.doris.catalog.FunctionSignature;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.trees.expressions.Properties;
 import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumn;
+import 
org.apache.doris.nereids.trees.plans.logical.SupportPruneNestedColumnFormats;
 import org.apache.doris.nereids.types.coercion.AnyDataType;
 import org.apache.doris.tablefunction.S3TableValuedFunction;
 import org.apache.doris.tablefunction.TableValuedFunctionIf;
@@ -28,7 +30,7 @@ import org.apache.doris.tablefunction.TableValuedFunctionIf;
 import java.util.Map;
 
 /** s3 */
-public class S3 extends TableValuedFunction {
+public class S3 extends TableValuedFunction implements 
SupportPruneNestedColumn {
     public S3(Properties properties) {
         super("s3", properties);
     }
@@ -52,4 +54,9 @@ public class S3 extends TableValuedFunction {
     public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
         return visitor.visitS3(this, context);
     }
+
+    @Override
+    public boolean supportPruneNestedColumn() {
+        return 
SupportPruneNestedColumnFormats.supportFormat(getTVFProperties());
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
index 8854800005e..5d4c1167a82 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
@@ -21,6 +21,8 @@ import org.apache.doris.analysis.TableScanParams;
 import org.apache.doris.analysis.TableSnapshot;
 import org.apache.doris.catalog.PartitionItem;
 import org.apache.doris.datasource.ExternalTable;
+import org.apache.doris.datasource.hive.HMSExternalTable;
+import org.apache.doris.datasource.iceberg.IcebergExternalTable;
 import org.apache.doris.datasource.mvcc.MvccUtil;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.LogicalProperties;
@@ -32,6 +34,9 @@ import org.apache.doris.nereids.trees.plans.PlanType;
 import org.apache.doris.nereids.trees.plans.RelationId;
 import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.nereids.util.Utils;
+import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.qe.SessionVariable;
+import org.apache.doris.thrift.TFileFormatType;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -46,7 +51,7 @@ import java.util.Optional;
 /**
  * Logical file scan for external catalog.
  */
-public class LogicalFileScan extends LogicalCatalogRelation {
+public class LogicalFileScan extends LogicalCatalogRelation implements 
SupportPruneNestedColumn {
     protected final SelectedPartitions selectedPartitions;
     protected final Optional<TableSample> tableSample;
     protected final Optional<TableSnapshot> tableSnapshot;
@@ -189,6 +194,30 @@ public class LogicalFileScan extends 
LogicalCatalogRelation {
         return super.computeAsteriskOutput();
     }
 
+    @Override
+    public boolean supportPruneNestedColumn() {
+        ExternalTable table = getTable();
+        if (table instanceof IcebergExternalTable) {
+            return true;
+        } else if (table instanceof HMSExternalTable) {
+            try {
+                ConnectContext connectContext = ConnectContext.get();
+                SessionVariable sessionVariable = 
connectContext.getSessionVariable();
+                TFileFormatType fileFormatType = ((HMSExternalTable) 
table).getFileFormatType(sessionVariable);
+                switch (fileFormatType) {
+                    case FORMAT_PARQUET:
+                    case FORMAT_ORC:
+                        return true;
+                    default:
+                        return false;
+                }
+            } catch (Throwable t) {
+                // ignore and not prune
+            }
+        }
+        return false;
+    }
+
     /**
      * SelectedPartitions contains the selected partitions and the total 
partition number.
      * Mainly for hive table partition pruning.
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
index 394e414cc2e..cb1214cd7c5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
@@ -72,7 +72,7 @@ import java.util.stream.Collectors;
 /**
  * Logical OlapScan.
  */
-public class LogicalOlapScan extends LogicalCatalogRelation implements 
OlapScan {
+public class LogicalOlapScan extends LogicalCatalogRelation implements 
OlapScan, SupportPruneNestedColumn {
 
     private static final Logger LOG = 
LogManager.getLogger(LogicalOlapScan.class);
 
@@ -868,4 +868,9 @@ public class LogicalOlapScan extends LogicalCatalogRelation 
implements OlapScan
                 manuallySpecifiedTabletIds, operativeSlots, virtualColumns, 
scoreOrderKeys, scoreLimit,
                 annOrderKeys, annLimit, tableAlias);
     }
+
+    @Override
+    public boolean supportPruneNestedColumn() {
+        return true;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/SupportPruneNestedColumn.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/SupportPruneNestedColumn.java
new file mode 100644
index 00000000000..44f1b733dd1
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/SupportPruneNestedColumn.java
@@ -0,0 +1,24 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.plans.logical;
+
+/** SupportPruneNestedColumn */
+public interface SupportPruneNestedColumn {
+    // return false will not prune the nested column
+    boolean supportPruneNestedColumn();
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/SupportPruneNestedColumnFormats.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/SupportPruneNestedColumnFormats.java
new file mode 100644
index 00000000000..cfc7f7e23fc
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/SupportPruneNestedColumnFormats.java
@@ -0,0 +1,39 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.plans.logical;
+
+import org.apache.doris.nereids.trees.expressions.Properties;
+
+import com.google.common.collect.ImmutableSet;
+
+import java.util.Set;
+
+/** SupportPruneNestedColumnFormats */
+public class SupportPruneNestedColumnFormats {
+    private static final Set<String> SUPPORTED_FORMATS = ImmutableSet.of(
+            "parquet", "orc"
+    );
+
+    public static boolean supportFormat(Properties properties) {
+        String format = properties.getMap().get("format");
+        if (format == null) {
+            return false;
+        }
+        return SUPPORTED_FORMATS.contains(format.toLowerCase());
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to