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

avamingli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 0e3389c609f5933fd66225fac5553d251741f86a
Author: Zhang Mingli <[email protected]>
AuthorDate: Mon Oct 27 21:26:01 2025 +0800

    Switch to Streaming HashAgg for multiple phase aggregation.
    
    This commit changes the Postgres planner to use Streaming HashAgg
    for multi-phase aggregation plans, matching Orca's approach.
    
    While non-streaming aggregation may spill to disk when data per
    segment is largely unique, streaming incurs minimal overhead and
    proves beneficial overall based on empirical evidence.
    
    Authored-by: Zhang Mingli [email protected]
---
 src/backend/cdb/cdbgroupingpaths.c                |  2 +-
 src/test/regress/expected/agg_pushdown.out        |  2 +-
 src/test/regress/expected/aggregates.out          | 14 +++++++-------
 src/test/regress/expected/aqumv.out               | 20 ++++++++++----------
 src/test/regress/expected/bfv_aggregate.out       |  6 +++---
 src/test/regress/expected/cbdb_parallel.out       |  8 ++++----
 src/test/regress/expected/cte_prune.out           |  6 +++---
 src/test/regress/expected/direct_dispatch.out     |  2 +-
 src/test/regress/expected/eagerfree.out           |  8 ++++----
 src/test/regress/expected/gp_aggregates_costs.out |  6 +++---
 src/test/regress/expected/gp_distinct_plans.out   |  2 +-
 src/test/regress/expected/gp_dqa.out              |  2 +-
 src/test/regress/expected/gp_hashagg.out          |  8 ++++----
 src/test/regress/expected/gpctas.out              |  6 +++---
 src/test/regress/expected/gporca.out              |  6 +++---
 src/test/regress/expected/indexjoin.out           |  2 +-
 src/test/regress/expected/limit_gp.out            |  4 ++--
 src/test/regress/expected/olap_plans.out          |  6 +++---
 src/test/regress/expected/partition_aggregate.out |  6 +++---
 src/test/regress/expected/partition_join.out      |  2 +-
 src/test/regress/expected/qp_misc_jiras.out       |  2 +-
 src/test/regress/expected/select_distinct.out     |  2 +-
 src/test/regress/expected/shared_scan.out         |  4 ++--
 src/test/regress/expected/subselect.out           |  2 +-
 src/test/regress/expected/window.out              |  2 +-
 src/test/regress/expected/write_parallel.out      |  8 ++++----
 26 files changed, 69 insertions(+), 69 deletions(-)

diff --git a/src/backend/cdb/cdbgroupingpaths.c 
b/src/backend/cdb/cdbgroupingpaths.c
index 7ed1fec34b9..4fff89b19dc 100644
--- a/src/backend/cdb/cdbgroupingpaths.c
+++ b/src/backend/cdb/cdbgroupingpaths.c
@@ -1264,7 +1264,7 @@ add_first_stage_hash_agg_path(PlannerInfo *root,
                                                                                
  ctx->partial_grouping_target,
                                                                                
  AGG_HASHED,
                                                                                
  ctx->hasAggs ? AGGSPLIT_INITIAL_SERIAL : AGGSPLIT_SIMPLE,
-                                                                               
  false, /* streaming */
+                                                                               
  true, /* streaming */
                                                                                
  ctx->groupClause,
                                                                                
  NIL,
                                                                                
  ctx->agg_partial_costs,
diff --git a/src/test/regress/expected/agg_pushdown.out 
b/src/test/regress/expected/agg_pushdown.out
index 2895c8e69a8..9ed0c09f782 100644
--- a/src/test/regress/expected/agg_pushdown.out
+++ b/src/test/regress/expected/agg_pushdown.out
@@ -204,7 +204,7 @@ AS c1 ON c1.parent = p.x GROUP BY p.i;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: p.i, (PARTIAL avg(c1.v))
                Hash Key: p.i
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: p.i, PARTIAL avg(c1.v)
                      Group Key: p.i
                      ->  Hash Join
diff --git a/src/test/regress/expected/aggregates.out 
b/src/test/regress/expected/aggregates.out
index e2105a3af40..51e113ef8b6 100644
--- a/src/test/regress/expected/aggregates.out
+++ b/src/test/regress/expected/aggregates.out
@@ -1315,7 +1315,7 @@ explain (costs off) select a,c from t1 group by a,c,d;
          Group Key: a, c, d
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: a, c, d
-               ->  HashAggregate
+               ->  Streaming HashAggregate
                      Group Key: a, c, d
                      ->  Seq Scan on t1
  Optimizer: Postgres query optimizer
@@ -3317,7 +3317,7 @@ having sum(tgb1.v3 * tgb2.v3) > 100 and
          AggRefs(TargetList): [(0, 0)]
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=145944.41..145974.41 rows=1000 width=84)
                Hash Key: tgb2.v2
-               ->  Partial HashAggregate  (cost=145944.41..145954.41 rows=1000 
width=84)
+               ->  Streaming Partial HashAggregate  (cost=145944.41..145954.41 
rows=1000 width=84)
                      Group Key: tgb2.v2
                      AggRefs(TargetList): [(0, 0), (1, 1), (2, 2), (3, 3)]
                      ->  Hash Join  (cost=618.25..105488.34 rows=2022803 
width=20)
@@ -3372,7 +3372,7 @@ having sum(tgb1.v3 * tgb2.v3) > 100 and
          AggRefs(TargetList): [(0, 0)]
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=145944.41..145974.41 rows=1000 width=84)
                Hash Key: tgb2.v2
