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

michaelsmith pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git


The following commit(s) were added to refs/heads/master by this push:
     new 6aa4df444 IMPALA-14105: Calcite planner: Runtime filters not being 
applied with outer joins
6aa4df444 is described below

commit 6aa4df4443b4d927b4c59ae3622894bba2c9d433
Author: Steve Carlin <[email protected]>
AuthorDate: Sun Jul 27 10:18:55 2025 -0700

    IMPALA-14105: Calcite planner: Runtime filters not being applied with outer 
joins
    
    Previous to this commit, outer join conjuncts were not being placed into
    the ValueTransfersGraph which prevented them from being considered for
    runtime filters.  This caused a slowdown in some tpcds queries.
    
    The conjuncts are now registered with the ImpalaJoinRel. The appropriate 
TableRef
    objects are picked up from the underyling plan nodes.
    
    Change-Id: I9e06d3f35a10f35ff8b57ba25dbab1bc6a35238a
    Reviewed-on: http://gerrit.cloudera.org:8080/23318
    Reviewed-by: Aman Sinha <[email protected]>
    Tested-by: Impala Public Jenkins <[email protected]>
---
 .../impala/calcite/rel/node/ImpalaJoinRel.java     |  53 ++++++++-
 .../calcite/rel/phys/ImpalaHdfsScanNode.java       |   7 ++
 .../PlannerTest/calcite_tpcds/tpcds-q14b.test      |   6 +
 .../PlannerTest/calcite_tpcds/tpcds-q16.test       | 122 ++++++++-------------
 .../PlannerTest/calcite_tpcds/tpcds-q35a.test      |  18 +--
 .../PlannerTest/calcite_tpcds/tpcds-q40.test       |   9 +-
 .../PlannerTest/calcite_tpcds/tpcds-q75.test       |  36 +++++-
 .../PlannerTest/calcite_tpcds/tpcds-q80.test       |  19 +++-
 .../PlannerTest/calcite_tpcds/tpcds-q94.test       | 122 ++++++++-------------
 9 files changed, 219 insertions(+), 173 deletions(-)

diff --git 
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
 
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
index 0fa95c1b2..c2d5d8d0c 100644
--- 
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
+++ 
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
@@ -37,12 +37,14 @@ import org.apache.impala.analysis.BinaryPredicate;
 import org.apache.impala.analysis.Expr;
 import org.apache.impala.analysis.JoinOperator;
 import org.apache.impala.analysis.SlotRef;
+import org.apache.impala.analysis.TableRef;
 import org.apache.impala.analysis.TupleId;
 import org.apache.impala.analysis.TupleIsNullPredicate;
 import org.apache.impala.calcite.functions.AnalyzedFunctionCallExpr;
 import org.apache.impala.calcite.functions.AnalyzedNullLiteral;
 import org.apache.impala.calcite.functions.FunctionResolver;
 import org.apache.impala.calcite.rel.phys.ImpalaHashJoinNode;
+import org.apache.impala.calcite.rel.phys.ImpalaHdfsScanNode;
 import org.apache.impala.calcite.rel.phys.ImpalaNestedLoopJoinNode;
 import org.apache.impala.calcite.rel.util.CreateExprVisitor;
 import org.apache.impala.calcite.rel.util.ExprConjunctsConverter;
@@ -146,11 +148,11 @@ public class ImpalaJoinRel extends Join
     // register the equi join conjuncts with the analyzer such that
     // value transfer graph creation can consume it. It is only useful
     // in the value transfer graph if the value transfer is equal on
-    // both sides. Any outer join is removed since the value on the outer
-    // join side could be NULL when the left side is not NULL.
-    if (equiJoinConjuncts.size() > 0 && joinOp == JoinOperator.INNER_JOIN) {
+    // both sides.
+    if (equiJoinConjuncts.size() > 0) {
       List<Expr> equiJoinExprs = new ArrayList<Expr>(equiJoinConjuncts);
-      analyzer.registerConjuncts(getJoinConjunctListToRegister(equiJoinExprs));
+      registerConjuncts(getJoinConjunctListToRegister(equiJoinExprs), analyzer,
+          joinNode);
     }
 
     return new NodeWithExprs(joinNode, outputExprs, 
getRowType().getFieldNames());
@@ -165,7 +167,6 @@ public class ImpalaJoinRel extends Join
     return inputPlanRel.getPlanNode(builder.build());
   }
 
-
   /**
    * Checks and adds null wrapping for expressions fed into the null producing 
side of an
    * outer join (hence, both sides for a Full Outer Join).
@@ -479,6 +480,48 @@ public class ImpalaJoinRel extends Join
 
   }
 
+  /**
+   * Register the conjuncts with the analyzer.  They are used for the
+   * valueTransfersGraph to determine if runtime filters can be created.
+   */
+  private void registerConjuncts(List<Expr> equiJoinExprs, Analyzer analyzer,
+      PlanNode joinNode) throws ImpalaException {
+
+    JoinOperator joinOp = getImpalaJoinOp();
+    if (joinOp == JoinOperator.RIGHT_OUTER_JOIN) {
+      List<TableRef> lhsTableRefs = getTableRefs(joinNode.getChild(0));
+      registerOuterJoinedTids(lhsTableRefs, analyzer, joinOp);
+    }
+    List<TableRef> rhsTableRefs = getTableRefs(joinNode.getChild(1));
+    if (joinOp == JoinOperator.LEFT_OUTER_JOIN) {
+      registerOuterJoinedTids(rhsTableRefs, analyzer, joinOp);
+    }
+    for (TableRef tableRef : rhsTableRefs) {
+      analyzer.registerOnClauseConjuncts(equiJoinExprs, tableRef);
+    }
+  }
+
+  private void registerOuterJoinedTids(List<TableRef> tableRefs, Analyzer 
analyzer,
+      JoinOperator joinOp) {
+    for (TableRef tableRef : tableRefs) {
+      analyzer.registerOuterJoinedTids(tableRef.getId().asList(), tableRef);
+      tableRef.setJoinOp(joinOp);
+    }
+  }
+
+  private List<TableRef> getTableRefs(PlanNode planNode) {
+    if (planNode instanceof ImpalaHdfsScanNode) {
+      ImpalaHdfsScanNode scanNode = (ImpalaHdfsScanNode) planNode;
+      return Lists.newArrayList(scanNode.getTableRef());
+    }
+
+    List<TableRef> tableRefs = new ArrayList<>();
+    for (PlanNode child : planNode.getChildren()) {
+      tableRefs.addAll(getTableRefs(child));
+    }
+    return tableRefs;
+  }
+
   private static class ConjunctInfo {
     public final Expr conjunct_;
     public final boolean isEquiJoin_;
diff --git 
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/phys/ImpalaHdfsScanNode.java
 
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/phys/ImpalaHdfsScanNode.java
index 49e28c4da..4f4400a5b 100644
--- 
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/phys/ImpalaHdfsScanNode.java
+++ 
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/phys/ImpalaHdfsScanNode.java
@@ -37,6 +37,8 @@ public class ImpalaHdfsScanNode extends HdfsScanNode {
 
   private final List<Expr> assignedConjuncts_;
 
+  private final TableRef hdfsTblRef_;
+
   public ImpalaHdfsScanNode(PlanNodeId id, TupleDescriptor tupleDesc,
       List<? extends FeFsPartition> partitions,
       TableRef hdfsTblRef, MultiAggregateInfo aggInfo, List<Expr> 
partConjuncts,
@@ -46,6 +48,11 @@ public class ImpalaHdfsScanNode extends HdfsScanNode {
         partConjuncts, isPartitionScanOnly);
     this.assignedConjuncts_ = assignedConjuncts;
     this.countStarSlot_ = countStarDescriptor;
+    this.hdfsTblRef_ = hdfsTblRef;
+  }
+
+  public TableRef getTableRef() {
+    return hdfsTblRef_;
   }
 
   @Override
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q14b.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q14b.test
index f37019ca5..3f8f7f3f9 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q14b.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q14b.test
@@ -337,6 +337,7 @@ PLAN-ROOT SINK
 |  |  |--48:SCAN HDFS [tpcds_partitioned_parquet_snap.item]
 |  |  |     HDFS partitions=1/1 files=1 size=33.54MB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.item_4.i_item_sk)
+|  |  |     runtime filters: RF039[min_max] -> 
tpcds_partitioned_parquet_snap.item_4.i_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=360.00K size=33.54MB
 |  |  |       columns: all
@@ -764,6 +765,7 @@ PLAN-ROOT SINK
 |  |--01:SCAN HDFS [tpcds_partitioned_parquet_snap.item]
 |  |     HDFS partitions=1/1 files=1 size=33.54MB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.item.i_item_sk)
