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

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


The following commit(s) were added to refs/heads/main by this push:
     new 9a4f249be9 [VL] Improve FlushableHashAggregateRule (#13033)
9a4f249be9 is described below

commit 9a4f249be9eab17c92f1b2d8f75ebcbb5941f395
Author: Hongze Zhang <[email protected]>
AuthorDate: Mon Sep 21 04:58:10 2026 +0200

    [VL] Improve FlushableHashAggregateRule (#13033)
---
 .../extension/FlushableHashAggregateRule.scala     | 117 ++++++---------------
 .../execution/VeloxAggregateFunctionsSuite.scala   |  36 ++++++-
 .../ss_max.sf100/explain.txt                       |   4 +-
 .../ss_max.sf100/simplified.txt                    |   2 +-
 .../ss_max/explain.txt                             |   4 +-
 .../ss_max/simplified.txt                          |   2 +-
 .../q16.sf100/explain.txt                          |   8 +-
 .../q16.sf100/simplified.txt                       |   4 +-
 .../gluten-approved-plans-v1_4/q16/explain.txt     |   8 +-
 .../gluten-approved-plans-v1_4/q16/simplified.txt  |   4 +-
 .../q28.sf100/explain.txt                          |  24 ++---
 .../q28.sf100/simplified.txt                       |  12 +--
 .../gluten-approved-plans-v1_4/q28/explain.txt     |  24 ++---
 .../gluten-approved-plans-v1_4/q28/simplified.txt  |  12 +--
 .../q94.sf100/explain.txt                          |   8 +-
 .../q94.sf100/simplified.txt                       |   4 +-
 .../gluten-approved-plans-v1_4/q94/explain.txt     |   8 +-
 .../gluten-approved-plans-v1_4/q94/simplified.txt  |   4 +-
 .../q95.sf100/explain.txt                          |   8 +-
 .../q95.sf100/simplified.txt                       |   4 +-
 .../gluten-approved-plans-v1_4/q95/explain.txt     |   8 +-
 .../gluten-approved-plans-v1_4/q95/simplified.txt  |   4 +-
 .../ss_max.sf100/explain.txt                       |   4 +-
 .../ss_max.sf100/simplified.txt                    |   2 +-
 .../ss_max/explain.txt                             |   4 +-
 .../ss_max/simplified.txt                          |   2 +-
 .../q16.sf100/explain.txt                          |   8 +-
 .../q16.sf100/simplified.txt                       |   4 +-
 .../gluten-approved-plans-v1_4/q16/explain.txt     |   8 +-
 .../gluten-approved-plans-v1_4/q16/simplified.txt  |   4 +-
 .../q28.sf100/explain.txt                          |  24 ++---
 .../q28.sf100/simplified.txt                       |  12 +--
 .../gluten-approved-plans-v1_4/q28/explain.txt     |  24 ++---
 .../gluten-approved-plans-v1_4/q28/simplified.txt  |  12 +--
 .../q94.sf100/explain.txt                          |   8 +-
 .../q94.sf100/simplified.txt                       |   4 +-
 .../gluten-approved-plans-v1_4/q94/explain.txt     |   8 +-
 .../gluten-approved-plans-v1_4/q94/simplified.txt  |   4 +-
 .../q95.sf100/explain.txt                          |   8 +-
 .../q95.sf100/simplified.txt                       |   4 +-
 .../gluten-approved-plans-v1_4/q95/explain.txt     |   8 +-
 .../gluten-approved-plans-v1_4/q95/simplified.txt  |   4 +-
 42 files changed, 220 insertions(+), 245 deletions(-)

diff --git 
a/backends-velox/src/main/scala/org/apache/gluten/extension/FlushableHashAggregateRule.scala
 
b/backends-velox/src/main/scala/org/apache/gluten/extension/FlushableHashAggregateRule.scala
index 9cfdbd67b9..d5c1292fd1 100644
--- 
a/backends-velox/src/main/scala/org/apache/gluten/extension/FlushableHashAggregateRule.scala
+++ 
b/backends-velox/src/main/scala/org/apache/gluten/extension/FlushableHashAggregateRule.scala
@@ -22,13 +22,9 @@ import org.apache.gluten.execution._
 import org.apache.spark.sql.SparkSession
 import org.apache.spark.sql.catalyst.expressions.aggregate._
 import org.apache.spark.sql.catalyst.rules.Rule
-import org.apache.spark.sql.catalyst.trees.TreePattern.EXCHANGE
 import org.apache.spark.sql.execution.SparkPlan
-import org.apache.spark.sql.execution.exchange.ShuffleExchangeLike
 import org.apache.spark.sql.types.{DataType, DoubleType, FloatType}
 
-import scala.collection.mutable
-
 /**
  * To transform regular aggregation to intermediate aggregation that 
internally enables
  * optimizations such as flushing and abandoning.
@@ -38,15 +34,13 @@ case class FlushableHashAggregateRule(session: 
SparkSession) extends Rule[SparkP
     if (!VeloxConfig.get.enableVeloxFlushablePartialAggregation) {
       return plan
     }
-    val protectedAggs = collectProtectedOneDistinctPartialMergeAggs(plan)
-    plan.transformUpWithPruning(_.containsPattern(EXCHANGE)) {
-      case s: ShuffleExchangeLike =>
-        // If an exchange follows a hash aggregate in which all functions are 
in partial mode,
-        // then it's safe to convert the hash aggregate to flushable hash 
aggregate.
-        val out = s.withNewChildren(
-          List(replaceEligibleAggregates(s.child, protectedAggs))
-        )
-        out
+    val protectedAggIds = collectProtectedOneDistinctPartialMergeAggIds(plan)
+    // Use top-down traversal: child rewrites can copy an aggregate with a new 
plan ID.
+    plan.transformDown {
+      case agg: RegularHashAggregateExecTransformer if isEligible(agg, 
protectedAggIds) =>
+        toFlushableAgg(agg)
+      case agg: SortHashAggregateExecTransformer if isEligible(agg, 
protectedAggIds) =>
+        toFlushableAgg(agg)
     }
   }
 
@@ -79,74 +73,30 @@ case class FlushableHashAggregateRule(session: 
SparkSession) extends Rule[SparkP
   }
 
   /**
-   * Walks the plan downward, applying func to each 
RegularHashAggregateExecTransformer or
-   * SortHashAggregateExecTransformer that is eligible for flushable 
conversion. An aggregate is
-   * eligible when all expressions are Partial/PartialMerge, it is not the 
final stage of a
-   * grouping-only aggregate, it is not the protected PartialMerge aggregate 
directly below a
-   * distinct-partial aggregate, and no aggregate function disallows flushing.
+   * An aggregate is eligible when all expressions are Partial/PartialMerge, 
it is not the final
+   * stage of a grouping-only aggregate, it is not the protected PartialMerge 
aggregate directly
+   * below a distinct-partial aggregate, and no aggregate function disallows 
flushing.
    */
-  private def replaceEligibleAggregates(
-      plan: SparkPlan,
-      protectedAggs: mutable.Map[Int, HashAggregateExecTransformer]): 
SparkPlan = {
-    def toFlushableAgg(agg: HashAggregateExecTransformer): 
FlushableHashAggregateExecTransformer = {
-      FlushableHashAggregateExecTransformer(
-        agg.requiredChildDistributionExpressions,
-        agg.groupingExpressions,
-        agg.aggregateExpressions,
-        agg.aggregateAttributes,
-        agg.initialInputBufferOffset,
-        agg.resultExpressions,
-        agg.child
-      )
-    }
-
-    def transformDown: SparkPlan => SparkPlan = {
-      case agg: RegularHashAggregateExecTransformer if 
isGroupingOnlyFinalAgg(agg) =>
-        // Final stage of a grouping-only aggregate. It must fully aggregate. 
Skip.
-        agg
-      case agg: RegularHashAggregateExecTransformer
-          if !agg.aggregateExpressions.forall(p => p.mode == Partial || p.mode 
== PartialMerge) =>
-        // Not an intermediate agg. Skip.
-        agg
-      case agg: RegularHashAggregateExecTransformer
-          if protectedAggs.contains(agg.id) =>
-        // This is the PartialMerge aggregate directly below a 
distinct-partial aggregate in
-        // Spark's one-distinct pipeline. Keep it non-flushable so the 
distinct step continues to
-        // see globally de-duplicated (grouping + distinct) keys.
-        agg
-      case agg: RegularHashAggregateExecTransformer
-          if aggregatesNotSupportFlush(agg.aggregateExpressions) =>
-        // Aggregate uses a function that is unsafe to flush. Skip.
-        agg
-      case agg: RegularHashAggregateExecTransformer =>
-        // All guards passed; replace with the flushable variant.
-        toFlushableAgg(agg)
-      case agg: SortHashAggregateExecTransformer if 
isGroupingOnlyFinalAgg(agg) =>
-        // See the RegularHashAggregateExecTransformer branch above.
-        agg
-      case agg: SortHashAggregateExecTransformer
-          if !agg.aggregateExpressions.forall(p => p.mode == Partial || p.mode 
== PartialMerge) =>
-        // Not an intermediate agg. Skip.
-        agg
-      case agg: SortHashAggregateExecTransformer if 
protectedAggs.contains(agg.id) =>
-        // See the RegularHashAggregateExecTransformer branch above.
-        agg
-      case agg: SortHashAggregateExecTransformer
-          if aggregatesNotSupportFlush(agg.aggregateExpressions) =>
-        // Aggregate uses a function that is unsafe to flush. Skip.
-        agg
-      case agg: SortHashAggregateExecTransformer =>
-        // All guards passed; replace with the flushable variant.
-        toFlushableAgg(agg)
-      case exchange: ShuffleExchangeLike =>
-        // Stop at the next exchange. This rule is applied from an exchange 
boundary and should not
-        // continue rewriting into a different shuffle region.
-        exchange
-      case other => other.withNewChildren(other.children.map(transformDown))
-    }
+  private def isEligible(
+      agg: HashAggregateExecTransformer,
+      protectedAggIds: Set[Int]): Boolean = {
+    !isGroupingOnlyFinalAgg(agg) &&
+    agg.aggregateExpressions.forall(p => p.mode == Partial || p.mode == 
PartialMerge) &&
+    !protectedAggIds.contains(agg.id) &&
+    !aggregatesNotSupportFlush(agg.aggregateExpressions)
+  }
 
-    val out = transformDown(plan)
-    out
+  private def toFlushableAgg(agg: HashAggregateExecTransformer)
+      : FlushableHashAggregateExecTransformer = {
+    FlushableHashAggregateExecTransformer(
+      agg.requiredChildDistributionExpressions,
+      agg.groupingExpressions,
+      agg.aggregateExpressions,
+      agg.aggregateAttributes,
+      agg.initialInputBufferOffset,
+      agg.resultExpressions,
+      agg.child
+    )
   }
 
   /**
@@ -169,17 +119,16 @@ case class FlushableHashAggregateRule(session: 
SparkSession) extends Rule[SparkP
    * flushes, duplicate `(k, v)` keys may be reintroduced within one partition 
and the distinct
    * aggregation pipeline would no longer see the shape Spark planned for.
    */
-  private def collectProtectedOneDistinctPartialMergeAggs(
-      plan: SparkPlan): mutable.Map[Int, HashAggregateExecTransformer] = {
-    val protectedAggs = mutable.HashMap.empty[Int, 
HashAggregateExecTransformer]
+  private def collectProtectedOneDistinctPartialMergeAggIds(plan: SparkPlan): 
Set[Int] = {
+    val protectedAggIds = Set.newBuilder[Int]
     plan.foreach {
       case agg: HashAggregateExecTransformer =>
         findProtectedPartialMergeAgg(agg).foreach {
-          protectedAgg => protectedAggs.put(protectedAgg.id, protectedAgg)
+          protectedAgg => protectedAggIds += protectedAgg.id
         }
       case _ =>
     }
-    protectedAggs
+    protectedAggIds.result()
   }
 
   /** If this aggregate is the distinct-partial stage, return its child 
PartialMerge aggregate. */
diff --git 
a/backends-velox/src/test/scala/org/apache/gluten/execution/VeloxAggregateFunctionsSuite.scala
 
b/backends-velox/src/test/scala/org/apache/gluten/execution/VeloxAggregateFunctionsSuite.scala
index 14d4b72bc0..20d2cb04f4 100644
--- 
a/backends-velox/src/test/scala/org/apache/gluten/execution/VeloxAggregateFunctionsSuite.scala
+++ 
b/backends-velox/src/test/scala/org/apache/gluten/execution/VeloxAggregateFunctionsSuite.scala
@@ -22,6 +22,7 @@ import 
org.apache.gluten.extension.columnar.validator.FallbackInjects
 import org.apache.spark.SparkConf
 import org.apache.spark.sql.catalyst.expressions.aggregate.{Final, Partial}
 import org.apache.spark.sql.execution.aggregate.BaseAggregateExec
+import org.apache.spark.sql.execution.exchange.ShuffleExchangeLike
 import org.apache.spark.sql.internal.SQLConf
 import org.apache.spark.sql.types._
 
@@ -1201,11 +1202,19 @@ abstract class VeloxAggregateFunctionsSuite extends 
VeloxWholeStageTransformerSu
       ) {
         df =>
           {
-            assert(
-              getExecutedPlan(df).count(
-                plan => {
-                  plan.isInstanceOf[SortHashAggregateExecTransformer]
-                }) == 2)
+            val executedPlan = getExecutedPlan(df)
+            val sortHashCount =
+              
executedPlan.count(_.isInstanceOf[SortHashAggregateExecTransformer])
+            val flushableCount =
+              
executedPlan.count(_.isInstanceOf[FlushableHashAggregateExecTransformer])
+            assert(sortHashCount + flushableCount == 2)
+            if (VeloxConfig.get.enableVeloxFlushablePartialAggregation) {
+              assert(sortHashCount == 1)
+              assert(flushableCount == 1)
+            } else {
+              assert(sortHashCount == 2)
+              assert(flushableCount == 0)
+            }
           }
       }
     }
@@ -1257,6 +1266,23 @@ class VeloxAggregateFunctionsFlushSuite extends 
VeloxAggregateFunctionsSuite {
     }
   }
 
+  test("flushable aggregate rule - single-partition partial aggregate") {
+    withSQLConf(SQLConf.ADAPTIVE_EXECUTION_ENABLED.key -> "false") {
+      withTempView("single_partition") {
+        spark
+          .range(0, 10, 1, 1)
+          .selectExpr("id % 2 as k")
+          .createOrReplaceTempView("single_partition")
+        runQueryAndCompare("select k, count(*) from single_partition group by 
k") {
+          df =>
+            val executedPlan = getExecutedPlan(df)
+            assert(!executedPlan.exists(_.isInstanceOf[ShuffleExchangeLike]))
+            
assert(executedPlan.exists(_.isInstanceOf[FlushableHashAggregateExecTransformer]))
+        }
+      }
+    }
+  }
+
   test("flushable aggregate rule - count distinct keeps partial merge 
regular") {
     withSQLConf(
       SQLConf.ADAPTIVE_EXECUTION_ENABLED.key -> "false",
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
index 940ad005ec..64ade6b2f7 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
@@ -2,7 +2,7 @@
 VeloxColumnarToRow (14)
 +- ^ ProjectExecTransformer (12)
    +- ^ RegularHashAggregateExecTransformer (11)
-      +- ^ RegularHashAggregateExecTransformer (10)
+      +- ^ FlushableHashAggregateExecTransformer (10)
          +- ^ RegularHashAggregateExecTransformer (9)
             +- ^ InputIteratorTransformer (8)
                +- ColumnarExchange (6)
@@ -53,7 +53,7 @@ Functions [11]: [merge_count(1), 
merge_count(ss_sold_date_sk#9), merge_max(ss_so
 Aggregate Attributes [11]: [count(1)#10, count(ss_sold_date_sk#9)#11, 
max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, 
max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, 
max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20]
 Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 
-(10) RegularHashAggregateExecTransformer
+(10) FlushableHashAggregateExecTransformer
 Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 Keys: []
 Functions [12]: [merge_count(1), merge_count(ss_sold_date_sk#9), 
merge_max(ss_sold_date_sk#9), merge_max(ss_sold_time_sk#1), 
merge_max(ss_item_sk#2), merge_max(ss_customer_sk#3), merge_max(ss_cdemo_sk#4), 
merge_max(ss_hdemo_sk#5), merge_max(ss_addr_sk#6), merge_max(ss_store_sk#7), 
merge_max(ss_promo_sk#8), partial_count(distinct ss_sold_date_sk#9)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
index ac76610ebf..6d8b04fdf9 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
@@ -2,7 +2,7 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (2)
     ProjectExecTransformer 
[count(1),count(ss_sold_date_sk),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk)]
       RegularHashAggregateExecTransformer 
[count,count,max,max,max,max,max,max,max,max,max,count] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count]
-        RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
+        FlushableHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
           RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,max,max,max,max,max,max,max,max,max]
             InputIteratorTransformer
               InputAdapter
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
index 940ad005ec..64ade6b2f7 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
@@ -2,7 +2,7 @@
 VeloxColumnarToRow (14)
 +- ^ ProjectExecTransformer (12)
    +- ^ RegularHashAggregateExecTransformer (11)
-      +- ^ RegularHashAggregateExecTransformer (10)
+      +- ^ FlushableHashAggregateExecTransformer (10)
          +- ^ RegularHashAggregateExecTransformer (9)
             +- ^ InputIteratorTransformer (8)
                +- ColumnarExchange (6)
@@ -53,7 +53,7 @@ Functions [11]: [merge_count(1), 
merge_count(ss_sold_date_sk#9), merge_max(ss_so
 Aggregate Attributes [11]: [count(1)#10, count(ss_sold_date_sk#9)#11, 
max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, 
max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, 
max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20]
 Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 
-(10) RegularHashAggregateExecTransformer
+(10) FlushableHashAggregateExecTransformer
 Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 Keys: []
 Functions [12]: [merge_count(1), merge_count(ss_sold_date_sk#9), 
merge_max(ss_sold_date_sk#9), merge_max(ss_sold_time_sk#1), 
merge_max(ss_item_sk#2), merge_max(ss_customer_sk#3), merge_max(ss_cdemo_sk#4), 
merge_max(ss_hdemo_sk#5), merge_max(ss_addr_sk#6), merge_max(ss_store_sk#7), 
merge_max(ss_promo_sk#8), partial_count(distinct ss_sold_date_sk#9)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
index ac76610ebf..6d8b04fdf9 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
@@ -2,7 +2,7 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (2)
     ProjectExecTransformer 
[count(1),count(ss_sold_date_sk),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk)]
       RegularHashAggregateExecTransformer 
[count,count,max,max,max,max,max,max,max,max,max,count] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count]
-        RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
+        FlushableHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
           RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,max,max,max,max,max,max,max,max,max]
             InputIteratorTransformer
               InputAdapter
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
index e61e86016c..dd98c4013f 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [cs_order_number#5, UnscaledValue(cs_ext_ship_cost#6) AS 
_pre_1#26, UnscaledValue(cs_net_profit#7) AS _pre_2#27]
 Input [5]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, 
cs_net_profit#7, d_date_sk#24]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, _pre_1#26, _pre_2#27]
 Keys [1]: [cs_order_number#5]
 Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, 
sum(UnscaledValue(cs_net_profit#7))#29]
 Results [3]: [cs_order_number#5, sum#30, sum#31]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, sum#30, sum#31]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), 
merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct 
cs_order_number#5)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
index b74f007b5f..5031d13c18 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (13)
     ProjectExecTransformer 
[count(cs_order_number),sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[cs_order_number,cs_ext_ship_cost,cs_net_profit]
                 BroadcastHashJoinExecTransformer [cs_ship_date_sk,d_date_sk]
                   ProjectExecTransformer 
[cs_ship_date_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
index 94729a3849..f5fb5924a0 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [cs_order_number#5, UnscaledValue(cs_ext_ship_cost#6) AS 
_pre_1#23, UnscaledValue(cs_net_profit#7) AS _pre_2#24]
 Input [5]: [cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, 
cs_net_profit#7, cc_call_center_sk#21]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, _pre_1#23, _pre_2#24]
 Keys [1]: [cs_order_number#5]
 Functions [2]: [partial_sum(_pre_1#23), partial_sum(_pre_2#24)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#25, 
sum(UnscaledValue(cs_net_profit#7))#26]
 Results [3]: [cs_order_number#5, sum#27, sum#28]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, sum#27, sum#28]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), 
merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct 
cs_order_number#5)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
index 0b564c7d9c..4d2229cc9a 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (7)
     ProjectExecTransformer 
[count(cs_order_number),sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[cs_order_number,cs_ext_ship_cost,cs_net_profit]
                 BroadcastHashJoinExecTransformer 
[cs_call_center_sk,cc_call_center_sk]
                   ProjectExecTransformer 
[cs_call_center_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
index 01e6d6b8fa..b6af6a6146 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow (111)
    :  :  :  :- ^ VeloxBroadcastNestedLoopJoinExecTransformer Inner BuildRight 
(33)
    :  :  :  :  :- ^ ProjectExecTransformer (14)
    :  :  :  :  :  +- ^ RegularHashAggregateExecTransformer (13)
-   :  :  :  :  :     +- ^ RegularHashAggregateExecTransformer (12)
+   :  :  :  :  :     +- ^ FlushableHashAggregateExecTransformer (12)
    :  :  :  :  :        +- ^ RegularHashAggregateExecTransformer (11)
    :  :  :  :  :           +- ^ InputIteratorTransformer (10)
    :  :  :  :  :              +- ColumnarExchange (8)
@@ -21,7 +21,7 @@ VeloxColumnarToRow (111)
    :  :  :  :     +- ColumnarBroadcastExchange (30)
    :  :  :  :        +- ^ ProjectExecTransformer (28)
    :  :  :  :           +- ^ RegularHashAggregateExecTransformer (27)
-   :  :  :  :              +- ^ RegularHashAggregateExecTransformer (26)
+   :  :  :  :              +- ^ FlushableHashAggregateExecTransformer (26)
    :  :  :  :                 +- ^ RegularHashAggregateExecTransformer (25)
    :  :  :  :                    +- ^ InputIteratorTransformer (24)
    :  :  :  :                       +- ColumnarExchange (22)
@@ -35,7 +35,7 @@ VeloxColumnarToRow (111)
    :  :  :     +- ColumnarBroadcastExchange (49)
    :  :  :        +- ^ ProjectExecTransformer (47)
    :  :  :           +- ^ RegularHashAggregateExecTransformer (46)
-   :  :  :              +- ^ RegularHashAggregateExecTransformer (45)
+   :  :  :              +- ^ FlushableHashAggregateExecTransformer (45)
    :  :  :                 +- ^ RegularHashAggregateExecTransformer (44)
    :  :  :                    +- ^ InputIteratorTransformer (43)
    :  :  :                       +- ColumnarExchange (41)
@@ -49,7 +49,7 @@ VeloxColumnarToRow (111)
    :  :     +- ColumnarBroadcastExchange (68)
    :  :        +- ^ ProjectExecTransformer (66)
    :  :           +- ^ RegularHashAggregateExecTransformer (65)
-   :  :              +- ^ RegularHashAggregateExecTransformer (64)
+   :  :              +- ^ FlushableHashAggregateExecTransformer (64)
    :  :                 +- ^ RegularHashAggregateExecTransformer (63)
    :  :                    +- ^ InputIteratorTransformer (62)
    :  :                       +- ColumnarExchange (60)
@@ -63,7 +63,7 @@ VeloxColumnarToRow (111)
    :     +- ColumnarBroadcastExchange (87)
    :        +- ^ ProjectExecTransformer (85)
    :           +- ^ RegularHashAggregateExecTransformer (84)
-   :              +- ^ RegularHashAggregateExecTransformer (83)
+   :              +- ^ FlushableHashAggregateExecTransformer (83)
    :                 +- ^ RegularHashAggregateExecTransformer (82)
    :                    +- ^ InputIteratorTransformer (81)
    :                       +- ColumnarExchange (79)
@@ -77,7 +77,7 @@ VeloxColumnarToRow (111)
       +- ColumnarBroadcastExchange (106)
          +- ^ ProjectExecTransformer (104)
             +- ^ RegularHashAggregateExecTransformer (103)
-               +- ^ RegularHashAggregateExecTransformer (102)
+               +- ^ FlushableHashAggregateExecTransformer (102)
                   +- ^ RegularHashAggregateExecTransformer (101)
                      +- ^ InputIteratorTransformer (100)
                         +- ColumnarExchange (98)
@@ -139,7 +139,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_p
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#3))#7, 
count(ss_list_price#3)#8]
 Results [4]: [ss_list_price#3, sum#9, count#10, count#11]
 
-(12) RegularHashAggregateExecTransformer
+(12) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#3, sum#9, count#10, count#11]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_price#3), partial_count(distinct ss_list_price#3)]
@@ -207,7 +207,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#24, 
count(ss_list_price#20)#25]
 Results [4]: [ss_list_price#20, sum#26, count#27, count#28]
 
-(26) RegularHashAggregateExecTransformer
+(26) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#20, sum#26, count#27, count#28]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_price#20), partial_count(distinct ss_list_price#20)]
@@ -293,7 +293,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#37))#41, 
count(ss_list_price#37)#42]
 Results [4]: [ss_list_price#37, sum#43, count#44, count#45]
 
-(45) RegularHashAggregateExecTransformer
+(45) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#37, sum#43, count#44, count#45]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_price#37), partial_count(distinct ss_list_price#37)]
@@ -379,7 +379,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#54))#58, 
count(ss_list_price#54)#59]
 Results [4]: [ss_list_price#54, sum#60, count#61, count#62]
 
-(64) RegularHashAggregateExecTransformer
+(64) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#54, sum#60, count#61, count#62]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_price#54), partial_count(distinct ss_list_price#54)]
@@ -465,7 +465,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#71))#75, 
count(ss_list_price#71)#76]
 Results [4]: [ss_list_price#71, sum#77, count#78, count#79]
 
-(83) RegularHashAggregateExecTransformer
+(83) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#71, sum#77, count#78, count#79]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_price#71), partial_count(distinct ss_list_price#71)]
@@ -551,7 +551,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#88))#92, 
count(ss_list_price#88)#93]
 Results [4]: [ss_list_price#88, sum#94, count#95, count#96]
 
-(102) RegularHashAggregateExecTransformer
+(102) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#88, sum#94, count#95, count#96]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_price#88), partial_count(distinct ss_list_price#88)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
index dea0985c6f..301a7da3ac 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow
             VeloxBroadcastNestedLoopJoinExecTransformer
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
@@ -25,7 +25,7 @@ VeloxColumnarToRow
                     WholeStageCodegenTransformer (3)
                       ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                         RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                          RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                          FlushableHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                             RegularHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                               InputIteratorTransformer
                                 InputAdapter
@@ -43,7 +43,7 @@ VeloxColumnarToRow
                   WholeStageCodegenTransformer (5)
                     ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                       RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                        RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                        FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                           RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                             InputIteratorTransformer
                               InputAdapter
@@ -61,7 +61,7 @@ VeloxColumnarToRow
                 WholeStageCodegenTransformer (7)
                   ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                     RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                      RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                      FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                         RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                           InputIteratorTransformer
                             InputAdapter
@@ -79,7 +79,7 @@ VeloxColumnarToRow
               WholeStageCodegenTransformer (9)
                 ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                   RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                    RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                    FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                       RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                         InputIteratorTransformer
                           InputAdapter
@@ -97,7 +97,7 @@ VeloxColumnarToRow
             WholeStageCodegenTransformer (11)
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
index 01e6d6b8fa..b6af6a6146 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow (111)
    :  :  :  :- ^ VeloxBroadcastNestedLoopJoinExecTransformer Inner BuildRight 
(33)
    :  :  :  :  :- ^ ProjectExecTransformer (14)
    :  :  :  :  :  +- ^ RegularHashAggregateExecTransformer (13)
-   :  :  :  :  :     +- ^ RegularHashAggregateExecTransformer (12)
+   :  :  :  :  :     +- ^ FlushableHashAggregateExecTransformer (12)
    :  :  :  :  :        +- ^ RegularHashAggregateExecTransformer (11)
    :  :  :  :  :           +- ^ InputIteratorTransformer (10)
    :  :  :  :  :              +- ColumnarExchange (8)
@@ -21,7 +21,7 @@ VeloxColumnarToRow (111)
    :  :  :  :     +- ColumnarBroadcastExchange (30)
    :  :  :  :        +- ^ ProjectExecTransformer (28)
    :  :  :  :           +- ^ RegularHashAggregateExecTransformer (27)
-   :  :  :  :              +- ^ RegularHashAggregateExecTransformer (26)
+   :  :  :  :              +- ^ FlushableHashAggregateExecTransformer (26)
    :  :  :  :                 +- ^ RegularHashAggregateExecTransformer (25)
    :  :  :  :                    +- ^ InputIteratorTransformer (24)
    :  :  :  :                       +- ColumnarExchange (22)
@@ -35,7 +35,7 @@ VeloxColumnarToRow (111)
    :  :  :     +- ColumnarBroadcastExchange (49)
    :  :  :        +- ^ ProjectExecTransformer (47)
    :  :  :           +- ^ RegularHashAggregateExecTransformer (46)
-   :  :  :              +- ^ RegularHashAggregateExecTransformer (45)
+   :  :  :              +- ^ FlushableHashAggregateExecTransformer (45)
    :  :  :                 +- ^ RegularHashAggregateExecTransformer (44)
    :  :  :                    +- ^ InputIteratorTransformer (43)
    :  :  :                       +- ColumnarExchange (41)
@@ -49,7 +49,7 @@ VeloxColumnarToRow (111)
    :  :     +- ColumnarBroadcastExchange (68)
    :  :        +- ^ ProjectExecTransformer (66)
    :  :           +- ^ RegularHashAggregateExecTransformer (65)
-   :  :              +- ^ RegularHashAggregateExecTransformer (64)
+   :  :              +- ^ FlushableHashAggregateExecTransformer (64)
    :  :                 +- ^ RegularHashAggregateExecTransformer (63)
    :  :                    +- ^ InputIteratorTransformer (62)
    :  :                       +- ColumnarExchange (60)
@@ -63,7 +63,7 @@ VeloxColumnarToRow (111)
    :     +- ColumnarBroadcastExchange (87)
    :        +- ^ ProjectExecTransformer (85)
    :           +- ^ RegularHashAggregateExecTransformer (84)
-   :              +- ^ RegularHashAggregateExecTransformer (83)
+   :              +- ^ FlushableHashAggregateExecTransformer (83)
    :                 +- ^ RegularHashAggregateExecTransformer (82)
    :                    +- ^ InputIteratorTransformer (81)
    :                       +- ColumnarExchange (79)
@@ -77,7 +77,7 @@ VeloxColumnarToRow (111)
       +- ColumnarBroadcastExchange (106)
          +- ^ ProjectExecTransformer (104)
             +- ^ RegularHashAggregateExecTransformer (103)
-               +- ^ RegularHashAggregateExecTransformer (102)
+               +- ^ FlushableHashAggregateExecTransformer (102)
                   +- ^ RegularHashAggregateExecTransformer (101)
                      +- ^ InputIteratorTransformer (100)
                         +- ColumnarExchange (98)
@@ -139,7 +139,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_p
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#3))#7, 
count(ss_list_price#3)#8]
 Results [4]: [ss_list_price#3, sum#9, count#10, count#11]
 
-(12) RegularHashAggregateExecTransformer
+(12) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#3, sum#9, count#10, count#11]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_price#3), partial_count(distinct ss_list_price#3)]
@@ -207,7 +207,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#24, 
count(ss_list_price#20)#25]
 Results [4]: [ss_list_price#20, sum#26, count#27, count#28]
 
-(26) RegularHashAggregateExecTransformer
+(26) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#20, sum#26, count#27, count#28]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_price#20), partial_count(distinct ss_list_price#20)]
@@ -293,7 +293,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#37))#41, 
count(ss_list_price#37)#42]
 Results [4]: [ss_list_price#37, sum#43, count#44, count#45]
 
-(45) RegularHashAggregateExecTransformer
+(45) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#37, sum#43, count#44, count#45]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_price#37), partial_count(distinct ss_list_price#37)]
@@ -379,7 +379,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#54))#58, 
count(ss_list_price#54)#59]
 Results [4]: [ss_list_price#54, sum#60, count#61, count#62]
 
-(64) RegularHashAggregateExecTransformer
+(64) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#54, sum#60, count#61, count#62]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_price#54), partial_count(distinct ss_list_price#54)]
@@ -465,7 +465,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#71))#75, 
count(ss_list_price#71)#76]
 Results [4]: [ss_list_price#71, sum#77, count#78, count#79]
 
-(83) RegularHashAggregateExecTransformer
+(83) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#71, sum#77, count#78, count#79]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_price#71), partial_count(distinct ss_list_price#71)]
@@ -551,7 +551,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#88))#92, 
count(ss_list_price#88)#93]
 Results [4]: [ss_list_price#88, sum#94, count#95, count#96]
 
-(102) RegularHashAggregateExecTransformer
+(102) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#88, sum#94, count#95, count#96]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_price#88), partial_count(distinct ss_list_price#88)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
index dea0985c6f..301a7da3ac 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow
             VeloxBroadcastNestedLoopJoinExecTransformer
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
@@ -25,7 +25,7 @@ VeloxColumnarToRow
                     WholeStageCodegenTransformer (3)
                       ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                         RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                          RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                          FlushableHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                             RegularHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                               InputIteratorTransformer
                                 InputAdapter
@@ -43,7 +43,7 @@ VeloxColumnarToRow
                   WholeStageCodegenTransformer (5)
                     ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                       RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                        RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                        FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                           RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                             InputIteratorTransformer
                               InputAdapter
@@ -61,7 +61,7 @@ VeloxColumnarToRow
                 WholeStageCodegenTransformer (7)
                   ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                     RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                      RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                      FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                         RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                           InputIteratorTransformer
                             InputAdapter
@@ -79,7 +79,7 @@ VeloxColumnarToRow
               WholeStageCodegenTransformer (9)
                 ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                   RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                    RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                    FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                       RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                         InputIteratorTransformer
                           InputAdapter
@@ -97,7 +97,7 @@ VeloxColumnarToRow
             WholeStageCodegenTransformer (11)
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
index 97f2376b03..27e0618751 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [ws_order_number#5, UnscaledValue(ws_ext_ship_cost#6) AS 
_pre_1#26, UnscaledValue(ws_net_profit#7) AS _pre_2#27]
 Input [5]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, 
ws_net_profit#7, d_date_sk#24]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, _pre_1#26, _pre_2#27]
 Keys [1]: [ws_order_number#5]
 Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, 
sum(UnscaledValue(ws_net_profit#7))#29]
 Results [3]: [ws_order_number#5, sum#30, sum#31]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, sum#30, sum#31]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), 
merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct 
ws_order_number#5)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
index 547b6e4468..48354046aa 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (13)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_ship_date_sk,d_date_sk]
                   ProjectExecTransformer 
[ws_ship_date_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
index 85b07dc84d..323d43866f 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [ws_order_number#5, UnscaledValue(ws_ext_ship_cost#6) AS 
_pre_1#23, UnscaledValue(ws_net_profit#7) AS _pre_2#24]
 Input [5]: [ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, 
ws_net_profit#7, web_site_sk#21]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, _pre_1#23, _pre_2#24]
 Keys [1]: [ws_order_number#5]
 Functions [2]: [partial_sum(_pre_1#23), partial_sum(_pre_2#24)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#25, 
sum(UnscaledValue(ws_net_profit#7))#26]
 Results [3]: [ws_order_number#5, sum#27, sum#28]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, sum#27, sum#28]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), 
merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct 
ws_order_number#5)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
index f550d94516..d7922584c0 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (7)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_web_site_sk,web_site_sk]
                   ProjectExecTransformer 
[ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
index e86dddc86f..1194eee5db 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (74)
 +- ^ ProjectExecTransformer (72)
    +- ^ RegularHashAggregateExecTransformer (71)
-      +- ^ RegularHashAggregateExecTransformer (70)
+      +- ^ FlushableHashAggregateExecTransformer (70)
          +- ^ RegularHashAggregateExecTransformer (69)
-            +- ^ RegularHashAggregateExecTransformer (68)
+            +- ^ FlushableHashAggregateExecTransformer (68)
                +- ^ ProjectExecTransformer (67)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66)
                      :- ^ ProjectExecTransformer (58)
@@ -337,7 +337,7 @@ Join condition: None
 Output [3]: [ws_order_number#4, UnscaledValue(ws_ext_ship_cost#5) AS 
_pre_1#31, UnscaledValue(ws_net_profit#6) AS _pre_2#32]
 Input [5]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, 
ws_net_profit#6, d_date_sk#29]
 
-(68) RegularHashAggregateExecTransformer
+(68) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, _pre_1#31, _pre_2#32]
 Keys [1]: [ws_order_number#4]
 Functions [2]: [partial_sum(_pre_1#31), partial_sum(_pre_2#32)]
@@ -351,7 +351,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, 
sum(UnscaledValue(ws_net_profit#6))#34]
 Results [3]: [ws_order_number#4, sum#35, sum#36]
 
-(70) RegularHashAggregateExecTransformer
+(70) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, sum#35, sum#36]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), 
merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct 
ws_order_number#4)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
index b764f51091..73a700c52b 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (16)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_ship_date_sk,d_date_sk]
                   ProjectExecTransformer 
[ws_ship_date_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
index 2ea15db9dd..878fffd6e9 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (75)
 +- ^ ProjectExecTransformer (73)
    +- ^ RegularHashAggregateExecTransformer (72)
-      +- ^ RegularHashAggregateExecTransformer (71)
+      +- ^ FlushableHashAggregateExecTransformer (71)
          +- ^ RegularHashAggregateExecTransformer (70)
-            +- ^ RegularHashAggregateExecTransformer (69)
+            +- ^ FlushableHashAggregateExecTransformer (69)
                +- ^ ProjectExecTransformer (68)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (67)
                      :- ^ ProjectExecTransformer (59)
@@ -342,7 +342,7 @@ Join condition: None
 Output [3]: [ws_order_number#4, UnscaledValue(ws_ext_ship_cost#5) AS 
_pre_1#28, UnscaledValue(ws_net_profit#6) AS _pre_2#29]
 Input [5]: [ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, 
ws_net_profit#6, web_site_sk#26]
 
-(69) RegularHashAggregateExecTransformer
+(69) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, _pre_1#28, _pre_2#29]
 Keys [1]: [ws_order_number#4]
 Functions [2]: [partial_sum(_pre_1#28), partial_sum(_pre_2#29)]
@@ -356,7 +356,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#30, 
sum(UnscaledValue(ws_net_profit#6))#31]
 Results [3]: [ws_order_number#4, sum#32, sum#33]
 
-(71) RegularHashAggregateExecTransformer
+(71) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, sum#32, sum#33]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), 
merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct 
ws_order_number#4)]
diff --git 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
index 155a6f58ff..cc2b85d466 100644
--- 
a/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
+++ 
b/gluten-ut/spark40/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (10)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_web_site_sk,web_site_sk]
                   ProjectExecTransformer 
[ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
index 940ad005ec..64ade6b2f7 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/explain.txt
@@ -2,7 +2,7 @@
 VeloxColumnarToRow (14)
 +- ^ ProjectExecTransformer (12)
    +- ^ RegularHashAggregateExecTransformer (11)
-      +- ^ RegularHashAggregateExecTransformer (10)
+      +- ^ FlushableHashAggregateExecTransformer (10)
          +- ^ RegularHashAggregateExecTransformer (9)
             +- ^ InputIteratorTransformer (8)
                +- ColumnarExchange (6)
@@ -53,7 +53,7 @@ Functions [11]: [merge_count(1), 
merge_count(ss_sold_date_sk#9), merge_max(ss_so
 Aggregate Attributes [11]: [count(1)#10, count(ss_sold_date_sk#9)#11, 
max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, 
max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, 
max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20]
 Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 
-(10) RegularHashAggregateExecTransformer
+(10) FlushableHashAggregateExecTransformer
 Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 Keys: []
 Functions [12]: [merge_count(1), merge_count(ss_sold_date_sk#9), 
merge_max(ss_sold_date_sk#9), merge_max(ss_sold_time_sk#1), 
merge_max(ss_item_sk#2), merge_max(ss_customer_sk#3), merge_max(ss_cdemo_sk#4), 
merge_max(ss_hdemo_sk#5), merge_max(ss_addr_sk#6), merge_max(ss_store_sk#7), 
merge_max(ss_promo_sk#8), partial_count(distinct ss_sold_date_sk#9)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
index ac76610ebf..6d8b04fdf9 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max.sf100/simplified.txt
@@ -2,7 +2,7 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (2)
     ProjectExecTransformer 
[count(1),count(ss_sold_date_sk),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk)]
       RegularHashAggregateExecTransformer 
[count,count,max,max,max,max,max,max,max,max,max,count] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count]
-        RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
+        FlushableHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
           RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,max,max,max,max,max,max,max,max,max]
             InputIteratorTransformer
               InputAdapter
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
index 940ad005ec..64ade6b2f7 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/explain.txt
@@ -2,7 +2,7 @@
 VeloxColumnarToRow (14)
 +- ^ ProjectExecTransformer (12)
    +- ^ RegularHashAggregateExecTransformer (11)
-      +- ^ RegularHashAggregateExecTransformer (10)
+      +- ^ FlushableHashAggregateExecTransformer (10)
          +- ^ RegularHashAggregateExecTransformer (9)
             +- ^ InputIteratorTransformer (8)
                +- ColumnarExchange (6)
@@ -53,7 +53,7 @@ Functions [11]: [merge_count(1), 
merge_count(ss_sold_date_sk#9), merge_max(ss_so
 Aggregate Attributes [11]: [count(1)#10, count(ss_sold_date_sk#9)#11, 
max(ss_sold_date_sk#9)#12, max(ss_sold_time_sk#1)#13, max(ss_item_sk#2)#14, 
max(ss_customer_sk#3)#15, max(ss_cdemo_sk#4)#16, max(ss_hdemo_sk#5)#17, 
max(ss_addr_sk#6)#18, max(ss_store_sk#7)#19, max(ss_promo_sk#8)#20]
 Results [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 
-(10) RegularHashAggregateExecTransformer
+(10) FlushableHashAggregateExecTransformer
 Input [12]: [ss_sold_date_sk#9, count#21, count#22, max#23, max#24, max#25, 
max#26, max#27, max#28, max#29, max#30, max#31]
 Keys: []
 Functions [12]: [merge_count(1), merge_count(ss_sold_date_sk#9), 
merge_max(ss_sold_date_sk#9), merge_max(ss_sold_time_sk#1), 
merge_max(ss_item_sk#2), merge_max(ss_customer_sk#3), merge_max(ss_cdemo_sk#4), 
merge_max(ss_hdemo_sk#5), merge_max(ss_addr_sk#6), merge_max(ss_store_sk#7), 
merge_max(ss_promo_sk#8), partial_count(distinct ss_sold_date_sk#9)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
index ac76610ebf..6d8b04fdf9 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-modified/ss_max/simplified.txt
@@ -2,7 +2,7 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (2)
     ProjectExecTransformer 
[count(1),count(ss_sold_date_sk),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk)]
       RegularHashAggregateExecTransformer 
[count,count,max,max,max,max,max,max,max,max,max,count] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count]
-        RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
+        FlushableHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count(ss_sold_date_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,count,max,max,max,max,max,max,max,max,max,count]
           RegularHashAggregateExecTransformer [ss_sold_date_sk] 
[count(1),count(ss_sold_date_sk),max(ss_sold_date_sk),max(ss_sold_time_sk),max(ss_item_sk),max(ss_customer_sk),max(ss_cdemo_sk),max(ss_hdemo_sk),max(ss_addr_sk),max(ss_store_sk),max(ss_promo_sk),count,count,max,max,max,max,max,max,max,max,max,count,count,max,max,max,max,max,max,max,max,max]
             InputIteratorTransformer
               InputAdapter
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
index e61e86016c..dd98c4013f 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [cs_order_number#5, UnscaledValue(cs_ext_ship_cost#6) AS 
_pre_1#26, UnscaledValue(cs_net_profit#7) AS _pre_2#27]
 Input [5]: [cs_ship_date_sk#1, cs_order_number#5, cs_ext_ship_cost#6, 
cs_net_profit#7, d_date_sk#24]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, _pre_1#26, _pre_2#27]
 Keys [1]: [cs_order_number#5]
 Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#28, 
sum(UnscaledValue(cs_net_profit#7))#29]
 Results [3]: [cs_order_number#5, sum#30, sum#31]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, sum#30, sum#31]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), 
merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct 
cs_order_number#5)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
index b74f007b5f..5031d13c18 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16.sf100/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (13)
     ProjectExecTransformer 
[count(cs_order_number),sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[cs_order_number,cs_ext_ship_cost,cs_net_profit]
                 BroadcastHashJoinExecTransformer [cs_ship_date_sk,d_date_sk]
                   ProjectExecTransformer 
[cs_ship_date_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
index 94729a3849..f5fb5924a0 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [cs_order_number#5, UnscaledValue(cs_ext_ship_cost#6) AS 
_pre_1#23, UnscaledValue(cs_net_profit#7) AS _pre_2#24]
 Input [5]: [cs_call_center_sk#3, cs_order_number#5, cs_ext_ship_cost#6, 
cs_net_profit#7, cc_call_center_sk#21]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, _pre_1#23, _pre_2#24]
 Keys [1]: [cs_order_number#5]
 Functions [2]: [partial_sum(_pre_1#23), partial_sum(_pre_2#24)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(cs_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_ship_cost#6))#25, 
sum(UnscaledValue(cs_net_profit#7))#26]
 Results [3]: [cs_order_number#5, sum#27, sum#28]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [cs_order_number#5, sum#27, sum#28]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(cs_ext_ship_cost#6)), 
merge_sum(UnscaledValue(cs_net_profit#7)), partial_count(distinct 
cs_order_number#5)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
index 0b564c7d9c..4d2229cc9a 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q16/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (7)
     ProjectExecTransformer 
[count(cs_order_number),sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),count(cs_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [cs_order_number] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[cs_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(cs_ext_ship_cost)),sum(UnscaledValue(cs_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[cs_order_number,cs_ext_ship_cost,cs_net_profit]
                 BroadcastHashJoinExecTransformer 
[cs_call_center_sk,cc_call_center_sk]
                   ProjectExecTransformer 
[cs_call_center_sk,cs_order_number,cs_ext_ship_cost,cs_net_profit]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
index 01e6d6b8fa..b6af6a6146 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/explain.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow (111)
    :  :  :  :- ^ VeloxBroadcastNestedLoopJoinExecTransformer Inner BuildRight 
(33)
    :  :  :  :  :- ^ ProjectExecTransformer (14)
    :  :  :  :  :  +- ^ RegularHashAggregateExecTransformer (13)
-   :  :  :  :  :     +- ^ RegularHashAggregateExecTransformer (12)
+   :  :  :  :  :     +- ^ FlushableHashAggregateExecTransformer (12)
    :  :  :  :  :        +- ^ RegularHashAggregateExecTransformer (11)
    :  :  :  :  :           +- ^ InputIteratorTransformer (10)
    :  :  :  :  :              +- ColumnarExchange (8)
@@ -21,7 +21,7 @@ VeloxColumnarToRow (111)
    :  :  :  :     +- ColumnarBroadcastExchange (30)
    :  :  :  :        +- ^ ProjectExecTransformer (28)
    :  :  :  :           +- ^ RegularHashAggregateExecTransformer (27)
-   :  :  :  :              +- ^ RegularHashAggregateExecTransformer (26)
+   :  :  :  :              +- ^ FlushableHashAggregateExecTransformer (26)
    :  :  :  :                 +- ^ RegularHashAggregateExecTransformer (25)
    :  :  :  :                    +- ^ InputIteratorTransformer (24)
    :  :  :  :                       +- ColumnarExchange (22)
@@ -35,7 +35,7 @@ VeloxColumnarToRow (111)
    :  :  :     +- ColumnarBroadcastExchange (49)
    :  :  :        +- ^ ProjectExecTransformer (47)
    :  :  :           +- ^ RegularHashAggregateExecTransformer (46)
-   :  :  :              +- ^ RegularHashAggregateExecTransformer (45)
+   :  :  :              +- ^ FlushableHashAggregateExecTransformer (45)
    :  :  :                 +- ^ RegularHashAggregateExecTransformer (44)
    :  :  :                    +- ^ InputIteratorTransformer (43)
    :  :  :                       +- ColumnarExchange (41)
@@ -49,7 +49,7 @@ VeloxColumnarToRow (111)
    :  :     +- ColumnarBroadcastExchange (68)
    :  :        +- ^ ProjectExecTransformer (66)
    :  :           +- ^ RegularHashAggregateExecTransformer (65)
-   :  :              +- ^ RegularHashAggregateExecTransformer (64)
+   :  :              +- ^ FlushableHashAggregateExecTransformer (64)
    :  :                 +- ^ RegularHashAggregateExecTransformer (63)
    :  :                    +- ^ InputIteratorTransformer (62)
    :  :                       +- ColumnarExchange (60)
@@ -63,7 +63,7 @@ VeloxColumnarToRow (111)
    :     +- ColumnarBroadcastExchange (87)
    :        +- ^ ProjectExecTransformer (85)
    :           +- ^ RegularHashAggregateExecTransformer (84)
-   :              +- ^ RegularHashAggregateExecTransformer (83)
+   :              +- ^ FlushableHashAggregateExecTransformer (83)
    :                 +- ^ RegularHashAggregateExecTransformer (82)
    :                    +- ^ InputIteratorTransformer (81)
    :                       +- ColumnarExchange (79)
@@ -77,7 +77,7 @@ VeloxColumnarToRow (111)
       +- ColumnarBroadcastExchange (106)
          +- ^ ProjectExecTransformer (104)
             +- ^ RegularHashAggregateExecTransformer (103)
-               +- ^ RegularHashAggregateExecTransformer (102)
+               +- ^ FlushableHashAggregateExecTransformer (102)
                   +- ^ RegularHashAggregateExecTransformer (101)
                      +- ^ InputIteratorTransformer (100)
                         +- ColumnarExchange (98)
@@ -139,7 +139,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_p
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#3))#7, 
count(ss_list_price#3)#8]
 Results [4]: [ss_list_price#3, sum#9, count#10, count#11]
 
-(12) RegularHashAggregateExecTransformer
+(12) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#3, sum#9, count#10, count#11]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_price#3), partial_count(distinct ss_list_price#3)]
@@ -207,7 +207,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#24, 
count(ss_list_price#20)#25]
 Results [4]: [ss_list_price#20, sum#26, count#27, count#28]
 
-(26) RegularHashAggregateExecTransformer
+(26) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#20, sum#26, count#27, count#28]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_price#20), partial_count(distinct ss_list_price#20)]
@@ -293,7 +293,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#37))#41, 
count(ss_list_price#37)#42]
 Results [4]: [ss_list_price#37, sum#43, count#44, count#45]
 
-(45) RegularHashAggregateExecTransformer
+(45) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#37, sum#43, count#44, count#45]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_price#37), partial_count(distinct ss_list_price#37)]
@@ -379,7 +379,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#54))#58, 
count(ss_list_price#54)#59]
 Results [4]: [ss_list_price#54, sum#60, count#61, count#62]
 
-(64) RegularHashAggregateExecTransformer
+(64) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#54, sum#60, count#61, count#62]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_price#54), partial_count(distinct ss_list_price#54)]
@@ -465,7 +465,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#71))#75, 
count(ss_list_price#71)#76]
 Results [4]: [ss_list_price#71, sum#77, count#78, count#79]
 
-(83) RegularHashAggregateExecTransformer
+(83) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#71, sum#77, count#78, count#79]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_price#71), partial_count(distinct ss_list_price#71)]
@@ -551,7 +551,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#88))#92, 
count(ss_list_price#88)#93]
 Results [4]: [ss_list_price#88, sum#94, count#95, count#96]
 
-(102) RegularHashAggregateExecTransformer
+(102) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#88, sum#94, count#95, count#96]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_price#88), partial_count(distinct ss_list_price#88)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
index dea0985c6f..301a7da3ac 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28.sf100/simplified.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow
             VeloxBroadcastNestedLoopJoinExecTransformer
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
@@ -25,7 +25,7 @@ VeloxColumnarToRow
                     WholeStageCodegenTransformer (3)
                       ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                         RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                          RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                          FlushableHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                             RegularHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                               InputIteratorTransformer
                                 InputAdapter
@@ -43,7 +43,7 @@ VeloxColumnarToRow
                   WholeStageCodegenTransformer (5)
                     ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                       RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                        RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                        FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                           RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                             InputIteratorTransformer
                               InputAdapter
@@ -61,7 +61,7 @@ VeloxColumnarToRow
                 WholeStageCodegenTransformer (7)
                   ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                     RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                      RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                      FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                         RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                           InputIteratorTransformer
                             InputAdapter
@@ -79,7 +79,7 @@ VeloxColumnarToRow
               WholeStageCodegenTransformer (9)
                 ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                   RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                    RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                    FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                       RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                         InputIteratorTransformer
                           InputAdapter
@@ -97,7 +97,7 @@ VeloxColumnarToRow
             WholeStageCodegenTransformer (11)
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
index 01e6d6b8fa..b6af6a6146 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/explain.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow (111)
    :  :  :  :- ^ VeloxBroadcastNestedLoopJoinExecTransformer Inner BuildRight 
(33)
    :  :  :  :  :- ^ ProjectExecTransformer (14)
    :  :  :  :  :  +- ^ RegularHashAggregateExecTransformer (13)
-   :  :  :  :  :     +- ^ RegularHashAggregateExecTransformer (12)
+   :  :  :  :  :     +- ^ FlushableHashAggregateExecTransformer (12)
    :  :  :  :  :        +- ^ RegularHashAggregateExecTransformer (11)
    :  :  :  :  :           +- ^ InputIteratorTransformer (10)
    :  :  :  :  :              +- ColumnarExchange (8)
@@ -21,7 +21,7 @@ VeloxColumnarToRow (111)
    :  :  :  :     +- ColumnarBroadcastExchange (30)
    :  :  :  :        +- ^ ProjectExecTransformer (28)
    :  :  :  :           +- ^ RegularHashAggregateExecTransformer (27)
-   :  :  :  :              +- ^ RegularHashAggregateExecTransformer (26)
+   :  :  :  :              +- ^ FlushableHashAggregateExecTransformer (26)
    :  :  :  :                 +- ^ RegularHashAggregateExecTransformer (25)
    :  :  :  :                    +- ^ InputIteratorTransformer (24)
    :  :  :  :                       +- ColumnarExchange (22)
@@ -35,7 +35,7 @@ VeloxColumnarToRow (111)
    :  :  :     +- ColumnarBroadcastExchange (49)
    :  :  :        +- ^ ProjectExecTransformer (47)
    :  :  :           +- ^ RegularHashAggregateExecTransformer (46)
-   :  :  :              +- ^ RegularHashAggregateExecTransformer (45)
+   :  :  :              +- ^ FlushableHashAggregateExecTransformer (45)
    :  :  :                 +- ^ RegularHashAggregateExecTransformer (44)
    :  :  :                    +- ^ InputIteratorTransformer (43)
    :  :  :                       +- ColumnarExchange (41)
@@ -49,7 +49,7 @@ VeloxColumnarToRow (111)
    :  :     +- ColumnarBroadcastExchange (68)
    :  :        +- ^ ProjectExecTransformer (66)
    :  :           +- ^ RegularHashAggregateExecTransformer (65)
-   :  :              +- ^ RegularHashAggregateExecTransformer (64)
+   :  :              +- ^ FlushableHashAggregateExecTransformer (64)
    :  :                 +- ^ RegularHashAggregateExecTransformer (63)
    :  :                    +- ^ InputIteratorTransformer (62)
    :  :                       +- ColumnarExchange (60)
@@ -63,7 +63,7 @@ VeloxColumnarToRow (111)
    :     +- ColumnarBroadcastExchange (87)
    :        +- ^ ProjectExecTransformer (85)
    :           +- ^ RegularHashAggregateExecTransformer (84)
-   :              +- ^ RegularHashAggregateExecTransformer (83)
+   :              +- ^ FlushableHashAggregateExecTransformer (83)
    :                 +- ^ RegularHashAggregateExecTransformer (82)
    :                    +- ^ InputIteratorTransformer (81)
    :                       +- ColumnarExchange (79)
@@ -77,7 +77,7 @@ VeloxColumnarToRow (111)
       +- ColumnarBroadcastExchange (106)
          +- ^ ProjectExecTransformer (104)
             +- ^ RegularHashAggregateExecTransformer (103)
-               +- ^ RegularHashAggregateExecTransformer (102)
+               +- ^ FlushableHashAggregateExecTransformer (102)
                   +- ^ RegularHashAggregateExecTransformer (101)
                      +- ^ InputIteratorTransformer (100)
                         +- ColumnarExchange (98)
@@ -139,7 +139,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_p
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#3))#7, 
count(ss_list_price#3)#8]
 Results [4]: [ss_list_price#3, sum#9, count#10, count#11]
 
-(12) RegularHashAggregateExecTransformer
+(12) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#3, sum#9, count#10, count#11]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#3)), 
merge_count(ss_list_price#3), partial_count(distinct ss_list_price#3)]
@@ -207,7 +207,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#20))#24, 
count(ss_list_price#20)#25]
 Results [4]: [ss_list_price#20, sum#26, count#27, count#28]
 
-(26) RegularHashAggregateExecTransformer
+(26) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#20, sum#26, count#27, count#28]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#20)), 
merge_count(ss_list_price#20), partial_count(distinct ss_list_price#20)]
@@ -293,7 +293,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#37))#41, 
count(ss_list_price#37)#42]
 Results [4]: [ss_list_price#37, sum#43, count#44, count#45]
 
-(45) RegularHashAggregateExecTransformer
+(45) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#37, sum#43, count#44, count#45]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#37)), 
merge_count(ss_list_price#37), partial_count(distinct ss_list_price#37)]
@@ -379,7 +379,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#54))#58, 
count(ss_list_price#54)#59]
 Results [4]: [ss_list_price#54, sum#60, count#61, count#62]
 
-(64) RegularHashAggregateExecTransformer
+(64) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#54, sum#60, count#61, count#62]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#54)), 
merge_count(ss_list_price#54), partial_count(distinct ss_list_price#54)]
@@ -465,7 +465,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#71))#75, 
count(ss_list_price#71)#76]
 Results [4]: [ss_list_price#71, sum#77, count#78, count#79]
 
-(83) RegularHashAggregateExecTransformer
+(83) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#71, sum#77, count#78, count#79]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#71)), 
merge_count(ss_list_price#71), partial_count(distinct ss_list_price#71)]
@@ -551,7 +551,7 @@ Functions [2]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_
 Aggregate Attributes [2]: [avg(UnscaledValue(ss_list_price#88))#92, 
count(ss_list_price#88)#93]
 Results [4]: [ss_list_price#88, sum#94, count#95, count#96]
 
-(102) RegularHashAggregateExecTransformer
+(102) FlushableHashAggregateExecTransformer
 Input [4]: [ss_list_price#88, sum#94, count#95, count#96]
 Keys: []
 Functions [3]: [merge_avg(UnscaledValue(ss_list_price#88)), 
merge_count(ss_list_price#88), partial_count(distinct ss_list_price#88)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
index dea0985c6f..301a7da3ac 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q28/simplified.txt
@@ -7,7 +7,7 @@ VeloxColumnarToRow
             VeloxBroadcastNestedLoopJoinExecTransformer
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
@@ -25,7 +25,7 @@ VeloxColumnarToRow
                     WholeStageCodegenTransformer (3)
                       ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                         RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                          RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                          FlushableHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                             RegularHashAggregateExecTransformer 
[ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                               InputIteratorTransformer
                                 InputAdapter
@@ -43,7 +43,7 @@ VeloxColumnarToRow
                   WholeStageCodegenTransformer (5)
                     ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                       RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                        RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                        FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                           RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                             InputIteratorTransformer
                               InputAdapter
@@ -61,7 +61,7 @@ VeloxColumnarToRow
                 WholeStageCodegenTransformer (7)
                   ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                     RegularHashAggregateExecTransformer 
[sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                      RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                      FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                         RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                           InputIteratorTransformer
                             InputAdapter
@@ -79,7 +79,7 @@ VeloxColumnarToRow
               WholeStageCodegenTransformer (9)
                 ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                   RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                    RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                    FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                       RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                         InputIteratorTransformer
                           InputAdapter
@@ -97,7 +97,7 @@ VeloxColumnarToRow
             WholeStageCodegenTransformer (11)
               ProjectExecTransformer 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price)]
                 RegularHashAggregateExecTransformer [sum,count,count,count] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count]
-                  RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
+                  FlushableHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),count(ss_list_price),sum,count,count,count,sum,count,count,count]
                     RegularHashAggregateExecTransformer [ss_list_price] 
[avg(UnscaledValue(ss_list_price)),count(ss_list_price),sum,count,count,sum,count,count]
                       InputIteratorTransformer
                         InputAdapter
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
index 97f2376b03..27e0618751 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [ws_order_number#5, UnscaledValue(ws_ext_ship_cost#6) AS 
_pre_1#26, UnscaledValue(ws_net_profit#7) AS _pre_2#27]
 Input [5]: [ws_ship_date_sk#1, ws_order_number#5, ws_ext_ship_cost#6, 
ws_net_profit#7, d_date_sk#24]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, _pre_1#26, _pre_2#27]
 Keys [1]: [ws_order_number#5]
 Functions [2]: [partial_sum(_pre_1#26), partial_sum(_pre_2#27)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#28, 
sum(UnscaledValue(ws_net_profit#7))#29]
 Results [3]: [ws_order_number#5, sum#30, sum#31]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, sum#30, sum#31]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), 
merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct 
ws_order_number#5)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
index 547b6e4468..48354046aa 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94.sf100/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (13)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_ship_date_sk,d_date_sk]
                   ProjectExecTransformer 
[ws_ship_date_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
index 85b07dc84d..323d43866f 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (59)
 +- ^ ProjectExecTransformer (57)
    +- ^ RegularHashAggregateExecTransformer (56)
-      +- ^ RegularHashAggregateExecTransformer (55)
+      +- ^ FlushableHashAggregateExecTransformer (55)
          +- ^ RegularHashAggregateExecTransformer (54)
-            +- ^ RegularHashAggregateExecTransformer (53)
+            +- ^ FlushableHashAggregateExecTransformer (53)
                +- ^ ProjectExecTransformer (52)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (51)
                      :- ^ ProjectExecTransformer (43)
@@ -266,7 +266,7 @@ Join condition: None
 Output [3]: [ws_order_number#5, UnscaledValue(ws_ext_ship_cost#6) AS 
_pre_1#23, UnscaledValue(ws_net_profit#7) AS _pre_2#24]
 Input [5]: [ws_web_site_sk#3, ws_order_number#5, ws_ext_ship_cost#6, 
ws_net_profit#7, web_site_sk#21]
 
-(53) RegularHashAggregateExecTransformer
+(53) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, _pre_1#23, _pre_2#24]
 Keys [1]: [ws_order_number#5]
 Functions [2]: [partial_sum(_pre_1#23), partial_sum(_pre_2#24)]
@@ -280,7 +280,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#6)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#6))#25, 
sum(UnscaledValue(ws_net_profit#7))#26]
 Results [3]: [ws_order_number#5, sum#27, sum#28]
 
-(55) RegularHashAggregateExecTransformer
+(55) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#5, sum#27, sum#28]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#6)), 
merge_sum(UnscaledValue(ws_net_profit#7)), partial_count(distinct 
ws_order_number#5)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
index f550d94516..d7922584c0 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q94/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (7)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_web_site_sk,web_site_sk]
                   ProjectExecTransformer 
[ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
index e86dddc86f..1194eee5db 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (74)
 +- ^ ProjectExecTransformer (72)
    +- ^ RegularHashAggregateExecTransformer (71)
-      +- ^ RegularHashAggregateExecTransformer (70)
+      +- ^ FlushableHashAggregateExecTransformer (70)
          +- ^ RegularHashAggregateExecTransformer (69)
-            +- ^ RegularHashAggregateExecTransformer (68)
+            +- ^ FlushableHashAggregateExecTransformer (68)
                +- ^ ProjectExecTransformer (67)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66)
                      :- ^ ProjectExecTransformer (58)
@@ -337,7 +337,7 @@ Join condition: None
 Output [3]: [ws_order_number#4, UnscaledValue(ws_ext_ship_cost#5) AS 
_pre_1#31, UnscaledValue(ws_net_profit#6) AS _pre_2#32]
 Input [5]: [ws_ship_date_sk#1, ws_order_number#4, ws_ext_ship_cost#5, 
ws_net_profit#6, d_date_sk#29]
 
-(68) RegularHashAggregateExecTransformer
+(68) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, _pre_1#31, _pre_2#32]
 Keys [1]: [ws_order_number#4]
 Functions [2]: [partial_sum(_pre_1#31), partial_sum(_pre_2#32)]
@@ -351,7 +351,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#33, 
sum(UnscaledValue(ws_net_profit#6))#34]
 Results [3]: [ws_order_number#4, sum#35, sum#36]
 
-(70) RegularHashAggregateExecTransformer
+(70) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, sum#35, sum#36]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), 
merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct 
ws_order_number#4)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
index b764f51091..73a700c52b 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95.sf100/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (16)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_ship_date_sk,d_date_sk]
                   ProjectExecTransformer 
[ws_ship_date_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
index 2ea15db9dd..878fffd6e9 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/explain.txt
@@ -2,9 +2,9 @@
 VeloxColumnarToRow (75)
 +- ^ ProjectExecTransformer (73)
    +- ^ RegularHashAggregateExecTransformer (72)
-      +- ^ RegularHashAggregateExecTransformer (71)
+      +- ^ FlushableHashAggregateExecTransformer (71)
          +- ^ RegularHashAggregateExecTransformer (70)
-            +- ^ RegularHashAggregateExecTransformer (69)
+            +- ^ FlushableHashAggregateExecTransformer (69)
                +- ^ ProjectExecTransformer (68)
                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (67)
                      :- ^ ProjectExecTransformer (59)
@@ -342,7 +342,7 @@ Join condition: None
 Output [3]: [ws_order_number#4, UnscaledValue(ws_ext_ship_cost#5) AS 
_pre_1#28, UnscaledValue(ws_net_profit#6) AS _pre_2#29]
 Input [5]: [ws_web_site_sk#3, ws_order_number#4, ws_ext_ship_cost#5, 
ws_net_profit#6, web_site_sk#26]
 
-(69) RegularHashAggregateExecTransformer
+(69) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, _pre_1#28, _pre_2#29]
 Keys [1]: [ws_order_number#4]
 Functions [2]: [partial_sum(_pre_1#28), partial_sum(_pre_2#29)]
@@ -356,7 +356,7 @@ Functions [2]: 
[merge_sum(UnscaledValue(ws_ext_ship_cost#5)), merge_sum(Unscaled
 Aggregate Attributes [2]: [sum(UnscaledValue(ws_ext_ship_cost#5))#30, 
sum(UnscaledValue(ws_net_profit#6))#31]
 Results [3]: [ws_order_number#4, sum#32, sum#33]
 
-(71) RegularHashAggregateExecTransformer
+(71) FlushableHashAggregateExecTransformer
 Input [3]: [ws_order_number#4, sum#32, sum#33]
 Keys: []
 Functions [3]: [merge_sum(UnscaledValue(ws_ext_ship_cost#5)), 
merge_sum(UnscaledValue(ws_net_profit#6)), partial_count(distinct 
ws_order_number#4)]
diff --git 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
index 155a6f58ff..cc2b85d466 100644
--- 
a/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
+++ 
b/gluten-ut/spark41/src/test/resources/backends-velox/tpcds-plan-stability/gluten-approved-plans-v1_4/q95/simplified.txt
@@ -2,9 +2,9 @@ VeloxColumnarToRow
   WholeStageCodegenTransformer (10)
     ProjectExecTransformer 
[count(ws_order_number),sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit))]
       RegularHashAggregateExecTransformer [sum,sum,count] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count]
-        RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
+        FlushableHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),count(ws_order_number),sum,sum,count,sum,sum,count]
           RegularHashAggregateExecTransformer [ws_order_number] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
-            RegularHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
+            FlushableHashAggregateExecTransformer 
[ws_order_number,_pre_x,_pre_x] 
[sum(UnscaledValue(ws_ext_ship_cost)),sum(UnscaledValue(ws_net_profit)),sum,sum,sum,sum]
               ProjectExecTransformer 
[ws_order_number,ws_ext_ship_cost,ws_net_profit]
                 BroadcastHashJoinExecTransformer [ws_web_site_sk,web_site_sk]
                   ProjectExecTransformer 
[ws_web_site_sk,ws_order_number,ws_ext_ship_cost,ws_net_profit]


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

Reply via email to