-               ->  Partial HashAggregate  (cost=145944.41..145954.41 rows=1000 
width=84)
+               ->  Streaming Partial HashAggregate  (cost=145944.41..145954.41 
rows=1000 width=84)
                      Group Key: tgb2.v2
                      AggRefs(TargetList): [(0, 0), (1, 1), (2, 2), (3, 3)]
                      ->  Hash Join  (cost=618.25..105488.34 rows=2022803 
width=20)
@@ -3417,7 +3417,7 @@ explain (costs off) select v2,v3 from pds_t1 group by 
v2,v3;
          Group Key: v2, v3
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: v2, v3
-               ->  HashAggregate
+               ->  Streaming HashAggregate
                      Group Key: v2, v3
                      ->  Seq Scan on pds_t1
  Optimizer: Postgres query optimizer
@@ -3432,7 +3432,7 @@ explain (costs off) select v2,v3 from pds_t1 group by 
v2,v3;
          Group Key: v2, v3
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: v2, v3
-               ->  HashAggregate
+               ->  Streaming HashAggregate
                      Group Key: v2, v3
                      ->  Seq Scan on pds_t1
  Optimizer: Postgres query optimizer
@@ -3447,7 +3447,7 @@ explain (costs off) select v2,v3 from pds_t1 group by 
v2,v3;
          Group Key: v2, v3
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: v2, v3
-               ->  HashAggregate
+               ->  Streaming HashAggregate
                      Group Key: v2, v3
                      ->  Seq Scan on pds_t1
  Optimizer: Postgres query optimizer
@@ -3462,7 +3462,7 @@ explain (costs off) select v2,v3,v4,v5,v6 from pds_t1 
group by v2,v3,v4,v5,v6;
          Group Key: v2, v3, v4, v5, v6
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: v2, v3, v4, v5, v6
-               ->  HashAggregate
+               ->  Streaming HashAggregate
                      Group Key: v2, v3, v4, v5, v6
                      ->  Seq Scan on pds_t1
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/aqumv.out 
b/src/test/regress/expected/aqumv.out
index 926ef05cd32..608b4db85a4 100644
--- a/src/test/regress/expected/aqumv.out
+++ b/src/test/regress/expected/aqumv.out
@@ -3412,7 +3412,7 @@ select c, b, sum(a), count(b) from t0 group by b, c;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: c, b, (PARTIAL sum(a)), (PARTIAL count(b))
                Hash Key: b, c
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: c, b, PARTIAL sum(a), PARTIAL count(b)
                      Group Key: t0.b, t0.c
                      ->  Seq Scan on aqumv.t0
@@ -3468,7 +3468,7 @@ select b, sum(a), c, count(b) from t0 group by c, b;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, c, (PARTIAL sum(a)), (PARTIAL count(b))
                Hash Key: c, b
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, c, PARTIAL sum(a), PARTIAL count(b)
                      Group Key: t0.c, t0.b
                      ->  Seq Scan on aqumv.t0
@@ -3524,7 +3524,7 @@ select b + c + 1, sum(a) + count(b) from t0 group by c, b;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: c, b, (PARTIAL sum(a)), (PARTIAL count(b))
                Hash Key: c, b
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: c, b, PARTIAL sum(a), PARTIAL count(b)
                      Group Key: t0.c, t0.b
                      ->  Seq Scan on aqumv.t0
@@ -3580,7 +3580,7 @@ select c, count(b) from t0 group by c ;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: c, (PARTIAL count(b))
                Hash Key: c
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: c, PARTIAL count(b)
                      Group Key: t0.c
                      ->  Seq Scan on aqumv.t0
@@ -3612,7 +3612,7 @@ select c, count(b) from t0 group by c ;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: c, (PARTIAL count(b))
                Hash Key: c
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: c, PARTIAL count(b)
                      Group Key: t0.c
                      ->  Seq Scan on aqumv.t0
@@ -3645,7 +3645,7 @@ select c, b, count(b) from t0 where a > 3 group by c, b;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: c, b, (PARTIAL count(b))
                Hash Key: c, b
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: c, b, PARTIAL count(b)
                      Group Key: t0.c, t0.b
                      ->  Seq Scan on aqumv.t0
@@ -3696,7 +3696,7 @@ select count(b), b, c from t0 where a > 3 group by b, c;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, c, (PARTIAL count(b))
                Hash Key: b, c
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, c, PARTIAL count(b)
                      Group Key: t0.b, t0.c
                      ->  Seq Scan on aqumv.t0
@@ -3747,7 +3747,7 @@ select count(b) + 1, b + 1, c from t0 where a > 3 group 
by b, c;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: c, b, (PARTIAL count(b))
                Hash Key: b, c
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: c, b, PARTIAL count(b)
                      Group Key: t0.b, t0.c
                      ->  Seq Scan on aqumv.t0
@@ -3798,7 +3798,7 @@ select b, c, count(b) from t0 where a > 3 and b > 1 group 
by b, c;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, c, (PARTIAL count(b))
                Hash Key: b, c
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, c, PARTIAL count(b)
                      Group Key: t0.b, t0.c
                      ->  Seq Scan on aqumv.t0
@@ -3828,7 +3828,7 @@ select b, c, count(b) from t0 where a > 3 and b > 1 group 
by b, c;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, c, (PARTIAL count(b))
                Hash Key: b, c
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, c, PARTIAL count(b)
                      Group Key: t0.b, t0.c
                      ->  Seq Scan on aqumv.t0
diff --git a/src/test/regress/expected/bfv_aggregate.out 
b/src/test/regress/expected/bfv_aggregate.out
index e80bd8e5405..472e2ca98b3 100644
--- a/src/test/regress/expected/bfv_aggregate.out
+++ b/src/test/regress/expected/bfv_aggregate.out
@@ -1686,7 +1686,7 @@ SELECT a.x, sum(b.x) FROM pagg_tab1 a FULL OUTER JOIN 
pagg_tab2 b ON a.x = b.y G
                Group Key: a.x
                ->  Redistribute Motion 3:3  (slice2; segments: 3)
                      Hash Key: a.x