+|  |     runtime filters: RF007[min_max] -> 
tpcds_partitioned_parquet_snap.item.i_item_sk
 |  |     stored statistics:
 |  |       table: rows=360.00K size=33.54MB
 |  |       columns: all
@@ -1424,6 +1426,7 @@ max-parallelism=90 segment-costs=[5878988, 847694218, 
220] cpu-comparison-result
 |  |  |  48:SCAN HDFS [tpcds_partitioned_parquet_snap.item, RANDOM]
 |  |  |     HDFS partitions=1/1 files=1 size=33.54MB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.item_4.i_item_sk)
+|  |  |     runtime filters: RF039[min_max] -> 
tpcds_partitioned_parquet_snap.item_4.i_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=360.00K size=33.54MB
 |  |  |       columns: all
@@ -2220,6 +2223,7 @@ max-parallelism=7 segment-costs=[201655276, 8568806] 
cpu-comparison-result=399 [
 |  |  01:SCAN HDFS [tpcds_partitioned_parquet_snap.item, RANDOM]
 |  |     HDFS partitions=1/1 files=1 size=33.54MB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.item.i_item_sk)
+|  |     runtime filters: RF007[min_max] -> 
tpcds_partitioned_parquet_snap.item.i_item_sk
 |  |     stored statistics:
 |  |       table: rows=360.00K size=33.54MB
 |  |       columns: all
@@ -3065,6 +3069,7 @@ max-parallelism=90 segment-costs=[5878988, 847694218, 
220] cpu-comparison-result
 |  |  |  48:SCAN HDFS [tpcds_partitioned_parquet_snap.item, RANDOM]
 |  |  |     HDFS partitions=1/1 files=1 size=33.54MB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.item_4.i_item_sk)
+|  |  |     runtime filters: RF039[min_max] -> 
tpcds_partitioned_parquet_snap.item_4.i_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=360.00K size=33.54MB
 |  |  |       columns: all
@@ -3869,6 +3874,7 @@ max-parallelism=7 segment-costs=[195386723]
 |  |  01:SCAN HDFS [tpcds_partitioned_parquet_snap.item, RANDOM]
 |  |     HDFS partitions=1/1 files=1 size=33.54MB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.item.i_item_sk)
+|  |     runtime filters: RF007[min_max] -> 
tpcds_partitioned_parquet_snap.item.i_item_sk
 |  |     stored statistics:
 |  |       table: rows=360.00K size=33.54MB
 |  |       columns: all
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q16.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q16.test
index 04a5b1824..e84aa851d 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q16.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q16.test
@@ -277,9 +277,9 @@ PLAN-ROOT SINK
    tuple-ids=3 row-size=32B cardinality=432.01M cost=2233480315
    in pipelines: 02(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=1.59GB Threads=61
-Per-Host Resource Estimates: Memory=3.94GB
-F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=1.59GB Threads=60
+Per-Host Resource Estimates: Memory=3.93GB
+F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.00MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[0, 0, 3] cpu-comparison-result=182 [max(1 
(self) vs 182 (sum children))]
 PLAN-ROOT SINK
@@ -290,49 +290,34 @@ PLAN-ROOT SINK
 |  order by: 
count(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number) ASC NULLS 
LAST
 |  mem-estimate=40B mem-reservation=0B thread-reservation=0
 |  tuple-ids=25 row-size=40B cardinality=1 cost=0
-|  in pipelines: 24(GETNEXT), 43(OPEN)
+|  in pipelines: 24(GETNEXT), 41(OPEN)
 |
-43:AGGREGATE [FINALIZE]
+41:AGGREGATE [FINALIZE]
 |  output: 
count:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
-|  in pipelines: 43(GETNEXT), 23(OPEN)
+|  in pipelines: 41(GETNEXT), 23(OPEN)
 |
-42:EXCHANGE [UNPARTITIONED]
+40:EXCHANGE [UNPARTITIONED]
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
 |  in pipelines: 23(GETNEXT)
 |
-F13:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=11.02MB mem-reservation=1.94MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[507568, 32648, 3] cpu-comparison-result=182 
[max(10 (self) vs 182 (sum children))]
+F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+Per-Instance Resources: mem-estimate=21.02MB mem-reservation=1.94MB 
thread-reservation=1
+max-parallelism=10 segment-costs=[26748002, 32648, 3] 
cpu-comparison-result=182 [max(150 (self) vs 182 (sum children))]
 23:AGGREGATE
 |  output: 
count(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=32648
-|  in pipelines: 23(GETNEXT), 41(OPEN)
-|
-41:AGGREGATE
-|  output: 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
-|  group by: tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number
-|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=155.47K cost=461690
-|  in pipelines: 41(GETNEXT), 02(OPEN)
-|
-40:EXCHANGE 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number)]
-|  mem-estimate=1.02MB mem-reservation=0B thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=155.47K cost=45878
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 23(GETNEXT), 22(OPEN)
 |
-F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=22.73MB mem-reservation=2.00MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[26748002, 480579] cpu-comparison-result=182 
[max(150 (self) vs 182 (sum children))]
-22:AGGREGATE [STREAMING]
+22:AGGREGATE
 |  output: sum(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
 |  group by: tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number
-|  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB 
thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
 |  tuple-ids=23 row-size=40B cardinality=155.47K cost=461690
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 22(GETNEXT), 02(OPEN)
 |
 21:HASH JOIN [INNER JOIN, BROADCAST]
 |  hash-table-id=00
@@ -342,7 +327,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N,17,19,21 row-size=108B cardinality=155.47K cost=175409
 |  in pipelines: 02(GETNEXT), 20(OPEN)
 |
-|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
+|--F14:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=2.95MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[23]
 |  JOIN BUILD
@@ -379,7 +364,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N,17,19 row-size=78B cardinality=574.03K cost=251253
 |  in pipelines: 02(GETNEXT), 18(OPEN)
 |
-|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
+|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=3.00MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[17005]
 |  JOIN BUILD
@@ -417,7 +402,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N,17 row-size=70B cardinality=574.03K cost=8104510
 |  in pipelines: 02(GETNEXT), 16(OPEN)
 |
-|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
+|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=23.11MB mem-reservation=18.00MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[664482]
 |  JOIN BUILD
@@ -456,7 +441,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N row-size=52B cardinality=31.19M cost=10768001
 |  in pipelines: 02(GETNEXT), 35(OPEN)
 |
-|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=192.16MB mem-reservation=68.00MB 
thread-reservation=1
 |  |  max-parallelism=10 segment-costs=[131661497, 43201699] 
cpu-comparison-result=20 [max(10 (self) vs 20 (sum children))]
 |  JOIN BUILD
@@ -513,7 +498,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  tuple-ids=3,16 row-size=44B cardinality=19.95M cost=114424244
 |  in pipelines: 02(GETNEXT), 32(OPEN)
 |
-|--F19:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales_1.cs_warehouse_sk,tpcds_partitioned_parquet_snap.catalog_sales_1.cs_order_number)]
 hosts=10 instances=20 (adjusted from 120)
+|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales_1.cs_warehouse_sk,tpcds_partitioned_parquet_snap.catalog_sales_1.cs_order_number)]
 hosts=10 instances=20 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=666.60MB mem-reservation=85.00MB 
thread-reservation=1 runtime-filters-memory=17.00MB
 |  |  max-parallelism=40 segment-costs=[1210512576, 199461612] 
cpu-comparison-result=120 [max(20 (self) vs 120 (sum children))]
 |  JOIN BUILD
@@ -552,7 +537,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  tuple-ids=5,15 row-size=24B cardinality=199.46M cost=87304347
 |  |  in pipelines: 03(GETNEXT), 29(OPEN)
 |  |
-|  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |--F19:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  Per-Instance Resources: mem-estimate=656.74MB 
mem-reservation=424.00MB thread-reservation=1 runtime-filters-memory=16.00MB
 |  |  |  max-parallelism=10 segment-costs=[50149824] cpu-comparison-result=120 
[max(10 (self) vs 120 (sum children))]
 |  |  JOIN BUILD
@@ -598,7 +583,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  |  tuple-ids=7,9,11,13 row-size=80B cardinality=21.53M cost=24294931
 |  |  |  in pipelines: 04(GETNEXT), 09(OPEN)
 |  |  |
-|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=24.27MB 
mem-reservation=24.25MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[23]
 |  |  |  JOIN BUILD
