This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new c72ce08838f branch-4.1:(fix)(agg) Adjust agg strategy when table
satisfy distinct key distribution #61248 (#61297)
c72ce08838f is described below
commit c72ce08838f982583675820093c526ad1c1d74be
Author: feiniaofeiafei <[email protected]>
AuthorDate: Fri Mar 13 19:47:47 2026 +0800
branch-4.1:(fix)(agg) Adjust agg strategy when table satisfy distinct key
distribution #61248 (#61297)
picked from #61248
---
.../rules/rewrite/DistinctAggregateRewriter.java | 130 +++++++++--
.../rewrite/DistinctAggregateRewriterTest.java | 116 ++++++++++
.../agg_skew_rewrite/agg_skew_rewrite.out | 6 +-
.../nereids_rules_p0/agg_strategy/agg_strategy.out | 240 ++++++++++-----------
.../agg_strategy/distinct_agg_rewriter.out | 12 +-
.../distinct_agg_strategy_selector.out | 14 +-
.../agg_strategy/physical_agg_regulator.out | 14 +-
.../distinct_split/disitinct_split.out | 43 ++--
.../data/shape_check/clickbench/query10.out | 9 +-
.../data/shape_check/clickbench/query11.out | 7 +-
.../data/shape_check/clickbench/query12.out | 7 +-
.../data/shape_check/clickbench/query14.out | 7 +-
.../data/shape_check/clickbench/query23.out | 7 +-
.../data/shape_check/clickbench/query9.out | 5 +-
.../agg_strategy/agg_strategy.groovy | 1 +
.../agg_strategy/distinct_agg_rewriter.groovy | 1 +
16 files changed, 402 insertions(+), 217 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriter.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriter.java
index da0aa21308b..c2668751dae 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriter.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriter.java
@@ -17,13 +17,18 @@
package org.apache.doris.nereids.rules.rewrite;
+import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.DistributionInfo;
+import org.apache.doris.catalog.HashDistributionInfo;
+import org.apache.doris.catalog.OlapTable;
import org.apache.doris.nereids.rules.Rule;
import org.apache.doris.nereids.rules.RuleType;
import org.apache.doris.nereids.rules.rewrite.StatsDerive.DeriveContext;
-import org.apache.doris.nereids.stats.ExpressionEstimation;
import org.apache.doris.nereids.trees.expressions.Alias;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.NamedExpression;
+import org.apache.doris.nereids.trees.expressions.Slot;
+import org.apache.doris.nereids.trees.expressions.SlotReference;
import
org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
import org.apache.doris.nereids.trees.expressions.functions.agg.AnyValue;
import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
@@ -34,11 +39,13 @@ import
org.apache.doris.nereids.trees.expressions.functions.agg.Sum0;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.algebra.Aggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
+import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
+import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
+import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.util.AggregateUtils;
import org.apache.doris.nereids.util.ExpressionUtils;
import org.apache.doris.nereids.util.Utils;
import org.apache.doris.qe.ConnectContext;
-import org.apache.doris.statistics.ColumnStatistic;
import org.apache.doris.statistics.Statistics;
import com.google.common.annotations.VisibleForTesting;
@@ -70,6 +77,7 @@ import java.util.Set;
*/
public class DistinctAggregateRewriter implements RewriteRuleFactory {
public static final DistinctAggregateRewriter INSTANCE = new
DistinctAggregateRewriter();
+ private static final double MULTI_DISTINCT_GBY_PER_INSTANCE_THRESHOLD =
30.0;
// TODO: add other functions
private static final Set<Class<? extends AggregateFunction>>
supportSplitOtherFunctions = ImmutableSet.of(
Sum.class, Min.class, Max.class, Count.class, Sum0.class,
AnyValue.class);
@@ -113,21 +121,115 @@ public class DistinctAggregateRewriter implements
RewriteRuleFactory {
// has unknown statistics, split to bottom and top agg
if
(AggregateUtils.hasUnknownStatistics(aggregate.getGroupByExpressions(),
aggChildStats)
|| AggregateUtils.hasUnknownStatistics(dstArgs,
aggChildStats)) {
- return true;
+ return !isDistinctKeySatisfyDistribution(aggregate);
}
double gbyNdv = aggStats.getRowCount();
- Expression dstKey = dstArgs.iterator().next();
- ColumnStatistic dstKeyStats =
aggChildStats.findColumnStatistics(dstKey);
- if (dstKeyStats == null) {
- dstKeyStats = ExpressionEstimation.estimate(dstKey, aggChildStats);
- }
- double dstNdv = dstKeyStats.ndv;
- double inputRows = aggChildStats.getRowCount();
- // group by key ndv is low, distinct key ndv is high, multi_distinct
is better
- // otherwise split to bottom and top agg
- return gbyNdv < inputRows * AggregateUtils.LOW_CARDINALITY_THRESHOLD
- && dstNdv > inputRows *
AggregateUtils.HIGH_CARDINALITY_THRESHOLD;
+ int instanceNum = getParallelExecInstanceNum(ConnectContext.get());
+ if (instanceNum <= 0) {
+ instanceNum = 1;
+ }
+ return gbyNdv / instanceNum <=
MULTI_DISTINCT_GBY_PER_INSTANCE_THRESHOLD;
+ }
+
+ private int getParallelExecInstanceNum(ConnectContext ctx) {
+ if (ctx == null) {
+ return 1;
+ }
+ return ctx.getSessionVariable()
+
.getParallelExecInstanceNum(ctx.getSessionVariable().resolveCloudClusterName(ctx));
+ }
+
+ private boolean isDistinctKeySatisfyDistribution(LogicalAggregate<?
extends Plan> aggregate) {
+ DistinctDistributionInfo info =
resolveDistinctDistributionInfo(aggregate);
+ if (info == null) {
+ return false;
+ }
+ Set<String> distinctColumnNames = new HashSet<>();
+ for (SlotReference slot : info.distinctSlots) {
+ if (!slot.getOriginalColumn().isPresent()) {
+ return false;
+ }
+
distinctColumnNames.add(slot.getOriginalColumn().get().getName().toLowerCase());
+ }
+ DistributionInfo distributionInfo =
info.table.getDefaultDistributionInfo();
+ if (!(distributionInfo instanceof HashDistributionInfo)) {
+ return false;
+ }
+ List<Column> distributionColumns = ((HashDistributionInfo)
distributionInfo).getDistributionColumns();
+ if (distributionColumns.isEmpty()) {
+ return false;
+ }
+ for (Column column : distributionColumns) {
+ if (!distinctColumnNames.contains(column.getName().toLowerCase()))
{
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private DistinctDistributionInfo
resolveDistinctDistributionInfo(LogicalAggregate<? extends Plan> aggregate) {
+ Set<Expression> distinctArgs = aggregate.getDistinctArguments();
+ if (distinctArgs.isEmpty()) {
+ return null;
+ }
+ Set<SlotReference> distinctSlots = new HashSet<>();
+ for (Expression expression : distinctArgs) {
+ if (!(expression instanceof SlotReference)) {
+ return null;
+ }
+ distinctSlots.add((SlotReference) expression);
+ }
+ Plan child = aggregate.child();
+ while (child instanceof LogicalProject || child instanceof
LogicalFilter) {
+ if (child instanceof LogicalProject) {
+ LogicalProject<? extends Plan> project = (LogicalProject<?
extends Plan>) child;
+ Map<Slot, Expression> projectExprMap = new HashMap<>();
+ for (NamedExpression namedExpression : project.getProjects()) {
+ Expression projectExpr = namedExpression;
+ if (namedExpression instanceof Alias) {
+ projectExpr = ((Alias) namedExpression).child();
+ }
+ projectExprMap.put(namedExpression.toSlot(), projectExpr);
+ }
+ Set<SlotReference> replaced = new HashSet<>();
+ for (SlotReference slot : distinctSlots) {
+ Expression projectExpr = projectExprMap.get(slot);
+ if (!(projectExpr instanceof SlotReference)) {
+ return null;
+ }
+ replaced.add((SlotReference) projectExpr);
+ }
+ distinctSlots = replaced;
+ child = project.child();
+ continue;
+ }
+ child = ((LogicalFilter<? extends Plan>) child).child();
+ }
+ if (!(child instanceof LogicalOlapScan)) {
+ return null;
+ }
+ OlapTable olapTable = ((LogicalOlapScan) child).getTable();
+ if (olapTable == null) {
+ return null;
+ }
+ for (SlotReference slot : distinctSlots) {
+ if (!slot.getOriginalTable().isPresent()
+ || slot.getOriginalTable().get() != olapTable) {
+ return null;
+ }
+ }
+ return new DistinctDistributionInfo(olapTable, distinctSlots);
+ }
+
+ private static class DistinctDistributionInfo {
+ private final OlapTable table;
+ private final Set<SlotReference> distinctSlots;
+
+ private DistinctDistributionInfo(OlapTable table, Set<SlotReference>
distinctSlots) {
+ this.table = table;
+ this.distinctSlots = distinctSlots;
+ }
}
private Plan rewrite(LogicalAggregate<? extends Plan> aggregate,
ConnectContext ctx) {
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriterTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriterTest.java
index fcab4e2ae8c..05c2180840c 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriterTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/DistinctAggregateRewriterTest.java
@@ -17,22 +17,34 @@
package org.apache.doris.nereids.rules.rewrite;
+import
org.apache.doris.nereids.rules.analysis.LogicalSubQueryAliasToLogicalProject;
import
org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
import
org.apache.doris.nereids.trees.expressions.functions.agg.MultiDistinctCount;
import
org.apache.doris.nereids.trees.expressions.functions.agg.MultiDistinctGroupConcat;
import org.apache.doris.nereids.trees.expressions.functions.agg.Sum0;
import org.apache.doris.nereids.trees.expressions.functions.scalar.If;
+import org.apache.doris.nereids.trees.plans.AbstractPlan;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.util.MemoPatternMatchSupported;
import org.apache.doris.nereids.util.PlanChecker;
+import org.apache.doris.qe.SessionVariable;
+import org.apache.doris.statistics.ColumnStatistic;
+import org.apache.doris.statistics.ColumnStatisticBuilder;
+import org.apache.doris.statistics.Statistics;
import org.apache.doris.utframe.TestWithFeService;
+import com.google.common.collect.ImmutableMap;
import mockit.Mock;
import mockit.MockUp;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
public class DistinctAggregateRewriterTest extends TestWithFeService
implements MemoPatternMatchSupported {
@Override
protected void runBeforeAll() throws Exception {
@@ -42,6 +54,14 @@ public class DistinctAggregateRewriterTest extends
TestWithFeService implements
+ "distributed by hash(a) properties('replication_num' =
'1');");
connectContext.setDatabase("test");
connectContext.getSessionVariable().setDisableNereidsRules("PRUNE_EMPTY_PARTITION");
+ new SessionVariableMockUp();
+ }
+
+ private static class SessionVariableMockUp extends MockUp<SessionVariable>
{
+ @Mock
+ private int getParallelExecInstanceNum(String clusterName) {
+ return 24;
+ }
}
private void applyMock() {
@@ -198,5 +218,101 @@ public class DistinctAggregateRewriterTest extends
TestWithFeService implements
&&
agg.getAggregateFunctions().stream().noneMatch(AggregateFunction::isDistinct)
&&
agg.getAggregateFunctions().stream().anyMatch(f -> f instanceof
MultiDistinctCount)
));
+ connectContext.getSessionVariable().setAggPhase(0);
+ }
+
+ @Test
+ void testShouldUseMultiDistinctWithoutStatsSatisfyDistribution() throws
Exception {
+ DistinctAggregateRewriter rewriter =
DistinctAggregateRewriter.INSTANCE;
+ LogicalAggregate<? extends Plan> aggregate = getLogicalAggregate(
+ "select bb, count(distinct aa) from "
+ + "(select a as aa, b as bb from
test.distinct_agg_split_t where b > 1) t "
+ + "group by bb"
+ );
+ Plan child = aggregate.child();
+ Map<org.apache.doris.nereids.trees.expressions.Expression,
ColumnStatistic> colStats = new HashMap<>();
+ aggregate.getGroupByExpressions().forEach(expr ->
+ colStats.put(expr, unknownColumnStats()));
+ aggregate.getDistinctArguments().forEach(expr ->
+ colStats.put(expr, unknownColumnStats()));
+ ((AbstractPlan) child).setStatistics(new Statistics(10000, colStats));
+ aggregate.setStatistics(new Statistics(100, ImmutableMap.of()));
+
+ Assertions.assertFalse(rewriter.shouldUseMultiDistinct(aggregate));
+ }
+
+ @Test
+ void testShouldUseMultiDistinctWithStatsSelected() throws Exception {
+ DistinctAggregateRewriter rewriter = new DistinctAggregateRewriter();
+ LogicalAggregate<? extends Plan> aggregate = getLogicalAggregate(
+ "select b, count(distinct a) from test.distinct_agg_split_t
group by b"
+ );
+ Plan child = aggregate.child();
+ Map<org.apache.doris.nereids.trees.expressions.Expression,
ColumnStatistic> colStats = new HashMap<>();
+ aggregate.getGroupByExpressions().forEach(expr ->
+ colStats.put(expr, buildColumnStats(240, false)));
+ aggregate.getDistinctArguments().forEach(expr ->
+ colStats.put(expr, buildColumnStats(10000.0, false)));
+ ((AbstractPlan) child).setStatistics(new Statistics(100000, colStats));
+ aggregate.setStatistics(new Statistics(240, ImmutableMap.of()));
+
+ Assertions.assertTrue(rewriter.shouldUseMultiDistinct(aggregate));
+ }
+
+ @Test
+ void testShouldUseMultiDistinctWithStatsNotSelected() throws Exception {
+ DistinctAggregateRewriter rewriter = new DistinctAggregateRewriter();
+ LogicalAggregate<? extends Plan> aggregate = getLogicalAggregate(
+ "select b, count(distinct a) from test.distinct_agg_split_t
group by b"
+ );
+ Plan child = aggregate.child();
+ Map<org.apache.doris.nereids.trees.expressions.Expression,
ColumnStatistic> colStats = new HashMap<>();
+ aggregate.getGroupByExpressions().forEach(expr ->
+ colStats.put(expr, buildColumnStats(1000.0, false)));
+ aggregate.getDistinctArguments().forEach(expr ->
+ colStats.put(expr, buildColumnStats(10000.0, false)));
+ ((AbstractPlan) child).setStatistics(new Statistics(100000, colStats));
+ aggregate.setStatistics(new Statistics(1000.0, ImmutableMap.of()));
+
+ Assertions.assertFalse(rewriter.shouldUseMultiDistinct(aggregate));
+ }
+
+ private LogicalAggregate<? extends Plan> getLogicalAggregate(String sql) {
+ Plan plan = PlanChecker.from(connectContext)
+ .analyze(sql)
+ .applyTopDown(new LogicalSubQueryAliasToLogicalProject())
+ .getPlan();
+ Optional<LogicalAggregate<? extends Plan>> aggregate =
findAggregate(plan);
+ Assertions.assertTrue(aggregate.isPresent());
+ return aggregate.get();
+ }
+
+ private Optional<LogicalAggregate<? extends Plan>> findAggregate(Plan
plan) {
+ if (plan instanceof LogicalAggregate) {
+ return Optional.of((LogicalAggregate<? extends Plan>) plan);
+ }
+ for (Plan child : plan.children()) {
+ Optional<LogicalAggregate<? extends Plan>> found =
findAggregate(child);
+ if (found.isPresent()) {
+ return found;
+ }
+ }
+ return Optional.empty();
+ }
+
+ private ColumnStatistic unknownColumnStats() {
+ return buildColumnStats(0.0, true);
+ }
+
+ private ColumnStatistic buildColumnStats(double ndv, boolean isUnknown) {
+ return new ColumnStatisticBuilder(1)
+ .setNdv(ndv)
+ .setAvgSizeByte(4)
+ .setNumNulls(0)
+ .setMinValue(0)
+ .setMaxValue(100)
+ .setIsUnknown(isUnknown)
+ .setUpdatedTime("")
+ .build();
}
}
diff --git
a/regression-test/data/nereids_rules_p0/agg_skew_rewrite/agg_skew_rewrite.out
b/regression-test/data/nereids_rules_p0/agg_skew_rewrite/agg_skew_rewrite.out
index 813a08ce40d..ba513d54b02 100644
---
a/regression-test/data/nereids_rules_p0/agg_skew_rewrite/agg_skew_rewrite.out
+++
b/regression-test/data/nereids_rules_p0/agg_skew_rewrite/agg_skew_rewrite.out
@@ -564,10 +564,12 @@ PhysicalResultSink
PhysicalResultSink
--hashAgg[GLOBAL]
----hashAgg[LOCAL]
-------PhysicalOlapScan[test_skew_hint]
+------hashAgg[GLOBAL]
+--------PhysicalOlapScan[test_skew_hint]
-- !shape_not_rewrite --
PhysicalResultSink
--hashAgg[GLOBAL]
-----PhysicalOlapScan[test_skew_hint]
+----hashAgg[GLOBAL]
+------PhysicalOlapScan[test_skew_hint]
diff --git
a/regression-test/data/nereids_rules_p0/agg_strategy/agg_strategy.out
b/regression-test/data/nereids_rules_p0/agg_strategy/agg_strategy.out
index ba448a756a2..a718649a385 100644
--- a/regression-test/data/nereids_rules_p0/agg_strategy/agg_strategy.out
+++ b/regression-test/data/nereids_rules_p0/agg_strategy/agg_strategy.out
@@ -60,40 +60,40 @@
1
-- !agg_distinct_with_gby_key_with_other_func --
-1 1 27 27.0
-1 2 76 76.0
-1 3 42 42.0
-1 4 64 64.0
-1 5 18 18.0
-1 6 91 91.0
-1 7 13 13.0
-1 8 33 33.0
-1 9 55 55.0
-1 10 100 100.0
+1 1 27 27
+1 2 76 76
+1 3 42 42
+1 4 64 64
+1 5 18 18
+1 6 91 91
+1 7 13 13
+1 8 33 33
+1 9 55 55
+1 10 100 100
-- !agg_distinct_satisfy_gby_key_with_other_func --
-1 1 42 42.0
-1 2 18 18.0
-1 3 76 76.0
-1 4 33 33.0
-1 5 91 91.0
-1 6 27 27.0
-1 7 64 64.0
-1 8 55 55.0
-1 9 13 13.0
-1 10 100 100.0
+1 1 42 42
+1 2 18 18
+1 3 76 76
+1 4 33 33
+1 5 91 91
+1 6 27 27
+1 7 64 64
+1 8 55 55
+1 9 13 13
+1 10 100 100
-- !agg_distinct_satisfy_dst_key_with_other_func --
-1 13 13.0
-1 18 18.0
-1 27 27.0
-1 33 33.0
-1 42 42.0
-1 55 55.0
-1 64 64.0
-1 76 76.0
-1 91 91.0
-1 100 100.0
+1 13 13
+1 18 18
+1 27 27
+1 33 33
+1 42 42
+1 55 55
+1 64 64
+1 76 76
+1 91 91
+1 100 100
-- !agg_distinct_without_gby_key --
10
@@ -153,7 +153,8 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+--------------hashAgg[GLOBAL]
+----------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_with_gby_key_with_other_func --
PhysicalResultSink
@@ -178,10 +179,11 @@ PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[GLOBAL]
+--------hashAgg[DISTINCT_GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
---------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+------------hashAgg[DISTINCT_LOCAL]
+--------------hashAgg[GLOBAL]
+----------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_without_gby_key --
PhysicalResultSink
@@ -279,40 +281,40 @@ PhysicalResultSink
1
-- !agg_distinct_with_gby_key_with_other_func --
-1 1 27 27.0
-1 2 76 76.0
-1 3 42 42.0
-1 4 64 64.0
-1 5 18 18.0
-1 6 91 91.0
-1 7 13 13.0
-1 8 33 33.0
-1 9 55 55.0
-1 10 100 100.0
+1 1 27 27
+1 2 76 76
+1 3 42 42
+1 4 64 64
+1 5 18 18
+1 6 91 91
+1 7 13 13
+1 8 33 33
+1 9 55 55
+1 10 100 100
-- !agg_distinct_satisfy_gby_key_with_other_func --
-1 1 42 42.0
-1 2 18 18.0
-1 3 76 76.0
-1 4 33 33.0
-1 5 91 91.0
-1 6 27 27.0
-1 7 64 64.0
-1 8 55 55.0
-1 9 13 13.0
-1 10 100 100.0
+1 1 42 42
+1 2 18 18
+1 3 76 76
+1 4 33 33
+1 5 91 91
+1 6 27 27
+1 7 64 64
+1 8 55 55
+1 9 13 13
+1 10 100 100
-- !agg_distinct_satisfy_dst_key_with_other_func --
-1 13 13.0
-1 18 18.0
-1 27 27.0
-1 33 33.0
-1 42 42.0
-1 55 55.0
-1 64 64.0
-1 76 76.0
-1 91 91.0
-1 100 100.0
+1 13 13
+1 18 18
+1 27 27
+1 33 33
+1 42 42
+1 55 55
+1 64 64
+1 76 76
+1 91 91
+1 100 100
-- !agg_distinct_without_gby_key --
10
@@ -354,10 +356,7 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------hashAgg[LOCAL]
---------------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+--------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_satisfy_gby_key --
PhysicalResultSink
@@ -365,8 +364,7 @@ PhysicalResultSink
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
--------hashAgg[GLOBAL]
-----------hashAgg[GLOBAL]
-------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+----------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_satisfy_dst_key --
PhysicalResultSink
@@ -376,41 +374,35 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+--------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_with_gby_key_with_other_func --
PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[DISTINCT_GLOBAL]
+--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[DISTINCT_LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------hashAgg[LOCAL]
---------------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+------------hashAgg[LOCAL]
+--------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_satisfy_gby_key_with_other_func --
PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[DISTINCT_GLOBAL]
-----------hashAgg[GLOBAL]
-------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+--------hashAgg[GLOBAL]
+----------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_satisfy_dst_key_with_other_func --
PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[DISTINCT_GLOBAL]
+--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[DISTINCT_LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
+------------hashAgg[LOCAL]
+--------------PhysicalOlapScan[t_gbykey_10_dstkey_10_1000_id]
-- !agg_distinct_without_gby_key --
PhysicalResultSink
@@ -492,16 +484,16 @@ PhysicalResultSink
2
-- !agg_distinct_with_gby_key_with_other_func_low_ndv --
-2 0 60 4.0
-2 1 75 5.0
+2 0 60 4
+2 1 75 5
-- !agg_distinct_satisfy_gby_key_with_other_func_low_ndv --
2 0 69 4.3125
2 1 66 4.714285714285714
-- !agg_distinct_satisfy_dst_key_with_other_func_low_ndv --
-2 60 4.0
-2 75 5.0
+2 60 4
+2 75 5
-- !agg_distinct_without_gby_key_low_ndv --
2
@@ -561,7 +553,8 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+--------------hashAgg[GLOBAL]
+----------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_with_gby_key_with_other_func_low_ndv --
PhysicalResultSink
@@ -586,10 +579,11 @@ PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[GLOBAL]
+--------hashAgg[DISTINCT_GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
---------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+------------hashAgg[DISTINCT_LOCAL]
+--------------hashAgg[GLOBAL]
+----------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_without_gby_key_low_ndv --
PhysicalResultSink
@@ -647,16 +641,16 @@ PhysicalResultSink
2
-- !agg_distinct_with_gby_key_with_other_func_low_ndv --
-2 0 60 4.0
-2 1 75 5.0
+2 0 60 4
+2 1 75 5
-- !agg_distinct_satisfy_gby_key_with_other_func_low_ndv --
2 0 69 4.3125
2 1 66 4.714285714285714
-- !agg_distinct_satisfy_dst_key_with_other_func_low_ndv --
-2 60 4.0
-2 75 5.0
+2 60 4
+2 75 5
-- !agg_distinct_without_gby_key_low_ndv --
2
@@ -698,10 +692,7 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------hashAgg[LOCAL]
---------------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+--------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_satisfy_gby_key_low_ndv --
PhysicalResultSink
@@ -709,8 +700,7 @@ PhysicalResultSink
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
--------hashAgg[GLOBAL]
-----------hashAgg[GLOBAL]
-------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+----------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_satisfy_dst_key_low_ndv --
PhysicalResultSink
@@ -720,41 +710,35 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+--------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_with_gby_key_with_other_func_low_ndv --
PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[DISTINCT_GLOBAL]
+--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[DISTINCT_LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------hashAgg[LOCAL]
---------------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+------------hashAgg[LOCAL]
+--------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_satisfy_gby_key_with_other_func_low_ndv --
PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[DISTINCT_GLOBAL]
-----------hashAgg[GLOBAL]
-------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+--------hashAgg[GLOBAL]
+----------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_satisfy_dst_key_with_other_func_low_ndv --
PhysicalResultSink
--PhysicalQuickSort[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[DISTINCT_GLOBAL]
+--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[DISTINCT_LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
+------------hashAgg[LOCAL]
+--------------PhysicalOlapScan[t_gbykey_2_dstkey_10_30_id]
-- !agg_distinct_without_gby_key_low_ndv --
PhysicalResultSink
@@ -804,16 +788,16 @@ PhysicalResultSink
1
-- !with_gby_split_in_cascades --
-1 13.0
-1 18.0
-1 27.0
-1 33.0
-1 42.0
-1 55.0
-1 64.0
-1 76.0
-1 91.0
-1 100.0
+1 13
+1 18
+1 27
+1 33
+1 42
+1 55
+1 64
+1 76
+1 91
+1 100
-- !without_gby --
10
diff --git
a/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.out
b/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.out
index 18088719ce3..b386b2f510a 100644
---
a/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.out
+++
b/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.out
@@ -14,10 +14,9 @@ PhysicalResultSink
PhysicalResultSink
--PhysicalDistribute[DistributionSpecGather]
----hashAgg[GLOBAL]
-------hashAgg[GLOBAL]
---------PhysicalDistribute[DistributionSpecHash]
-----------hashAgg[LOCAL]
-------------PhysicalOlapScan[t1000_2]
+------PhysicalDistribute[DistributionSpecHash]
+--------hashAgg[LOCAL]
+----------PhysicalOlapScan[t1000_2]
-- !use_multi_phase3 --
PhysicalResultSink
@@ -25,10 +24,7 @@ PhysicalResultSink
----hashAgg[GLOBAL]
------PhysicalDistribute[DistributionSpecHash]
--------hashAgg[LOCAL]
-----------hashAgg[GLOBAL]
-------------PhysicalDistribute[DistributionSpecHash]
---------------hashAgg[LOCAL]
-----------------PhysicalOlapScan[t1000_2]
+----------PhysicalOlapScan[t1000_2]
-- !use_multi_distinct --
PhysicalResultSink
diff --git
a/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_strategy_selector.out
b/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_strategy_selector.out
index 05ef347e89b..7c37f7f73b2 100644
---
a/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_strategy_selector.out
+++
b/regression-test/data/nereids_rules_p0/agg_strategy/distinct_agg_strategy_selector.out
@@ -57,19 +57,13 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------hashAgg[LOCAL]
---------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------PhysicalCteConsumer ( cteId=CTEId#0 )
+--------------PhysicalDistribute[DistributionSpecExecutionAny]
+----------------PhysicalCteConsumer ( cteId=CTEId#0 )
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------hashAgg[LOCAL]
---------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------PhysicalCteConsumer ( cteId=CTEId#0 )
+--------------PhysicalDistribute[DistributionSpecExecutionAny]
+----------------PhysicalCteConsumer ( cteId=CTEId#0 )
-- !should_use_multi_distinct_with_group_by --
PhysicalResultSink
diff --git
a/regression-test/data/nereids_rules_p0/agg_strategy/physical_agg_regulator.out
b/regression-test/data/nereids_rules_p0/agg_strategy/physical_agg_regulator.out
index a33a83f01e0..8a6d35b0094 100644
---
a/regression-test/data/nereids_rules_p0/agg_strategy/physical_agg_regulator.out
+++
b/regression-test/data/nereids_rules_p0/agg_strategy/physical_agg_regulator.out
@@ -50,10 +50,7 @@ PhysicalResultSink
----hashAgg[GLOBAL]
------PhysicalDistribute[DistributionSpecHash]
--------hashAgg[LOCAL]
-----------hashAgg[GLOBAL]
-------------PhysicalDistribute[DistributionSpecHash]
---------------hashAgg[LOCAL]
-----------------PhysicalOlapScan[t1025]
+----------PhysicalOlapScan[t1025]
-- !split_multi_agg_use_three_phase --
PhysicalResultSink
@@ -67,11 +64,8 @@ PhysicalResultSink
-- !split_multi_agg_use_four_phase --
PhysicalResultSink
--PhysicalDistribute[DistributionSpecGather]
-----hashAgg[DISTINCT_GLOBAL]
+----hashAgg[GLOBAL]
------PhysicalDistribute[DistributionSpecHash]
---------hashAgg[DISTINCT_LOCAL]
-----------hashAgg[GLOBAL]
-------------PhysicalDistribute[DistributionSpecHash]
---------------hashAgg[LOCAL]
-----------------PhysicalOlapScan[t1025]
+--------hashAgg[LOCAL]
+----------PhysicalOlapScan[t1025]
diff --git
a/regression-test/data/nereids_rules_p0/distinct_split/disitinct_split.out
b/regression-test/data/nereids_rules_p0/distinct_split/disitinct_split.out
index 735f924821a..1975968f4de 100644
--- a/regression-test/data/nereids_rules_p0/distinct_split/disitinct_split.out
+++ b/regression-test/data/nereids_rules_p0/distinct_split/disitinct_split.out
@@ -200,18 +200,18 @@
2 2
-- !00_avg --
-2.0
+2
-- !10_avg --
-2.0 1.5
+2 1.5
-- !01_avg --
-2.0
-2.0
+2
+2
-- !11_avg --
-2.0 1.0
-2.0 2.0
+2 1
+2 2
-- !count_sum_avg_no_gby --
2 2 3.5
@@ -221,10 +221,10 @@
-- !count_sum_avg_with_gby --
2 1 3.5
-2 1 4.0
+2 1 4
-- !count_multi_sum_avg_with_gby --
-2 2 4.0
+2 2 4
2 3 3.5
-- !multi_sum_has_upper --
@@ -494,14 +494,10 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
----hashJoin[INNER_JOIN] hashCondition=((c <=> .c)) otherCondition=()
------hashAgg[GLOBAL]
--------hashAgg[LOCAL]
-----------hashAgg[GLOBAL]
-------------hashAgg[LOCAL]
---------------PhysicalCteConsumer ( cteId=CTEId#0 )
+----------PhysicalCteConsumer ( cteId=CTEId#0 )
------hashAgg[GLOBAL]
--------hashAgg[LOCAL]
-----------hashAgg[GLOBAL]
-------------hashAgg[LOCAL]
---------------PhysicalCteConsumer ( cteId=CTEId#0 )
+----------PhysicalCteConsumer ( cteId=CTEId#0 )
-- !multi_sum_with_gby --
PhysicalCteAnchor ( cteId=CTEId#0 )
@@ -511,14 +507,10 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
----hashJoin[INNER_JOIN] hashCondition=((c <=> .c)) otherCondition=()
------hashAgg[GLOBAL]
--------hashAgg[LOCAL]
-----------hashAgg[GLOBAL]
-------------hashAgg[LOCAL]
---------------PhysicalCteConsumer ( cteId=CTEId#0 )
+----------PhysicalCteConsumer ( cteId=CTEId#0 )
------hashAgg[GLOBAL]
--------hashAgg[LOCAL]
-----------hashAgg[GLOBAL]
-------------hashAgg[LOCAL]
---------------PhysicalCteConsumer ( cteId=CTEId#0 )
+----------PhysicalCteConsumer ( cteId=CTEId#0 )
-- !sum_count_with_gby --
PhysicalCteAnchor ( cteId=CTEId#0 )
@@ -528,13 +520,10 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
----hashJoin[INNER_JOIN] hashCondition=((a <=> .a)) otherCondition=()
------hashAgg[GLOBAL]
--------hashAgg[LOCAL]
-----------hashAgg[GLOBAL]
-------------hashAgg[LOCAL]
---------------PhysicalCteConsumer ( cteId=CTEId#0 )
+----------PhysicalCteConsumer ( cteId=CTEId#0 )
------hashAgg[GLOBAL]
---------hashAgg[GLOBAL]
-----------hashAgg[LOCAL]
-------------PhysicalCteConsumer ( cteId=CTEId#0 )
+--------hashAgg[LOCAL]
+----------PhysicalCteConsumer ( cteId=CTEId#0 )
-- !has_grouping --
PhysicalResultSink
@@ -544,7 +533,7 @@ PhysicalResultSink
--------PhysicalOlapScan[test_distinct_multi]
-- !null_hash --
-1 \N 0 0.0
+1 \N 0 0
-- !same_distinct_arg --
2 1
diff --git a/regression-test/data/shape_check/clickbench/query10.out
b/regression-test/data/shape_check/clickbench/query10.out
index c7840564369..ae9174ce1c1 100644
--- a/regression-test/data/shape_check/clickbench/query10.out
+++ b/regression-test/data/shape_check/clickbench/query10.out
@@ -4,9 +4,10 @@ PhysicalResultSink
--PhysicalTopN[MERGE_SORT]
----PhysicalDistribute[DistributionSpecGather]
------PhysicalTopN[LOCAL_SORT]
---------hashAgg[GLOBAL]
+--------hashAgg[DISTINCT_GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------PhysicalOlapScan[hits]
+------------hashAgg[DISTINCT_LOCAL]
+--------------hashAgg[GLOBAL]
+----------------PhysicalProject
+------------------PhysicalOlapScan[hits]
diff --git a/regression-test/data/shape_check/clickbench/query11.out
b/regression-test/data/shape_check/clickbench/query11.out
index 4b5e4486d3f..856e55187f9 100644
--- a/regression-test/data/shape_check/clickbench/query11.out
+++ b/regression-test/data/shape_check/clickbench/query11.out
@@ -7,7 +7,8 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------filter(( not (MobilePhoneModel = '')))
-------------------PhysicalOlapScan[hits]
+--------------hashAgg[GLOBAL]
+----------------PhysicalProject
+------------------filter(( not (MobilePhoneModel = '')))
+--------------------PhysicalOlapScan[hits]
diff --git a/regression-test/data/shape_check/clickbench/query12.out
b/regression-test/data/shape_check/clickbench/query12.out
index 10928363a83..d47a7e129e3 100644
--- a/regression-test/data/shape_check/clickbench/query12.out
+++ b/regression-test/data/shape_check/clickbench/query12.out
@@ -7,7 +7,8 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------filter(( not (MobilePhoneModel = '')))
-------------------PhysicalOlapScan[hits]
+--------------hashAgg[GLOBAL]
+----------------PhysicalProject
+------------------filter(( not (MobilePhoneModel = '')))
+--------------------PhysicalOlapScan[hits]
diff --git a/regression-test/data/shape_check/clickbench/query14.out
b/regression-test/data/shape_check/clickbench/query14.out
index 35eedce41b9..54afcc6268c 100644
--- a/regression-test/data/shape_check/clickbench/query14.out
+++ b/regression-test/data/shape_check/clickbench/query14.out
@@ -7,7 +7,8 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------filter(( not (SearchPhrase = '')))
-------------------PhysicalOlapScan[hits]
+--------------hashAgg[GLOBAL]
+----------------PhysicalProject
+------------------filter(( not (SearchPhrase = '')))
+--------------------PhysicalOlapScan[hits]
diff --git a/regression-test/data/shape_check/clickbench/query23.out
b/regression-test/data/shape_check/clickbench/query23.out
index 76a91b3ad49..5c6ed877934 100644
--- a/regression-test/data/shape_check/clickbench/query23.out
+++ b/regression-test/data/shape_check/clickbench/query23.out
@@ -7,7 +7,8 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------filter(( not (SearchPhrase = '')) and ( not (URL like
'%.google.%')) and (Title like '%Google%'))
-------------------PhysicalOlapScan[hits]
+--------------hashAgg[GLOBAL]
+----------------PhysicalProject
+------------------filter(( not (SearchPhrase = '')) and ( not (URL like
'%.google.%')) and (Title like '%Google%'))
+--------------------PhysicalOlapScan[hits]
diff --git a/regression-test/data/shape_check/clickbench/query9.out
b/regression-test/data/shape_check/clickbench/query9.out
index dcece9f0ce7..b35cb2e2a80 100644
--- a/regression-test/data/shape_check/clickbench/query9.out
+++ b/regression-test/data/shape_check/clickbench/query9.out
@@ -7,6 +7,7 @@ PhysicalResultSink
--------hashAgg[GLOBAL]
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------PhysicalOlapScan[hits]
+--------------hashAgg[GLOBAL]
+----------------PhysicalProject
+------------------PhysicalOlapScan[hits]
diff --git
a/regression-test/suites/nereids_rules_p0/agg_strategy/agg_strategy.groovy
b/regression-test/suites/nereids_rules_p0/agg_strategy/agg_strategy.groovy
index 72ee1b92efb..a5c136d074c 100644
--- a/regression-test/suites/nereids_rules_p0/agg_strategy/agg_strategy.groovy
+++ b/regression-test/suites/nereids_rules_p0/agg_strategy/agg_strategy.groovy
@@ -21,6 +21,7 @@ suite("agg_strategy") {
sql "set global enable_auto_analyze=false"
sql "set runtime_filter_mode=OFF"
sql "set be_number_for_test=1;"
+ sql "set parallel_pipeline_task_num=1;"
for (int i = 0; i < 2; i++) {
if (i == 0) {
diff --git
a/regression-test/suites/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.groovy
b/regression-test/suites/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.groovy
index 953c233c0d5..476fa559ba6 100644
---
a/regression-test/suites/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.groovy
+++
b/regression-test/suites/nereids_rules_p0/agg_strategy/distinct_agg_rewriter.groovy
@@ -21,6 +21,7 @@ suite("distinct_agg_rewriter") {
set runtime_filter_mode=OFF;
set enable_parallel_result_sink=false;
set be_number_for_test=1;
+ set parallel_pipeline_task_num=1;
"""
multi_sql """
analyze table t1000_2 with sync;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]