-                     ->  Partial HashAggregate
+                     ->  Streaming Partial HashAggregate
                            Group Key: a.x
                            ->  Hash Full Join
                                  Hash Cond: (a.x = b.y)
@@ -1961,7 +1961,7 @@ explain (verbose on, costs off) select ex2.b/2, 
sum(ex1.a) from ex1, (select a,
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: ((COALESCE(ex2.b, 1) / 2)), (PARTIAL sum(ex1.a))
                Hash Key: ((COALESCE(ex2.b, 1) / 2))
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: ((COALESCE(ex2.b, 1) / 2)), PARTIAL sum(ex1.a)
                      Group Key: (COALESCE(ex2.b, 1) / 2)
                      ->  Hash Join
@@ -1999,7 +1999,7 @@ explain (verbose on, costs off) SELECT b/2, sum(b) * 
(b/2) FROM ex1  GROUP BY b/
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: ((b / 2)), (PARTIAL sum(b))
                Hash Key: ((b / 2))
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: ((b / 2)), PARTIAL sum(b)
                      Group Key: (ex1.b / 2)
                      ->  Seq Scan on bfv_aggregate.ex1
diff --git a/src/test/regress/expected/cbdb_parallel.out 
b/src/test/regress/expected/cbdb_parallel.out
index da3216896ff..35e90eebfa1 100644
--- a/src/test/regress/expected/cbdb_parallel.out
+++ b/src/test/regress/expected/cbdb_parallel.out
@@ -3105,7 +3105,7 @@ select distinct a from t_distinct_0;
          Group Key: a
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: a
-               ->  HashAggregate
+               ->  Streaming HashAggregate
                      Group Key: a
                      ->  Seq Scan on t_distinct_0
  Optimizer: Postgres query optimizer
@@ -3286,14 +3286,14 @@ select distinct a from t_distinct_0 union select 
distinct b from t_distinct_0;
                            Group Key: t_distinct_0.a
                            ->  Redistribute Motion 3:3  (slice3; segments: 3)
                                  Hash Key: t_distinct_0.a
-                                 ->  HashAggregate
+                                 ->  Streaming HashAggregate
                                        Group Key: t_distinct_0.a
                                        ->  Seq Scan on t_distinct_0
                      ->  HashAggregate
                            Group Key: t_distinct_0_1.b
                            ->  Redistribute Motion 3:3  (slice4; segments: 3)
                                  Hash Key: t_distinct_0_1.b
-                                 ->  HashAggregate
+                                 ->  Streaming HashAggregate
                                        Group Key: t_distinct_0_1.b
                                        ->  Seq Scan on t_distinct_0 
t_distinct_0_1
  Optimizer: Postgres query optimizer
@@ -3459,7 +3459,7 @@ WHERE e.salary > (
                                  Group Key: employees.department_id
                                  ->  Redistribute Motion 3:3  (slice3; 
segments: 3)  (cost=90.50..122.67 rows=990 width=36)
                                        Hash Key: employees.department_id
-                                       ->  Partial HashAggregate  
(cost=90.50..102.87 rows=990 width=36)
+                                       ->  Streaming Partial HashAggregate  
(cost=90.50..102.87 rows=990 width=36)
                                              Group Key: employees.department_id
                                              ->  Seq Scan on employees  
(cost=0.00..71.67 rows=3767 width=36)
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/cte_prune.out 
b/src/test/regress/expected/cte_prune.out
index a76bc064ce2..fb8a8fb933d 100644
--- a/src/test/regress/expected/cte_prune.out
+++ b/src/test/regress/expected/cte_prune.out
@@ -1230,11 +1230,11 @@ LIMIT 10;
                                        ->  HashAggregate  
(cost=102580688686565152.00..102596190789768272.00 rows=247107000000000 
width=48)
                                              Output: cup.c, cup.d, cup.e, t.d, 
t.b
                                              Group Key: cup.c, cup.d, cup.e, 
t.d, t.b
-                                             Planned Partitions: 512
+                                             Planned Partitions: 256
                                              ->  Redistribute Motion 3:3  
(slice3; segments: 3)  (cost=93196181903903024.00..102459992361252656.00 
rows=741321000000000 width=48)
                                                    Output: cup.c, cup.d, 
cup.e, t.d, t.b
                                                    Hash Key: cup.c, cup.d, 
cup.e, t.d, t.b
-                                                   ->  HashAggregate  
(cost=93196181903903024.00..102445165941252656.00 rows=741321000000000 width=48)
+                                                   ->  Streaming HashAggregate 
 (cost=93196181903903024.00..102445165941252656.00 rows=741321000000000 
width=48)
                                                          Output: cup.c, cup.d, 
cup.e, t.d, t.b
                                                          Group Key: cup.c, 
cup.d, cup.e, t.d, t.b
                                                          Planned Partitions: 
512
@@ -1590,7 +1590,7 @@ order by 
OUTERMOST_FOO.region,bad_headofstates.headofstate LIMIT 40;
                                              ->  Redistribute Motion 3:3  
(slice4; segments: 3)  (cost=2625.14..2655.14 rows=1000 width=64)
                                                    Output: country_2.region, 
(PARTIAL avg(country_2.population))
                                                    Hash Key: country_2.region
-                                                   ->  Partial HashAggregate  
(cost=2625.14..2635.14 rows=1000 width=64)
+                                                   ->  Streaming Partial 
HashAggregate  (cost=2625.14..2635.14 rows=1000 width=64)
                                                          Output: 
country_2.region, PARTIAL avg(country_2.population)
                                                          Group Key: 
country_2.region
                                                          ->  Hash Join  
(cost=1662.17..2425.51 rows=39927 width=36)
diff --git a/src/test/regress/expected/direct_dispatch.out 
b/src/test/regress/expected/direct_dispatch.out
index 7fc4b3e4516..488260e790a 100644
--- a/src/test/regress/expected/direct_dispatch.out
+++ b/src/test/regress/expected/direct_dispatch.out
@@ -659,7 +659,7 @@ explain (costs off) select gp_segment_id, count(*) from 
bar_randDistr group by g
          Group Key: gp_segment_id
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: gp_segment_id
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Group Key: gp_segment_id
                      ->  Seq Scan on bar_randdistr
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/eagerfree.out 
b/src/test/regress/expected/eagerfree.out
index 53be6095c14..9658e9a8dd6 100644
--- a/src/test/regress/expected/eagerfree.out
+++ b/src/test/regress/expected/eagerfree.out
@@ -49,7 +49,7 @@ explain analyze select d, count(*) from smallt group by d;
          Peak Memory Usage: 0 kB
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  (cost=1.50..3.47 
rows=18 width=12) (actual time=0.395..1.643 rows=7 loops=1)
                Hash Key: d
-               ->  Partial HashAggregate  (cost=1.50..1.68 rows=18 width=12) 
(actual time=0.058..0.061 rows=10 loops=1)
+               ->  Streaming Partial HashAggregate  (cost=1.50..1.68 rows=18 
width=12) (actual time=0.000..0.000 rows=10 loops=1)
                      Group Key: d
                      Peak Memory Usage: 0 kB
                      ->  Seq Scan on smallt  (cost=0.00..1.33 rows=33 width=4) 
(actual time=0.017..0.024 rows=50 loops=1)
@@ -183,7 +183,7 @@ where t1.d = t2.d;
                Peak Memory Usage: 0 kB
                ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=1.50..3.47 rows=18 width=12) (actual time=0.659..1.284 rows=7 loops=1)
                      Hash Key: smallt.d
-                     ->  Partial HashAggregate  (cost=1.50..1.68 rows=18 
width=12) (actual time=0.055..0.058 rows=10 loops=1)
+                     ->  Streaming Partial HashAggregate  (cost=1.50..1.68 
rows=18 width=12) (actual time=0.000..0.000 rows=10 loops=1)
                            Group Key: smallt.d
                            Peak Memory Usage: 0 kB
                            ->  Seq Scan on smallt  (cost=0.00..1.33 rows=33 
width=4) (actual time=0.015..0.022 rows=50 loops=1)
@@ -193,7 +193,7 @@ where t1.d = t2.d;
                      Peak Memory Usage: 0 kB
                      ->  Redistribute Motion 3:3  (slice3; segments: 3)  
(cost=1.50..3.47 rows=18 width=12) (actual time=0.003..0.470 rows=7 loops=1)
                            Hash Key: smallt_1.d
-                           ->  Partial HashAggregate  (cost=1.50..1.68 rows=18 
width=12) (actual time=0.084..0.090 rows=10 loops=1)
+                           ->  Streaming Partial HashAggregate  
(cost=1.50..1.68 rows=18 width=12) (actual time=0.000..0.000 rows=10 loops=1)
                                  Group Key: smallt_1.d
                                  Peak Memory Usage: 0 kB
                                  ->  Seq Scan on smallt smallt_1  
(cost=0.00..1.33 rows=33 width=8) (actual time=0.022..0.033 rows=50 loops=1)
@@ -282,7 +282,7 @@ explain analyze select d, count(*) from smallt group by d 
limit 5;
                ->  Sort  (cost=2.05..2.10 rows=18 width=12) (actual 
time=0.173..0.178 rows=10 loops=1)
                      Sort Key: d
                      Sort Method:  quicksort  Memory: 81kB
-                     ->  Partial HashAggregate  (cost=1.50..1.68 rows=18 
width=12) (actual time=0.108..0.130 rows=10 loops=1)
+                     ->  Streaming Partial HashAggregate  (cost=1.50..1.68 
rows=18 width=12) (actual time=0.000..0.000 rows=10 loops=1)
                            Group Key: d
                            Extra Text: (seg0)   Hash chain length 1.1 avg, 2 
max, using 9 of 32 buckets; total 0 expansions.
                            ->  Seq Scan on smallt  (cost=0.00..1.33 rows=33 
width=4) (actual time=0.025..0.036 rows=50 loops=1)
diff --git a/src/test/regress/expected/gp_aggregates_costs.out 
b/src/test/regress/expected/gp_aggregates_costs.out
index d4761c78b8f..1865c9ff746 100644
--- a/src/test/regress/expected/gp_aggregates_costs.out
+++ b/src/test/regress/expected/gp_aggregates_costs.out
@@ -22,7 +22,7 @@ explain select avg(b) from cost_agg_t1 group by c;
          Group Key: c
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=5449.00..5509.00 rows=2000 width=36)
                Hash Key: c
