This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new a4e793752fc [bugfix](iceberg)revert count(*) directly returned by fe 
for 2.1 (#38566) (#38655)
a4e793752fc is described below

commit a4e793752fccef8e49d98d6992df3ed352eb0942
Author: wuwenchi <[email protected]>
AuthorDate: Thu Aug 1 18:56:19 2024 +0800

    [bugfix](iceberg)revert count(*) directly returned by fe for 2.1 (#38566) 
(#38655)
    
    bp: #38566
---
 .../org/apache/doris/datasource/FileScanNode.java  |  1 -
 .../datasource/iceberg/source/IcebergScanNode.java | 13 ++++++------
 .../org/apache/doris/nereids/NereidsPlanner.java   | 24 +---------------------
 .../org/apache/doris/planner/OriginalPlanner.java  | 16 ---------------
 4 files changed, 8 insertions(+), 46 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
index d202e01f524..f08fb0a503f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
@@ -71,7 +71,6 @@ public abstract class FileScanNode extends ExternalScanNode {
     protected long totalPartitionNum = 0;
     protected long readPartitionNum = 0;
     protected long fileSplitSize;
-    public long rowCount = 0;
 
     public FileScanNode(PlanNodeId id, TupleDescriptor desc, String 
planNodeName, StatisticalType statisticalType,
             boolean needCheckColumnPriv) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/source/IcebergScanNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/source/IcebergScanNode.java
index bb200fdf027..38d9c8e8215 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/source/IcebergScanNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/source/IcebergScanNode.java
@@ -75,6 +75,7 @@ import org.apache.iceberg.util.TableScanUtil;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -209,12 +210,6 @@ public class IcebergScanNode extends FileQueryScanNode {
         HashSet<String> partitionPathSet = new HashSet<>();
         boolean isPartitionedTable = icebergTable.spec().isPartitioned();
 
-        long rowCount = getCountFromSnapshot();
-        if (getPushDownAggNoGroupingOp().equals(TPushAggOp.COUNT) && rowCount 
>= 0) {
-            this.rowCount = rowCount;
-            return new ArrayList<>();
-        }
-
         CloseableIterable<FileScanTask> fileScanTasks = 
TableScanUtil.splitFiles(scan.planFiles(), splitSize);
         try (CloseableIterable<CombinedScanTask> combinedScanTasks =
                 TableScanUtil.planTasks(fileScanTasks, splitSize, 1, 0)) {
@@ -268,6 +263,12 @@ public class IcebergScanNode extends FileQueryScanNode {
             throw new UserException(e.getMessage(), e.getCause());
         }
 
+        TPushAggOp aggOp = getPushDownAggNoGroupingOp();
+        if (aggOp.equals(TPushAggOp.COUNT) && getCountFromSnapshot() >= 0) {
+            // we can create a special empty split and skip the plan process
+            return splits.isEmpty() ? splits : 
Collections.singletonList(splits.get(0));
+        }
+
         readPartitionNum = partitionPathSet.size();
 
         return splits;
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 12bb8c3623c..67f4bb73b18 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
@@ -26,7 +26,6 @@ import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.NereidsException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.profile.SummaryProfile;
-import org.apache.doris.datasource.iceberg.source.IcebergScanNode;
 import org.apache.doris.mysql.FieldInfo;
 import org.apache.doris.nereids.CascadesContext.Lock;
 import org.apache.doris.nereids.exceptions.AnalysisException;
@@ -54,18 +53,14 @@ import org.apache.doris.nereids.trees.plans.Plan;
 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.logical.LogicalSqlCache;
-import org.apache.doris.nereids.trees.plans.physical.PhysicalHashAggregate;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
-import org.apache.doris.nereids.trees.plans.physical.PhysicalResultSink;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalSqlCache;
 import org.apache.doris.planner.PlanFragment;
 import org.apache.doris.planner.Planner;
 import org.apache.doris.planner.RuntimeFilter;
 import org.apache.doris.planner.ScanNode;
-import org.apache.doris.qe.CommonResultSet;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.ResultSet;
-import org.apache.doris.qe.ResultSetMetaData;
 import org.apache.doris.qe.SessionVariable;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -75,7 +70,6 @@ import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.function.Function;
@@ -572,23 +566,7 @@ public class NereidsPlanner extends Planner {
             }
         }
 
-        if (physicalPlan instanceof PhysicalResultSink
-                && physicalPlan.child(0) instanceof PhysicalHashAggregate && 
!getScanNodes().isEmpty()
-                && getScanNodes().get(0) instanceof IcebergScanNode) {
-            List<Column> columns = Lists.newArrayList();
-            NamedExpression output = physicalPlan.getOutput().get(0);
-            columns.add(new Column(output.getName(), 
output.getDataType().toCatalogDataType()));
-            if (((IcebergScanNode) getScanNodes().get(0)).rowCount > 0) {
-                ResultSetMetaData metadata = new 
CommonResultSet.CommonResultSetMetaData(columns);
-                ResultSet resultSet = new CommonResultSet(metadata, 
Collections.singletonList(
-                        Lists.newArrayList(String.valueOf(((IcebergScanNode) 
getScanNodes().get(0)).rowCount))));
-                // only support one iceberg scan node and one count, e.g. 
select count(*) from icetbl;
-                return Optional.of(resultSet);
-            }
-            return Optional.empty();
-        } else {
-            return Optional.empty();
-        }
+        return Optional.empty();
     }
 
     private void setFormatOptions() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java
index 70e442546c3..2657232db89 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java
@@ -41,7 +41,6 @@ import org.apache.doris.catalog.Type;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.FormatOptions;
 import org.apache.doris.common.UserException;
-import org.apache.doris.datasource.iceberg.source.IcebergScanNode;
 import org.apache.doris.nereids.PlannerHook;
 import org.apache.doris.qe.CommonResultSet;
 import org.apache.doris.qe.ConnectContext;
@@ -642,21 +641,6 @@ public class OriginalPlanner extends Planner {
         List<Column> columns = new ArrayList<>(selectItems.size());
         List<String> columnLabels = parsedSelectStmt.getColLabels();
         List<String> data = new ArrayList<>();
-        if ((singleNodePlanner.getScanNodes().size() > 0 && 
singleNodePlanner.getScanNodes().get(0)
-                instanceof IcebergScanNode) && (((IcebergScanNode) 
getScanNodes().get(0)).rowCount > 0)) {
-            SelectListItem item = selectItems.get(0);
-            Expr expr = item.getExpr();
-            String columnName = columnLabels.get(0);
-            columns.add(new Column(columnName, expr.getType()));
-            data.add(String.valueOf(((IcebergScanNode) 
getScanNodes().get(0)).rowCount));
-            ResultSetMetaData metadata = new 
CommonResultSet.CommonResultSetMetaData(columns);
-            ResultSet resultSet = new CommonResultSet(metadata, 
Collections.singletonList(data));
-            // only support one iceberg scan node and one count, e.g. select 
count(*) from icetbl;
-            return Optional.of(resultSet);
-        }
-        if (!parsedSelectStmt.getTableRefs().isEmpty()) {
-            return Optional.empty();
-        }
         FormatOptions options = FormatOptions.getDefault();
         for (int i = 0; i < selectItems.size(); i++) {
             SelectListItem item = selectItems.get(i);


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

Reply via email to