@@ -635,7 +620,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  |  tuple-ids=7,9,11 row-size=50B cardinality=79.51M cost=34799612
 |  |  |  in pipelines: 04(GETNEXT), 07(OPEN)
 |  |  |
-|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=24.32MB 
mem-reservation=24.25MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[17005]
 |  |  |  JOIN BUILD
@@ -673,7 +658,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  |  tuple-ids=7,9 row-size=42B cardinality=79.51M cost=34799612
 |  |  |  in pipelines: 04(GETNEXT), 05(OPEN)
 |  |  |
-|  |  |--F23:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=210.11MB 
mem-reservation=205.00MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[664482]
 |  |  |  JOIN BUILD
@@ -750,9 +735,9 @@ max-parallelism=340 segment-costs=[3346332402]
    tuple-ids=3 row-size=32B cardinality=432.01M cost=2233480315
    in pipelines: 02(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=1.59GB Threads=61
-Per-Host Resource Estimates: Memory=3.94GB
-F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=1.59GB Threads=60
+Per-Host Resource Estimates: Memory=3.93GB
+F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.00MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[0, 0, 3] cpu-comparison-result=182 [max(1 
(self) vs 182 (sum children))]
 PLAN-ROOT SINK
@@ -763,49 +748,34 @@ PLAN-ROOT SINK
 |  order by: 
count(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number) ASC NULLS 
LAST
 |  mem-estimate=40B mem-reservation=0B thread-reservation=0
 |  tuple-ids=25 row-size=40B cardinality=1 cost=0
-|  in pipelines: 24(GETNEXT), 43(OPEN)
+|  in pipelines: 24(GETNEXT), 41(OPEN)
 |
-43:AGGREGATE [FINALIZE]
+41:AGGREGATE [FINALIZE]
 |  output: 
count:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
-|  in pipelines: 43(GETNEXT), 23(OPEN)
+|  in pipelines: 41(GETNEXT), 23(OPEN)
 |
-42:EXCHANGE [UNPARTITIONED]
+40:EXCHANGE [UNPARTITIONED]
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
 |  in pipelines: 23(GETNEXT)
 |
-F13:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=11.02MB mem-reservation=1.94MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[507568, 32648, 3] cpu-comparison-result=182 
[max(10 (self) vs 182 (sum children))]
+F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+Per-Instance Resources: mem-estimate=21.02MB mem-reservation=1.94MB 
thread-reservation=1
+max-parallelism=10 segment-costs=[26748002, 32648, 3] 
cpu-comparison-result=182 [max(150 (self) vs 182 (sum children))]
 23:AGGREGATE
 |  output: 
count(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=32648
-|  in pipelines: 23(GETNEXT), 41(OPEN)
-|
-41:AGGREGATE
-|  output: 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
-|  group by: tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number
-|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=155.47K cost=461690
-|  in pipelines: 41(GETNEXT), 02(OPEN)
-|
-40:EXCHANGE 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number)]
-|  mem-estimate=1.02MB mem-reservation=0B thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=155.47K cost=45878
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 23(GETNEXT), 22(OPEN)
 |
-F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=22.73MB mem-reservation=2.00MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[26748002, 480579] cpu-comparison-result=182 
[max(150 (self) vs 182 (sum children))]
-22:AGGREGATE [STREAMING]
+22:AGGREGATE
 |  output: sum(tpcds_partitioned_parquet_snap.catalog_sales.cs_ext_ship_cost), 
sum(tpcds_partitioned_parquet_snap.catalog_sales.cs_net_profit)
 |  group by: tpcds_partitioned_parquet_snap.catalog_sales.cs_order_number
-|  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB 
thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
 |  tuple-ids=23 row-size=40B cardinality=155.47K cost=461690
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 22(GETNEXT), 02(OPEN)
 |
 21:HASH JOIN [INNER JOIN, BROADCAST]
 |  hash-table-id=00
@@ -815,7 +785,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N,17,19,21 row-size=108B cardinality=155.47K cost=175409
 |  in pipelines: 02(GETNEXT), 20(OPEN)
 |
-|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
+|--F14:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=2.95MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[23]
 |  JOIN BUILD
@@ -852,7 +822,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N,17,19 row-size=78B cardinality=574.03K cost=251253
 |  in pipelines: 02(GETNEXT), 18(OPEN)
 |
-|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
+|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=3.00MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[17005]
 |  JOIN BUILD
@@ -890,7 +860,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N,17 row-size=70B cardinality=574.03K cost=8104510
 |  in pipelines: 02(GETNEXT), 16(OPEN)
 |
-|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
+|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=23.11MB mem-reservation=18.00MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[664482]
 |  JOIN BUILD
@@ -929,7 +899,7 @@ max-parallelism=10 segment-costs=[26748002, 480579] 
cpu-comparison-result=182 [m
 |  tuple-ids=3,16,2N row-size=52B cardinality=31.19M cost=10768001
 |  in pipelines: 02(GETNEXT), 35(OPEN)
 |
-|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_returns.cr_order_number)] hosts=10 
instances=10 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=192.16MB mem-reservation=68.00MB 
thread-reservation=1
 |  |  max-parallelism=10 segment-costs=[131661497, 43201699] 
cpu-comparison-result=20 [max(10 (self) vs 20 (sum children))]
 |  JOIN BUILD
@@ -986,7 +956,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  tuple-ids=3,16 row-size=44B cardinality=19.95M cost=114424244
 |  in pipelines: 02(GETNEXT), 32(OPEN)
 |
-|--F19:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales_1.cs_warehouse_sk,tpcds_partitioned_parquet_snap.catalog_sales_1.cs_order_number)]
 hosts=10 instances=20 (adjusted from 120)
+|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.catalog_sales_1.cs_warehouse_sk,tpcds_partitioned_parquet_snap.catalog_sales_1.cs_order_number)]
 hosts=10 instances=20 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=666.60MB mem-reservation=85.00MB 
thread-reservation=1 runtime-filters-memory=17.00MB
 |  |  max-parallelism=40 segment-costs=[1210512576, 199461612] 
cpu-comparison-result=120 [max(20 (self) vs 120 (sum children))]
 |  JOIN BUILD
@@ -1025,7 +995,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  tuple-ids=5,15 row-size=24B cardinality=199.46M cost=87304347
 |  |  in pipelines: 03(GETNEXT), 29(OPEN)
 |  |
-|  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |--F19:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  Per-Instance Resources: mem-estimate=656.74MB 
mem-reservation=424.00MB thread-reservation=1 runtime-filters-memory=16.00MB
 |  |  |  max-parallelism=10 segment-costs=[50149824] cpu-comparison-result=120 
[max(10 (self) vs 120 (sum children))]
 |  |  JOIN BUILD
@@ -1071,7 +1041,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  |  tuple-ids=7,9,11,13 row-size=80B cardinality=21.53M cost=24294931
 |  |  |  in pipelines: 04(GETNEXT), 09(OPEN)
 |  |  |
-|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=24.27MB 
mem-reservation=24.25MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[23]
 |  |  |  JOIN BUILD
@@ -1108,7 +1078,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  |  tuple-ids=7,9,11 row-size=50B cardinality=79.51M cost=34799612
 |  |  |  in pipelines: 04(GETNEXT), 07(OPEN)
 |  |  |
-|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=24.32MB 
mem-reservation=24.25MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[17005]
 |  |  |  JOIN BUILD
@@ -1146,7 +1116,7 @@ max-parallelism=40 segment-costs=[303083812]
 |  |  |  tuple-ids=7,9 row-size=42B cardinality=79.51M cost=34799612
 |  |  |  in pipelines: 04(GETNEXT), 05(OPEN)
 |  |  |
-|  |  |--F23:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=210.11MB 
mem-reservation=205.00MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[664482]
 |  |  |  JOIN BUILD
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q35a.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q35a.test
index 29914403e..9fca348f8 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q35a.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q35a.test
@@ -246,7 +246,7 @@ PLAN-ROOT SINK
 05:SCAN HDFS [tpcds_partitioned_parquet_snap.store_sales]
    HDFS partitions=1824/1824 files=1824 size=389.90GB
    predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk)