-               ->  Partial HashAggregate  (cost=5449.00..5469.00 rows=2000 
width=36)
+               ->  Streaming Partial HashAggregate  (cost=5449.00..5469.00 
rows=2000 width=36)
                      Group Key: c
                      ->  Seq Scan on cost_agg_t1  (cost=0.00..3782.33 
rows=333333 width=8)
  Optimizer: Postgres query optimizer
@@ -61,7 +61,7 @@ explain select avg(b) from cost_agg_t2 group by c;
          Planned Partitions: 8
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=6538.00..9602.35 rows=102145 width=36)
                Hash Key: c
-               ->  Partial HashAggregate  (cost=6538.00..7559.45 rows=102145 
width=36)
+               ->  Streaming Partial HashAggregate  (cost=6538.00..7574.83 
rows=103683 width=36)
                      Group Key: c
                      Planned Partitions: 8
                      ->  Seq Scan on cost_agg_t2  (cost=0.00..4538.00 
rows=400000 width=8)
@@ -103,7 +103,7 @@ explain (costs off) select b, sum(a) from 
t_planner_force_multi_stage group by b
  Finalize HashAggregate
    Group Key: b
    ->  Gather Motion 3:1  (slice1; segments: 3)
-         ->  Partial HashAggregate
+         ->  Streaming Partial HashAggregate
                Group Key: b
                ->  Seq Scan on t_planner_force_multi_stage
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/gp_distinct_plans.out 
b/src/test/regress/expected/gp_distinct_plans.out
index ea9d2e06952..15f5f039bc4 100644
--- a/src/test/regress/expected/gp_distinct_plans.out
+++ b/src/test/regress/expected/gp_distinct_plans.out
@@ -45,7 +45,7 @@ explain select distinct b from distinct_test;
          Group Key: b
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=46.67..46.85 rows=6 width=4)
                Hash Key: b
