This is an automated email from the ASF dual-hosted git repository. panxiaolei pushed a commit to branch cp_1123 in repository https://gitbox.apache.org/repos/asf/doris.git
commit b85e8a9c3c5ba263b6e5b86ac053727d77f56fba Author: Pxl <[email protected]> AuthorDate: Wed Nov 22 10:53:29 2023 +0800 do not push down agg on aggregate column (#27356) do not push down agg on aggregate column --- 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]
