From 82b4d0f4ba4985ce0a37fdc0f8d92a6fe28e5e05 Mon Sep 17 00:00:00 2001 From: seawinde Date: Wed, 13 Aug 2025 18:23:30 +0800 Subject: [PATCH 1/2] [fix](mtmv) Fix aggregate function roll up fail when function is always nullable (#52960) ### What problem does this PR solve? Related PR: #36318 Problem Summary: materaialized view def is as fllowing: create materialized view as select k1, k3, sum(k2), count(k4) from ${tblName} group by k1, k3; `sum(k2) ` nullable is true if query is as following, would rewritten fail with err info 'query aggregate function roll up fail', the pr fix this select sum(distinct k1) from agg_use_key_direct --- .../data/mv_p0/agg_use_key_direct/agg_use_key_direct.out | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regression-test/data/mv_p0/agg_use_key_direct/agg_use_key_direct.out b/regression-test/data/mv_p0/agg_use_key_direct/agg_use_key_direct.out index 92d3a082eb11e8..d6e17e77bc6c00 100644 --- a/regression-test/data/mv_p0/agg_use_key_direct/agg_use_key_direct.out +++ b/regression-test/data/mv_p0/agg_use_key_direct/agg_use_key_direct.out @@ -12,5 +12,5 @@ -4 -- !select_avg -- --4 +-4.0 From 589ae6c591844e6700eec1d8daecfecc6acc6fc9 Mon Sep 17 00:00:00 2001 From: seawinde Date: Thu, 14 Aug 2025 19:39:42 +0800 Subject: [PATCH 2/2] fix code usage --- .../mv/rollup/ContainDistinctFunctionRollupHandler.java | 9 +++++++-- .../mv_p0/agg_use_key_direct/agg_use_key_direct.groovy | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/rollup/ContainDistinctFunctionRollupHandler.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/rollup/ContainDistinctFunctionRollupHandler.java index 4d9e6810ce4521..b935b3f247b879 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/rollup/ContainDistinctFunctionRollupHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/rollup/ContainDistinctFunctionRollupHandler.java @@ -50,9 +50,14 @@ public class ContainDistinctFunctionRollupHandler extends AggFunctionRollUpHandl public static final ContainDistinctFunctionRollupHandler INSTANCE = new ContainDistinctFunctionRollupHandler(); public static Set SUPPORTED_AGGREGATE_FUNCTION_SET = ImmutableSet.of( new Max(true, Any.INSTANCE), new Min(true, Any.INSTANCE), + new Max(true, Any.INSTANCE).withAlwaysNullable(true), + new Min(true, Any.INSTANCE).withAlwaysNullable(true), new Max(false, Any.INSTANCE), new Min(false, Any.INSTANCE), - new Count(true, Any.INSTANCE), new Sum(true, Any.INSTANCE), - new Avg(true, Any.INSTANCE)); + new Max(false, Any.INSTANCE).withAlwaysNullable(true), + new Min(false, Any.INSTANCE).withAlwaysNullable(true), + new Count(true, Any.INSTANCE), + new Sum(true, Any.INSTANCE), new Sum(true, Any.INSTANCE).withAlwaysNullable(true), + new Avg(true, Any.INSTANCE), new Avg(true, Any.INSTANCE).withAlwaysNullable(true)); @Override public boolean canRollup(AggregateFunction queryAggregateFunction, diff --git a/regression-test/suites/mv_p0/agg_use_key_direct/agg_use_key_direct.groovy b/regression-test/suites/mv_p0/agg_use_key_direct/agg_use_key_direct.groovy index 855ea157f88284..79d26327f8244d 100644 --- a/regression-test/suites/mv_p0/agg_use_key_direct/agg_use_key_direct.groovy +++ b/regression-test/suites/mv_p0/agg_use_key_direct/agg_use_key_direct.groovy @@ -59,5 +59,5 @@ suite ("agg_use_key_direct") { order_qt_select_min """select min(distinct k3) from agg_use_key_direct""" mv_rewrite_success("""select avg(distinct k3) from agg_use_key_direct""", "common_mv") - order_qt_select_avg """select min(distinct k3) from agg_use_key_direct""" + order_qt_select_avg """select avg(distinct k3) from agg_use_key_direct""" }