-               ->  HashAggregate  (cost=46.67..46.73 rows=6 width=4)
+               ->  Streaming HashAggregate  (cost=46.67..46.73 rows=6 width=4)
                      Group Key: b
                      ->  Seq Scan on distinct_test  (cost=0.00..38.33 
rows=3333 width=4)
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/gp_dqa.out 
b/src/test/regress/expected/gp_dqa.out
index d53a1794a44..0b8222c9a25 100644
--- a/src/test/regress/expected/gp_dqa.out
+++ b/src/test/regress/expected/gp_dqa.out
@@ -2831,7 +2831,7 @@ explain (verbose on, costs off) select distinct 
sum(Distinct c), count(a), sum(d
    Group Key: (sum(DISTINCT dqa_f3.c)), (count(dqa_f3.a)), (sum(dqa_f3.d))
    ->  Gather Motion 3:1  (slice1; segments: 3)
          Output: (sum(DISTINCT c)), (count(a)), (sum(d)), b
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Output: (sum(DISTINCT c)), (count(a)), (sum(d)), b
                Group Key: sum(DISTINCT dqa_f3.c), count(dqa_f3.a), 
sum(dqa_f3.d)
                ->  GroupAggregate
diff --git a/src/test/regress/expected/gp_hashagg.out 
b/src/test/regress/expected/gp_hashagg.out
index 38a293a684b..210ec705398 100644
--- a/src/test/regress/expected/gp_hashagg.out
+++ b/src/test/regress/expected/gp_hashagg.out
@@ -154,7 +154,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, (PARTIAL sum(a) FILTER (WHERE false)), (PARTIAL 
max(c))
                Hash Key: b
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, PARTIAL sum(a) FILTER (WHERE false), PARTIAL 
max(c)
                      Group Key: test_combinefn_null.b
                      ->  Seq Scan on public.test_combinefn_null
@@ -189,7 +189,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, (PARTIAL var_pop((a)::integer) FILTER (WHERE 
false)), (PARTIAL max(c))
                Hash Key: b
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, PARTIAL var_pop((a)::integer) FILTER (WHERE 
false), PARTIAL max(c)
                      Group Key: test_combinefn_null.b
                      ->  Seq Scan on public.test_combinefn_null
@@ -224,7 +224,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, (PARTIAL sum((a)::numeric) FILTER (WHERE false)), 
(PARTIAL max(c))
                Hash Key: b
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, PARTIAL sum((a)::numeric) FILTER (WHERE 
false), PARTIAL max(c)
                      Group Key: test_combinefn_null.b
                      ->  Seq Scan on public.test_combinefn_null
@@ -259,7 +259,7 @@ EXPLAIN (COSTS OFF, VERBOSE) :qry;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: b, (PARTIAL var_pop((a)::numeric) FILTER (WHERE 
false)), (PARTIAL max(c))
                Hash Key: b
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Output: b, PARTIAL var_pop((a)::numeric) FILTER (WHERE 
false), PARTIAL max(c)
                      Group Key: test_combinefn_null.b
                      ->  Seq Scan on public.test_combinefn_null
diff --git a/src/test/regress/expected/gpctas.out 
b/src/test/regress/expected/gpctas.out
index cb0c2536bfe..d50f1b61065 100644
--- a/src/test/regress/expected/gpctas.out
+++ b/src/test/regress/expected/gpctas.out
@@ -28,7 +28,7 @@ SELECT attr, class, (select count(distinct class) from 
ctas_src) as dclass FROM
                                          ->  Seq Scan on ctas_src ctas_src_1
    ->  Redistribute Motion 3:3  (slice1; segments: 3)
          Hash Key: ctas_src.attr
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Group Key: ctas_src.attr, ctas_src.class
                ->  Seq Scan on ctas_src
  Optimizer: Postgres query optimizer
@@ -57,7 +57,7 @@ SELECT attr, class, (select max(class) from ctas_src) as 
maxclass FROM ctas_src
                        ->  Seq Scan on ctas_src ctas_src_1
    ->  Redistribute Motion 3:3  (slice1; segments: 3)
          Hash Key: ctas_src.attr
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Group Key: ctas_src.attr, ctas_src.class
                ->  Seq Scan on ctas_src
  Optimizer: Postgres query optimizer
@@ -102,7 +102,7 @@ SELECT attr, class, (select count(distinct class) from 
ctas_src) as dclass, (sel
                        ->  Seq Scan on ctas_src ctas_src_3
    ->  Redistribute Motion 3:3  (slice1; segments: 3)
          Hash Key: ctas_src.attr
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Group Key: ctas_src.attr, ctas_src.class
                ->  Seq Scan on ctas_src
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/gporca.out 
b/src/test/regress/expected/gporca.out
index 4b2f0dac012..50da048fb61 100644
--- a/src/test/regress/expected/gporca.out
+++ b/src/test/regress/expected/gporca.out
@@ -10297,7 +10297,7 @@ ORDER BY 1 asc ;
                Group Key: ((((tt.event_ts / 100000) / 5) * 5))
                ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=39875.47..39912.97 rows=1000 width=16)
                      Hash Key: ((((tt.event_ts / 100000) / 5) * 5))
-                     ->  Partial HashAggregate  (cost=39875.47..39892.97 
rows=1000 width=16)
+                     ->  Streaming Partial HashAggregate  
(cost=39875.47..39892.97 rows=1000 width=16)
                            Group Key: (((tt.event_ts / 100000) / 5) * 5)
                            ->  Hash Join  (cost=202.00..39819.05 rows=11283 
width=8)
                                  Hash Cond: ((tq.sym)::bpchar = tt.symbol)
@@ -13084,7 +13084,7 @@ select * from foo join (select min_a, count(*) as cnt 
from (select min(a) as min
                Group Key: (min(tbitmap.a))
                ->  Redistribute Motion 3:3  (slice2; segments: 3)
                      Hash Key: (min(tbitmap.a))
-                     ->  Partial HashAggregate
+                     ->  Streaming Partial HashAggregate
                            Group Key: min(tbitmap.a)
                            ->  HashAggregate
                                  Group Key: tbitmap.b
@@ -14999,7 +14999,7 @@ explain (costs off) select max(s1) from foo inner join 
bar on j1 = j2 group by g
          Group Key: foo.g1
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Hash Key: foo.g1
-               ->  Partial HashAggregate
+               ->  Streaming Partial HashAggregate
                      Group Key: foo.g1
                      ->  Hash Join
                            Hash Cond: (foo.j1 = bar.j2)
diff --git a/src/test/regress/expected/indexjoin.out 
b/src/test/regress/expected/indexjoin.out
index 6b032575f12..a154a134aeb 100644
--- a/src/test/regress/expected/indexjoin.out
+++ b/src/test/regress/expected/indexjoin.out
@@ -37,7 +37,7 @@ ORDER BY 1 asc ;
                Group Key: ((((tt.event_ts / 100000) / 5) * 5))
                ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=1236.97..1252.45 rows=413 width=16)
                      Hash Key: ((((tt.event_ts / 100000) / 5) * 5))
-                     ->  Partial HashAggregate  (cost=1236.97..1244.19 
rows=413 width=16)
+                     ->  Streaming Partial HashAggregate  
(cost=1236.97..1244.19 rows=413 width=16)
                            Group Key: (((tt.event_ts / 100000) / 5) * 5)
                            ->  Hash Join  (cost=17.20..1161.31 rows=15131 
width=8)
                                  Hash Cond: (tt.symbol = (tq.sym)::bpchar)
diff --git a/src/test/regress/expected/limit_gp.out 
b/src/test/regress/expected/limit_gp.out
index 1c067690068..5d075e30e71 100644
--- a/src/test/regress/expected/limit_gp.out
+++ b/src/test/regress/expected/limit_gp.out
@@ -136,7 +136,7 @@ explain select distinct(a), sum(b) from t_volatile_limit_1 
group by a order by a
                            Group Key: a
                            ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=464.50..494.50 rows=1000 width=12)
                                  Hash Key: a
-                                 ->  Partial HashAggregate  
(cost=464.50..474.50 rows=1000 width=12)
+                                 ->  Streaming Partial HashAggregate  
(cost=464.50..474.50 rows=1000 width=12)
                                        Group Key: a
                                        ->  Seq Scan on t_volatile_limit_1  
(cost=0.00..321.00 rows=28700 width=8)
  Optimizer: Postgres query optimizer
@@ -156,7 +156,7 @@ explain select distinct(a), sum(b) from t_volatile_limit_1 
group by a order by a
                            Group Key: a
                            ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=464.50..494.50 rows=1000 width=12)
                                  Hash Key: a
