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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 9379e00e47c [Chore](pick) do not push down agg on aggregate column 
(#27356) (#27498)
9379e00e47c is described below

commit 9379e00e47ca042c3321b228e015f9aec2b6af56
Author: Pxl <[email protected]>
AuthorDate: Thu Nov 23 22:28:13 2023 +0800

    [Chore](pick) do not push down agg on aggregate column (#27356) (#27498)
---
 be/src/olap/rowset/segment_v2/column_reader.cpp                    | 3 +++
 be/src/olap/rowset/segment_v2/zone_map_index.cpp                   | 5 -----
 be/src/olap/rowset/segment_v2/zone_map_index.h                     | 2 --
 .../doris/nereids/rules/implementation/AggregateStrategies.java    | 7 ++-----
 .../src/main/java/org/apache/doris/planner/OlapScanNode.java       | 7 +++++++
 .../data/mv_p0/ssb/multiple_no_where/multiple_no_where.out         | 3 +++
 .../suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy    | 1 +
 7 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp 
b/be/src/olap/rowset/segment_v2/column_reader.cpp
index d9a074e2904..f010ca0d0b9 100644
--- a/be/src/olap/rowset/segment_v2/column_reader.cpp
+++ b/be/src/olap/rowset/segment_v2/column_reader.cpp
@@ -290,6 +290,9 @@ Status ColumnReader::get_row_ranges_by_zone_map(
 }
 
 Status ColumnReader::next_batch_of_zone_map(size_t* n, 
vectorized::MutableColumnPtr& dst) const {
+    if (_segment_zone_map == nullptr) {
+        return Status::InternalError("segment zonemap not exist");
+    }
     // TODO: this work to get min/max value seems should only do once
     FieldType type = _type_info->type();
     std::unique_ptr<WrapperField> min_value(WrapperField::create_by_type(type, 
_meta_length));
diff --git a/be/src/olap/rowset/segment_v2/zone_map_index.cpp 
b/be/src/olap/rowset/segment_v2/zone_map_index.cpp
index 75f0a9d845c..75d9ae5a2c9 100644
--- a/be/src/olap/rowset/segment_v2/zone_map_index.cpp
+++ b/be/src/olap/rowset/segment_v2/zone_map_index.cpp
@@ -82,11 +82,6 @@ void TypedZoneMapIndexWriter<Type>::reset_page_zone_map() {
     _page_zone_map.pass_all = true;
 }
 
-template <PrimitiveType Type>
-void TypedZoneMapIndexWriter<Type>::reset_segment_zone_map() {
-    _segment_zone_map.pass_all = true;
-}
-
 template <PrimitiveType Type>
 Status TypedZoneMapIndexWriter<Type>::flush() {
     // Update segment zone map.
diff --git a/be/src/olap/rowset/segment_v2/zone_map_index.h 
b/be/src/olap/rowset/segment_v2/zone_map_index.h
index 686b63a9de7..d7dcc7d0c74 100644
--- a/be/src/olap/rowset/segment_v2/zone_map_index.h
+++ b/be/src/olap/rowset/segment_v2/zone_map_index.h
@@ -94,7 +94,6 @@ public:
     virtual uint64_t size() const = 0;
 
     virtual void reset_page_zone_map() = 0;
-    virtual void reset_segment_zone_map() = 0;
 };
 
 // Zone map index is represented by an IndexedColumn with ordinal index.
@@ -120,7 +119,6 @@ public:
     uint64_t size() const override { return _estimated_size; }
 
     void reset_page_zone_map() override;
-    void reset_segment_zone_map() override;
 
 private:
     void _reset_zone_map(ZoneMap* zone_map) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
index 6521929f164..89373cc95c3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
@@ -436,11 +436,8 @@ public class AggregateStrategies implements 
ImplementationRuleFactory {
 
         for (SlotReference slot : usedSlotInTable) {
             Column column = slot.getColumn().get();
-            if (logicalScan instanceof LogicalOlapScan) {
-                KeysType keysType = ((LogicalOlapScan) 
logicalScan).getTable().getKeysType();
-                if (keysType == KeysType.AGG_KEYS && !column.isKey()) {
-                    return canNotPush;
-                }
+            if (column.isAggregated()) {
+                return canNotPush;
             }
             // The zone map max length of CharFamily is 512, do not
             // over the length: https://github.com/apache/doris/pull/6293
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index aff623e25bd..afee004507a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -1646,6 +1646,13 @@ public class OlapScanNode extends ScanNode {
             return false;
         }
 
+        if (aggExpr.getChild(0) instanceof SlotRef) {
+            SlotRef slot = (SlotRef) aggExpr.getChild(0);
+            if (CreateMaterializedViewStmt.isMVColumn(slot.getColumnName()) && 
slot.getColumn().isAggregated()) {
+                return false;
+            }
+        }
+
         return true;
     }
 }
diff --git 
a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out 
b/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
index ceec2c12359..f402c4e2cc3 100644
--- a/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
+++ b/regression-test/data/mv_p0/ssb/multiple_no_where/multiple_no_where.out
@@ -26,3 +26,6 @@ ASIA  ASIA    1992    1
 1      4       1       1
 2      8       2       2
 
+-- !select --
+1      2
+
diff --git 
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy 
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
index e671f118233..59d4fbcede6 100644
--- 
a/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
+++ 
b/regression-test/suites/mv_p0/ssb/multiple_no_where/multiple_no_where.groovy
@@ -231,4 +231,5 @@ suite ("multiple_no_where") {
         contains "(temp_2)"
     }
     qt_select_temp_2 """SELECT lo_orderkey, 
sum(lo_extendedprice),max(lo_extendedprice), min(lo_extendedprice)  from  
lineorder_flat  group by lo_orderkey order by lo_orderkey;"""
+    qt_select """ select min(lo_extendedprice),max(lo_extendedprice) from 
lineorder_flat;"""
 }


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

Reply via email to