-   runtime filters: RF003[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF002[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_sold_date_sk
+   runtime filters: RF003[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF001[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF002[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_sold_date_sk, RF000[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk
    stored statistics:
      table: rows=8.64G size=389.90GB
      partitions: 1824/1824 rows=8.64G
@@ -257,8 +257,8 @@ PLAN-ROOT SINK
    tuple-ids=6 row-size=8B cardinality=55.89M(filtered from 863.99M) 
cost=80096557
    in pipelines: 05(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=232.06MB Threads=23
-Per-Host Resource Estimates: Memory=546MB
+Max Per-Host Resource Reservation: Memory=248.06MB Threads=23
+Per-Host Resource Estimates: Memory=562MB
 F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.10MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[1844] cpu-comparison-result=81 [max(1 
(self) vs 81 (sum children))]
@@ -570,7 +570,7 @@ max-parallelism=10 segment-costs=[47411809, 18510291] 
cpu-comparison-result=81 [
 |  in pipelines: 05(GETNEXT)
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=10 instances=30 (adjusted from 120)
-Per-Host Shared Resources: mem-estimate=5.00MB mem-reservation=5.00MB 
thread-reservation=0 runtime-filters-memory=5.00MB
+Per-Host Shared Resources: mem-estimate=21.00MB mem-reservation=21.00MB 
thread-reservation=0 runtime-filters-memory=21.00MB
 Per-Instance Resources: mem-estimate=17.09MB mem-reservation=4.00MB 
thread-reservation=1
 max-parallelism=30 segment-costs=[234146885]
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -614,7 +614,7 @@ max-parallelism=30 segment-costs=[234146885]
 05:SCAN HDFS [tpcds_partitioned_parquet_snap.store_sales, RANDOM]
    HDFS partitions=1824/1824 files=1824 size=389.90GB
    predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk)
-   runtime filters: RF003[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF002[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_sold_date_sk
+   runtime filters: RF003[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF001[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF002[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_sold_date_sk, RF000[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk
    stored statistics:
      table: rows=8.64G size=389.90GB
      partitions: 1824/1824 rows=8.64G
@@ -625,8 +625,8 @@ max-parallelism=30 segment-costs=[234146885]
    tuple-ids=6 row-size=8B cardinality=55.89M(filtered from 863.99M) 
cost=80096557
    in pipelines: 05(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=232.06MB Threads=23
-Per-Host Resource Estimates: Memory=546MB
+Max Per-Host Resource Reservation: Memory=248.06MB Threads=23
+Per-Host Resource Estimates: Memory=562MB
 F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.10MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[1844] cpu-comparison-result=81 [max(1 
(self) vs 81 (sum children))]
@@ -938,7 +938,7 @@ max-parallelism=10 segment-costs=[47411809, 18510291] 
cpu-comparison-result=81 [
 |  in pipelines: 05(GETNEXT)
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=10 instances=30 (adjusted from 120)
-Per-Host Shared Resources: mem-estimate=5.00MB mem-reservation=5.00MB 
thread-reservation=0 runtime-filters-memory=5.00MB
+Per-Host Shared Resources: mem-estimate=21.00MB mem-reservation=21.00MB 
thread-reservation=0 runtime-filters-memory=21.00MB
 Per-Instance Resources: mem-estimate=17.09MB mem-reservation=4.00MB 
thread-reservation=1
 max-parallelism=30 segment-costs=[234146885]
 07:HASH JOIN [INNER JOIN, BROADCAST]
@@ -982,7 +982,7 @@ max-parallelism=30 segment-costs=[234146885]
 05:SCAN HDFS [tpcds_partitioned_parquet_snap.store_sales, RANDOM]
    HDFS partitions=1824/1824 files=1824 size=389.90GB
    predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk)
-   runtime filters: RF003[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF002[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_sold_date_sk
+   runtime filters: RF003[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF001[min_max] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF002[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_sold_date_sk, RF000[bloom] -> 
tpcds_partitioned_parquet_snap.store_sales.ss_customer_sk
    stored statistics:
      table: rows=8.64G size=389.90GB
      partitions: 1824/1824 rows=8.64G
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q40.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q40.test
index 832efbfb9..fa4e1f2e0 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q40.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q40.test
@@ -119,6 +119,7 @@ PLAN-ROOT SINK
 |
 |--01:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns]
 |     HDFS partitions=2060/2060 files=2060 size=32.77GB
+|     runtime filters: RF005[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |     stored statistics:
 |       table: rows=432.02M size=32.77GB
 |       partitions: 2060/2060 rows=432.02M
@@ -140,7 +141,7 @@ PLAN-ROOT SINK
    tuple-ids=0 row-size=24B cardinality=431.79M(filtered from 4.32G) 
cost=1493018949
    in pipelines: 00(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=720.27MB Threads=50
+Max Per-Host Resource Reservation: Memory=721.27MB Threads=50
 Per-Host Resource Estimates: Memory=4.67GB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.37MB mem-reservation=4.00MB 
thread-reservation=1
@@ -320,10 +321,12 @@ max-parallelism=320 segment-costs=[3195695735, 
1184742199] cpu-comparison-result
 |  |  in pipelines: 01(GETNEXT)
 |  |
 |  F01:PLAN FRAGMENT [RANDOM] hosts=10 instances=80 (adjusted from 120)
+|  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  Per-Instance Resources: mem-estimate=23.03MB mem-reservation=32.00KB 
thread-reservation=1
 |  max-parallelism=80 segment-costs=[767262175]
 |  01:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |     HDFS partitions=2060/2060 files=2060 size=32.77GB
+|     runtime filters: RF005[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |     stored statistics:
 |       table: rows=432.02M size=32.77GB
 |       partitions: 2060/2060 rows=432.02M
@@ -354,7 +357,7 @@ max-parallelism=240 segment-costs=[2382855700]
    tuple-ids=0 row-size=24B cardinality=431.79M(filtered from 4.32G) 
cost=1493018949
    in pipelines: 00(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=720.27MB Threads=50
+Max Per-Host Resource Reservation: Memory=721.27MB Threads=50
 Per-Host Resource Estimates: Memory=4.67GB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.37MB mem-reservation=4.00MB 
thread-reservation=1
@@ -534,10 +537,12 @@ max-parallelism=320 segment-costs=[3195695735, 
1184742199] cpu-comparison-result
 |  |  in pipelines: 01(GETNEXT)
 |  |
 |  F01:PLAN FRAGMENT [RANDOM] hosts=10 instances=80 (adjusted from 120)
+|  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  Per-Instance Resources: mem-estimate=23.03MB mem-reservation=32.00KB 
thread-reservation=1
 |  max-parallelism=80 segment-costs=[767262175]
 |  01:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |     HDFS partitions=2060/2060 files=2060 size=32.77GB
+|     runtime filters: RF005[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF004[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |     stored statistics:
 |       table: rows=432.02M size=32.77GB
 |       partitions: 2060/2060 rows=432.02M
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q75.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q75.test
index 5ebffc162..5f120c93f 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q75.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q75.test
@@ -144,6 +144,7 @@ PLAN-ROOT SINK
 |  |  |--46:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns]
 |  |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk)
+|  |  |     runtime filters: RF029[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk, RF028[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=216.00M size=16.74GB
 |  |  |       partitions: 2114/2114 rows=216.00M
@@ -228,6 +229,7 @@ PLAN-ROOT SINK
 |  |  |--38:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns]
 |  |  |     HDFS partitions=2004/2004 files=2004 size=48.14GB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk)
+|  |  |     runtime filters: RF025[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk, RF024[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=863.99M size=48.14GB
 |  |  |       partitions: 2004/2004 rows=863.99M
@@ -302,6 +304,7 @@ PLAN-ROOT SINK
 |  |--31:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns]
 |  |     HDFS partitions=2060/2060 files=2060 size=32.77GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk)
+|  |     runtime filters: RF021[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk, RF020[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk
 |  |     stored statistics:
 |  |       table: rows=432.02M size=32.77GB
 |  |       partitions: 2060/2060 rows=432.02M
@@ -396,6 +399,7 @@ PLAN-ROOT SINK
 |  |--20:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns]
 |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.web_returns.wr_item_sk)
+|  |     runtime filters: RF017[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk, RF016[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk
 |  |     stored statistics:
 |  |       table: rows=216.00M size=16.74GB
 |  |       partitions: 2114/2114 rows=216.00M
@@ -481,6 +485,7 @@ PLAN-ROOT SINK
 |  |--12:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns]
 |  |     HDFS partitions=2004/2004 files=2004 size=48.14GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_returns.sr_item_sk)
+|  |     runtime filters: RF013[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk, RF012[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk
 |  |     stored statistics:
 |  |       table: rows=863.99M size=48.14GB
 |  |       partitions: 2004/2004 rows=863.99M
@@ -556,6 +561,7 @@ PLAN-ROOT SINK
 |--05:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns]
 |     HDFS partitions=2060/2060 files=2060 size=32.77GB
 |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk)
+|     runtime filters: RF009[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF008[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |     stored statistics:
 |       table: rows=432.02M size=32.77GB
 |       partitions: 2060/2060 rows=432.02M
@@ -599,8 +605,8 @@ PLAN-ROOT SINK
    tuple-ids=0 row-size=24B cardinality=430.77M(filtered from 4.32G) 
cost=304148590
    in pipelines: 02(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=8.26GB Threads=139
-Per-Host Resource Estimates: Memory=33.63GB
+Max Per-Host Resource Reservation: Memory=8.27GB Threads=139
+Per-Host Resource Estimates: Memory=33.64GB
 F34:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.78MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[1038] cpu-comparison-result=330 [max(1 
(self) vs 330 (sum children))]
@@ -751,11 +757,13 @@ max-parallelism=510 segment-costs=[1930301193, 
5031055712, 199] cpu-comparison-r
 |  |  |  |  in pipelines: 46(GETNEXT)
 |  |  |  |
 |  |  |  F29:PLAN FRAGMENT [RANDOM] hosts=10 instances=10 (adjusted from 120)
+|  |  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  |  Per-Instance Resources: mem-estimate=16.09MB mem-reservation=256.00KB 
thread-reservation=1
 |  |  |  max-parallelism=10 segment-costs=[69911429]
 |  |  |  46:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns, RANDOM]
 |  |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk)
+|  |  |     runtime filters: RF029[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk, RF028[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=216.00M size=16.74GB
 |  |  |       partitions: 2114/2114 rows=216.00M
@@ -901,11 +909,13 @@ max-parallelism=510 segment-costs=[1930301193, 
5031055712, 199] cpu-comparison-r
 |  |  |  |  in pipelines: 38(GETNEXT)
 |  |  |  |
 |  |  |  F23:PLAN FRAGMENT [RANDOM] hosts=10 instances=30 (adjusted from 120)
+|  |  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  |  Per-Instance Resources: mem-estimate=16.09MB mem-reservation=512.00KB 
thread-reservation=1
 |  |  |  max-parallelism=30 segment-costs=[279638560]
 |  |  |  38:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns, RANDOM]
 |  |  |     HDFS partitions=2004/2004 files=2004 size=48.14GB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk)
+|  |  |     runtime filters: RF025[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk, RF024[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=863.99M size=48.14GB
 |  |  |       partitions: 2004/2004 rows=863.99M
@@ -1026,11 +1036,13 @@ max-parallelism=510 segment-costs=[1930301193, 
5031055712, 199] cpu-comparison-r
 |  |  |  in pipelines: 31(GETNEXT)
 |  |  |
 |  |  F19:PLAN FRAGMENT [RANDOM] hosts=10 instances=20 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=16.09MB mem-reservation=32.00KB 
thread-reservation=1
 |  |  max-parallelism=20 segment-costs=[139826618]
 |  |  31:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |  |     HDFS partitions=2060/2060 files=2060 size=32.77GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk)
+|  |     runtime filters: RF021[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk, RF020[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk
 |  |     stored statistics:
 |  |       table: rows=432.02M size=32.77GB
 |  |       partitions: 2060/2060 rows=432.02M
@@ -1201,11 +1213,13 @@ max-parallelism=120 segment-costs=[1621201806, 
2903173906, 714011565] cpu-compar
 |  |  |  in pipelines: 20(GETNEXT)
 |  |  |
 |  |  F12:PLAN FRAGMENT [RANDOM] hosts=10 instances=10 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=16.09MB mem-reservation=256.00KB 
thread-reservation=1
 |  |  max-parallelism=10 segment-costs=[69911429]
 |  |  20:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns, RANDOM]
 |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.web_returns.wr_item_sk)
+|  |     runtime filters: RF017[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk, RF016[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk
 |  |     stored statistics:
 |  |       table: rows=216.00M size=16.74GB
 |  |       partitions: 2114/2114 rows=216.00M
@@ -1352,11 +1366,13 @@ max-parallelism=120 segment-costs=[4504336785, 
611899758] cpu-comparison-result=
 |  |  |  in pipelines: 12(GETNEXT)
 |  |  |
 |  |  F06:PLAN FRAGMENT [RANDOM] hosts=10 instances=30 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=16.09MB mem-reservation=512.00KB 
thread-reservation=1
 |  |  max-parallelism=30 segment-costs=[279638560]
 |  |  12:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns, RANDOM]
 |  |     HDFS partitions=2004/2004 files=2004 size=48.14GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_returns.sr_item_sk)
+|  |     runtime filters: RF013[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk, RF012[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk
 |  |     stored statistics:
 |  |       table: rows=863.99M size=48.14GB
 |  |       partitions: 2004/2004 rows=863.99M
@@ -1478,11 +1494,13 @@ max-parallelism=120 segment-costs=[4504336785, 
611899758] cpu-comparison-result=
 |  |  in pipelines: 05(GETNEXT)
 |  |
 |  F02:PLAN FRAGMENT [RANDOM] hosts=10 instances=20 (adjusted from 120)
+|  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  Per-Instance Resources: mem-estimate=16.09MB mem-reservation=32.00KB 
thread-reservation=1
 |  max-parallelism=20 segment-costs=[139826618]
 |  05:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |     HDFS partitions=2060/2060 files=2060 size=32.77GB
 |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk)
+|     runtime filters: RF009[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF008[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |     stored statistics:
 |       table: rows=432.02M size=32.77GB
 |       partitions: 2060/2060 rows=432.02M
@@ -1543,7 +1561,7 @@ max-parallelism=120 segment-costs=[4504336785, 611899758] 
cpu-comparison-result=
    tuple-ids=0 row-size=24B cardinality=430.77M(filtered from 4.32G) 
cost=304148590
    in pipelines: 02(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=7.29GB Threads=285
+Max Per-Host Resource Reservation: Memory=7.30GB Threads=285
 Per-Host Resource Estimates: Memory=27.60GB
 F40:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.78MB mem-reservation=4.00MB 
thread-reservation=1
@@ -1694,11 +1712,13 @@ max-parallelism=510 segment-costs=[1930301193, 
5031055712, 199] cpu-comparison-r
 |  |  |  |  in pipelines: 46(GETNEXT)
 |  |  |  |
 |  |  |  F34:PLAN FRAGMENT [RANDOM] hosts=10 instances=20 (adjusted from 120)
+|  |  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  |  Per-Instance Resources: mem-estimate=27.25MB mem-reservation=256.00KB 
thread-reservation=1
 |  |  |  max-parallelism=20 segment-costs=[107228054]
 |  |  |  46:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns, RANDOM]
 |  |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk)
+|  |  |     runtime filters: RF029[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk, RF028[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns_0.wr_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=216.00M size=16.74GB
 |  |  |       partitions: 2114/2114 rows=216.00M
@@ -1852,11 +1872,13 @@ max-parallelism=510 segment-costs=[1930301193, 
5031055712, 199] cpu-comparison-r
 |  |  |  |  in pipelines: 38(GETNEXT)
 |  |  |  |
 |  |  |  F27:PLAN FRAGMENT [RANDOM] hosts=10 instances=50 (adjusted from 120)
+|  |  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  |  Per-Instance Resources: mem-estimate=27.25MB mem-reservation=512.00KB 
thread-reservation=1
 |  |  |  max-parallelism=50 segment-costs=[428901235]
 |  |  |  38:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns, RANDOM]
 |  |  |     HDFS partitions=2004/2004 files=2004 size=48.14GB
 |  |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk)
+|  |  |     runtime filters: RF025[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk, RF024[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns_0.sr_item_sk
 |  |  |     stored statistics:
 |  |  |       table: rows=863.99M size=48.14GB
 |  |  |       partitions: 2004/2004 rows=863.99M
@@ -1986,11 +2008,13 @@ max-parallelism=510 segment-costs=[1930301193, 
5031055712, 199] cpu-comparison-r
 |  |  |  in pipelines: 31(GETNEXT)
 |  |  |
 |  |  F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=30 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=27.25MB mem-reservation=32.00KB 
thread-reservation=1
 |  |  max-parallelism=30 segment-costs=[214461873]
 |  |  31:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |  |     HDFS partitions=2060/2060 files=2060 size=32.77GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk)
+|  |     runtime filters: RF021[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk, RF020[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns_0.cr_item_sk
 |  |     stored statistics:
 |  |       table: rows=432.02M size=32.77GB
 |  |       partitions: 2060/2060 rows=432.02M
@@ -2169,11 +2193,13 @@ max-parallelism=120 segment-costs=[1621201806, 
2084965850, 714011565] cpu-compar
 |  |  |  in pipelines: 20(GETNEXT)
 |  |  |
 |  |  F14:PLAN FRAGMENT [RANDOM] hosts=10 instances=20 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=27.25MB mem-reservation=256.00KB 
thread-reservation=1
 |  |  max-parallelism=20 segment-costs=[107228054]
 |  |  20:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns, RANDOM]
 |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.web_returns.wr_item_sk)
+|  |     runtime filters: RF017[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk, RF016[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk
 |  |     stored statistics:
 |  |       table: rows=216.00M size=16.74GB
 |  |       partitions: 2114/2114 rows=216.00M
@@ -2328,11 +2354,13 @@ max-parallelism=120 segment-costs=[3159838554, 
611899758] cpu-comparison-result=
 |  |  |  in pipelines: 12(GETNEXT)
 |  |  |
 |  |  F07:PLAN FRAGMENT [RANDOM] hosts=10 instances=50 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=27.25MB mem-reservation=512.00KB 
thread-reservation=1
 |  |  max-parallelism=50 segment-costs=[428901235]
 |  |  12:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns, RANDOM]
 |  |     HDFS partitions=2004/2004 files=2004 size=48.14GB
 |  |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.store_returns.sr_item_sk)
+|  |     runtime filters: RF013[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk, RF012[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk
 |  |     stored statistics:
 |  |       table: rows=863.99M size=48.14GB
 |  |       partitions: 2004/2004 rows=863.99M
@@ -2463,11 +2491,13 @@ max-parallelism=120 segment-costs=[3159838554, 
611899758] cpu-comparison-result=
 |  |  in pipelines: 05(GETNEXT)
 |  |
 |  F02:PLAN FRAGMENT [RANDOM] hosts=10 instances=30 (adjusted from 120)
+|  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  Per-Instance Resources: mem-estimate=27.25MB mem-reservation=32.00KB 
thread-reservation=1
 |  max-parallelism=30 segment-costs=[214461873]
 |  05:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |     HDFS partitions=2060/2060 files=2060 size=32.77GB
 |     predicates: 
is_not_null_pred(tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk)
+|     runtime filters: RF009[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF008[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |     stored statistics:
 |       table: rows=432.02M size=32.77GB
 |       partitions: 2060/2060 rows=432.02M
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q80.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q80.test
index b9e00427f..5fa72ac2f 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q80.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q80.test
@@ -234,6 +234,7 @@ PLAN-ROOT SINK
 |  |
 |  |--27:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns]
 |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
+|  |     runtime filters: RF023[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk, RF022[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk
 |  |     stored statistics:
 |  |       table: rows=216.00M size=16.74GB
 |  |       partitions: 2114/2114 rows=216.00M
@@ -356,6 +357,7 @@ PLAN-ROOT SINK
 |  |
 |  |--15:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns]
 |  |     HDFS partitions=2060/2060 files=2060 size=32.77GB
+|  |     runtime filters: RF015[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF014[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |  |     stored statistics:
 |  |       table: rows=432.02M size=32.77GB
 |  |       partitions: 2060/2060 rows=432.02M
@@ -474,6 +476,7 @@ PLAN-ROOT SINK
 |
 |--03:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns]
 |     HDFS partitions=2004/2004 files=2004 size=48.14GB
+|     runtime filters: RF007[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk, RF006[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk
 |     stored statistics:
 |       table: rows=863.99M size=48.14GB
 |       partitions: 2004/2004 rows=863.99M
@@ -496,7 +499,7 @@ PLAN-ROOT SINK
    in pipelines: 02(GETNEXT)
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=1.91GB Threads=145
-Per-Host Resource Estimates: Memory=13.19GB
+Per-Host Resource Estimates: Memory=13.20GB
 F27:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.07MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[539] cpu-comparison-result=674 [max(1 
(self) vs 674 (sum children))]
@@ -761,10 +764,12 @@ max-parallelism=80 segment-costs=[74437, 3952483, 3622, 
509107, 1136665] cpu-com
 |  |  |  in pipelines: 27(GETNEXT)
 |  |  |
 |  |  F18:PLAN FRAGMENT [RANDOM] hosts=10 instances=50 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=23.50MB mem-reservation=256.00KB 
thread-reservation=1
 |  |  max-parallelism=50 segment-costs=[451704816]
 |  |  27:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns, RANDOM]
 |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
+|  |     runtime filters: RF023[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk, RF022[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk
 |  |     stored statistics:
 |  |       table: rows=216.00M size=16.74GB
 |  |       partitions: 2114/2114 rows=216.00M
@@ -992,10 +997,12 @@ max-parallelism=80 segment-costs=[74437, 3952483, 3622, 
509107, 1136665] cpu-com
 |  |  |  in pipelines: 15(GETNEXT)
 |  |  |
 |  |  F09:PLAN FRAGMENT [RANDOM] hosts=10 instances=100 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=23.50MB mem-reservation=32.00KB 
thread-reservation=1
 |  |  max-parallelism=100 segment-costs=[903433931]
 |  |  15:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |  |     HDFS partitions=2060/2060 files=2060 size=32.77GB
+|  |     runtime filters: RF015[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF014[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |  |     stored statistics:
 |  |       table: rows=432.02M size=32.77GB
 |  |       partitions: 2060/2060 rows=432.02M
@@ -1219,10 +1226,12 @@ max-parallelism=390 segment-costs=[3885151565, 440125] 
cpu-comparison-result=247
 |  |  in pipelines: 03(GETNEXT)
 |  |
 |  F01:PLAN FRAGMENT [RANDOM] hosts=10 instances=120
+|  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  Per-Instance Resources: mem-estimate=23.50MB mem-reservation=512.00KB 
thread-reservation=1
 |  max-parallelism=190 segment-costs=[1806773027]
 |  03:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns, RANDOM]
 |     HDFS partitions=2004/2004 files=2004 size=48.14GB
+|     runtime filters: RF007[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk, RF006[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk
 |     stored statistics:
 |       table: rows=863.99M size=48.14GB
 |       partitions: 2004/2004 rows=863.99M
@@ -1254,7 +1263,7 @@ max-parallelism=630 segment-costs=[6205817173]
    in pipelines: 02(GETNEXT)
 ---- PARALLELPLANS
 Max Per-Host Resource Reservation: Memory=1.91GB Threads=145
-Per-Host Resource Estimates: Memory=13.19GB
+Per-Host Resource Estimates: Memory=13.20GB
 F27:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.07MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[539] cpu-comparison-result=674 [max(1 
(self) vs 674 (sum children))]
@@ -1519,10 +1528,12 @@ max-parallelism=80 segment-costs=[74437, 3952483, 3622, 
509107, 1136665] cpu-com
 |  |  |  in pipelines: 27(GETNEXT)
 |  |  |
 |  |  F18:PLAN FRAGMENT [RANDOM] hosts=10 instances=50 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=23.50MB mem-reservation=256.00KB 
thread-reservation=1
 |  |  max-parallelism=50 segment-costs=[451704816]
 |  |  27:SCAN HDFS [tpcds_partitioned_parquet_snap.web_returns, RANDOM]
 |  |     HDFS partitions=2114/2114 files=2114 size=16.74GB
+|  |     runtime filters: RF023[min_max] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk, RF022[bloom] -> 
tpcds_partitioned_parquet_snap.web_returns.wr_item_sk
 |  |     stored statistics:
 |  |       table: rows=216.00M size=16.74GB
 |  |       partitions: 2114/2114 rows=216.00M
@@ -1750,10 +1761,12 @@ max-parallelism=80 segment-costs=[74437, 3952483, 3622, 
509107, 1136665] cpu-com
 |  |  |  in pipelines: 15(GETNEXT)
 |  |  |
 |  |  F09:PLAN FRAGMENT [RANDOM] hosts=10 instances=100 (adjusted from 120)
+|  |  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  |  Per-Instance Resources: mem-estimate=23.50MB mem-reservation=32.00KB 
thread-reservation=1
 |  |  max-parallelism=100 segment-costs=[903433931]
 |  |  15:SCAN HDFS [tpcds_partitioned_parquet_snap.catalog_returns, RANDOM]
 |  |     HDFS partitions=2060/2060 files=2060 size=32.77GB
+|  |     runtime filters: RF015[min_max] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk, RF014[bloom] -> 
tpcds_partitioned_parquet_snap.catalog_returns.cr_item_sk
 |  |     stored statistics:
 |  |       table: rows=432.02M size=32.77GB
 |  |       partitions: 2060/2060 rows=432.02M
@@ -1977,10 +1990,12 @@ max-parallelism=390 segment-costs=[3885151565, 440125] 
cpu-comparison-result=247
 |  |  in pipelines: 03(GETNEXT)
 |  |
 |  F01:PLAN FRAGMENT [RANDOM] hosts=10 instances=120
+|  Per-Host Shared Resources: mem-estimate=1.00MB mem-reservation=1.00MB 
thread-reservation=0 runtime-filters-memory=1.00MB
 |  Per-Instance Resources: mem-estimate=23.50MB mem-reservation=512.00KB 
thread-reservation=1
 |  max-parallelism=190 segment-costs=[1806773027]
 |  03:SCAN HDFS [tpcds_partitioned_parquet_snap.store_returns, RANDOM]
 |     HDFS partitions=2004/2004 files=2004 size=48.14GB
+|     runtime filters: RF007[min_max] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk, RF006[bloom] -> 
tpcds_partitioned_parquet_snap.store_returns.sr_item_sk
 |     stored statistics:
 |       table: rows=863.99M size=48.14GB
 |       partitions: 2004/2004 rows=863.99M
diff --git 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q94.test
 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q94.test
index c63154565..cb1326236 100644
--- 
a/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q94.test
+++ 
b/testdata/workloads/functional-planner/queries/PlannerTest/calcite_tpcds/tpcds-q94.test
@@ -277,9 +277,9 @@ PLAN-ROOT SINK
    tuple-ids=3 row-size=32B cardinality=216.00M cost=1116703438
    in pipelines: 02(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=1.02GB Threads=53
-Per-Host Resource Estimates: Memory=2.10GB
-F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=1.02GB Threads=52
+Per-Host Resource Estimates: Memory=2.09GB
+F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.00MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[0, 0, 3] cpu-comparison-result=150 [max(1 
(self) vs 150 (sum children))]
 PLAN-ROOT SINK
@@ -290,49 +290,34 @@ PLAN-ROOT SINK
 |  order by: count(tpcds_partitioned_parquet_snap.web_sales.ws_order_number) 
ASC NULLS LAST
 |  mem-estimate=40B mem-reservation=0B thread-reservation=0
 |  tuple-ids=25 row-size=40B cardinality=1 cost=0
-|  in pipelines: 24(GETNEXT), 43(OPEN)
+|  in pipelines: 24(GETNEXT), 41(OPEN)
 |
-43:AGGREGATE [FINALIZE]
+41:AGGREGATE [FINALIZE]
 |  output: 
count:merge(tpcds_partitioned_parquet_snap.web_sales.ws_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
-|  in pipelines: 43(GETNEXT), 23(OPEN)
+|  in pipelines: 41(GETNEXT), 23(OPEN)
 |
-42:EXCHANGE [UNPARTITIONED]
+40:EXCHANGE [UNPARTITIONED]
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
 |  in pipelines: 23(GETNEXT)
 |
-F13:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_sales.ws_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=10.59MB mem-reservation=1.94MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[136076, 8752, 3] cpu-comparison-result=150 
[max(10 (self) vs 150 (sum children))]
+F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+Per-Instance Resources: mem-estimate=21.02MB mem-reservation=1.94MB 
thread-reservation=1
+max-parallelism=10 segment-costs=[11242263, 8752, 3] cpu-comparison-result=150 
[max(150 (self) vs 142 (sum children))]
 23:AGGREGATE
 |  output: count(tpcds_partitioned_parquet_snap.web_sales.ws_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=8752
-|  in pipelines: 23(GETNEXT), 41(OPEN)
-|
-41:AGGREGATE
-|  output: 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
-|  group by: tpcds_partitioned_parquet_snap.web_sales.ws_order_number
-|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=41.68K cost=123777
-|  in pipelines: 41(GETNEXT), 02(OPEN)
-|
-40:EXCHANGE [HASH(tpcds_partitioned_parquet_snap.web_sales.ws_order_number)]
-|  mem-estimate=602.81KB mem-reservation=0B thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=41.68K cost=12299
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 23(GETNEXT), 22(OPEN)
 |
-F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=22.73MB mem-reservation=2.00MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[11242263, 128841] cpu-comparison-result=150 
[max(150 (self) vs 142 (sum children))]
-22:AGGREGATE [STREAMING]
+22:AGGREGATE
 |  output: sum(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
 |  group by: tpcds_partitioned_parquet_snap.web_sales.ws_order_number
-|  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB 
thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
 |  tuple-ids=23 row-size=40B cardinality=41.68K cost=123777
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 22(GETNEXT), 02(OPEN)
 |
 21:HASH JOIN [INNER JOIN, BROADCAST]
 |  hash-table-id=00
@@ -342,7 +327,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N,17,19,21 row-size=98B cardinality=41.68K cost=72668
 |  in pipelines: 02(GETNEXT), 20(OPEN)
 |
-|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
+|--F14:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=2.95MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[21]
 |  JOIN BUILD
@@ -380,7 +365,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N,17,19 row-size=78B cardinality=253.86K cost=111116
 |  in pipelines: 02(GETNEXT), 18(OPEN)
 |
-|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
+|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=3.00MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[17005]
 |  JOIN BUILD
@@ -418,7 +403,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N,17 row-size=70B cardinality=253.86K cost=3584190
 |  in pipelines: 02(GETNEXT), 16(OPEN)
 |
-|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
+|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=23.11MB mem-reservation=18.00MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[664482]
 |  JOIN BUILD
@@ -457,7 +442,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N row-size=52B cardinality=13.79M cost=4550064
 |  in pipelines: 02(GETNEXT), 35(OPEN)
 |
-|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=96.08MB mem-reservation=68.00MB 
thread-reservation=1
 |  |  max-parallelism=10 segment-costs=[65828979, 21600269] 
cpu-comparison-result=10 [max(10 (self) vs 10 (sum children))]
 |  JOIN BUILD
@@ -514,7 +499,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  tuple-ids=3,16 row-size=44B cardinality=7.99M cost=56851768
 |  in pipelines: 02(GETNEXT), 32(OPEN)
 |
-|--F19:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_sales_1.ws_warehouse_sk,tpcds_partitioned_parquet_snap.web_sales_1.ws_order_number)]
 hosts=10 instances=20 (adjusted from 120)
+|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_sales_1.ws_warehouse_sk,tpcds_partitioned_parquet_snap.web_sales_1.ws_order_number)]
 hosts=10 instances=20 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=231.03MB mem-reservation=85.00MB 
thread-reservation=1 runtime-filters-memory=17.00MB
 |  |  max-parallelism=20 segment-costs=[485174058, 79944316] 
cpu-comparison-result=90 [max(20 (self) vs 90 (sum children))]
 |  JOIN BUILD
@@ -553,7 +538,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  tuple-ids=5,15 row-size=24B cardinality=79.94M cost=34991627
 |  |  in pipelines: 03(GETNEXT), 29(OPEN)
 |  |
-|  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |--F19:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  Per-Instance Resources: mem-estimate=324.16MB 
mem-reservation=314.00MB thread-reservation=1 runtime-filters-memory=8.00MB
 |  |  |  max-parallelism=10 segment-costs=[15199907] cpu-comparison-result=90 
[max(10 (self) vs 90 (sum children))]
 |  |  JOIN BUILD
@@ -599,7 +584,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  |  tuple-ids=7,9,11,13 row-size=70B cardinality=6.53M cost=11378838
 |  |  |  in pipelines: 04(GETNEXT), 09(OPEN)
 |  |  |
-|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=18.45MB 
mem-reservation=18.44MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[21]
 |  |  |  JOIN BUILD
@@ -637,7 +622,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  |  tuple-ids=7,9,11 row-size=50B cardinality=39.75M(filtered from 
39.75M) cost=17399234
 |  |  |  in pipelines: 04(GETNEXT), 07(OPEN)
 |  |  |
-|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=18.50MB 
mem-reservation=18.44MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[17005]
 |  |  |  JOIN BUILD
@@ -675,7 +660,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  |  tuple-ids=7,9 row-size=42B cardinality=39.75M(filtered from 39.75M) 
cost=17399234
 |  |  |  in pipelines: 04(GETNEXT), 05(OPEN)
 |  |  |
-|  |  |--F23:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=159.11MB 
mem-reservation=154.00MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[664482]
 |  |  |  JOIN BUILD
@@ -752,9 +737,9 @@ max-parallelism=170 segment-costs=[1673111187]
    tuple-ids=3 row-size=32B cardinality=216.00M cost=1116703438
    in pipelines: 02(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=1.02GB Threads=53
-Per-Host Resource Estimates: Memory=2.10GB
-F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=1.02GB Threads=52
+Per-Host Resource Estimates: Memory=2.09GB
+F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.00MB mem-reservation=4.00MB 
thread-reservation=1
 |  max-parallelism=1 segment-costs=[0, 0, 3] cpu-comparison-result=150 [max(1 
(self) vs 150 (sum children))]
 PLAN-ROOT SINK
@@ -765,49 +750,34 @@ PLAN-ROOT SINK
 |  order by: count(tpcds_partitioned_parquet_snap.web_sales.ws_order_number) 
ASC NULLS LAST
 |  mem-estimate=40B mem-reservation=0B thread-reservation=0
 |  tuple-ids=25 row-size=40B cardinality=1 cost=0
-|  in pipelines: 24(GETNEXT), 43(OPEN)
+|  in pipelines: 24(GETNEXT), 41(OPEN)
 |
-43:AGGREGATE [FINALIZE]
+41:AGGREGATE [FINALIZE]
 |  output: 
count:merge(tpcds_partitioned_parquet_snap.web_sales.ws_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
-|  in pipelines: 43(GETNEXT), 23(OPEN)
+|  in pipelines: 41(GETNEXT), 23(OPEN)
 |
-42:EXCHANGE [UNPARTITIONED]
+40:EXCHANGE [UNPARTITIONED]
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=0
 |  in pipelines: 23(GETNEXT)
 |
-F13:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_sales.ws_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=10.59MB mem-reservation=1.94MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[136076, 8752, 3] cpu-comparison-result=150 
[max(10 (self) vs 150 (sum children))]
+F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+Per-Instance Resources: mem-estimate=21.02MB mem-reservation=1.94MB 
thread-reservation=1
+max-parallelism=10 segment-costs=[11242263, 8752, 3] cpu-comparison-result=150 
[max(150 (self) vs 142 (sum children))]
 23:AGGREGATE
 |  output: count(tpcds_partitioned_parquet_snap.web_sales.ws_order_number), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
 |  mem-estimate=16.00KB mem-reservation=0B spill-buffer=2.00MB 
thread-reservation=0
 |  tuple-ids=24 row-size=40B cardinality=1 cost=8752
-|  in pipelines: 23(GETNEXT), 41(OPEN)
-|
-41:AGGREGATE
-|  output: 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum:merge(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
-|  group by: tpcds_partitioned_parquet_snap.web_sales.ws_order_number
-|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=41.68K cost=123777
-|  in pipelines: 41(GETNEXT), 02(OPEN)
-|
-40:EXCHANGE [HASH(tpcds_partitioned_parquet_snap.web_sales.ws_order_number)]
-|  mem-estimate=602.81KB mem-reservation=0B thread-reservation=0
-|  tuple-ids=23 row-size=40B cardinality=41.68K cost=12299
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 23(GETNEXT), 22(OPEN)
 |
-F09:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
-Per-Instance Resources: mem-estimate=22.73MB mem-reservation=2.00MB 
thread-reservation=1
-max-parallelism=10 segment-costs=[11242263, 128841] cpu-comparison-result=150 
[max(150 (self) vs 142 (sum children))]
-22:AGGREGATE [STREAMING]
+22:AGGREGATE
 |  output: sum(tpcds_partitioned_parquet_snap.web_sales.ws_ext_ship_cost), 
sum(tpcds_partitioned_parquet_snap.web_sales.ws_net_profit)
 |  group by: tpcds_partitioned_parquet_snap.web_sales.ws_order_number
-|  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB 
thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB 
thread-reservation=0
 |  tuple-ids=23 row-size=40B cardinality=41.68K cost=123777
-|  in pipelines: 02(GETNEXT)
+|  in pipelines: 22(GETNEXT), 02(OPEN)
 |
 21:HASH JOIN [INNER JOIN, BROADCAST]
 |  hash-table-id=00
@@ -817,7 +787,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N,17,19,21 row-size=98B cardinality=41.68K cost=72668
 |  in pipelines: 02(GETNEXT), 20(OPEN)
 |
-|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
+|--F14:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=2.95MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[21]
 |  JOIN BUILD
@@ -855,7 +825,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N,17,19 row-size=78B cardinality=253.86K cost=111116
 |  in pipelines: 02(GETNEXT), 18(OPEN)
 |
-|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
+|--F15:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=3.00MB mem-reservation=2.94MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[17005]
 |  JOIN BUILD
@@ -893,7 +863,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N,17 row-size=70B cardinality=253.86K cost=3584190
 |  in pipelines: 02(GETNEXT), 16(OPEN)
 |
-|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
+|--F16:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10
 |  |  Per-Instance Resources: mem-estimate=23.11MB mem-reservation=18.00MB 
thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  max-parallelism=10 segment-costs=[664482]
 |  JOIN BUILD
@@ -932,7 +902,7 @@ max-parallelism=10 segment-costs=[11242263, 128841] 
cpu-comparison-result=150 [m
 |  tuple-ids=3,16,2N row-size=52B cardinality=13.79M cost=4550064
 |  in pipelines: 02(GETNEXT), 35(OPEN)
 |
-|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
+|--F17:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_returns.wr_order_number)] hosts=10 
instances=10 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=96.08MB mem-reservation=68.00MB 
thread-reservation=1
 |  |  max-parallelism=10 segment-costs=[65828979, 21600269] 
cpu-comparison-result=10 [max(10 (self) vs 10 (sum children))]
 |  JOIN BUILD
@@ -989,7 +959,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  tuple-ids=3,16 row-size=44B cardinality=7.99M cost=56851768
 |  in pipelines: 02(GETNEXT), 32(OPEN)
 |
-|--F19:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_sales_1.ws_warehouse_sk,tpcds_partitioned_parquet_snap.web_sales_1.ws_order_number)]
 hosts=10 instances=20 (adjusted from 120)
+|--F18:PLAN FRAGMENT 
[HASH(tpcds_partitioned_parquet_snap.web_sales_1.ws_warehouse_sk,tpcds_partitioned_parquet_snap.web_sales_1.ws_order_number)]
 hosts=10 instances=20 (adjusted from 120)
 |  |  Per-Instance Resources: mem-estimate=231.03MB mem-reservation=85.00MB 
thread-reservation=1 runtime-filters-memory=17.00MB
 |  |  max-parallelism=20 segment-costs=[485174058, 79944316] 
cpu-comparison-result=90 [max(20 (self) vs 90 (sum children))]
 |  JOIN BUILD
@@ -1028,7 +998,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  tuple-ids=5,15 row-size=24B cardinality=79.94M cost=34991627
 |  |  in pipelines: 03(GETNEXT), 29(OPEN)
 |  |
-|  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |--F19:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  Per-Instance Resources: mem-estimate=324.16MB 
mem-reservation=314.00MB thread-reservation=1 runtime-filters-memory=8.00MB
 |  |  |  max-parallelism=10 segment-costs=[15199907] cpu-comparison-result=90 
[max(10 (self) vs 90 (sum children))]
 |  |  JOIN BUILD
@@ -1074,7 +1044,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  |  tuple-ids=7,9,11,13 row-size=70B cardinality=6.53M cost=11378838
 |  |  |  in pipelines: 04(GETNEXT), 09(OPEN)
 |  |  |
-|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F20:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=18.45MB 
mem-reservation=18.44MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[21]
 |  |  |  JOIN BUILD
@@ -1112,7 +1082,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  |  tuple-ids=7,9,11 row-size=50B cardinality=39.75M(filtered from 
39.75M) cost=17399234
 |  |  |  in pipelines: 04(GETNEXT), 07(OPEN)
 |  |  |
-|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F21:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=18.50MB 
mem-reservation=18.44MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[17005]
 |  |  |  JOIN BUILD
@@ -1150,7 +1120,7 @@ max-parallelism=20 segment-costs=[143534213]
 |  |  |  tuple-ids=7,9 row-size=42B cardinality=39.75M(filtered from 39.75M) 
cost=17399234
 |  |  |  in pipelines: 04(GETNEXT), 05(OPEN)
 |  |  |
-|  |  |--F23:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
+|  |  |--F22:PLAN FRAGMENT [RANDOM] hosts=10 instances=10
 |  |  |  |  Per-Instance Resources: mem-estimate=159.11MB 
mem-reservation=154.00MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  |  max-parallelism=10 segment-costs=[664482]
 |  |  |  JOIN BUILD

Reply via email to