-                                 ->  Partial HashAggregate  
(cost=464.50..474.50 rows=1000 width=12)
+                                 ->  Streaming Partial HashAggregate  
(cost=464.50..474.50 rows=1000 width=12)
                                        Group Key: a
                                        ->  Seq Scan on t_volatile_limit_1  
(cost=0.00..321.00 rows=28700 width=8)
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/olap_plans.out 
b/src/test/regress/expected/olap_plans.out
index f5ddcc039d4..8861e4a5c5f 100644
--- a/src/test/regress/expected/olap_plans.out
+++ b/src/test/regress/expected/olap_plans.out
@@ -86,7 +86,7 @@ explain select a, sum(d) from olap_test group by a;
          Group Key: a
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=56.00..56.09 rows=3 width=12)
                Hash Key: a
-               ->  Partial HashAggregate  (cost=56.00..56.03 rows=3 width=12)
+               ->  Streaming Partial HashAggregate  (cost=56.00..56.03 rows=3 
width=12)
                      Group Key: a
                      ->  Seq Scan on olap_test  (cost=0.00..39.33 rows=3333 
width=8)
  Optimizer: Postgres query optimizer
@@ -306,7 +306,7 @@ explain create table bar_ctas as select * from foo_ctas 
group by a, b distribute
    Group Key: a, b
    ->  Redistribute Motion 3:3  (slice1; segments: 3)  (cost=1.50..11.42 
rows=10 width=8)
          Hash Key: b
-         ->  HashAggregate  (cost=1.50..1.60 rows=10 width=8)
+         ->  Streaming HashAggregate  (cost=1.50..1.60 rows=10 width=8)
                Group Key: a, b
                ->  Seq Scan on foo_ctas  (cost=0.00..1.33 rows=33 width=8)
  Optimizer: Postgres query optimizer
@@ -325,7 +325,7 @@ explain insert into bar_ctas select * from foo_ctas group 
by a, b;
                Group Key: foo_ctas.a, foo_ctas.b
                ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=1.50..11.42 rows=10 width=8)
                      Hash Key: foo_ctas.a, foo_ctas.b
-                     ->  HashAggregate  (cost=1.50..1.60 rows=10 width=8)
+                     ->  Streaming HashAggregate  (cost=1.50..1.60 rows=10 
width=8)
                            Group Key: foo_ctas.a, foo_ctas.b
                            ->  Seq Scan on foo_ctas  (cost=0.00..1.33 rows=33 
width=8)
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/partition_aggregate.out 
b/src/test/regress/expected/partition_aggregate.out
index 871b8e3c39a..e8d78fc6643 100644
--- a/src/test/regress/expected/partition_aggregate.out
+++ b/src/test/regress/expected/partition_aggregate.out
@@ -39,7 +39,7 @@ SELECT c, sum(a), avg(b), count(*), min(a), max(b) FROM 
pagg_tab GROUP BY c HAVI
                      Filter: (avg(pagg_tab.d) < '15'::numeric)
                      ->  Redistribute Motion 3:3  (slice2; segments: 3)
                            Hash Key: pagg_tab.c
-                           ->  Partial HashAggregate
+                           ->  Streaming Partial HashAggregate
                                  Group Key: pagg_tab.c
                                  ->  Seq Scan on pagg_tab_p1 pagg_tab
                ->  Finalize HashAggregate
@@ -47,7 +47,7 @@ SELECT c, sum(a), avg(b), count(*), min(a), max(b) FROM 
pagg_tab GROUP BY c HAVI
                      Filter: (avg(pagg_tab_1.d) < '15'::numeric)
                      ->  Redistribute Motion 3:3  (slice3; segments: 3)
                            Hash Key: pagg_tab_1.c
-                           ->  Partial HashAggregate
+                           ->  Streaming Partial HashAggregate
                                  Group Key: pagg_tab_1.c
                                  ->  Seq Scan on pagg_tab_p2 pagg_tab_1
                ->  Finalize GroupAggregate
@@ -57,7 +57,7 @@ SELECT c, sum(a), avg(b), count(*), min(a), max(b) FROM 
pagg_tab GROUP BY c HAVI
                            Sort Key: pagg_tab_2.c
                            ->  Redistribute Motion 3:3  (slice4; segments: 3)
                                  Hash Key: pagg_tab_2.c
-                                 ->  Partial HashAggregate
+                                 ->  Streaming Partial HashAggregate
                                        Group Key: pagg_tab_2.c
                                        ->  Seq Scan on pagg_tab_p3 pagg_tab_2
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/partition_join.out 
b/src/test/regress/expected/partition_join.out
index 107cbc746e5..98431e7a104 100644
--- a/src/test/regress/expected/partition_join.out
+++ b/src/test/regress/expected/partition_join.out
@@ -1881,7 +1881,7 @@ SELECT avg(t1.a), avg(t2.b), t1.c, t2.c FROM plt1 t1 
RIGHT JOIN plt2 t2 ON t1.c
                Group Key: t1.c, t2.c
                ->  Redistribute Motion 3:3  (slice2; segments: 3)
                      Hash Key: t1.c, t1.c
-                     ->  Partial HashAggregate
+                     ->  Streaming Partial HashAggregate
                            Group Key: t1.c, t2.c
                            ->  Append
                                  ->  Hash Join
diff --git a/src/test/regress/expected/qp_misc_jiras.out 
b/src/test/regress/expected/qp_misc_jiras.out
index 4cbafc3e684..3ed092217fd 100644
--- a/src/test/regress/expected/qp_misc_jiras.out
+++ b/src/test/regress/expected/qp_misc_jiras.out
@@ -4732,7 +4732,7 @@ else 'Unidentify' end
          Group Key: (CASE WHEN (ir_call_supplementary_svc_code = ANY 
('{S20,S21}'::bpchar[])) THEN 'MO'::text ELSE 'foo'::text END), (CASE WHEN 
((ir_call_type_group_code)::text = ANY ('{H,VH,PCB}'::text[])) THEN 
'Thailland'::text ELSE 'Unidentify'::text END)
          ->  Redistribute Motion 3:3  (slice2; segments: 3)  
(cost=75.08..180.27 rows=905 width=102)
                Hash Key: (CASE WHEN (ir_call_supplementary_svc_code = ANY 
('{S20,S21}'::bpchar[])) THEN 'MO'::text ELSE 'foo'::text END), (CASE WHEN 
((ir_call_type_group_code)::text = ANY ('{H,VH,PCB}'::text[])) THEN 
'Thailland'::text ELSE 'Unidentify'::text END)
-               ->  HashAggregate  (cost=75.08..89.79 rows=905 width=102)
+               ->  Streaming HashAggregate  (cost=75.08..89.79 rows=905 
width=64)
                      Group Key: CASE WHEN (ir_call_supplementary_svc_code = 
ANY ('{S20,S21}'::bpchar[])) THEN 'MO'::text ELSE 'foo'::text END, CASE WHEN 
((ir_call_type_group_code)::text = ANY ('{H,VH,PCB}'::text[])) THEN 
'Thailland'::text ELSE 'Unidentify'::text END
                      ->  Seq Scan on ir_voice_sms_and_data  (cost=0.00..65.42 
rows=1933 width=102)
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/select_distinct.out 
b/src/test/regress/expected/select_distinct.out
index 9d2882fd143..ce0f24e9f8f 100644
--- a/src/test/regress/expected/select_distinct.out
+++ b/src/test/regress/expected/select_distinct.out
@@ -144,7 +144,7 @@ SELECT count(*) FROM
                      ->  Redistribute Motion 3:3  (slice2; segments: 3)
                            Output: tenk1.two, tenk1.four, tenk1.two
                            Hash Key: tenk1.two, tenk1.four, tenk1.two
-                           ->  HashAggregate
+                           ->  Streaming HashAggregate
                                  Output: tenk1.two, tenk1.four, tenk1.two
                                  Group Key: tenk1.two, tenk1.four, tenk1.two
                                  ->  Seq Scan on public.tenk1
diff --git a/src/test/regress/expected/shared_scan.out 
b/src/test/regress/expected/shared_scan.out
index 2e4548d7235..2673aff0f8c 100644
--- a/src/test/regress/expected/shared_scan.out
+++ b/src/test/regress/expected/shared_scan.out
@@ -206,7 +206,7 @@ where
                                  Group Key: pk_list.schema_name, 
pk_list.table_name
                                  ->  Redistribute Motion 3:3  (slice3; 
segments: 3)
                                        Hash Key: pk_list.schema_name, 
pk_list.table_name
-                                       ->  HashAggregate
+                                       ->  Streaming HashAggregate
                                              Group Key: pk_list.schema_name, 
pk_list.table_name
                                              ->  Seq Scan on pk_list
                ->  Materialize
@@ -219,7 +219,7 @@ where
                                  Group Key: pk_list_1.schema_name, 
pk_list_1.table_name
                                  ->  Redistribute Motion 3:3  (slice5; 
segments: 3)
                                        Hash Key: pk_list_1.schema_name, 
pk_list_1.table_name
-                                       ->  HashAggregate
+                                       ->  Streaming HashAggregate
                                              Group Key: pk_list_1.schema_name, 
pk_list_1.table_name
                                              ->  Seq Scan on pk_list pk_list_1
                            SubPlan 1
diff --git a/src/test/regress/expected/subselect.out 
b/src/test/regress/expected/subselect.out
index ea96cc3ca7b..8c3f7dfe580 100644
--- a/src/test/regress/expected/subselect.out
+++ b/src/test/regress/expected/subselect.out
@@ -2046,7 +2046,7 @@ group by j, q1;
          ->  Redistribute Motion 3:3  (slice2; segments: 3)
                Output: t.j, ((SubPlan 1))
                Hash Key: t.j, ((SubPlan 1))
-               ->  HashAggregate
+               ->  Streaming HashAggregate
                      Output: t.j, ((SubPlan 1))
                      Group Key: t.j, (SubPlan 1)
                      ->  Seq Scan on public.t
diff --git a/src/test/regress/expected/window.out 
b/src/test/regress/expected/window.out
index 36ea794ff8a..568a3feb0b0 100644
--- a/src/test/regress/expected/window.out
+++ b/src/test/regress/expected/window.out
@@ -1111,7 +1111,7 @@ select first_value(max(x)) over (), y
                Group Key: ((tenk1.ten + tenk1.four))
                ->  Redistribute Motion 3:3  (slice2; segments: 3)
                      Hash Key: ((tenk1.ten + tenk1.four))
-                     ->  Partial HashAggregate
+                     ->  Streaming Partial HashAggregate
                            Group Key: (tenk1.ten + tenk1.four)
                            ->  Seq Scan on tenk1
  Optimizer: Postgres query optimizer
diff --git a/src/test/regress/expected/write_parallel.out 
b/src/test/regress/expected/write_parallel.out
index 55c03f7eb3e..c204b514ecf 100644
--- a/src/test/regress/expected/write_parallel.out
+++ b/src/test/regress/expected/write_parallel.out
@@ -21,7 +21,7 @@ HINT:  The 'DISTRIBUTED BY' clause determines the 
distribution of data. Make sur
    Group Key: (length((stringu1)::text))
    ->  Redistribute Motion 3:3  (slice1; segments: 3)
          Hash Key: (length((stringu1)::text))
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Group Key: length((stringu1)::text)
                ->  Seq Scan on tenk1
  Optimizer: Postgres query optimizer
@@ -42,7 +42,7 @@ HINT:  The 'DISTRIBUTED BY' clause determines the 
distribution of data. Make sur
    Group Key: (length((stringu1)::text))
    ->  Redistribute Motion 3:3  (slice1; segments: 3)
          Hash Key: (length((stringu1)::text))
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Group Key: length((stringu1)::text)
                ->  Seq Scan on tenk1
  Optimizer: Postgres query optimizer
@@ -63,7 +63,7 @@ HINT:  The 'DISTRIBUTED BY' clause determines the 
distribution of data. Make sur
    Group Key: (length((stringu1)::text))
    ->  Redistribute Motion 3:3  (slice1; segments: 3)
          Hash Key: (length((stringu1)::text))
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Group Key: length((stringu1)::text)
                ->  Seq Scan on tenk1
  Optimizer: Postgres query optimizer
@@ -89,7 +89,7 @@ HINT:  The 'DISTRIBUTED BY' clause determines the 
distribution of data. Make sur
    Group Key: (length((stringu1)::text))
    ->  Redistribute Motion 3:3  (slice1; segments: 3)
          Hash Key: (length((stringu1)::text))
-         ->  HashAggregate
+         ->  Streaming HashAggregate
                Group Key: length((stringu1)::text)
                ->  Seq Scan on tenk1
  Optimizer: Postgres query optimizer


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


Reply via email to