IMPALA-10179: After join inversion inherit the left child's parallelism

The planner makes a cost based decision to invert a join - i.e swap
left and right child - based on cardinality, row size and parallelism
of both sides. The join node's numNodes and numInstances attributes were
originally set based on the left child's values. These were not getting
reset after the inversion and the plan shows the original value,
although the backend actually uses the correct value from the left
input..so this mainly affects planner estimates.

This patch fixes this behavior by inheriting the new left child's
parallelism (numNodes and numInstances) after inversion. A common case
where the join inputs get flipped is when the original query has a
left semi join (IN, EXISTS etc.) and the subquery has a large
cardinality compared to the outer query. This gets converted to a
right semi join.  This pattern occurs for example in TPC-DS q10, q35,
q69.

Testing:
 - Updated the plans for several TPC-DS queries to reflect the modified
   parallelism.  11 queries had the join fragment 'instances' increase
   from either 1 or 2 to 6 (for planner tests hosts = 3 and mt_dop = 2).

   There were also 4 queries where the parallelism reduced. Based on an
   initial check, these changes seem expected.

   TODO: Check if this reduction is expected based on the costing. One
   option may be to use a max(left parallelism, right parallelism) value
   to avoid unintended side effects.

 - Couple of TPC-H queries also had increase in parallelism.
 - Ran e2e TPC-DS queries.
 - TODO: test performance on larger scale factor

Change-Id: I01ba559034ad76f7ccee41f237c81b29d8402950
Reviewed-on: http://gerrit.cloudera.org:8080/16480
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
diff --git a/fe/src/main/java/org/apache/impala/planner/JoinNode.java b/fe/src/main/java/org/apache/impala/planner/JoinNode.java
index fc8d5a8..7abe428 100644
--- a/fe/src/main/java/org/apache/impala/planner/JoinNode.java
+++ b/fe/src/main/java/org/apache/impala/planner/JoinNode.java
@@ -575,6 +575,14 @@
     return stats.getNumDistinctValues();
   }
 
+  /**
+   * Reset the numNodes_ and numInstances_ based on the left child
+   */
+  public void recomputeNodes() {
+    numNodes_ = getChild(0).numNodes_;
+    numInstances_ = getChild(0).numInstances_;
+  }
+
   @Override
   public void computeStats(Analyzer analyzer) {
     super.computeStats(analyzer);
diff --git a/fe/src/main/java/org/apache/impala/planner/Planner.java b/fe/src/main/java/org/apache/impala/planner/Planner.java
index 4c8e8e6..e87ad0a 100644
--- a/fe/src/main/java/org/apache/impala/planner/Planner.java
+++ b/fe/src/main/java/org/apache/impala/planner/Planner.java
@@ -534,11 +534,14 @@
       } else if (isInvertedJoinCheaper(joinNode, isLocalPlan)) {
         joinNode.invertJoin();
       }
+      // Re-compute the numNodes and numInstances based on the new input order
+      joinNode.recomputeNodes();
     }
 
     // Re-compute tuple ids because the backend assumes that their order corresponds to
     // the order of children.
     root.computeTupleIds();
+
   }
 
   /**
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q03.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q03.test
index d0cbe0a..d79fd72 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q03.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q03.test
@@ -87,10 +87,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -206,10 +206,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -342,10 +342,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q04.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q04.test
index 5858d5b..b5aa2c3 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q04.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q04.test
@@ -476,10 +476,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -539,10 +539,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1126,10 +1126,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1224,10 +1224,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1940,10 +1940,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2056,10 +2056,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q05.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q05.test
index 2158dfc..4da019e 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q05.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q05.test
@@ -393,10 +393,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 02:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -800,10 +800,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q06.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q06.test
index e0a0d1f..9b6c815 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q06.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q06.test
@@ -175,10 +175,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 02:SCAN HDFS [tpcds_parquet.store_sales s]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> s.ss_item_sk, RF006[bloom] -> s.ss_sold_date_sk, RF010[bloom] -> s.ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -436,10 +436,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 02:SCAN HDFS [tpcds_parquet.store_sales s, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> s.ss_item_sk, RF006[bloom] -> s.ss_sold_date_sk, RF010[bloom] -> s.ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -749,10 +749,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 02:SCAN HDFS [tpcds_parquet.store_sales s, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> s.ss_item_sk, RF006[bloom] -> s.ss_sold_date_sk, RF010[bloom] -> s.ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q07.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q07.test
index 618a666..91e1a41 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q07.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q07.test
@@ -129,10 +129,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_promo_sk, RF004[bloom] -> ss_cdemo_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -292,10 +292,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_promo_sk, RF004[bloom] -> ss_cdemo_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -488,10 +488,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_promo_sk, RF004[bloom] -> ss_cdemo_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q08.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q08.test
index 862baca..fe50c6a 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q08.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q08.test
@@ -212,10 +212,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -435,10 +435,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -701,10 +701,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q09.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q09.test
index 598c9c1..73f31e7 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q09.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q09.test
@@ -67,10 +67,10 @@
 |  |  in pipelines: 30(GETNEXT), 29(OPEN)
 |  |
 |  29:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -92,10 +92,10 @@
 |  |  in pipelines: 28(GETNEXT), 27(OPEN)
 |  |
 |  27:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -117,10 +117,10 @@
 |  |  in pipelines: 26(GETNEXT), 25(OPEN)
 |  |
 |  25:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -142,10 +142,10 @@
 |  |  in pipelines: 24(GETNEXT), 23(OPEN)
 |  |
 |  23:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -167,10 +167,10 @@
 |  |  in pipelines: 22(GETNEXT), 21(OPEN)
 |  |
 |  21:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -192,10 +192,10 @@
 |  |  in pipelines: 20(GETNEXT), 19(OPEN)
 |  |
 |  19:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -217,10 +217,10 @@
 |  |  in pipelines: 18(GETNEXT), 17(OPEN)
 |  |
 |  17:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -242,10 +242,10 @@
 |  |  in pipelines: 16(GETNEXT), 15(OPEN)
 |  |
 |  15:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -267,10 +267,10 @@
 |  |  in pipelines: 14(GETNEXT), 13(OPEN)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -292,10 +292,10 @@
 |  |  in pipelines: 12(GETNEXT), 11(OPEN)
 |  |
 |  11:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -317,10 +317,10 @@
 |  |  in pipelines: 10(GETNEXT), 09(OPEN)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -342,10 +342,10 @@
 |  |  in pipelines: 08(GETNEXT), 07(OPEN)
 |  |
 |  07:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -367,10 +367,10 @@
 |  |  in pipelines: 06(GETNEXT), 05(OPEN)
 |  |
 |  05:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -392,10 +392,10 @@
 |  |  in pipelines: 04(GETNEXT), 03(OPEN)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -430,10 +430,10 @@
 |  in pipelines: 02(GETNEXT), 01(OPEN)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -483,10 +483,10 @@
 |  |  in pipelines: 30(GETNEXT), 29(OPEN)
 |  |
 |  29:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -528,10 +528,10 @@
 |  |  in pipelines: 28(GETNEXT), 27(OPEN)
 |  |
 |  27:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -573,10 +573,10 @@
 |  |  in pipelines: 26(GETNEXT), 25(OPEN)
 |  |
 |  25:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -618,10 +618,10 @@
 |  |  in pipelines: 24(GETNEXT), 23(OPEN)
 |  |
 |  23:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -663,10 +663,10 @@
 |  |  in pipelines: 22(GETNEXT), 21(OPEN)
 |  |
 |  21:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -708,10 +708,10 @@
 |  |  in pipelines: 20(GETNEXT), 19(OPEN)
 |  |
 |  19:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -753,10 +753,10 @@
 |  |  in pipelines: 18(GETNEXT), 17(OPEN)
 |  |
 |  17:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -798,10 +798,10 @@
 |  |  in pipelines: 16(GETNEXT), 15(OPEN)
 |  |
 |  15:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -843,10 +843,10 @@
 |  |  in pipelines: 14(GETNEXT), 13(OPEN)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -888,10 +888,10 @@
 |  |  in pipelines: 12(GETNEXT), 11(OPEN)
 |  |
 |  11:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -933,10 +933,10 @@
 |  |  in pipelines: 10(GETNEXT), 09(OPEN)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -978,10 +978,10 @@
 |  |  in pipelines: 08(GETNEXT), 07(OPEN)
 |  |
 |  07:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1023,10 +1023,10 @@
 |  |  in pipelines: 06(GETNEXT), 05(OPEN)
 |  |
 |  05:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1068,10 +1068,10 @@
 |  |  in pipelines: 04(GETNEXT), 03(OPEN)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1126,10 +1126,10 @@
 |  in pipelines: 02(GETNEXT), 01(OPEN)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1186,10 +1186,10 @@
 |  |  in pipelines: 30(GETNEXT), 29(OPEN)
 |  |
 |  29:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1238,10 +1238,10 @@
 |  |  in pipelines: 28(GETNEXT), 27(OPEN)
 |  |
 |  27:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1290,10 +1290,10 @@
 |  |  in pipelines: 26(GETNEXT), 25(OPEN)
 |  |
 |  25:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(100 AS INT), ss_quantity >= CAST(81 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1342,10 +1342,10 @@
 |  |  in pipelines: 24(GETNEXT), 23(OPEN)
 |  |
 |  23:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1394,10 +1394,10 @@
 |  |  in pipelines: 22(GETNEXT), 21(OPEN)
 |  |
 |  21:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1446,10 +1446,10 @@
 |  |  in pipelines: 20(GETNEXT), 19(OPEN)
 |  |
 |  19:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(80 AS INT), ss_quantity >= CAST(61 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1498,10 +1498,10 @@
 |  |  in pipelines: 18(GETNEXT), 17(OPEN)
 |  |
 |  17:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1550,10 +1550,10 @@
 |  |  in pipelines: 16(GETNEXT), 15(OPEN)
 |  |
 |  15:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1602,10 +1602,10 @@
 |  |  in pipelines: 14(GETNEXT), 13(OPEN)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(60 AS INT), ss_quantity >= CAST(41 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1654,10 +1654,10 @@
 |  |  in pipelines: 12(GETNEXT), 11(OPEN)
 |  |
 |  11:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1706,10 +1706,10 @@
 |  |  in pipelines: 10(GETNEXT), 09(OPEN)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1758,10 +1758,10 @@
 |  |  in pipelines: 08(GETNEXT), 07(OPEN)
 |  |
 |  07:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(40 AS INT), ss_quantity >= CAST(21 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1810,10 +1810,10 @@
 |  |  in pipelines: 06(GETNEXT), 05(OPEN)
 |  |
 |  05:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1862,10 +1862,10 @@
 |  |  in pipelines: 04(GETNEXT), 03(OPEN)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1927,10 +1927,10 @@
 |  in pipelines: 02(GETNEXT), 01(OPEN)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(1 AS INT)
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q10a.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q10a.test
index a55b4cc..39dc738 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q10a.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q10a.test
@@ -167,10 +167,10 @@
 |  |     in pipelines: 04(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_customer_sk, RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -250,7 +250,7 @@
 Max Per-Host Resource Reservation: Memory=43.00MB Threads=19
 Per-Host Resource Estimates: Memory=509MB
 F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=18.08KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=30.66KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: cd_gender, cd_marital_status, cd_education_status, count(*), cd_purchase_estimate, count(*), cd_credit_rating, count(*), cd_dep_count, count(*), cd_dep_employed_count, count(*), cd_dep_college_count, count(*)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -258,12 +258,12 @@
 29:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  limit: 100
-|  mem-estimate=18.08KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=30.66KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=14 row-size=91B cardinality=100
 |  in pipelines: 18(GETNEXT)
 |
-F11:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=10.06MB mem-reservation=1.94MB thread-reservation=1
+F11:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=10.10MB mem-reservation=1.94MB thread-reservation=1
 18:TOP-N [LIMIT=100]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  mem-estimate=8.85KB mem-reservation=0B thread-reservation=0
@@ -278,11 +278,11 @@
 |  in pipelines: 28(GETNEXT), 07(OPEN), 10(OPEN)
 |
 27:EXCHANGE [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)]
-|  mem-estimate=57.50KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=97.48KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=13 row-size=91B cardinality=318
 |  in pipelines: 07(GETNEXT), 10(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
+F10:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
 Per-Host Resources: mem-estimate=17.34MB mem-reservation=7.88MB thread-reservation=1 runtime-filters-memory=2.00MB
 17:AGGREGATE [STREAMING]
 |  output: count(*)
@@ -413,10 +413,10 @@
 |  |     in pipelines: 04(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_customer_sk, RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -517,7 +517,7 @@
 Max Per-Host Resource Reservation: Memory=60.06MB Threads=19
 Per-Host Resource Estimates: Memory=238MB
 F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=18.08KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=30.66KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: cd_gender, cd_marital_status, cd_education_status, count(*), cd_purchase_estimate, count(*), cd_credit_rating, count(*), cd_dep_count, count(*), cd_dep_employed_count, count(*), cd_dep_college_count, count(*)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -525,12 +525,12 @@
 29:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  limit: 100
-|  mem-estimate=18.08KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=30.66KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=14 row-size=91B cardinality=100
 |  in pipelines: 18(GETNEXT)
 |
-F11:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=1 instances=1
-Per-Instance Resources: mem-estimate=10.06MB mem-reservation=1.94MB thread-reservation=1
+F11:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.10MB mem-reservation=1.94MB thread-reservation=1
 18:TOP-N [LIMIT=100]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  mem-estimate=8.85KB mem-reservation=0B thread-reservation=0
@@ -545,11 +545,11 @@
 |  in pipelines: 28(GETNEXT), 07(OPEN), 10(OPEN)
 |
 27:EXCHANGE [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)]
-|  mem-estimate=57.50KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=97.48KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=13 row-size=91B cardinality=318
 |  in pipelines: 07(GETNEXT), 10(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
+F10:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
 Per-Instance Resources: mem-estimate=10.20MB mem-reservation=2.00MB thread-reservation=1
 17:AGGREGATE [STREAMING]
 |  output: count(*)
@@ -565,7 +565,7 @@
 |  tuple-ids=2,0,1 row-size=129B cardinality=318
 |  in pipelines: 07(GETNEXT), 10(GETNEXT), 03(OPEN)
 |
-|--F13:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
+|--F13:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=4.29MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -580,7 +580,7 @@
 |  |  tuple-ids=2,0,1 row-size=129B cardinality=318
 |  |  in pipelines: 03(GETNEXT), 02(OPEN)
 |  |
-|  |--F14:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
+|  |--F14:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
 |  |  |  Per-Instance Resources: mem-estimate=3.02MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=01 plan-id=02 cohort-id=02
@@ -723,10 +723,10 @@
 |  |     in pipelines: 04(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_customer_sk, RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q11.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q11.test
index 3d7488b..01dc63e 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q11.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q11.test
@@ -288,10 +288,10 @@
 |  |  |     in pipelines: 03(GETNEXT)
 |  |  |
 |  |  02:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF012[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -352,10 +352,10 @@
 |  |     in pipelines: 10(GETNEXT)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -374,8 +374,8 @@
    tuple-ids=10 row-size=153B cardinality=100.00K
    in pipelines: 08(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=420.94MB Threads=33
-Per-Host Resource Estimates: Memory=1.51GB
+Max Per-Host Resource Reservation: Memory=403.94MB Threads=33
+Per-Host Resource Estimates: Memory=1.49GB
 F24:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=26.23KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
@@ -390,7 +390,7 @@
 |  in pipelines: 31(GETNEXT)
 |
 F05:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=90.48MB mem-reservation=52.19MB thread-reservation=1 runtime-filters-memory=3.00MB
+Per-Host Resources: mem-estimate=90.58MB mem-reservation=52.19MB thread-reservation=1 runtime-filters-memory=3.00MB
 31:TOP-N [LIMIT=100]
 |  order by: customer_id ASC, customer_first_name ASC, customer_last_name ASC, customer_preferred_cust_flag ASC
 |  mem-estimate=7.52KB mem-reservation=0B thread-reservation=0
@@ -407,12 +407,12 @@
 |  in pipelines: 36(GETNEXT), 53(OPEN)
 |
 |--54:EXCHANGE [BROADCAST]
-|  |  mem-estimate=6.26MB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=6.30MB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=38 row-size=44B cardinality=148.00K
 |  |  in pipelines: 53(GETNEXT)
 |  |
-|  F23:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=44.17MB mem-reservation=34.00MB thread-reservation=1
+|  F23:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=44.34MB mem-reservation=34.00MB thread-reservation=1
 |  21:UNION
 |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=38 row-size=44B cardinality=148.00K
@@ -426,12 +426,12 @@
 |  |  in pipelines: 53(GETNEXT), 23(OPEN)
 |  |
 |  52:EXCHANGE [HASH(c_customer_id,c_first_name,c_last_name,c_preferred_cust_flag,c_birth_country,c_login,c_email_address,d_year)]
-|  |  mem-estimate=10.17MB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=10.34MB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=37 row-size=169B cardinality=148.00K
 |  |  in pipelines: 23(GETNEXT)
 |  |
-|  F20:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=69.63MB mem-reservation=53.94MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  F20:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=61.13MB mem-reservation=45.44MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  27:AGGREGATE [STREAMING]
 |  |  output: sum(ws_ext_list_price - ws_ext_discount_amt)
 |  |  group by: c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address, d_year
@@ -470,7 +470,7 @@
 |  25:HASH JOIN [INNER JOIN, PARTITIONED]
 |  |  hash predicates: ws_bill_customer_sk = c_customer_sk
 |  |  fk/pk conjuncts: none
-|  |  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  |  tuple-ids=35,34 row-size=169B cardinality=719.38K
 |  |  in pipelines: 23(GETNEXT), 22(OPEN)
 |  |
@@ -518,12 +518,12 @@
 |  in pipelines: 36(GETNEXT), 47(OPEN)
 |
 |--48:EXCHANGE [BROADCAST]
-|  |  mem-estimate=683.94KB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=731.94KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=28 row-size=44B cardinality=14.80K
 |  |  in pipelines: 47(GETNEXT)
 |  |
-|  F17:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=44.17MB mem-reservation=34.00MB thread-reservation=1
+|  F17:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=44.34MB mem-reservation=34.00MB thread-reservation=1
 |  14:UNION
 |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=28 row-size=44B cardinality=14.80K
@@ -538,12 +538,12 @@
 |  |  in pipelines: 47(GETNEXT), 16(OPEN)
 |  |
 |  46:EXCHANGE [HASH(c_customer_id,c_first_name,c_last_name,c_preferred_cust_flag,c_birth_country,c_login,c_email_address,d_year)]
-|  |  mem-estimate=10.17MB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=10.34MB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=27 row-size=169B cardinality=148.00K
 |  |  in pipelines: 16(GETNEXT)
 |  |
-|  F14:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=70.63MB mem-reservation=54.94MB thread-reservation=1 runtime-filters-memory=2.00MB
+|  F14:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=62.13MB mem-reservation=46.44MB thread-reservation=1 runtime-filters-memory=2.00MB
 |  20:AGGREGATE [STREAMING]
 |  |  output: sum(ws_ext_list_price - ws_ext_discount_amt)
 |  |  group by: c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address, d_year
@@ -583,7 +583,7 @@
 |  |  hash predicates: ws_bill_customer_sk = c_customer_sk
 |  |  fk/pk conjuncts: none
 |  |  runtime filters: RF016[bloom] <- c_customer_sk
-|  |  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  |  tuple-ids=25,24 row-size=169B cardinality=719.38K
 |  |  in pipelines: 16(GETNEXT), 15(OPEN)
 |  |
@@ -727,10 +727,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -826,10 +826,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -837,8 +837,8 @@
    tuple-ids=11 row-size=16B cardinality=2.88M
    in pipelines: 09(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=589.88MB Threads=40
-Per-Host Resource Estimates: Memory=953MB
+Max Per-Host Resource Reservation: Memory=572.88MB Threads=40
+Per-Host Resource Estimates: Memory=936MB
 F24:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=49.95KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
@@ -870,7 +870,7 @@
 |  in pipelines: 36(GETNEXT), 53(OPEN)
 |
 |--F25:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  Per-Instance Resources: mem-estimate=24.26MB mem-reservation=18.00MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  Per-Instance Resources: mem-estimate=24.30MB mem-reservation=18.00MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
 |  |  build expressions: customer_id
@@ -878,12 +878,12 @@
 |  |  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=512.00KB thread-reservation=0
 |  |
 |  54:EXCHANGE [BROADCAST]
-|  |  mem-estimate=6.26MB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=6.30MB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=38 row-size=44B cardinality=148.00K
 |  |  in pipelines: 53(GETNEXT)
 |  |
-|  F23:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=44.17MB mem-reservation=34.00MB thread-reservation=1
+|  F23:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  Per-Instance Resources: mem-estimate=44.34MB mem-reservation=34.00MB thread-reservation=1
 |  21:UNION
 |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=38 row-size=44B cardinality=148.00K
@@ -897,11 +897,11 @@
 |  |  in pipelines: 53(GETNEXT), 23(OPEN)
 |  |
 |  52:EXCHANGE [HASH(c_customer_id,c_first_name,c_last_name,c_preferred_cust_flag,c_birth_country,c_login,c_email_address,d_year)]
-|  |  mem-estimate=10.17MB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=10.34MB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=37 row-size=169B cardinality=148.00K
 |  |  in pipelines: 23(GETNEXT)
 |  |
-|  F20:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
+|  F20:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
 |  Per-Instance Resources: mem-estimate=39.53MB mem-reservation=34.00MB thread-reservation=1
 |  27:AGGREGATE [STREAMING]
 |  |  output: sum(ws_ext_list_price - ws_ext_discount_amt)
@@ -918,7 +918,7 @@
 |  |  tuple-ids=35,34,36 row-size=177B cardinality=148.00K
 |  |  in pipelines: 23(GETNEXT), 24(OPEN)
 |  |
-|  |--F26:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
+|  |--F26:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
 |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=01 plan-id=02 cohort-id=02
@@ -950,16 +950,16 @@
 |  |  hash-table-id=02
 |  |  hash predicates: ws_bill_customer_sk = c_customer_sk
 |  |  fk/pk conjuncts: none
-|  |  mem-estimate=0B mem-reservation=0B spill-buffer=1.00MB thread-reservation=0
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
 |  |  tuple-ids=35,34 row-size=169B cardinality=719.38K
 |  |  in pipelines: 23(GETNEXT), 22(OPEN)
 |  |
-|  |--F27:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=27.15MB mem-reservation=17.00MB thread-reservation=1
+|  |--F27:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
+|  |  |  Per-Instance Resources: mem-estimate=18.65MB mem-reservation=8.50MB thread-reservation=1
 |  |  JOIN BUILD
 |  |  |  join-table-id=02 plan-id=03 cohort-id=02
 |  |  |  build expressions: c_customer_sk
-|  |  |  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  |  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  |  |
 |  |  50:EXCHANGE [HASH(c_customer_sk)]
 |  |  |  mem-estimate=10.15MB mem-reservation=0B thread-reservation=0
@@ -1006,7 +1006,7 @@
 |  in pipelines: 36(GETNEXT), 47(OPEN)
 |
 |--F28:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  Per-Instance Resources: mem-estimate=5.54MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  Per-Instance Resources: mem-estimate=5.59MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=03 plan-id=04 cohort-id=01
 |  |  build expressions: customer_id
@@ -1014,12 +1014,12 @@
 |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |
 |  48:EXCHANGE [BROADCAST]
-|  |  mem-estimate=683.94KB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=731.94KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=28 row-size=44B cardinality=14.80K
 |  |  in pipelines: 47(GETNEXT)
 |  |
-|  F17:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=44.17MB mem-reservation=34.00MB thread-reservation=1
+|  F17:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  Per-Instance Resources: mem-estimate=44.34MB mem-reservation=34.00MB thread-reservation=1
 |  14:UNION
 |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=28 row-size=44B cardinality=14.80K
@@ -1034,11 +1034,11 @@
 |  |  in pipelines: 47(GETNEXT), 16(OPEN)
 |  |
 |  46:EXCHANGE [HASH(c_customer_id,c_first_name,c_last_name,c_preferred_cust_flag,c_birth_country,c_login,c_email_address,d_year)]
-|  |  mem-estimate=10.17MB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=10.34MB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=27 row-size=169B cardinality=148.00K
 |  |  in pipelines: 16(GETNEXT)
 |  |
-|  F14:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
+|  F14:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
 |  Per-Instance Resources: mem-estimate=39.53MB mem-reservation=34.00MB thread-reservation=1
 |  20:AGGREGATE [STREAMING]
 |  |  output: sum(ws_ext_list_price - ws_ext_discount_amt)
@@ -1055,7 +1055,7 @@
 |  |  tuple-ids=25,24,26 row-size=177B cardinality=148.00K
 |  |  in pipelines: 16(GETNEXT), 17(OPEN)
 |  |
-|  |--F29:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
+|  |--F29:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
 |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=04 plan-id=05 cohort-id=03
@@ -1087,17 +1087,17 @@
 |  |  hash-table-id=05
 |  |  hash predicates: ws_bill_customer_sk = c_customer_sk
 |  |  fk/pk conjuncts: none
-|  |  mem-estimate=0B mem-reservation=0B spill-buffer=1.00MB thread-reservation=0
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
 |  |  tuple-ids=25,24 row-size=169B cardinality=719.38K
 |  |  in pipelines: 16(GETNEXT), 15(OPEN)
 |  |
-|  |--F30:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=28.15MB mem-reservation=18.00MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |--F30:PLAN FRAGMENT [HASH(ws_bill_customer_sk)] hosts=2 instances=2
+|  |  |  Per-Instance Resources: mem-estimate=19.65MB mem-reservation=9.50MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=05 plan-id=06 cohort-id=03
 |  |  |  build expressions: c_customer_sk
 |  |  |  runtime filters: RF016[bloom] <- c_customer_sk
-|  |  |  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  |  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  |  |
 |  |  44:EXCHANGE [HASH(c_customer_sk)]
 |  |  |  mem-estimate=10.15MB mem-reservation=0B thread-reservation=0
@@ -1267,10 +1267,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1384,10 +1384,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q13.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q13.test
index 78d3933..c8ea54e 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q13.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q13.test
@@ -155,11 +155,11 @@
 |  |     in pipelines: 04(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(250 AS DECIMAL(5,0)), ss_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(250 AS DECIMAL(5,0)), ss_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(250 AS DECIMAL(5,0)), ss_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(250 AS DECIMAL(5,0)), ss_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2))
 |     runtime filters: RF000[bloom] -> ss_store_sk, RF004[bloom] -> ss_hdemo_sk, RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_addr_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14a.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14a.test
index 6abbd89..4889797 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14a.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14a.test
@@ -245,9 +245,9 @@
 |  |  |     in pipelines: 117(GETNEXT)
 |  |  |
 |  |  116:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -453,9 +453,9 @@
 |  |  |     in pipelines: 90(GETNEXT)
 |  |  |
 |  |  89:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -610,9 +610,9 @@
 |  |  |     in pipelines: 75(GETNEXT)
 |  |  |
 |  |  74:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -818,9 +818,9 @@
 |  |  |     in pipelines: 48(GETNEXT)
 |  |  |
 |  |  47:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -975,9 +975,9 @@
 |  |     in pipelines: 33(GETNEXT)
 |  |
 |  32:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1187,9 +1187,9 @@
 |  |     in pipelines: 06(GETNEXT)
 |  |
 |  05:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1238,10 +1238,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> ss_sold_date_sk, RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1470,9 +1470,9 @@
 |  |  |     in pipelines: 117(GETNEXT)
 |  |  |
 |  |  116:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1814,9 +1814,9 @@
 |  |  |     in pipelines: 90(GETNEXT)
 |  |  |
 |  |  89:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2026,9 +2026,9 @@
 |  |  |     in pipelines: 75(GETNEXT)
 |  |  |
 |  |  74:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2370,9 +2370,9 @@
 |  |  |     in pipelines: 48(GETNEXT)
 |  |  |
 |  |  47:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2582,9 +2582,9 @@
 |  |     in pipelines: 33(GETNEXT)
 |  |
 |  32:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2930,9 +2930,9 @@
 |  |     in pipelines: 06(GETNEXT)
 |  |
 |  05:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2995,10 +2995,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> ss_sold_date_sk, RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -3258,9 +3258,9 @@
 |  |  |     in pipelines: 117(GETNEXT)
 |  |  |
 |  |  116:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -3683,9 +3683,9 @@
 |  |  |     in pipelines: 90(GETNEXT)
 |  |  |
 |  |  89:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -3942,9 +3942,9 @@
 |  |  |     in pipelines: 75(GETNEXT)
 |  |  |
 |  |  74:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -4367,9 +4367,9 @@
 |  |  |     in pipelines: 48(GETNEXT)
 |  |  |
 |  |  47:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -4626,9 +4626,9 @@
 |  |     in pipelines: 33(GETNEXT)
 |  |
 |  32:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -5056,9 +5056,9 @@
 |  |     in pipelines: 06(GETNEXT)
 |  |
 |  05:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -5138,10 +5138,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> ss_sold_date_sk, RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14b.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14b.test
index 1846d02..ba1ad49 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14b.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q14b.test
@@ -249,9 +249,9 @@
 |  |  |     in pipelines: 80(GETNEXT)
 |  |  |
 |  |  79:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -484,9 +484,9 @@
 |  |  |     in pipelines: 50(GETNEXT)
 |  |  |
 |  |  49:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -530,9 +530,9 @@
 |  |     in pipelines: 46(GETNEXT)
 |  |
 |  45:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -638,9 +638,9 @@
 |  |     in pipelines: 35(GETNEXT)
 |  |
 |  34:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -876,9 +876,9 @@
 |  |     in pipelines: 05(GETNEXT)
 |  |
 |  04:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -925,10 +925,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_item_sk, RF010[bloom] -> ss_sold_date_sk, RF012[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1106,9 +1106,9 @@
 |  |  |     in pipelines: 80(GETNEXT)
 |  |  |
 |  |  79:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1492,9 +1492,9 @@
 |  |  |     in pipelines: 50(GETNEXT)
 |  |  |
 |  |  49:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1552,9 +1552,9 @@
 |  |     in pipelines: 46(GETNEXT)
 |  |
 |  45:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1701,9 +1701,9 @@
 |  |     in pipelines: 35(GETNEXT)
 |  |
 |  34:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2090,9 +2090,9 @@
 |  |     in pipelines: 05(GETNEXT)
 |  |
 |  04:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2153,10 +2153,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_item_sk, RF010[bloom] -> ss_sold_date_sk, RF012[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2373,9 +2373,9 @@
 |  |  |     in pipelines: 80(GETNEXT)
 |  |  |
 |  |  79:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2847,9 +2847,9 @@
 |  |  |     in pipelines: 50(GETNEXT)
 |  |  |
 |  |  49:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2924,9 +2924,9 @@
 |  |     in pipelines: 46(GETNEXT)
 |  |
 |  45:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -3104,9 +3104,9 @@
 |  |     in pipelines: 35(GETNEXT)
 |  |
 |  34:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -3583,9 +3583,9 @@
 |  |     in pipelines: 05(GETNEXT)
 |  |
 |  04:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -3664,10 +3664,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_item_sk, RF010[bloom] -> ss_sold_date_sk, RF012[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q17.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q17.test
index 47058b2..a12995a 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q17.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q17.test
@@ -175,10 +175,10 @@
 |  |  |  |     in pipelines: 03(GETNEXT)
 |  |  |  |
 |  |  |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF002[bloom] -> ss_store_sk, RF018[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -453,10 +453,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF012[bloom] -> ss_customer_sk, RF013[bloom] -> ss_item_sk, RF014[bloom] -> ss_ticket_number, RF018[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -475,10 +475,10 @@
    tuple-ids=2 row-size=20B cardinality=1.44M
    in pipelines: 02(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=100.27MB Threads=26
-Per-Host Resource Estimates: Memory=363MB
+Max Per-Host Resource Reservation: Memory=85.39MB Threads=22
+Per-Host Resource Estimates: Memory=285MB
 F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=142.39KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=74.88KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_id, i_item_desc, s_state, count(ss_quantity), avg(ss_quantity), stddev_samp(ss_quantity), stddev_samp(ss_quantity) / avg(ss_quantity), count(sr_return_quantity), avg(sr_return_quantity), stddev_samp(sr_return_quantity), stddev_samp(sr_return_quantity) / avg(sr_return_quantity), count(cs_quantity), avg(cs_quantity), stddev_samp(cs_quantity), stddev_samp(cs_quantity) / avg(cs_quantity)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -486,12 +486,12 @@
 28:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: i_item_id ASC, i_item_desc ASC, s_state ASC
 |  limit: 100
-|  mem-estimate=142.39KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=74.88KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=10 row-size=226B cardinality=100
 |  in pipelines: 16(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,s_state)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=11.50MB mem-reservation=1.94MB thread-reservation=1
+F10:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,s_state)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.82MB mem-reservation=1.94MB thread-reservation=1
 16:TOP-N [LIMIT=100]
 |  order by: i_item_id ASC, i_item_desc ASC, s_state ASC
 |  mem-estimate=22.11KB mem-reservation=0B thread-reservation=0
@@ -506,12 +506,12 @@
 |  in pipelines: 27(GETNEXT), 02(OPEN)
 |
 26:EXCHANGE [HASH(i_item_id,i_item_desc,s_state)]
-|  mem-estimate=1.50MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=840.49KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=8 row-size=226B cardinality=2.02K
 |  in pipelines: 02(GETNEXT)
 |
-F09:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=11.23MB mem-reservation=2.00MB thread-reservation=1
+F09:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.67MB mem-reservation=2.00MB thread-reservation=1
 15:AGGREGATE [STREAMING]
 |  output: count(ss_quantity), avg(CAST(ss_quantity AS BIGINT)), stddev_samp(ss_quantity), count(sr_return_quantity), avg(CAST(sr_return_quantity AS BIGINT)), stddev_samp(sr_return_quantity), count(cs_quantity), avg(CAST(cs_quantity AS BIGINT)), stddev_samp(cs_quantity)
 |  group by: i_item_id, i_item_desc, s_state
@@ -527,7 +527,7 @@
 |  tuple-ids=2,0,3,1,4,5,6,7 row-size=312B cardinality=2.02K
 |  in pipelines: 02(GETNEXT), 07(OPEN)
 |
-|--F12:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
+|--F12:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=5.63MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -553,11 +553,11 @@
 |     in pipelines: 07(GETNEXT)
 |
 24:EXCHANGE [HASH(ss_item_sk)]
-|  mem-estimate=1.23MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=684.05KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=2,0,3,1,4,5,6 row-size=164B cardinality=2.02K
 |  in pipelines: 02(GETNEXT)
 |
-F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 Per-Host Shared Resources: mem-estimate=4.00MB mem-reservation=4.00MB thread-reservation=0 runtime-filters-memory=4.00MB
 Per-Instance Resources: mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=1
 13:HASH JOIN [INNER JOIN, BROADCAST]
@@ -768,10 +768,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF012[bloom] -> ss_customer_sk, RF013[bloom] -> ss_item_sk, RF014[bloom] -> ss_ticket_number, RF018[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q19.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q19.test
index d6c8735..1b2375c 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q19.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q19.test
@@ -134,10 +134,10 @@
 |  |  |     in pipelines: 02(GETNEXT)
 |  |  |
 |  |  01:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF000[bloom] -> ss_store_sk, RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -359,10 +359,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF004[bloom] -> ss_customer_sk, RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -604,10 +604,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF004[bloom] -> ss_customer_sk, RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23a.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23a.test
index c112554..693b7a7 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23a.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23a.test
@@ -135,10 +135,10 @@
 |  |  |  |     in pipelines: 28(GETNEXT)
 |  |  |  |
 |  |  |  27:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF030[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -236,10 +236,10 @@
 |  |  |     in pipelines: 39(GETNEXT)
 |  |  |
 |  |  37:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF022[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -273,10 +273,10 @@
 |  |     in pipelines: 34(GETNEXT)
 |  |
 |  33:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> tpcds_parquet.store_sales.ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -350,10 +350,10 @@
 |  |  |     in pipelines: 04(GETNEXT)
 |  |  |
 |  |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF014[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -452,10 +452,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -490,10 +490,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -655,10 +655,10 @@
 |  |  |  |     in pipelines: 28(GETNEXT)
 |  |  |  |
 |  |  |  27:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF030[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -811,10 +811,10 @@
 |  |  |     in pipelines: 39(GETNEXT)
 |  |  |
 |  |  37:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF022[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -869,10 +869,10 @@
 |  |     in pipelines: 34(GETNEXT)
 |  |
 |  33:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> tpcds_parquet.store_sales.ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1001,10 +1001,10 @@
 |  |  |     in pipelines: 04(GETNEXT)
 |  |  |
 |  |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF014[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1158,10 +1158,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1217,10 +1217,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23b.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23b.test
index 5dd2ee7..6445a09 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23b.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q23b.test
@@ -199,9 +199,9 @@
 |  |  |  |  |  |     in pipelines: 40(GETNEXT)
 |  |  |  |  |  |
 |  |  |  |  |  38:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |  |  |     stored statistics:
-|  |  |  |  |       table: rows=2.88M size=201.02MB
+|  |  |  |  |       table: rows=2.88M size=200.95MB
 |  |  |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |  |  |       columns: all
 |  |  |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -227,9 +227,9 @@
 |  |  |  |  |     in pipelines: 37(GETNEXT)
 |  |  |  |  |
 |  |  |  |  36:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |  |     stored statistics:
-|  |  |  |       table: rows=2.88M size=201.02MB
+|  |  |  |       table: rows=2.88M size=200.95MB
 |  |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |  |       columns: all
 |  |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -327,10 +327,10 @@
 |  |     in pipelines: 31(GETNEXT)
 |  |
 |  30:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF018[bloom] -> tpcds_parquet.store_sales.ss_item_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -434,10 +434,10 @@
 |  |  |  |  |     in pipelines: 14(GETNEXT)
 |  |  |  |  |
 |  |  |  |  12:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |  |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |  |  |  |     stored statistics:
-|  |  |  |       table: rows=2.88M size=201.02MB
+|  |  |  |       table: rows=2.88M size=200.95MB
 |  |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |  |       columns: all
 |  |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -463,9 +463,9 @@
 |  |  |  |     in pipelines: 11(GETNEXT)
 |  |  |  |
 |  |  |  10:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -564,10 +564,10 @@
 |     in pipelines: 05(GETNEXT)
 |
 04:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -576,7 +576,7 @@
    in pipelines: 04(GETNEXT)
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=260.81MB Threads=56
-Per-Host Resource Estimates: Memory=1.59GB
+Per-Host Resource Estimates: Memory=1.56GB
 F35:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=18.09KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
@@ -591,7 +591,7 @@
 |  in pipelines: 53(GETNEXT)
 |
 F34:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=10.35MB mem-reservation=1.94MB thread-reservation=1
+Per-Host Resources: mem-estimate=10.34MB mem-reservation=1.94MB thread-reservation=1
 53:TOP-N [LIMIT=100]
 |  order by: c_last_name ASC, c_first_name ASC, sales ASC
 |  mem-estimate=5.08KB mem-reservation=0B thread-reservation=0
@@ -612,12 +612,12 @@
 |  |  in pipelines: 95(GETNEXT), 78(OPEN)
 |  |
 |  94:EXCHANGE [HASH(c_last_name,c_first_name)]
-|  |  mem-estimate=356.17KB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=330.72KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=41 row-size=52B cardinality=9.63K
 |  |  in pipelines: 78(GETNEXT)
 |  |
-|  F20:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=2 instances=2
-|  Per-Host Resources: mem-estimate=117.94MB mem-reservation=39.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  F20:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=3 instances=3
+|  Per-Host Resources: mem-estimate=87.06MB mem-reservation=39.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  52:AGGREGATE [STREAMING]
 |  |  output: sum(CAST(ws_quantity AS DECIMAL(10,0)) * ws_list_price)
 |  |  group by: c_last_name, c_first_name
@@ -813,10 +813,10 @@
 |  |  |  |  |     in pipelines: 40(GETNEXT)
 |  |  |  |  |
 |  |  |  |  38:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |  |     runtime filters: RF034[bloom] -> ss_sold_date_sk
 |  |  |  |     stored statistics:
-|  |  |  |       table: rows=2.88M size=201.02MB
+|  |  |  |       table: rows=2.88M size=200.95MB
 |  |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |  |       columns: all
 |  |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -849,9 +849,9 @@
 |  |  |  |     in pipelines: 37(GETNEXT)
 |  |  |  |
 |  |  |  36:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -902,7 +902,7 @@
 |  |  output: count:merge(*)
 |  |  group by: itemdesc, i_item_sk, d_date
 |  |  having: count(*) > CAST(4 AS BIGINT)
-|  |  mem-estimate=92.63MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  |  mem-estimate=61.75MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  |  tuple-ids=28 row-size=50B cardinality=235.45K
 |  |  in pipelines: 78(GETNEXT), 30(OPEN)
 |  |
@@ -974,10 +974,10 @@
 |  |     in pipelines: 31(GETNEXT)
 |  |
 |  30:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF018[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF022[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1194,10 +1194,10 @@
 |  |  |  |     in pipelines: 14(GETNEXT)
 |  |  |  |
 |  |  |  12:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1230,9 +1230,9 @@
 |  |  |     in pipelines: 11(GETNEXT)
 |  |  |
 |  |  10:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1355,10 +1355,10 @@
 |     in pipelines: 05(GETNEXT)
 |
 04:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1366,10 +1366,10 @@
    tuple-ids=3 row-size=12B cardinality=2.88M
    in pipelines: 04(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=402.19MB Threads=64
-Per-Host Resource Estimates: Memory=1.16GB
+Max Per-Host Resource Reservation: Memory=476.12MB Threads=67
+Per-Host Resource Estimates: Memory=1.19GB
 F35:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=18.09KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=34.49KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: c_last_name, c_first_name, sales
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -1377,12 +1377,12 @@
 96:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: c_last_name ASC, c_first_name ASC, sales ASC
 |  limit: 100
-|  mem-estimate=18.09KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=34.49KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=44 row-size=52B cardinality=100
 |  in pipelines: 53(GETNEXT)
 |
-F34:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Instance Resources: mem-estimate=10.35MB mem-reservation=1.94MB thread-reservation=1
+F34:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+Per-Instance Resources: mem-estimate=10.51MB mem-reservation=1.94MB thread-reservation=1
 53:TOP-N [LIMIT=100]
 |  order by: c_last_name ASC, c_first_name ASC, sales ASC
 |  mem-estimate=5.08KB mem-reservation=0B thread-reservation=0
@@ -1403,12 +1403,12 @@
 |  |  in pipelines: 95(GETNEXT), 78(OPEN)
 |  |
 |  94:EXCHANGE [HASH(c_last_name,c_first_name)]
-|  |  mem-estimate=356.17KB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=498.62KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=41 row-size=52B cardinality=9.63K
 |  |  in pipelines: 78(GETNEXT)
 |  |
-|  F20:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=2 instances=2
-|  Per-Instance Resources: mem-estimate=112.94MB mem-reservation=36.00MB thread-reservation=1
+|  F20:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=3 instances=6
+|  Per-Instance Resources: mem-estimate=54.32MB mem-reservation=36.00MB thread-reservation=1
 |  52:AGGREGATE [STREAMING]
 |  |  output: sum(CAST(ws_quantity AS DECIMAL(10,0)) * ws_list_price)
 |  |  group by: c_last_name, c_first_name
@@ -1424,7 +1424,7 @@
 |  |  tuple-ids=28,21,23,39,22 row-size=162B cardinality=9.63K
 |  |  in pipelines: 78(GETNEXT), 27(OPEN)
 |  |
-|  |--F46:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=2 instances=2
+|  |--F46:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=3 instances=3
 |  |  |  Per-Instance Resources: mem-estimate=8.03MB mem-reservation=6.75MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=10 plan-id=11 cohort-id=05
@@ -1653,10 +1653,10 @@
 |  |  |  |  |     in pipelines: 40(GETNEXT)
 |  |  |  |  |
 |  |  |  |  38:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |  |     runtime filters: RF034[bloom] -> ss_sold_date_sk
 |  |  |  |     stored statistics:
-|  |  |  |       table: rows=2.88M size=201.02MB
+|  |  |  |       table: rows=2.88M size=200.95MB
 |  |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |  |       columns: all
 |  |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1697,9 +1697,9 @@
 |  |  |  |     in pipelines: 37(GETNEXT)
 |  |  |  |
 |  |  |  36:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1758,7 +1758,7 @@
 |  |  output: count:merge(*)
 |  |  group by: itemdesc, i_item_sk, d_date
 |  |  having: count(*) > CAST(4 AS BIGINT)
-|  |  mem-estimate=92.63MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  |  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  |  tuple-ids=28 row-size=50B cardinality=235.45K
 |  |  in pipelines: 78(GETNEXT), 30(OPEN)
 |  |
@@ -1848,10 +1848,10 @@
 |  |     in pipelines: 31(GETNEXT)
 |  |
 |  30:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF018[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF022[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1867,12 +1867,12 @@
 |  in pipelines: 74(GETNEXT), 57(OPEN)
 |
 73:EXCHANGE [HASH(c_last_name,c_first_name)]
-|  mem-estimate=345.95KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=513.84KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=20 row-size=52B cardinality=10.53K
 |  in pipelines: 57(GETNEXT)
 |
-F03:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=3 instances=3
-Per-Instance Resources: mem-estimate=82.07MB mem-reservation=36.00MB thread-reservation=1
+F03:PLAN FRAGMENT [HASH(itemdesc,i_item_sk,d_date)] hosts=3 instances=6
+Per-Instance Resources: mem-estimate=54.32MB mem-reservation=36.00MB thread-reservation=1
 26:AGGREGATE [STREAMING]
 |  output: sum(CAST(cs_quantity AS DECIMAL(10,0)) * cs_list_price)
 |  group by: c_last_name, c_first_name
@@ -2117,10 +2117,10 @@
 |  |  |  |     in pipelines: 14(GETNEXT)
 |  |  |  |
 |  |  |  12:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2161,9 +2161,9 @@
 |  |  |     in pipelines: 11(GETNEXT)
 |  |  |
 |  |  10:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2222,7 +2222,7 @@
 |  output: count:merge(*)
 |  group by: itemdesc, i_item_sk, d_date
 |  having: count(*) > CAST(4 AS BIGINT)
-|  mem-estimate=61.75MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=7 row-size=50B cardinality=235.45K
 |  in pipelines: 57(GETNEXT), 04(OPEN)
 |
@@ -2312,10 +2312,10 @@
 |     in pipelines: 05(GETNEXT)
 |
 04:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24a.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24a.test
index c887c2e..09cb6be 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24a.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24a.test
@@ -177,10 +177,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF026[bloom] -> ss_store_sk, RF022[bloom] -> ss_item_sk, RF023[bloom] -> ss_ticket_number
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -270,10 +270,10 @@
 |  |  |  |     in pipelines: 03(GETNEXT)
 |  |  |  |
 |  |  |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF012[bloom] -> ss_item_sk, RF010[bloom] -> ss_store_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -516,10 +516,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF026[bloom] -> ss_store_sk, RF022[bloom] -> ss_item_sk, RF023[bloom] -> ss_ticket_number
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -726,10 +726,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_item_sk, RF010[bloom] -> ss_store_sk, RF006[bloom] -> ss_item_sk, RF007[bloom] -> ss_ticket_number, RF004[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -987,10 +987,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF026[bloom] -> ss_store_sk, RF022[bloom] -> ss_item_sk, RF023[bloom] -> ss_ticket_number
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1241,10 +1241,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_item_sk, RF010[bloom] -> ss_store_sk, RF006[bloom] -> ss_item_sk, RF007[bloom] -> ss_ticket_number, RF004[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24b.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24b.test
index 475e922..2a37447 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24b.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q24b.test
@@ -177,10 +177,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF026[bloom] -> ss_store_sk, RF022[bloom] -> ss_item_sk, RF023[bloom] -> ss_ticket_number
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -270,10 +270,10 @@
 |  |  |  |     in pipelines: 03(GETNEXT)
 |  |  |  |
 |  |  |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF012[bloom] -> ss_item_sk, RF010[bloom] -> ss_store_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -516,10 +516,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF026[bloom] -> ss_store_sk, RF022[bloom] -> ss_item_sk, RF023[bloom] -> ss_ticket_number
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -726,10 +726,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_item_sk, RF010[bloom] -> ss_store_sk, RF006[bloom] -> ss_item_sk, RF007[bloom] -> ss_ticket_number, RF004[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -987,10 +987,10 @@
 |  |     in pipelines: 15(GETNEXT)
 |  |
 |  13:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF026[bloom] -> ss_store_sk, RF022[bloom] -> ss_item_sk, RF023[bloom] -> ss_ticket_number
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1241,10 +1241,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_item_sk, RF010[bloom] -> ss_store_sk, RF006[bloom] -> ss_item_sk, RF007[bloom] -> ss_ticket_number, RF004[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q25.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q25.test
index ef8fd03..835220a 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q25.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q25.test
@@ -169,10 +169,10 @@
 |  |  |  |     in pipelines: 03(GETNEXT)
 |  |  |  |
 |  |  |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF002[bloom] -> ss_store_sk, RF018[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -447,10 +447,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF012[bloom] -> ss_customer_sk, RF013[bloom] -> ss_item_sk, RF014[bloom] -> ss_ticket_number, RF018[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -469,10 +469,10 @@
    tuple-ids=2 row-size=20B cardinality=1.44M
    in pipelines: 02(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=98.40MB Threads=26
-Per-Host Resource Estimates: Memory=357MB
+Max Per-Host Resource Reservation: Memory=83.52MB Threads=22
+Per-Host Resource Estimates: Memory=281MB
 F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=146.26KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=76.92KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_id, i_item_desc, s_store_id, s_store_name, sum(ss_net_profit), sum(sr_net_loss), sum(cs_net_profit)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -480,12 +480,12 @@
 28:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: i_item_id ASC, i_item_desc ASC, s_store_id ASC, s_store_name ASC
 |  limit: 100
-|  mem-estimate=146.26KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=76.92KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=9 row-size=233B cardinality=100
 |  in pipelines: 16(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,s_store_id,s_store_name)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=10.64MB mem-reservation=1.94MB thread-reservation=1
+F10:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,s_store_id,s_store_name)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.34MB mem-reservation=1.94MB thread-reservation=1
 16:TOP-N [LIMIT=100]
 |  order by: i_item_id ASC, i_item_desc ASC, s_store_id ASC, s_store_name ASC
 |  mem-estimate=22.72KB mem-reservation=0B thread-reservation=0
@@ -500,12 +500,12 @@
 |  in pipelines: 27(GETNEXT), 02(OPEN)
 |
 26:EXCHANGE [HASH(i_item_id,i_item_desc,s_store_id,s_store_name)]
-|  mem-estimate=656.70KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=345.35KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=8 row-size=233B cardinality=449
 |  in pipelines: 02(GETNEXT)
 |
-F09:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=10.52MB mem-reservation=2.00MB thread-reservation=1
+F09:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.27MB mem-reservation=2.00MB thread-reservation=1
 15:AGGREGATE [STREAMING]
 |  output: sum(ss_net_profit), sum(sr_net_loss), sum(cs_net_profit)
 |  group by: i_item_id, i_item_desc, s_store_id, s_store_name
@@ -521,7 +521,7 @@
 |  tuple-ids=2,0,3,1,4,5,6,7 row-size=313B cardinality=449
 |  in pipelines: 02(GETNEXT), 07(OPEN)
 |
-|--F12:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
+|--F12:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=5.63MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -547,11 +547,11 @@
 |     in pipelines: 07(GETNEXT)
 |
 24:EXCHANGE [HASH(ss_item_sk)]
-|  mem-estimate=529.79KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=276.90KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=2,0,3,1,4,5,6 row-size=164B cardinality=449
 |  in pipelines: 02(GETNEXT)
 |
-F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 Per-Host Shared Resources: mem-estimate=4.00MB mem-reservation=4.00MB thread-reservation=0 runtime-filters-memory=4.00MB
 Per-Instance Resources: mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=1
 13:HASH JOIN [INNER JOIN, BROADCAST]
@@ -762,10 +762,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF012[bloom] -> ss_customer_sk, RF013[bloom] -> ss_item_sk, RF014[bloom] -> ss_ticket_number, RF018[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q27.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q27.test
index 3fe729e..6850013 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q27.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q27.test
@@ -137,10 +137,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_cdemo_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -323,10 +323,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_cdemo_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q28.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q28.test
index 4728e74..6fa8cfa 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q28.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q28.test
@@ -80,10 +80,10 @@
 |  |  in pipelines: 16(GETNEXT), 15(OPEN)
 |  |
 |  15:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(30 AS INT), ss_quantity >= CAST(26 AS INT), (ss_list_price >= CAST(154 AS DECIMAL(5,0)) AND ss_list_price <= CAST(164 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(7326 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(8326 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(7 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(27 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -112,10 +112,10 @@
 |  |  in pipelines: 13(GETNEXT), 12(OPEN)
 |  |
 |  12:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(25 AS INT), ss_quantity >= CAST(21 AS INT), (ss_list_price >= CAST(122 AS DECIMAL(3,0)) AND ss_list_price <= CAST(132 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(836 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(1836 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(17 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(37 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -144,10 +144,10 @@
 |  |  in pipelines: 10(GETNEXT), 09(OPEN)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(16 AS INT), (ss_list_price >= CAST(135 AS DECIMAL(5,0)) AND ss_list_price <= CAST(145 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(6071 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(7071 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(38 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(58 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -176,10 +176,10 @@
 |  |  in pipelines: 07(GETNEXT), 06(OPEN)
 |  |
 |  06:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(15 AS INT), ss_quantity >= CAST(11 AS INT), (ss_list_price >= CAST(142 AS DECIMAL(5,0)) AND ss_list_price <= CAST(152 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(12214 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(13214 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(79 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(99 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -208,10 +208,10 @@
 |  |  in pipelines: 04(GETNEXT), 03(OPEN)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(10 AS INT), ss_quantity >= CAST(6 AS INT), (ss_list_price >= CAST(90 AS DECIMAL(3,0)) AND ss_list_price <= CAST(100 AS DECIMAL(3,0)) OR ss_coupon_amt >= CAST(2323 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(3323 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(31 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(51 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -235,10 +235,10 @@
 |  in pipelines: 01(GETNEXT), 00(OPEN)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_quantity <= CAST(5 AS INT), ss_quantity >= CAST(0 AS INT), (ss_list_price >= CAST(8 AS DECIMAL(3,0)) AND ss_list_price <= CAST(18 AS DECIMAL(3,0)) OR ss_coupon_amt >= CAST(459 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(1459 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(57 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(77 AS DECIMAL(3,0)))
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -310,10 +310,10 @@
 |  |  in pipelines: 15(GETNEXT)
 |  |
 |  15:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(30 AS INT), ss_quantity >= CAST(26 AS INT), (ss_list_price >= CAST(154 AS DECIMAL(5,0)) AND ss_list_price <= CAST(164 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(7326 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(8326 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(7 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(27 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -376,10 +376,10 @@
 |  |  in pipelines: 12(GETNEXT)
 |  |
 |  12:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(25 AS INT), ss_quantity >= CAST(21 AS INT), (ss_list_price >= CAST(122 AS DECIMAL(3,0)) AND ss_list_price <= CAST(132 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(836 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(1836 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(17 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(37 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -442,10 +442,10 @@
 |  |  in pipelines: 09(GETNEXT)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(16 AS INT), (ss_list_price >= CAST(135 AS DECIMAL(5,0)) AND ss_list_price <= CAST(145 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(6071 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(7071 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(38 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(58 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -508,10 +508,10 @@
 |  |  in pipelines: 06(GETNEXT)
 |  |
 |  06:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(15 AS INT), ss_quantity >= CAST(11 AS INT), (ss_list_price >= CAST(142 AS DECIMAL(5,0)) AND ss_list_price <= CAST(152 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(12214 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(13214 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(79 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(99 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -574,10 +574,10 @@
 |  |  in pipelines: 03(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(10 AS INT), ss_quantity >= CAST(6 AS INT), (ss_list_price >= CAST(90 AS DECIMAL(3,0)) AND ss_list_price <= CAST(100 AS DECIMAL(3,0)) OR ss_coupon_amt >= CAST(2323 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(3323 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(31 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(51 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -628,10 +628,10 @@
 |  in pipelines: 00(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_quantity <= CAST(5 AS INT), ss_quantity >= CAST(0 AS INT), (ss_list_price >= CAST(8 AS DECIMAL(3,0)) AND ss_list_price <= CAST(18 AS DECIMAL(3,0)) OR ss_coupon_amt >= CAST(459 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(1459 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(57 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(77 AS DECIMAL(3,0)))
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -710,10 +710,10 @@
 |  |  in pipelines: 15(GETNEXT)
 |  |
 |  15:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(30 AS INT), ss_quantity >= CAST(26 AS INT), (ss_list_price >= CAST(154 AS DECIMAL(5,0)) AND ss_list_price <= CAST(164 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(7326 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(8326 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(7 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(27 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -783,10 +783,10 @@
 |  |  in pipelines: 12(GETNEXT)
 |  |
 |  12:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(25 AS INT), ss_quantity >= CAST(21 AS INT), (ss_list_price >= CAST(122 AS DECIMAL(3,0)) AND ss_list_price <= CAST(132 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(836 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(1836 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(17 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(37 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -856,10 +856,10 @@
 |  |  in pipelines: 09(GETNEXT)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(20 AS INT), ss_quantity >= CAST(16 AS INT), (ss_list_price >= CAST(135 AS DECIMAL(5,0)) AND ss_list_price <= CAST(145 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(6071 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(7071 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(38 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(58 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -929,10 +929,10 @@
 |  |  in pipelines: 06(GETNEXT)
 |  |
 |  06:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(15 AS INT), ss_quantity >= CAST(11 AS INT), (ss_list_price >= CAST(142 AS DECIMAL(5,0)) AND ss_list_price <= CAST(152 AS DECIMAL(5,0)) OR ss_coupon_amt >= CAST(12214 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(13214 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(79 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(99 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1002,10 +1002,10 @@
 |  |  in pipelines: 03(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_quantity <= CAST(10 AS INT), ss_quantity >= CAST(6 AS INT), (ss_list_price >= CAST(90 AS DECIMAL(3,0)) AND ss_list_price <= CAST(100 AS DECIMAL(3,0)) OR ss_coupon_amt >= CAST(2323 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(3323 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(31 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(51 AS DECIMAL(3,0)))
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1056,10 +1056,10 @@
 |  in pipelines: 00(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_quantity <= CAST(5 AS INT), ss_quantity >= CAST(0 AS INT), (ss_list_price >= CAST(8 AS DECIMAL(3,0)) AND ss_list_price <= CAST(18 AS DECIMAL(3,0)) OR ss_coupon_amt >= CAST(459 AS DECIMAL(5,0)) AND ss_coupon_amt <= CAST(1459 AS DECIMAL(5,0)) OR ss_wholesale_cost >= CAST(57 AS DECIMAL(3,0)) AND ss_wholesale_cost <= CAST(77 AS DECIMAL(3,0)))
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q29.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q29.test
index 1329900..63d3c3b 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q29.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q29.test
@@ -169,10 +169,10 @@
 |  |  |  |     in pipelines: 03(GETNEXT)
 |  |  |  |
 |  |  |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF002[bloom] -> ss_store_sk, RF018[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -447,10 +447,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF012[bloom] -> ss_customer_sk, RF013[bloom] -> ss_item_sk, RF014[bloom] -> ss_ticket_number, RF018[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -469,10 +469,10 @@
    tuple-ids=2 row-size=20B cardinality=1.44M
    in pipelines: 02(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=98.40MB Threads=26
-Per-Host Resource Estimates: Memory=360MB
+Max Per-Host Resource Reservation: Memory=83.52MB Threads=22
+Per-Host Resource Estimates: Memory=283MB
 F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=131.42KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=69.10KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_id, i_item_desc, s_store_id, s_store_name, sum(ss_quantity), sum(sr_return_quantity), sum(cs_quantity)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -480,12 +480,12 @@
 28:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: i_item_id ASC, i_item_desc ASC, s_store_id ASC, s_store_name ASC
 |  limit: 100
-|  mem-estimate=131.42KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=69.10KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=9 row-size=209B cardinality=100
 |  in pipelines: 16(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,s_store_id,s_store_name)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=11.53MB mem-reservation=1.94MB thread-reservation=1
+F10:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,s_store_id,s_store_name)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.91MB mem-reservation=1.94MB thread-reservation=1
 16:TOP-N [LIMIT=100]
 |  order by: i_item_id ASC, i_item_desc ASC, s_store_id ASC, s_store_name ASC
 |  mem-estimate=20.38KB mem-reservation=0B thread-reservation=0
@@ -500,12 +500,12 @@
 |  in pipelines: 27(GETNEXT), 02(OPEN)
 |
 26:EXCHANGE [HASH(i_item_id,i_item_desc,s_store_id,s_store_name)]
-|  mem-estimate=1.53MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=926.83KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=8 row-size=209B cardinality=4.25K
 |  in pipelines: 02(GETNEXT)
 |
-F09:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=11.32MB mem-reservation=2.00MB thread-reservation=1
+F09:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.77MB mem-reservation=2.00MB thread-reservation=1
 15:AGGREGATE [STREAMING]
 |  output: sum(CAST(ss_quantity AS BIGINT)), sum(CAST(sr_return_quantity AS BIGINT)), sum(CAST(cs_quantity AS BIGINT))
 |  group by: i_item_id, i_item_desc, s_store_id, s_store_name
@@ -521,7 +521,7 @@
 |  tuple-ids=2,0,3,1,4,5,6,7 row-size=309B cardinality=4.25K
 |  in pipelines: 02(GETNEXT), 07(OPEN)
 |
-|--F12:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
+|--F12:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=5.63MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -547,11 +547,11 @@
 |     in pipelines: 07(GETNEXT)
 |
 24:EXCHANGE [HASH(ss_item_sk)]
-|  mem-estimate=1.32MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=786.50KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=2,0,3,1,4,5,6 row-size=160B cardinality=4.25K
 |  in pipelines: 02(GETNEXT)
 |
-F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 Per-Host Shared Resources: mem-estimate=4.00MB mem-reservation=4.00MB thread-reservation=0 runtime-filters-memory=4.00MB
 Per-Instance Resources: mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=1
 13:HASH JOIN [INNER JOIN, BROADCAST]
@@ -762,10 +762,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF012[bloom] -> ss_customer_sk, RF013[bloom] -> ss_item_sk, RF014[bloom] -> ss_ticket_number, RF018[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q31.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q31.test
index 5295047..ffcba7d 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q31.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q31.test
@@ -139,10 +139,10 @@
 |  |     in pipelines: 13(GETNEXT)
 |  |
 |  12:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF032[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -204,10 +204,10 @@
 |  |     in pipelines: 07(GETNEXT)
 |  |
 |  06:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF028[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -454,10 +454,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_addr_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -576,10 +576,10 @@
 |  |     in pipelines: 13(GETNEXT)
 |  |
 |  12:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF032[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -676,10 +676,10 @@
 |  |     in pipelines: 07(GETNEXT)
 |  |
 |  06:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF028[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1087,10 +1087,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_addr_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1234,10 +1234,10 @@
 |  |     in pipelines: 13(GETNEXT)
 |  |
 |  12:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF032[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1359,10 +1359,10 @@
 |  |     in pipelines: 07(GETNEXT)
 |  |
 |  06:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF028[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1862,10 +1862,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_addr_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q33.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q33.test
index 421247d..0360b22 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q33.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q33.test
@@ -382,10 +382,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_addr_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -866,10 +866,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_addr_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q34.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q34.test
index 7266357..ecb6948 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q34.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q34.test
@@ -137,10 +137,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF002[bloom] -> store_sales.ss_store_sk, RF004[bloom] -> store_sales.ss_sold_date_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -159,10 +159,10 @@
    tuple-ids=6 row-size=68B cardinality=100.00K
    in pipelines: 08(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=26.83MB Threads=13
-Per-Host Resource Estimates: Memory=335MB
+Max Per-Host Resource Reservation: Memory=23.08MB Threads=13
+Per-Host Resource Estimates: Memory=331MB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=331.17KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=334.94KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: c_last_name, c_first_name, c_salutation, c_preferred_cust_flag, ss_ticket_number, cnt
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -170,12 +170,12 @@
 18:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: c_last_name ASC, c_first_name ASC, c_salutation ASC, c_preferred_cust_flag DESC
 |  limit: 100000
-|  mem-estimate=331.17KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=334.94KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=7 row-size=80B cardinality=3.15K
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=16.17MB mem-reservation=9.50MB thread-reservation=1 runtime-filters-memory=1.00MB
+F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=12.42MB mem-reservation=5.75MB thread-reservation=1 runtime-filters-memory=1.00MB
 10:TOP-N [LIMIT=100000]
 |  order by: c_last_name ASC, c_first_name ASC, c_salutation ASC, c_preferred_cust_flag DESC
 |  mem-estimate=246.96KB mem-reservation=0B thread-reservation=0
@@ -186,7 +186,7 @@
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  fk/pk conjuncts: none
 |  runtime filters: RF000[bloom] <- c_customer_sk
-|  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
+|  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
 |  tuple-ids=4,6 row-size=88B cardinality=3.15K
 |  in pipelines: 15(GETNEXT), 08(OPEN)
 |
@@ -321,10 +321,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_store_sk, RF004[bloom] -> store_sales.ss_sold_date_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -332,10 +332,10 @@
    tuple-ids=0 row-size=24B cardinality=2.88M
    in pipelines: 00(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=41.58MB Threads=14
-Per-Host Resource Estimates: Memory=172MB
+Max Per-Host Resource Reservation: Memory=39.83MB Threads=16
+Per-Host Resource Estimates: Memory=178MB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=331.17KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=587.56KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: c_last_name, c_first_name, c_salutation, c_preferred_cust_flag, ss_ticket_number, cnt
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -343,11 +343,11 @@
 18:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: c_last_name ASC, c_first_name ASC, c_salutation ASC, c_preferred_cust_flag DESC
 |  limit: 100000
-|  mem-estimate=331.17KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=587.56KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=7 row-size=80B cardinality=3.15K
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
+F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=6
 Per-Instance Resources: mem-estimate=411.49KB mem-reservation=0B thread-reservation=1
 10:TOP-N [LIMIT=100000]
 |  order by: c_last_name ASC, c_first_name ASC, c_salutation ASC, c_preferred_cust_flag DESC
@@ -359,17 +359,17 @@
 |  hash-table-id=00
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  fk/pk conjuncts: none
-|  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
+|  mem-estimate=0B mem-reservation=0B spill-buffer=128.00KB thread-reservation=0
 |  tuple-ids=4,6 row-size=88B cardinality=3.15K
 |  in pipelines: 15(GETNEXT), 08(OPEN)
 |
-|--F08:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=16.08MB mem-reservation=9.50MB thread-reservation=1 runtime-filters-memory=1.00MB
+|--F08:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=6
+|  |  Per-Instance Resources: mem-estimate=10.45MB mem-reservation=3.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
 |  |  build expressions: c_customer_sk
 |  |  runtime filters: RF000[bloom] <- c_customer_sk
-|  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
+|  |  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
 |  |
 |  17:EXCHANGE [HASH(c_customer_sk)]
 |  |  mem-estimate=6.58MB mem-reservation=0B thread-reservation=0
@@ -527,10 +527,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_store_sk, RF004[bloom] -> store_sales.ss_sold_date_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q35a.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q35a.test
index 361a554..2a11ede 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q35a.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q35a.test
@@ -184,10 +184,10 @@
 |  |     in pipelines: 04(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -243,10 +243,10 @@
    tuple-ids=2 row-size=42B cardinality=1.92M
    in pipelines: 02(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=85.94MB Threads=19
-Per-Host Resource Estimates: Memory=515MB
+Max Per-Host Resource Reservation: Memory=53.56MB Threads=19
+Per-Host Resource Estimates: Memory=492MB
 F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=21.48KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=36.33KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: ca_state, cd_gender, cd_marital_status, cd_dep_count, count(*), min(cd_dep_count), max(cd_dep_count), avg(cd_dep_count), cd_dep_employed_count, count(*), min(cd_dep_employed_count), max(cd_dep_employed_count), avg(cd_dep_employed_count), cd_dep_college_count, count(*), min(cd_dep_college_count), max(cd_dep_college_count), avg(cd_dep_college_count)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -254,12 +254,12 @@
 29:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: ca_state ASC, cd_gender ASC, cd_marital_status ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  limit: 100
-|  mem-estimate=21.48KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=36.33KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=15 row-size=108B cardinality=100
 |  in pipelines: 18(GETNEXT)
 |
-F11:PLAN FRAGMENT [HASH(ca_state,cd_gender,cd_marital_status,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=26.44MB mem-reservation=17.00MB thread-reservation=1
+F11:PLAN FRAGMENT [HASH(ca_state,cd_gender,cd_marital_status,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=13.44MB mem-reservation=1.94MB thread-reservation=1
 18:TOP-N [LIMIT=100]
 |  order by: ca_state ASC, cd_gender ASC, cd_marital_status ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  mem-estimate=10.55KB mem-reservation=0B thread-reservation=0
@@ -269,221 +269,220 @@
 28:AGGREGATE [FINALIZE]
 |  output: count:merge(*), min:merge(cd_dep_count), max:merge(cd_dep_count), avg:merge(cd_dep_count), min:merge(cd_dep_employed_count), max:merge(cd_dep_employed_count), avg:merge(cd_dep_employed_count), min:merge(cd_dep_college_count), max:merge(cd_dep_college_count), avg:merge(cd_dep_college_count)
 |  group by: ca_state, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count
-|  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=14 row-size=108B cardinality=90.63K
-|  in pipelines: 28(GETNEXT), 07(OPEN), 10(OPEN)
+|  in pipelines: 28(GETNEXT), 03(OPEN)
 |
 27:EXCHANGE [HASH(ca_state,cd_gender,cd_marital_status,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)]
-|  mem-estimate=9.44MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=3.44MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=13 row-size=108B cardinality=90.63K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
+|  in pipelines: 03(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=37.47MB mem-reservation=36.00MB thread-reservation=1 runtime-filters-memory=2.00MB
+F05:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=27.10MB mem-reservation=17.69MB thread-reservation=1 runtime-filters-memory=2.00MB
 17:AGGREGATE [STREAMING]
 |  output: count(*), min(cd_dep_count), max(cd_dep_count), avg(CAST(cd_dep_count AS BIGINT)), min(cd_dep_employed_count), max(cd_dep_employed_count), avg(CAST(cd_dep_employed_count AS BIGINT)), min(cd_dep_college_count), max(cd_dep_college_count), avg(CAST(cd_dep_college_count AS BIGINT))
 |  group by: ca_state, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count
-|  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=9.00MB spill-buffer=512.00KB thread-reservation=0
 |  tuple-ids=13 row-size=108B cardinality=90.63K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
+|  in pipelines: 03(GETNEXT)
 |
-16:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
-|  hash predicates: customsk = c.c_customer_sk
-|  runtime filters: RF000[bloom] <- c.c_customer_sk
-|  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
+16:HASH JOIN [LEFT SEMI JOIN, PARTITIONED]
+|  hash predicates: c.c_customer_sk = customsk
+|  runtime filters: RF000[bloom] <- customsk
+|  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=2,0,1 row-size=72B cardinality=90.63K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT), 03(OPEN)
+|  in pipelines: 03(GETNEXT), 07(OPEN), 10(OPEN)
 |
-|--15:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
-|  |  hash predicates: ss_customer_sk = c.c_customer_sk
-|  |  runtime filters: RF006[bloom] <- c.c_customer_sk
-|  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
-|  |  tuple-ids=2,0,1 row-size=72B cardinality=90.63K
-|  |  in pipelines: 03(GETNEXT), 02(OPEN)
+|--26:EXCHANGE [HASH(customsk)]
+|  |  mem-estimate=206.33KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=10 row-size=4B cardinality=140.03K
+|  |  in pipelines: 07(GETNEXT), 10(GETNEXT)
 |  |
-|  |--25:EXCHANGE [HASH(c.c_customer_sk)]
-|  |  |  mem-estimate=6.95MB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
-|  |  |  in pipelines: 02(GETNEXT)
-|  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  Per-Host Resources: mem-estimate=104.85MB mem-reservation=14.81MB thread-reservation=2 runtime-filters-memory=2.00MB
-|  |  14:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
-|  |  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
-|  |  |  runtime filters: RF010[bloom] <- ca.ca_address_sk
+|  F10:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  Per-Host Resources: mem-estimate=99.95MB mem-reservation=7.94MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  06:UNION
+|  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=10 row-size=4B cardinality=140.03K
+|  |  in pipelines: 07(GETNEXT), 10(GETNEXT)
+|  |
+|  |--12:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash predicates: cs_sold_date_sk = d_date_sk
+|  |  |  fk/pk conjuncts: cs_sold_date_sk = d_date_sk
+|  |  |  runtime filters: RF012[bloom] <- d_date_sk
 |  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
-|  |  |  in pipelines: 02(GETNEXT), 01(OPEN)
+|  |  |  tuple-ids=8,9 row-size=20B cardinality=93.21K
+|  |  |  in pipelines: 10(GETNEXT), 11(OPEN)
 |  |  |
-|  |  |--23:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=900.91KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=1 row-size=18B cardinality=50.00K
-|  |  |  |  in pipelines: 01(GETNEXT)
+|  |  |--25:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=9 row-size=12B cardinality=118
+|  |  |  |  in pipelines: 11(GETNEXT)
 |  |  |  |
 |  |  |  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=2
-|  |  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=1.16MB
+|  |  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
+|  |  |  11:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |  |  |     stored statistics:
-|  |  |       table: rows=50.00K size=1.16MB
+|  |  |       table: rows=73.05K size=2.15MB
 |  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
-|  |  |     mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=1
-|  |  |     tuple-ids=1 row-size=18B cardinality=50.00K
-|  |  |     in pipelines: 01(GETNEXT)
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
+|  |  |     tuple-ids=9 row-size=12B cardinality=118
+|  |  |     in pipelines: 11(GETNEXT)
 |  |  |
-|  |  13:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
-|  |  |  fk/pk conjuncts: none
-|  |  |  runtime filters: RF012[bloom] <- c.c_current_cdemo_sk
-|  |  |  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
-|  |  |  tuple-ids=2,0 row-size=54B cardinality=100.00K
-|  |  |  in pipelines: 02(GETNEXT), 00(OPEN)
-|  |  |
-|  |  |--22:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |  |  in pipelines: 00(GETNEXT)
-|  |  |  |
-|  |  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=49.00MB mem-reservation=3.00MB thread-reservation=2 runtime-filters-memory=1.00MB
-|  |  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=5.49MB
-|  |  |     runtime filters: RF010[bloom] -> c.c_current_addr_sk
-|  |  |     stored statistics:
-|  |  |       table: rows=100.00K size=5.49MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
-|  |  |     mem-estimate=48.00MB mem-reservation=2.00MB thread-reservation=1
-|  |  |     tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |     in pipelines: 00(GETNEXT)
-|  |  |
-|  |  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
-|  |     HDFS partitions=1/1 files=1 size=7.49MB
-|  |     runtime filters: RF012[bloom] -> cd_demo_sk
+|  |  10:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
+|  |     HDFS partitions=1/1 files=3 size=96.62MB
+|  |     runtime filters: RF012[bloom] -> cs_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=1.92M size=7.49MB
+|  |       table: rows=1.44M size=96.62MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
-|  |     mem-estimate=96.00MB mem-reservation=8.00MB thread-reservation=1
-|  |     tuple-ids=2 row-size=42B cardinality=1.92M
-|  |     in pipelines: 02(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=650.14K
+|  |     mem-estimate=96.00MB mem-reservation=4.00MB thread-reservation=1
+|  |     tuple-ids=8 row-size=8B cardinality=1.44M
+|  |     in pipelines: 10(GETNEXT)
 |  |
-|  24:EXCHANGE [HASH(ss_customer_sk)]
-|  |  mem-estimate=1.27MB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  in pipelines: 03(GETNEXT)
-|  |
-|  F05:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  Per-Host Resources: mem-estimate=19.95MB mem-reservation=4.44MB thread-reservation=2 runtime-filters-memory=2.00MB
-|  05:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash predicates: ss_sold_date_sk = d_date_sk
-|  |  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
-|  |  runtime filters: RF008[bloom] <- d_date_sk
+|  09:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash predicates: ws_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
+|  |  runtime filters: RF010[bloom] <- d_date_sk
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  in pipelines: 03(GETNEXT), 04(OPEN)
+|  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
+|  |  in pipelines: 07(GETNEXT), 08(OPEN)
+|  |
+|  |--24:EXCHANGE [BROADCAST]
+|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=7 row-size=12B cardinality=118
+|  |  |  in pipelines: 08(GETNEXT)
+|  |  |
+|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
+|  |  08:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |     stored statistics:
+|  |       table: rows=73.05K size=2.15MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
+|  |     tuple-ids=7 row-size=12B cardinality=118
+|  |     in pipelines: 08(GETNEXT)
+|  |
+|  07:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
+|     HDFS partitions=1/1 files=2 size=45.09MB
+|     runtime filters: RF010[bloom] -> ws_sold_date_sk
+|     stored statistics:
+|       table: rows=719.38K size=45.09MB
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=644.77K
+|     mem-estimate=64.00MB mem-reservation=4.00MB thread-reservation=1
+|     tuple-ids=6 row-size=8B cardinality=719.38K
+|     in pipelines: 07(GETNEXT)
+|
+15:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
+|  hash predicates: ss_customer_sk = c.c_customer_sk
+|  runtime filters: RF002[bloom] <- c.c_customer_sk
+|  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
+|  tuple-ids=2,0,1 row-size=72B cardinality=90.63K
+|  in pipelines: 03(GETNEXT), 02(OPEN)
+|
+|--23:EXCHANGE [HASH(c.c_customer_sk)]
+|  |  mem-estimate=6.95MB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
+|  |  in pipelines: 02(GETNEXT)
+|  |
+|  F02:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  Per-Host Resources: mem-estimate=104.85MB mem-reservation=14.81MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  14:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
+|  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
+|  |  runtime filters: RF006[bloom] <- ca.ca_address_sk
+|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
+|  |  in pipelines: 02(GETNEXT), 01(OPEN)
 |  |
 |  |--21:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=4 row-size=12B cardinality=118
-|  |  |  in pipelines: 04(GETNEXT)
+|  |  |  mem-estimate=900.91KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=1 row-size=18B cardinality=50.00K
+|  |  |  in pipelines: 01(GETNEXT)
 |  |  |
-|  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
-|  |  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  F04:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=2
+|  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=1.16MB
 |  |     stored statistics:
-|  |       table: rows=73.05K size=2.15MB
+|  |       table: rows=50.00K size=1.16MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
-|  |     tuple-ids=4 row-size=12B cardinality=118
-|  |     in pipelines: 04(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
+|  |     mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=1
+|  |     tuple-ids=1 row-size=18B cardinality=50.00K
+|  |     in pipelines: 01(GETNEXT)
 |  |
-|  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|     runtime filters: RF006[bloom] -> ss_customer_sk, RF008[bloom] -> ss_sold_date_sk
-|     stored statistics:
-|       table: rows=2.88M size=201.02MB
-|       partitions: 1824/1824 rows=2.88M
-|       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|     tuple-ids=3 row-size=8B cardinality=2.88M
-|     in pipelines: 03(GETNEXT)
-|
-26:EXCHANGE [HASH(customsk)]
-|  mem-estimate=206.33KB mem-reservation=0B thread-reservation=0
-|  tuple-ids=10 row-size=4B cardinality=140.03K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
-|
-F04:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=100.95MB mem-reservation=8.94MB thread-reservation=2 runtime-filters-memory=3.00MB
-06:UNION
-|  mem-estimate=0B mem-reservation=0B thread-reservation=0
-|  tuple-ids=10 row-size=4B cardinality=140.03K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
-|
-|--12:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash predicates: cs_sold_date_sk = d_date_sk
-|  |  fk/pk conjuncts: cs_sold_date_sk = d_date_sk
-|  |  runtime filters: RF004[bloom] <- d_date_sk
-|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=8,9 row-size=20B cardinality=93.21K
-|  |  in pipelines: 10(GETNEXT), 11(OPEN)
+|  13:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
+|  |  fk/pk conjuncts: none
+|  |  runtime filters: RF008[bloom] <- c.c_current_cdemo_sk
+|  |  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
+|  |  tuple-ids=2,0 row-size=54B cardinality=100.00K
+|  |  in pipelines: 02(GETNEXT), 00(OPEN)
 |  |
 |  |--20:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=9 row-size=12B cardinality=118
-|  |  |  in pipelines: 11(GETNEXT)
+|  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
+|  |  |  in pipelines: 00(GETNEXT)
 |  |  |
 |  |  F03:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
-|  |  11:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  Per-Host Resources: mem-estimate=50.00MB mem-reservation=4.00MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=5.49MB
+|  |     runtime filters: RF000[bloom] -> c.c_customer_sk, RF006[bloom] -> c.c_current_addr_sk
 |  |     stored statistics:
-|  |       table: rows=73.05K size=2.15MB
+|  |       table: rows=100.00K size=5.49MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
-|  |     tuple-ids=9 row-size=12B cardinality=118
-|  |     in pipelines: 11(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
+|  |     mem-estimate=48.00MB mem-reservation=2.00MB thread-reservation=1
+|  |     tuple-ids=0 row-size=12B cardinality=100.00K
+|  |     in pipelines: 00(GETNEXT)
 |  |
-|  10:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
-|     HDFS partitions=1/1 files=3 size=96.62MB
-|     runtime filters: RF000[bloom] -> tpcds_parquet.catalog_sales.cs_ship_customer_sk, RF004[bloom] -> cs_sold_date_sk
+|  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
+|     HDFS partitions=1/1 files=1 size=7.49MB
+|     runtime filters: RF008[bloom] -> cd_demo_sk
 |     stored statistics:
-|       table: rows=1.44M size=96.62MB
+|       table: rows=1.92M size=7.49MB
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=650.14K
-|     mem-estimate=96.00MB mem-reservation=4.00MB thread-reservation=1
-|     tuple-ids=8 row-size=8B cardinality=1.44M
-|     in pipelines: 10(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=1.92M
+|     mem-estimate=96.00MB mem-reservation=8.00MB thread-reservation=1
+|     tuple-ids=2 row-size=42B cardinality=1.92M
+|     in pipelines: 02(GETNEXT)
 |
-09:HASH JOIN [INNER JOIN, BROADCAST]
-|  hash predicates: ws_sold_date_sk = d_date_sk
-|  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
-|  runtime filters: RF002[bloom] <- d_date_sk
+22:EXCHANGE [HASH(ss_customer_sk)]
+|  mem-estimate=1.27MB mem-reservation=0B thread-reservation=0
+|  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  in pipelines: 03(GETNEXT)
+|
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+Per-Host Resources: mem-estimate=20.95MB mem-reservation=5.44MB thread-reservation=2 runtime-filters-memory=3.00MB
+05:HASH JOIN [INNER JOIN, BROADCAST]
+|  hash predicates: ss_sold_date_sk = d_date_sk
+|  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
+|  runtime filters: RF004[bloom] <- d_date_sk
 |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=6,7 row-size=20B cardinality=46.82K
-|  in pipelines: 07(GETNEXT), 08(OPEN)
+|  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  in pipelines: 03(GETNEXT), 04(OPEN)
 |
 |--19:EXCHANGE [BROADCAST]
 |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=7 row-size=12B cardinality=118
-|  |  in pipelines: 08(GETNEXT)
+|  |  tuple-ids=4 row-size=12B cardinality=118
+|  |  in pipelines: 04(GETNEXT)
 |  |
 |  F01:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
-|  08:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
 |     HDFS partitions=1/1 files=1 size=2.15MB
 |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |     stored statistics:
@@ -493,24 +492,25 @@
 |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
-|     tuple-ids=7 row-size=12B cardinality=118
-|     in pipelines: 08(GETNEXT)
+|     tuple-ids=4 row-size=12B cardinality=118
+|     in pipelines: 04(GETNEXT)
 |
-07:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
-   HDFS partitions=1/1 files=2 size=45.09MB
-   runtime filters: RF000[bloom] -> tpcds_parquet.web_sales.ws_bill_customer_sk, RF002[bloom] -> ws_sold_date_sk
+03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
+   runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=719.38K size=45.09MB
+     table: rows=2.88M size=200.95MB
+     partitions: 1824/1824 rows=2.88M
      columns: all
-   extrapolated-rows=disabled max-scan-range-rows=644.77K
-   mem-estimate=64.00MB mem-reservation=4.00MB thread-reservation=1
-   tuple-ids=6 row-size=8B cardinality=719.38K
-   in pipelines: 07(GETNEXT)
+   extrapolated-rows=disabled max-scan-range-rows=130.09K
+   mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+   tuple-ids=3 row-size=8B cardinality=2.88M
+   in pipelines: 03(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=103.00MB Threads=19
-Per-Host Resource Estimates: Memory=282MB
+Max Per-Host Resource Reservation: Memory=78.50MB Threads=23
+Per-Host Resource Estimates: Memory=291MB
 F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=21.48KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=69.14KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: ca_state, cd_gender, cd_marital_status, cd_dep_count, count(*), min(cd_dep_count), max(cd_dep_count), avg(cd_dep_count), cd_dep_employed_count, count(*), min(cd_dep_employed_count), max(cd_dep_employed_count), avg(cd_dep_employed_count), cd_dep_college_count, count(*), min(cd_dep_college_count), max(cd_dep_college_count), avg(cd_dep_college_count)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -518,12 +518,12 @@
 29:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: ca_state ASC, cd_gender ASC, cd_marital_status ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  limit: 100
-|  mem-estimate=21.48KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=69.14KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=15 row-size=108B cardinality=100
 |  in pipelines: 18(GETNEXT)
 |
-F11:PLAN FRAGMENT [HASH(ca_state,cd_gender,cd_marital_status,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=1 instances=1
-Per-Instance Resources: mem-estimate=26.44MB mem-reservation=17.00MB thread-reservation=1
+F11:PLAN FRAGMENT [HASH(ca_state,cd_gender,cd_marital_status,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)] hosts=3 instances=6
+Per-Instance Resources: mem-estimate=13.77MB mem-reservation=1.94MB thread-reservation=1
 18:TOP-N [LIMIT=100]
 |  order by: ca_state ASC, cd_gender ASC, cd_marital_status ASC, cd_dep_count ASC, cd_dep_employed_count ASC, cd_dep_college_count ASC
 |  mem-estimate=10.55KB mem-reservation=0B thread-reservation=0
@@ -533,281 +533,280 @@
 28:AGGREGATE [FINALIZE]
 |  output: count:merge(*), min:merge(cd_dep_count), max:merge(cd_dep_count), avg:merge(cd_dep_count), min:merge(cd_dep_employed_count), max:merge(cd_dep_employed_count), avg:merge(cd_dep_employed_count), min:merge(cd_dep_college_count), max:merge(cd_dep_college_count), avg:merge(cd_dep_college_count)
 |  group by: ca_state, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count
-|  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=14 row-size=108B cardinality=90.63K
-|  in pipelines: 28(GETNEXT), 07(OPEN), 10(OPEN)
+|  in pipelines: 28(GETNEXT), 03(OPEN)
 |
 27:EXCHANGE [HASH(ca_state,cd_gender,cd_marital_status,cd_dep_count,cd_dep_employed_count,cd_dep_college_count)]
-|  mem-estimate=9.44MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=3.77MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=13 row-size=108B cardinality=90.63K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
+|  in pipelines: 03(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-Per-Instance Resources: mem-estimate=17.20MB mem-reservation=17.00MB thread-reservation=1
+F05:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=6
+Per-Instance Resources: mem-estimate=11.35MB mem-reservation=5.00MB thread-reservation=1
 17:AGGREGATE [STREAMING]
 |  output: count(*), min(cd_dep_count), max(cd_dep_count), avg(CAST(cd_dep_count AS BIGINT)), min(cd_dep_employed_count), max(cd_dep_employed_count), avg(CAST(cd_dep_employed_count AS BIGINT)), min(cd_dep_college_count), max(cd_dep_college_count), avg(CAST(cd_dep_college_count AS BIGINT))
 |  group by: ca_state, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count
-|  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=5.00MB spill-buffer=256.00KB thread-reservation=0
 |  tuple-ids=13 row-size=108B cardinality=90.63K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
+|  in pipelines: 03(GETNEXT)
 |
-16:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
+16:HASH JOIN [LEFT SEMI JOIN, PARTITIONED]
 |  hash-table-id=00
-|  hash predicates: customsk = c.c_customer_sk
-|  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
+|  hash predicates: c.c_customer_sk = customsk
+|  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=2,0,1 row-size=72B cardinality=90.63K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT), 03(OPEN)
+|  in pipelines: 03(GETNEXT), 07(OPEN), 10(OPEN)
 |
-|--F13:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=10.85MB mem-reservation=9.50MB thread-reservation=1 runtime-filters-memory=1.00MB
+|--F13:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=6
+|  |  Per-Instance Resources: mem-estimate=3.14MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
-|  |  build expressions: c.c_customer_sk
-|  |  runtime filters: RF000[bloom] <- c.c_customer_sk
-|  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
+|  |  build expressions: customsk
+|  |  runtime filters: RF000[bloom] <- customsk
+|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |
-|  15:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
-|  |  hash-table-id=01
-|  |  hash predicates: ss_customer_sk = c.c_customer_sk
-|  |  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
-|  |  tuple-ids=2,0,1 row-size=72B cardinality=90.63K
-|  |  in pipelines: 03(GETNEXT), 02(OPEN)
+|  26:EXCHANGE [HASH(customsk)]
+|  |  mem-estimate=206.33KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=10 row-size=4B cardinality=140.03K
+|  |  in pipelines: 07(GETNEXT), 10(GETNEXT)
 |  |
-|  |--F14:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=16.45MB mem-reservation=9.50MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  JOIN BUILD
-|  |  |  join-table-id=01 plan-id=02 cohort-id=02
-|  |  |  build expressions: c.c_customer_sk
-|  |  |  runtime filters: RF006[bloom] <- c.c_customer_sk
-|  |  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
-|  |  |
-|  |  25:EXCHANGE [HASH(c.c_customer_sk)]
-|  |  |  mem-estimate=6.95MB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
-|  |  |  in pipelines: 02(GETNEXT)
-|  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  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.00MB mem-reservation=8.00MB thread-reservation=1
-|  |  14:HASH JOIN [INNER JOIN, BROADCAST]
+|  F10:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
+|  Per-Instance Resources: mem-estimate=48.00MB mem-reservation=4.00MB thread-reservation=1
+|  06:UNION
+|  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=10 row-size=4B cardinality=140.03K
+|  |  in pipelines: 07(GETNEXT), 10(GETNEXT)
+|  |
+|  |--12:HASH JOIN [INNER JOIN, BROADCAST]
 |  |  |  hash-table-id=02
-|  |  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
-|  |  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
+|  |  |  hash predicates: cs_sold_date_sk = d_date_sk
+|  |  |  fk/pk conjuncts: cs_sold_date_sk = d_date_sk
 |  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
-|  |  |  in pipelines: 02(GETNEXT), 01(OPEN)
+|  |  |  tuple-ids=8,9 row-size=20B cardinality=93.21K
+|  |  |  in pipelines: 10(GETNEXT), 11(OPEN)
 |  |  |
-|  |  |--F15:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=5.75MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  |--F15:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  JOIN BUILD
-|  |  |  |  join-table-id=02 plan-id=03 cohort-id=03
-|  |  |  |  build expressions: ca.ca_address_sk
-|  |  |  |  runtime filters: RF010[bloom] <- ca.ca_address_sk
+|  |  |  |  join-table-id=02 plan-id=03 cohort-id=02
+|  |  |  |  build expressions: d_date_sk
+|  |  |  |  runtime filters: RF012[bloom] <- d_date_sk
 |  |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |  |  |
-|  |  |  23:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=900.91KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=1 row-size=18B cardinality=50.00K
-|  |  |  |  in pipelines: 01(GETNEXT)
+|  |  |  25:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=9 row-size=12B cardinality=118
+|  |  |  |  in pipelines: 11(GETNEXT)
 |  |  |  |
 |  |  |  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=1
-|  |  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=1.16MB
+|  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|  |  |  11:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |  |  |     stored statistics:
-|  |  |       table: rows=50.00K size=1.16MB
+|  |  |       table: rows=73.05K size=2.15MB
 |  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
-|  |  |     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
-|  |  |     tuple-ids=1 row-size=18B cardinality=50.00K
-|  |  |     in pipelines: 01(GETNEXT)
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+|  |  |     tuple-ids=9 row-size=12B cardinality=118
+|  |  |     in pipelines: 11(GETNEXT)
 |  |  |
-|  |  13:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash-table-id=03
-|  |  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
-|  |  |  fk/pk conjuncts: none
-|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=128.00KB thread-reservation=0
-|  |  |  tuple-ids=2,0 row-size=54B cardinality=100.00K
-|  |  |  in pipelines: 02(GETNEXT), 00(OPEN)
-|  |  |
-|  |  |--F16:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=7.91MB mem-reservation=6.75MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  |  JOIN BUILD
-|  |  |  |  join-table-id=03 plan-id=04 cohort-id=03
-|  |  |  |  build expressions: c.c_current_cdemo_sk
-|  |  |  |  runtime filters: RF012[bloom] <- c.c_current_cdemo_sk
-|  |  |  |  mem-estimate=5.75MB mem-reservation=5.75MB spill-buffer=128.00KB thread-reservation=0
-|  |  |  |
-|  |  |  22:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |  |  in pipelines: 00(GETNEXT)
-|  |  |  |
-|  |  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  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.00MB mem-reservation=2.00MB thread-reservation=1
-|  |  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=5.49MB
-|  |  |     runtime filters: RF010[bloom] -> c.c_current_addr_sk
-|  |  |     stored statistics:
-|  |  |       table: rows=100.00K size=5.49MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
-|  |  |     mem-estimate=16.00MB mem-reservation=2.00MB thread-reservation=0
-|  |  |     tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |     in pipelines: 00(GETNEXT)
-|  |  |
-|  |  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
-|  |     HDFS partitions=1/1 files=1 size=7.49MB
-|  |     runtime filters: RF012[bloom] -> cd_demo_sk
+|  |  10:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
+|  |     HDFS partitions=1/1 files=3 size=96.62MB
+|  |     runtime filters: RF012[bloom] -> cs_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=1.92M size=7.49MB
+|  |       table: rows=1.44M size=96.62MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
-|  |     mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=0
-|  |     tuple-ids=2 row-size=42B cardinality=1.92M
-|  |     in pipelines: 02(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=650.14K
+|  |     mem-estimate=48.00MB mem-reservation=4.00MB thread-reservation=0
+|  |     tuple-ids=8 row-size=8B cardinality=1.44M
+|  |     in pipelines: 10(GETNEXT)
 |  |
-|  24:EXCHANGE [HASH(ss_customer_sk)]
-|  |  mem-estimate=1.35MB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  in pipelines: 03(GETNEXT)
-|  |
-|  F05:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-|  Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
-|  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  05:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash-table-id=04
-|  |  hash predicates: ss_sold_date_sk = d_date_sk
-|  |  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
+|  09:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash-table-id=01
+|  |  hash predicates: ws_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
 |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  in pipelines: 03(GETNEXT), 04(OPEN)
+|  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
+|  |  in pipelines: 07(GETNEXT), 08(OPEN)
 |  |
-|  |--F17:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  |--F14:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
-|  |  |  join-table-id=04 plan-id=05 cohort-id=02
+|  |  |  join-table-id=01 plan-id=02 cohort-id=02
 |  |  |  build expressions: d_date_sk
-|  |  |  runtime filters: RF008[bloom] <- d_date_sk
+|  |  |  runtime filters: RF010[bloom] <- d_date_sk
+|  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
+|  |  |
+|  |  24:EXCHANGE [BROADCAST]
+|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=7 row-size=12B cardinality=118
+|  |  |  in pipelines: 08(GETNEXT)
+|  |  |
+|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|  |  08:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |     stored statistics:
+|  |       table: rows=73.05K size=2.15MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+|  |     tuple-ids=7 row-size=12B cardinality=118
+|  |     in pipelines: 08(GETNEXT)
+|  |
+|  07:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
+|     HDFS partitions=1/1 files=2 size=45.09MB
+|     runtime filters: RF010[bloom] -> ws_sold_date_sk
+|     stored statistics:
+|       table: rows=719.38K size=45.09MB
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=644.77K
+|     mem-estimate=32.00MB mem-reservation=4.00MB thread-reservation=0
+|     tuple-ids=6 row-size=8B cardinality=719.38K
+|     in pipelines: 07(GETNEXT)
+|
+15:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
+|  hash-table-id=03
+|  hash predicates: ss_customer_sk = c.c_customer_sk
+|  mem-estimate=0B mem-reservation=0B spill-buffer=128.00KB thread-reservation=0
+|  tuple-ids=2,0,1 row-size=72B cardinality=90.63K
+|  in pipelines: 03(GETNEXT), 02(OPEN)
+|
+|--F16:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=6
+|  |  Per-Instance Resources: mem-estimate=10.82MB mem-reservation=3.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  JOIN BUILD
+|  |  join-table-id=03 plan-id=04 cohort-id=01
+|  |  build expressions: c.c_customer_sk
+|  |  runtime filters: RF002[bloom] <- c.c_customer_sk
+|  |  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
+|  |
+|  23:EXCHANGE [HASH(c.c_customer_sk)]
+|  |  mem-estimate=6.95MB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
+|  |  in pipelines: 02(GETNEXT)
+|  |
+|  F02:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  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.00MB mem-reservation=8.00MB thread-reservation=1
+|  14:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash-table-id=04
+|  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
+|  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=2,0,1 row-size=72B cardinality=100.00K
+|  |  in pipelines: 02(GETNEXT), 01(OPEN)
+|  |
+|  |--F17:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  Per-Instance Resources: mem-estimate=5.75MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  JOIN BUILD
+|  |  |  join-table-id=04 plan-id=05 cohort-id=03
+|  |  |  build expressions: ca.ca_address_sk
+|  |  |  runtime filters: RF006[bloom] <- ca.ca_address_sk
 |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |  |
 |  |  21:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=4 row-size=12B cardinality=118
-|  |  |  in pipelines: 04(GETNEXT)
+|  |  |  mem-estimate=900.91KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=1 row-size=18B cardinality=50.00K
+|  |  |  in pipelines: 01(GETNEXT)
 |  |  |
-|  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  F04:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=1
+|  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=1.16MB
 |  |     stored statistics:
-|  |       table: rows=73.05K size=2.15MB
+|  |       table: rows=50.00K size=1.16MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |     tuple-ids=4 row-size=12B cardinality=118
-|  |     in pipelines: 04(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
+|  |     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
+|  |     tuple-ids=1 row-size=18B cardinality=50.00K
+|  |     in pipelines: 01(GETNEXT)
 |  |
-|  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|     runtime filters: RF006[bloom] -> ss_customer_sk, RF008[bloom] -> ss_sold_date_sk
-|     stored statistics:
-|       table: rows=2.88M size=201.02MB
-|       partitions: 1824/1824 rows=2.88M
-|       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|     tuple-ids=3 row-size=8B cardinality=2.88M
-|     in pipelines: 03(GETNEXT)
-|
-26:EXCHANGE [HASH(customsk)]
-|  mem-estimate=206.33KB mem-reservation=0B thread-reservation=0
-|  tuple-ids=10 row-size=4B cardinality=140.03K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
-|
-F04:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Shared Resources: mem-estimate=3.00MB mem-reservation=3.00MB thread-reservation=0 runtime-filters-memory=3.00MB
-Per-Instance Resources: mem-estimate=48.00MB mem-reservation=4.00MB thread-reservation=1
-06:UNION
-|  mem-estimate=0B mem-reservation=0B thread-reservation=0
-|  tuple-ids=10 row-size=4B cardinality=140.03K
-|  in pipelines: 07(GETNEXT), 10(GETNEXT)
-|
-|--12:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash-table-id=06
-|  |  hash predicates: cs_sold_date_sk = d_date_sk
-|  |  fk/pk conjuncts: cs_sold_date_sk = d_date_sk
-|  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=8,9 row-size=20B cardinality=93.21K
-|  |  in pipelines: 10(GETNEXT), 11(OPEN)
+|  13:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash-table-id=05
+|  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
+|  |  fk/pk conjuncts: none
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=128.00KB thread-reservation=0
+|  |  tuple-ids=2,0 row-size=54B cardinality=100.00K
+|  |  in pipelines: 02(GETNEXT), 00(OPEN)
 |  |
-|  |--F19:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |--F18:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  Per-Instance Resources: mem-estimate=7.91MB mem-reservation=6.75MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
-|  |  |  join-table-id=06 plan-id=07 cohort-id=01
-|  |  |  build expressions: d_date_sk
-|  |  |  runtime filters: RF004[bloom] <- d_date_sk
-|  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
+|  |  |  join-table-id=05 plan-id=06 cohort-id=03
+|  |  |  build expressions: c.c_current_cdemo_sk
+|  |  |  runtime filters: RF008[bloom] <- c.c_current_cdemo_sk
+|  |  |  mem-estimate=5.75MB mem-reservation=5.75MB spill-buffer=128.00KB thread-reservation=0
 |  |  |
 |  |  20:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=9 row-size=12B cardinality=118
-|  |  |  in pipelines: 11(GETNEXT)
+|  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
+|  |  |  in pipelines: 00(GETNEXT)
 |  |  |
 |  |  F03:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  11:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
+|  |  Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
+|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=2.00MB thread-reservation=1
+|  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=5.49MB
+|  |     runtime filters: RF000[bloom] -> c.c_customer_sk, RF006[bloom] -> c.c_current_addr_sk
 |  |     stored statistics:
-|  |       table: rows=73.05K size=2.15MB
+|  |       table: rows=100.00K size=5.49MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
-|  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |     tuple-ids=9 row-size=12B cardinality=118
-|  |     in pipelines: 11(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
+|  |     mem-estimate=16.00MB mem-reservation=2.00MB thread-reservation=0
+|  |     tuple-ids=0 row-size=12B cardinality=100.00K
+|  |     in pipelines: 00(GETNEXT)
 |  |
-|  10:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
-|     HDFS partitions=1/1 files=3 size=96.62MB
-|     runtime filters: RF000[bloom] -> tpcds_parquet.catalog_sales.cs_ship_customer_sk, RF004[bloom] -> cs_sold_date_sk
+|  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
+|     HDFS partitions=1/1 files=1 size=7.49MB
+|     runtime filters: RF008[bloom] -> cd_demo_sk
 |     stored statistics:
-|       table: rows=1.44M size=96.62MB
+|       table: rows=1.92M size=7.49MB
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=650.14K
-|     mem-estimate=48.00MB mem-reservation=4.00MB thread-reservation=0
-|     tuple-ids=8 row-size=8B cardinality=1.44M
-|     in pipelines: 10(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=1.92M
+|     mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=0
+|     tuple-ids=2 row-size=42B cardinality=1.92M
+|     in pipelines: 02(GETNEXT)
 |
-09:HASH JOIN [INNER JOIN, BROADCAST]
-|  hash-table-id=05
-|  hash predicates: ws_sold_date_sk = d_date_sk
-|  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
+22:EXCHANGE [HASH(ss_customer_sk)]
+|  mem-estimate=1.35MB mem-reservation=0B thread-reservation=0
+|  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  in pipelines: 03(GETNEXT)
+|
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+Per-Host Shared Resources: mem-estimate=3.00MB mem-reservation=3.00MB thread-reservation=0 runtime-filters-memory=3.00MB
+Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+05:HASH JOIN [INNER JOIN, BROADCAST]
+|  hash-table-id=06
+|  hash predicates: ss_sold_date_sk = d_date_sk
+|  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
 |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=6,7 row-size=20B cardinality=46.82K
-|  in pipelines: 07(GETNEXT), 08(OPEN)
+|  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  in pipelines: 03(GETNEXT), 04(OPEN)
 |
-|--F18:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|--F19:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
-|  |  join-table-id=05 plan-id=06 cohort-id=01
+|  |  join-table-id=06 plan-id=07 cohort-id=01
 |  |  build expressions: d_date_sk
-|  |  runtime filters: RF002[bloom] <- d_date_sk
+|  |  runtime filters: RF004[bloom] <- d_date_sk
 |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |
 |  19:EXCHANGE [BROADCAST]
 |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=7 row-size=12B cardinality=118
-|  |  in pipelines: 08(GETNEXT)
+|  |  tuple-ids=4 row-size=12B cardinality=118
+|  |  in pipelines: 04(GETNEXT)
 |  |
 |  F01:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  08:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
 |     HDFS partitions=1/1 files=1 size=2.15MB
 |     predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |     stored statistics:
@@ -817,17 +816,18 @@
 |     parquet statistics predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |     parquet dictionary predicates: d_year = CAST(2002 AS INT), d_qoy < CAST(4 AS INT)
 |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|     tuple-ids=7 row-size=12B cardinality=118
-|     in pipelines: 08(GETNEXT)
+|     tuple-ids=4 row-size=12B cardinality=118
+|     in pipelines: 04(GETNEXT)
 |
-07:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
-   HDFS partitions=1/1 files=2 size=45.09MB
-   runtime filters: RF000[bloom] -> tpcds_parquet.web_sales.ws_bill_customer_sk, RF002[bloom] -> ws_sold_date_sk
+03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
+   runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=719.38K size=45.09MB
+     table: rows=2.88M size=200.95MB
+     partitions: 1824/1824 rows=2.88M
      columns: all
-   extrapolated-rows=disabled max-scan-range-rows=644.77K
-   mem-estimate=32.00MB mem-reservation=4.00MB thread-reservation=0
-   tuple-ids=6 row-size=8B cardinality=719.38K
-   in pipelines: 07(GETNEXT)
+   extrapolated-rows=disabled max-scan-range-rows=130.09K
+   mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+   tuple-ids=3 row-size=8B cardinality=2.88M
+   in pipelines: 03(GETNEXT)
 ====
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q36.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q36.test
index 4673d24..e3d2b3c 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q36.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q36.test
@@ -139,10 +139,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -319,10 +319,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q37.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q37.test
index 2ee4047..1452d63 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q37.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q37.test
@@ -119,9 +119,9 @@
    in pipelines: 03(GETNEXT)
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=64.81MB Threads=11
-Per-Host Resource Estimates: Memory=310MB
+Per-Host Resource Estimates: Memory=307MB
 F06:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=36.04KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=48.19KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_id, i_item_desc, i_current_price
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -129,12 +129,12 @@
 15:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: i_item_id ASC
 |  limit: 100
-|  mem-estimate=36.04KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=48.19KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=5 row-size=144B cardinality=100
 |  in pipelines: 08(GETNEXT)
 |
-F05:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=2 instances=2
-Per-Host Resources: mem-estimate=25.94MB mem-reservation=17.00MB thread-reservation=1
+F05:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=23.20MB mem-reservation=17.00MB thread-reservation=1
 08:TOP-N [LIMIT=100]
 |  order by: i_item_id ASC
 |  mem-estimate=14.11KB mem-reservation=0B thread-reservation=0
@@ -148,11 +148,11 @@
 |  in pipelines: 14(GETNEXT), 03(OPEN)
 |
 13:EXCHANGE [HASH(i_item_id,i_item_desc,i_current_price)]
-|  mem-estimate=8.94MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=6.20MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=125.59K
 |  in pipelines: 03(GETNEXT)
 |
-F00:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 Per-Host Resources: mem-estimate=68.64MB mem-reservation=21.94MB thread-reservation=2 runtime-filters-memory=1.00MB
 07:AGGREGATE [STREAMING]
 |  group by: i_item_id, i_item_desc, i_current_price
@@ -264,9 +264,9 @@
    in pipelines: 03(GETNEXT)
 ---- PARALLELPLANS
 Max Per-Host Resource Reservation: Memory=70.69MB Threads=10
-Per-Host Resource Estimates: Memory=172MB
+Per-Host Resource Estimates: Memory=169MB
 F06:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=36.04KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=48.19KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_id, i_item_desc, i_current_price
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -274,12 +274,12 @@
 15:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: i_item_id ASC
 |  limit: 100
-|  mem-estimate=36.04KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=48.19KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=5 row-size=144B cardinality=100
 |  in pipelines: 08(GETNEXT)
 |
-F05:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=2 instances=2
-Per-Instance Resources: mem-estimate=25.94MB mem-reservation=17.00MB thread-reservation=1
+F05:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=23.20MB mem-reservation=17.00MB thread-reservation=1
 08:TOP-N [LIMIT=100]
 |  order by: i_item_id ASC
 |  mem-estimate=14.11KB mem-reservation=0B thread-reservation=0
@@ -293,11 +293,11 @@
 |  in pipelines: 14(GETNEXT), 03(OPEN)
 |
 13:EXCHANGE [HASH(i_item_id,i_item_desc,i_current_price)]
-|  mem-estimate=8.94MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=6.20MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=125.59K
 |  in pipelines: 03(GETNEXT)
 |
-F00:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 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=65.00MB mem-reservation=19.00MB thread-reservation=1
 07:AGGREGATE [STREAMING]
@@ -314,7 +314,7 @@
 |  tuple-ids=3,1,0,2 row-size=206B cardinality=125.59K
 |  in pipelines: 03(GETNEXT), 01(OPEN)
 |
-|--F07:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|--F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=5.58MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q38.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q38.test
index ec3a3af..06c2a4c 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q38.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q38.test
@@ -216,10 +216,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> store_sales.ss_customer_sk, RF014[bloom] -> store_sales.ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -523,10 +523,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF012[bloom] -> store_sales.ss_customer_sk, RF014[bloom] -> store_sales.ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q42.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q42.test
index e6b811b..2c4c2fb 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q42.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q42.test
@@ -89,10 +89,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -201,10 +201,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -330,10 +330,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q43.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q43.test
index f58ec83..f221c49 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q43.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q43.test
@@ -97,10 +97,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -209,10 +209,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -338,10 +338,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q44.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q44.test
index 47402c8..0d97f7b 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q44.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q44.test
@@ -117,10 +117,10 @@
 |  |  |  |  in pipelines: 12(GETNEXT), 11(OPEN)
 |  |  |  |
 |  |  |  11:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -138,10 +138,10 @@
 |  |  |  in pipelines: 10(GETNEXT), 09(OPEN)
 |  |  |
 |  |  09:SCAN HDFS [tpcds_parquet.store_sales ss1]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     predicates: ss_store_sk = CAST(4 AS INT)
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -200,10 +200,10 @@
 |  |  |  |  in pipelines: 03(GETNEXT), 02(OPEN)
 |  |  |  |
 |  |  |  02:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -221,10 +221,10 @@
 |  |  |  in pipelines: 01(GETNEXT), 00(OPEN)
 |  |  |
 |  |  00:SCAN HDFS [tpcds_parquet.store_sales ss1]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     predicates: ss_store_sk = CAST(4 AS INT)
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -256,208 +256,58 @@
    tuple-ids=27 row-size=38B cardinality=18.00K
    in pipelines: 19(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=47.56MB Threads=21
-Per-Host Resource Estimates: Memory=365MB
-F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
+Max Per-Host Resource Reservation: Memory=46.56MB Threads=20
+Per-Host Resource Estimates: Memory=364MB
+F05:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  Per-Host Resources: mem-estimate=11.52MB mem-reservation=9.81MB thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: rnk, i_product_name, i_product_name
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
-41:MERGING-EXCHANGE [UNPARTITIONED]
-|  order by: rnk ASC
-|  limit: 100
-|  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  tuple-ids=28 row-size=68B cardinality=100
-|  in pipelines: 23(GETNEXT)
-|
-F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-Per-Host Resources: mem-estimate=35.25MB mem-reservation=3.44MB thread-reservation=2 runtime-filters-memory=1.00MB
 23:TOP-N [LIMIT=100]
 |  order by: rnk ASC
 |  mem-estimate=6.65KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=28 row-size=68B cardinality=100
-|  in pipelines: 23(GETNEXT), 19(OPEN)
+|  in pipelines: 23(GETNEXT), 06(OPEN)
 |
 22:HASH JOIN [INNER JOIN, BROADCAST]
-|  hash predicates: i2.i_item_sk = ss_item_sk
-|  fk/pk conjuncts: i2.i_item_sk = ss_item_sk
-|  runtime filters: RF000[bloom] <- ss_item_sk
+|  hash predicates: ss_item_sk = i2.i_item_sk
+|  fk/pk conjuncts: ss_item_sk = i2.i_item_sk
 |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=27,39,38,33,32,26 row-size=148B cardinality=1.80K
-|  in pipelines: 19(GETNEXT), 15(OPEN)
+|  tuple-ids=33,32,26,39,38,27 row-size=148B cardinality=1.80K
+|  in pipelines: 06(GETNEXT), 19(OPEN)
 |
-|--40:EXCHANGE [BROADCAST]
-|  |  mem-estimate=323.57KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=39,38,33,32,26 row-size=110B cardinality=1.80K
+|--40:EXCHANGE [UNPARTITIONED]
+|  |  mem-estimate=710.69KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=27 row-size=38B cardinality=18.00K
+|  |  in pipelines: 19(GETNEXT)
+|  |
+|  F13:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  Per-Host Resources: mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=2
+|  19:SCAN HDFS [tpcds_parquet.item i2, RANDOM]
+|     HDFS partitions=1/1 files=1 size=1.73MB
+|     stored statistics:
+|       table: rows=18.00K size=1.73MB
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=18.00K
+|     mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=1
+|     tuple-ids=27 row-size=38B cardinality=18.00K
+|     in pipelines: 19(GETNEXT)
+|
+21:HASH JOIN [INNER JOIN, BROADCAST]
+|  hash predicates: rank() = rank()
+|  fk/pk conjuncts: assumed fk/pk
+|  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=33,32,26,39,38 row-size=110B cardinality=1.80K
+|  in pipelines: 06(GETNEXT), 15(OPEN)
+|
+|--39:EXCHANGE [UNPARTITIONED]
+|  |  mem-estimate=65.07KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=39,38 row-size=36B cardinality=1.80K
 |  |  in pipelines: 15(GETNEXT)
 |  |
-|  F06:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=6.40MB mem-reservation=5.94MB thread-reservation=1
-|  21:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash predicates: rank() = rank()
-|  |  fk/pk conjuncts: assumed fk/pk
-|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=39,38,33,32,26 row-size=110B cardinality=1.80K
-|  |  in pipelines: 15(GETNEXT), 06(OPEN)
-|  |
-|  |--39:EXCHANGE [UNPARTITIONED]
-|  |  |  mem-estimate=216.26KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=33,32,26 row-size=74B cardinality=1.80K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  |  Per-Host Resources: mem-estimate=6.89MB mem-reservation=5.94MB thread-reservation=1
-|  |  20:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash predicates: ss_item_sk = i1.i_item_sk
-|  |  |  fk/pk conjuncts: none
-|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=33,32,26 row-size=74B cardinality=1.80K
-|  |  |  in pipelines: 06(GETNEXT), 18(OPEN)
-|  |  |
-|  |  |--38:EXCHANGE [UNPARTITIONED]
-|  |  |  |  mem-estimate=710.69KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=26 row-size=38B cardinality=18.00K
-|  |  |  |  in pipelines: 18(GETNEXT)
-|  |  |  |
-|  |  |  F13:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=2
-|  |  |  18:SCAN HDFS [tpcds_parquet.item i1, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=1.73MB
-|  |  |     stored statistics:
-|  |  |       table: rows=18.00K size=1.73MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=18.00K
-|  |  |     mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |     tuple-ids=26 row-size=38B cardinality=18.00K
-|  |  |     in pipelines: 18(GETNEXT)
-|  |  |
-|  |  08:SELECT
-|  |  |  predicates: rank() < CAST(11 AS BIGINT)
-|  |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=33,32 row-size=36B cardinality=1.80K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  07:ANALYTIC
-|  |  |  functions: rank()
-|  |  |  order by: avg(ss_net_profit) ASC
-|  |  |  window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-|  |  |  mem-estimate=4.00MB mem-reservation=4.00MB spill-buffer=2.00MB thread-reservation=0
-|  |  |  tuple-ids=33,32 row-size=36B cardinality=17.98K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  37:MERGING-EXCHANGE [UNPARTITIONED]
-|  |  |  order by: avg(ss_net_profit) ASC
-|  |  |  mem-estimate=259.83KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=33 row-size=28B cardinality=17.98K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  F08:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
-|  |  Per-Host Resources: mem-estimate=16.02MB mem-reservation=7.94MB thread-reservation=1
-|  |  06:SORT
-|  |  |  order by: avg(ss_net_profit) ASC
-|  |  |  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB thread-reservation=0
-|  |  |  tuple-ids=33 row-size=28B cardinality=17.98K
-|  |  |  in pipelines: 06(GETNEXT), 32(OPEN)
-|  |  |
-|  |  05:NESTED LOOP JOIN [INNER JOIN, BROADCAST]
-|  |  |  predicates: avg(ss_net_profit) > CAST(0.9 AS DECIMAL(1,1)) * avg(ss_net_profit)
-|  |  |  mem-estimate=12B mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=2,6 row-size=28B cardinality=17.98K
-|  |  |  in pipelines: 32(GETNEXT), 04(OPEN)
-|  |  |
-|  |  |--36:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=1
-|  |  |  |  in pipelines: 04(GETNEXT)
-|  |  |  |
-|  |  |  F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
-|  |  |  04:CARDINALITY CHECK
-|  |  |  |  limit: 1
-|  |  |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=1
-|  |  |  |  in pipelines: 04(GETNEXT), 34(OPEN)
-|  |  |  |
-|  |  |  35:EXCHANGE [UNPARTITIONED]
-|  |  |  |  limit: 2
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=2
-|  |  |  |  in pipelines: 34(GETNEXT)
-|  |  |  |
-|  |  |  F10:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=3
-|  |  |  Per-Host Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
-|  |  |  34:AGGREGATE [FINALIZE]
-|  |  |  |  output: avg:merge(ss_net_profit)
-|  |  |  |  group by: ss_store_sk
-|  |  |  |  limit: 2
-|  |  |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=2
-|  |  |  |  in pipelines: 34(GETNEXT), 02(OPEN)
-|  |  |  |
-|  |  |  33:EXCHANGE [HASH(ss_store_sk)]
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=5 row-size=12B cardinality=6
-|  |  |  |  in pipelines: 02(GETNEXT)
-|  |  |  |
-|  |  |  F09:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  |  Per-Host Resources: mem-estimate=58.00MB mem-reservation=3.00MB thread-reservation=2
-|  |  |  03:AGGREGATE [STREAMING]
-|  |  |  |  output: avg(ss_net_profit)
-|  |  |  |  group by: ss_store_sk
-|  |  |  |  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |  tuple-ids=5 row-size=12B cardinality=6
-|  |  |  |  in pipelines: 02(GETNEXT)
-|  |  |  |
-|  |  |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|  |  |     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
-|  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
-|  |  |       partitions: 1824/1824 rows=2.88M
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|  |  |     parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
-|  |  |     parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
-|  |  |     mem-estimate=48.00MB mem-reservation=1.00MB thread-reservation=1
-|  |  |     tuple-ids=4 row-size=12B cardinality=53.06K
-|  |  |     in pipelines: 02(GETNEXT)
-|  |  |
-|  |  32:AGGREGATE [FINALIZE]
-|  |  |  output: avg:merge(ss_net_profit)
-|  |  |  group by: ss_item_sk
-|  |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=2 row-size=16B cardinality=17.98K
-|  |  |  in pipelines: 32(GETNEXT), 00(OPEN)
-|  |  |
-|  |  31:EXCHANGE [HASH(ss_item_sk)]
-|  |  |  mem-estimate=153.62KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=1 row-size=16B cardinality=17.98K
-|  |  |  in pipelines: 00(GETNEXT)
-|  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  Per-Host Resources: mem-estimate=58.00MB mem-reservation=3.00MB thread-reservation=2
-|  |  01:AGGREGATE [STREAMING]
-|  |  |  output: avg(ss_net_profit)
-|  |  |  group by: ss_item_sk
-|  |  |  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=1 row-size=16B cardinality=17.98K
-|  |  |  in pipelines: 00(GETNEXT)
-|  |  |
-|  |  00:SCAN HDFS [tpcds_parquet.store_sales ss1, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|  |     predicates: ss_store_sk = CAST(4 AS INT)
-|  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
-|  |       partitions: 1824/1824 rows=2.88M
-|  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|  |     parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
-|  |     parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
-|  |     mem-estimate=48.00MB mem-reservation=1.00MB thread-reservation=1
-|  |     tuple-ids=0 row-size=16B cardinality=480.07K
-|  |     in pipelines: 00(GETNEXT)
-|  |
+|  F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  Per-Host Resources: mem-estimate=4.25MB mem-reservation=4.00MB thread-reservation=1
 |  17:SELECT
 |  |  predicates: rank() < CAST(11 AS BIGINT)
 |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -472,61 +322,61 @@
 |  |  tuple-ids=39,38 row-size=36B cardinality=17.98K
 |  |  in pipelines: 15(GETNEXT)
 |  |
-|  30:MERGING-EXCHANGE [UNPARTITIONED]
+|  38:MERGING-EXCHANGE [UNPARTITIONED]
 |  |  order by: avg(ss_net_profit) DESC
 |  |  mem-estimate=259.83KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=39 row-size=28B cardinality=17.98K
 |  |  in pipelines: 15(GETNEXT)
 |  |
-|  F02:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
+|  F08:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
 |  Per-Host Resources: mem-estimate=16.02MB mem-reservation=7.94MB thread-reservation=1
 |  15:SORT
 |  |  order by: avg(ss_net_profit) DESC
 |  |  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB thread-reservation=0
 |  |  tuple-ids=39 row-size=28B cardinality=17.98K
-|  |  in pipelines: 15(GETNEXT), 25(OPEN)
+|  |  in pipelines: 15(GETNEXT), 33(OPEN)
 |  |
 |  14:NESTED LOOP JOIN [INNER JOIN, BROADCAST]
 |  |  predicates: avg(ss_net_profit) > CAST(0.9 AS DECIMAL(1,1)) * avg(ss_net_profit)
 |  |  mem-estimate=12B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=15,19 row-size=28B cardinality=17.98K
-|  |  in pipelines: 25(GETNEXT), 13(OPEN)
+|  |  in pipelines: 33(GETNEXT), 13(OPEN)
 |  |
-|  |--29:EXCHANGE [BROADCAST]
+|  |--37:EXCHANGE [BROADCAST]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=1
 |  |  |  in pipelines: 13(GETNEXT)
 |  |  |
-|  |  F05:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  |  F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  |  Per-Host Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
 |  |  13:CARDINALITY CHECK
 |  |  |  limit: 1
 |  |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=1
-|  |  |  in pipelines: 13(GETNEXT), 27(OPEN)
+|  |  |  in pipelines: 13(GETNEXT), 35(OPEN)
 |  |  |
-|  |  28:EXCHANGE [UNPARTITIONED]
+|  |  36:EXCHANGE [UNPARTITIONED]
 |  |  |  limit: 2
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=2
-|  |  |  in pipelines: 27(GETNEXT)
+|  |  |  in pipelines: 35(GETNEXT)
 |  |  |
-|  |  F04:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=3
+|  |  F10:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=3
 |  |  Per-Host Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
-|  |  27:AGGREGATE [FINALIZE]
+|  |  35:AGGREGATE [FINALIZE]
 |  |  |  output: avg:merge(ss_net_profit)
 |  |  |  group by: ss_store_sk
 |  |  |  limit: 2
 |  |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=2
-|  |  |  in pipelines: 27(GETNEXT), 11(OPEN)
+|  |  |  in pipelines: 35(GETNEXT), 11(OPEN)
 |  |  |
-|  |  26:EXCHANGE [HASH(ss_store_sk)]
+|  |  34:EXCHANGE [HASH(ss_store_sk)]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=18 row-size=12B cardinality=6
 |  |  |  in pipelines: 11(GETNEXT)
 |  |  |
-|  |  F03:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  |  F09:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  Per-Host Resources: mem-estimate=58.00MB mem-reservation=3.00MB thread-reservation=2
 |  |  12:AGGREGATE [STREAMING]
 |  |  |  output: avg(ss_net_profit)
@@ -536,10 +386,10 @@
 |  |  |  in pipelines: 11(GETNEXT)
 |  |  |
 |  |  11:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -549,19 +399,19 @@
 |  |     tuple-ids=17 row-size=12B cardinality=53.06K
 |  |     in pipelines: 11(GETNEXT)
 |  |
-|  25:AGGREGATE [FINALIZE]
+|  33:AGGREGATE [FINALIZE]
 |  |  output: avg:merge(ss_net_profit)
 |  |  group by: ss_item_sk
 |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |  tuple-ids=15 row-size=16B cardinality=17.98K
-|  |  in pipelines: 25(GETNEXT), 09(OPEN)
+|  |  in pipelines: 33(GETNEXT), 09(OPEN)
 |  |
-|  24:EXCHANGE [HASH(ss_item_sk)]
+|  32:EXCHANGE [HASH(ss_item_sk)]
 |  |  mem-estimate=153.62KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=14 row-size=16B cardinality=17.98K
 |  |  in pipelines: 09(GETNEXT)
 |  |
-|  F01:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  Per-Host Resources: mem-estimate=58.00MB mem-reservation=3.00MB thread-reservation=2
 |  10:AGGREGATE [STREAMING]
 |  |  output: avg(ss_net_profit)
@@ -571,10 +421,10 @@
 |  |  in pipelines: 09(GETNEXT)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales ss1, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_store_sk = CAST(4 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -584,251 +434,224 @@
 |     tuple-ids=13 row-size=16B cardinality=480.07K
 |     in pipelines: 09(GETNEXT)
 |
-19:SCAN HDFS [tpcds_parquet.item i2, RANDOM]
-   HDFS partitions=1/1 files=1 size=1.73MB
-   runtime filters: RF000[bloom] -> i2.i_item_sk
+20:HASH JOIN [INNER JOIN, BROADCAST]
+|  hash predicates: ss_item_sk = i1.i_item_sk
+|  fk/pk conjuncts: none
+|  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=33,32,26 row-size=74B cardinality=1.80K
+|  in pipelines: 06(GETNEXT), 18(OPEN)
+|
+|--31:EXCHANGE [UNPARTITIONED]
+|  |  mem-estimate=710.69KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=26 row-size=38B cardinality=18.00K
+|  |  in pipelines: 18(GETNEXT)
+|  |
+|  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  Per-Host Resources: mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=2
+|  18:SCAN HDFS [tpcds_parquet.item i1, RANDOM]
+|     HDFS partitions=1/1 files=1 size=1.73MB
+|     stored statistics:
+|       table: rows=18.00K size=1.73MB
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=18.00K
+|     mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=1
+|     tuple-ids=26 row-size=38B cardinality=18.00K
+|     in pipelines: 18(GETNEXT)
+|
+08:SELECT
+|  predicates: rank() < CAST(11 AS BIGINT)
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
+|  tuple-ids=33,32 row-size=36B cardinality=1.80K
+|  in pipelines: 06(GETNEXT)
+|
+07:ANALYTIC
+|  functions: rank()
+|  order by: avg(ss_net_profit) ASC
+|  window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+|  mem-estimate=4.00MB mem-reservation=4.00MB spill-buffer=2.00MB thread-reservation=0
+|  tuple-ids=33,32 row-size=36B cardinality=17.98K
+|  in pipelines: 06(GETNEXT)
+|
+30:MERGING-EXCHANGE [UNPARTITIONED]
+|  order by: avg(ss_net_profit) ASC
+|  mem-estimate=259.83KB mem-reservation=0B thread-reservation=0
+|  tuple-ids=33 row-size=28B cardinality=17.98K
+|  in pipelines: 06(GETNEXT)
+|
+F01:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=16.02MB mem-reservation=7.94MB thread-reservation=1
+06:SORT
+|  order by: avg(ss_net_profit) ASC
+|  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB thread-reservation=0
+|  tuple-ids=33 row-size=28B cardinality=17.98K
+|  in pipelines: 06(GETNEXT), 25(OPEN)
+|
+05:NESTED LOOP JOIN [INNER JOIN, BROADCAST]
+|  predicates: avg(ss_net_profit) > CAST(0.9 AS DECIMAL(1,1)) * avg(ss_net_profit)
+|  mem-estimate=12B mem-reservation=0B thread-reservation=0
+|  tuple-ids=2,6 row-size=28B cardinality=17.98K
+|  in pipelines: 25(GETNEXT), 04(OPEN)
+|
+|--29:EXCHANGE [BROADCAST]
+|  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=1
+|  |  in pipelines: 04(GETNEXT)
+|  |
+|  F04:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  Per-Host Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
+|  04:CARDINALITY CHECK
+|  |  limit: 1
+|  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=1
+|  |  in pipelines: 04(GETNEXT), 27(OPEN)
+|  |
+|  28:EXCHANGE [UNPARTITIONED]
+|  |  limit: 2
+|  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=2
+|  |  in pipelines: 27(GETNEXT)
+|  |
+|  F03:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=3
+|  Per-Host Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
+|  27:AGGREGATE [FINALIZE]
+|  |  output: avg:merge(ss_net_profit)
+|  |  group by: ss_store_sk
+|  |  limit: 2
+|  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=2
+|  |  in pipelines: 27(GETNEXT), 02(OPEN)
+|  |
+|  26:EXCHANGE [HASH(ss_store_sk)]
+|  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=5 row-size=12B cardinality=6
+|  |  in pipelines: 02(GETNEXT)
+|  |
+|  F02:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  Per-Host Resources: mem-estimate=58.00MB mem-reservation=3.00MB thread-reservation=2
+|  03:AGGREGATE [STREAMING]
+|  |  output: avg(ss_net_profit)
+|  |  group by: ss_store_sk
+|  |  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=5 row-size=12B cardinality=6
+|  |  in pipelines: 02(GETNEXT)
+|  |
+|  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
+|     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
+|     stored statistics:
+|       table: rows=2.88M size=200.95MB
+|       partitions: 1824/1824 rows=2.88M
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=130.09K
+|     parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
+|     parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
+|     mem-estimate=48.00MB mem-reservation=1.00MB thread-reservation=1
+|     tuple-ids=4 row-size=12B cardinality=53.06K
+|     in pipelines: 02(GETNEXT)
+|
+25:AGGREGATE [FINALIZE]
+|  output: avg:merge(ss_net_profit)
+|  group by: ss_item_sk
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=2 row-size=16B cardinality=17.98K
+|  in pipelines: 25(GETNEXT), 00(OPEN)
+|
+24:EXCHANGE [HASH(ss_item_sk)]
+|  mem-estimate=153.62KB mem-reservation=0B thread-reservation=0
+|  tuple-ids=1 row-size=16B cardinality=17.98K
+|  in pipelines: 00(GETNEXT)
+|
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+Per-Host Resources: mem-estimate=58.00MB mem-reservation=3.00MB thread-reservation=2
+01:AGGREGATE [STREAMING]
+|  output: avg(ss_net_profit)
+|  group by: ss_item_sk
+|  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=1 row-size=16B cardinality=17.98K
+|  in pipelines: 00(GETNEXT)
+|
+00:SCAN HDFS [tpcds_parquet.store_sales ss1, RANDOM]
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
+   predicates: ss_store_sk = CAST(4 AS INT)
    stored statistics:
-     table: rows=18.00K size=1.73MB
+     table: rows=2.88M size=200.95MB
+     partitions: 1824/1824 rows=2.88M
      columns: all
-   extrapolated-rows=disabled max-scan-range-rows=18.00K
-   mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=1
-   tuple-ids=27 row-size=38B cardinality=18.00K
-   in pipelines: 19(GETNEXT)
+   extrapolated-rows=disabled max-scan-range-rows=130.09K
+   parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
+   parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
+   mem-estimate=48.00MB mem-reservation=1.00MB thread-reservation=1
+   tuple-ids=0 row-size=16B cardinality=480.07K
+   in pipelines: 00(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=86.12MB Threads=28
-Per-Host Resource Estimates: Memory=368MB
-F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
+Max Per-Host Resource Reservation: Memory=84.12MB Threads=27
+Per-Host Resource Estimates: Memory=366MB
+F05:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  Per-Instance Resources: mem-estimate=4.35MB mem-reservation=4.00MB thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: rnk, i_product_name, i_product_name
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
-41:MERGING-EXCHANGE [UNPARTITIONED]
-|  order by: rnk ASC
-|  limit: 100
-|  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  tuple-ids=28 row-size=68B cardinality=100
-|  in pipelines: 23(GETNEXT)
-|
-F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-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.01MB mem-reservation=512.00KB thread-reservation=1
 23:TOP-N [LIMIT=100]
 |  order by: rnk ASC
 |  mem-estimate=6.65KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=28 row-size=68B cardinality=100
-|  in pipelines: 23(GETNEXT), 19(OPEN)
+|  in pipelines: 23(GETNEXT), 06(OPEN)
 |
 22:HASH JOIN [INNER JOIN, BROADCAST]
 |  hash-table-id=00
-|  hash predicates: i2.i_item_sk = ss_item_sk
-|  fk/pk conjuncts: i2.i_item_sk = ss_item_sk
+|  hash predicates: ss_item_sk = i2.i_item_sk
+|  fk/pk conjuncts: ss_item_sk = i2.i_item_sk
 |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=27,39,38,33,32,26 row-size=148B cardinality=1.80K
-|  in pipelines: 19(GETNEXT), 15(OPEN)
+|  tuple-ids=33,32,26,39,38,27 row-size=148B cardinality=1.80K
+|  in pipelines: 06(GETNEXT), 19(OPEN)
 |
-|--F15:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=5.19MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|--F14:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=4.57MB mem-reservation=3.88MB thread-reservation=1
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
-|  |  build expressions: ss_item_sk
-|  |  runtime filters: RF000[bloom] <- ss_item_sk
+|  |  build expressions: i2.i_item_sk
 |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |
-|  40:EXCHANGE [BROADCAST]
-|  |  mem-estimate=323.57KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=39,38,33,32,26 row-size=110B cardinality=1.80K
+|  40:EXCHANGE [UNPARTITIONED]
+|  |  mem-estimate=710.69KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=27 row-size=38B cardinality=18.00K
+|  |  in pipelines: 19(GETNEXT)
+|  |
+|  F13:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|  19:SCAN HDFS [tpcds_parquet.item i2, RANDOM]
+|     HDFS partitions=1/1 files=1 size=1.73MB
+|     stored statistics:
+|       table: rows=18.00K size=1.73MB
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=18.00K
+|     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+|     tuple-ids=27 row-size=38B cardinality=18.00K
+|     in pipelines: 19(GETNEXT)
+|
+21:HASH JOIN [INNER JOIN, BROADCAST]
+|  hash-table-id=01
+|  hash predicates: rank() = rank()
+|  fk/pk conjuncts: assumed fk/pk
+|  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=33,32,26,39,38 row-size=110B cardinality=1.80K
+|  in pipelines: 06(GETNEXT), 15(OPEN)
+|
+|--F15:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=3.94MB mem-reservation=3.88MB thread-reservation=1
+|  JOIN BUILD
+|  |  join-table-id=01 plan-id=02 cohort-id=01
+|  |  build expressions: rank()
+|  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
+|  |
+|  39:EXCHANGE [UNPARTITIONED]
+|  |  mem-estimate=65.07KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=39,38 row-size=36B cardinality=1.80K
 |  |  in pipelines: 15(GETNEXT)
 |  |
-|  F06:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=4.35MB mem-reservation=4.00MB thread-reservation=1
-|  21:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash-table-id=01
-|  |  hash predicates: rank() = rank()
-|  |  fk/pk conjuncts: assumed fk/pk
-|  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=39,38,33,32,26 row-size=110B cardinality=1.80K
-|  |  in pipelines: 15(GETNEXT), 06(OPEN)
-|  |
-|  |--F16:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=4.09MB mem-reservation=3.88MB thread-reservation=1
-|  |  JOIN BUILD
-|  |  |  join-table-id=01 plan-id=02 cohort-id=02
-|  |  |  build expressions: rank()
-|  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
-|  |  |
-|  |  39:EXCHANGE [UNPARTITIONED]
-|  |  |  mem-estimate=216.26KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=33,32,26 row-size=74B cardinality=1.80K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=4.35MB mem-reservation=4.00MB thread-reservation=1
-|  |  20:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash-table-id=02
-|  |  |  hash predicates: ss_item_sk = i1.i_item_sk
-|  |  |  fk/pk conjuncts: none
-|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=33,32,26 row-size=74B cardinality=1.80K
-|  |  |  in pipelines: 06(GETNEXT), 18(OPEN)
-|  |  |
-|  |  |--F17:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=4.57MB mem-reservation=3.88MB thread-reservation=1
-|  |  |  JOIN BUILD
-|  |  |  |  join-table-id=02 plan-id=03 cohort-id=03
-|  |  |  |  build expressions: i1.i_item_sk
-|  |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |
-|  |  |  38:EXCHANGE [UNPARTITIONED]
-|  |  |  |  mem-estimate=710.69KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=26 row-size=38B cardinality=18.00K
-|  |  |  |  in pipelines: 18(GETNEXT)
-|  |  |  |
-|  |  |  F13:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |  18:SCAN HDFS [tpcds_parquet.item i1, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=1.73MB
-|  |  |     stored statistics:
-|  |  |       table: rows=18.00K size=1.73MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=18.00K
-|  |  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |  |     tuple-ids=26 row-size=38B cardinality=18.00K
-|  |  |     in pipelines: 18(GETNEXT)
-|  |  |
-|  |  08:SELECT
-|  |  |  predicates: rank() < CAST(11 AS BIGINT)
-|  |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=33,32 row-size=36B cardinality=1.80K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  07:ANALYTIC
-|  |  |  functions: rank()
-|  |  |  order by: avg(ss_net_profit) ASC
-|  |  |  window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-|  |  |  mem-estimate=4.00MB mem-reservation=4.00MB spill-buffer=2.00MB thread-reservation=0
-|  |  |  tuple-ids=33,32 row-size=36B cardinality=17.98K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  37:MERGING-EXCHANGE [UNPARTITIONED]
-|  |  |  order by: avg(ss_net_profit) ASC
-|  |  |  mem-estimate=355.83KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=33 row-size=28B cardinality=17.98K
-|  |  |  in pipelines: 06(GETNEXT)
-|  |  |
-|  |  F08:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
-|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=7.94MB thread-reservation=1
-|  |  06:SORT
-|  |  |  order by: avg(ss_net_profit) ASC
-|  |  |  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB thread-reservation=0
-|  |  |  tuple-ids=33 row-size=28B cardinality=17.98K
-|  |  |  in pipelines: 06(GETNEXT), 32(OPEN)
-|  |  |
-|  |  05:NESTED LOOP JOIN [INNER JOIN, BROADCAST]
-|  |  |  join table id: 03
-|  |  |  predicates: avg(ss_net_profit) > CAST(0.9 AS DECIMAL(1,1)) * avg(ss_net_profit)
-|  |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=2,6 row-size=28B cardinality=17.98K
-|  |  |  in pipelines: 32(GETNEXT), 04(OPEN)
-|  |  |
-|  |  |--F18:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
-|  |  |  |  Per-Instance Resources: mem-estimate=16.01KB mem-reservation=0B thread-reservation=1
-|  |  |  JOIN BUILD
-|  |  |  |  join-table-id=03 plan-id=04 cohort-id=03
-|  |  |  |  mem-estimate=12B mem-reservation=0B thread-reservation=0
-|  |  |  |
-|  |  |  36:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=1
-|  |  |  |  in pipelines: 04(GETNEXT)
-|  |  |  |
-|  |  |  F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
-|  |  |  04:CARDINALITY CHECK
-|  |  |  |  limit: 1
-|  |  |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=1
-|  |  |  |  in pipelines: 04(GETNEXT), 34(OPEN)
-|  |  |  |
-|  |  |  35:EXCHANGE [UNPARTITIONED]
-|  |  |  |  limit: 2
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=2
-|  |  |  |  in pipelines: 34(GETNEXT)
-|  |  |  |
-|  |  |  F10:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=6
-|  |  |  Per-Instance Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
-|  |  |  34:AGGREGATE [FINALIZE]
-|  |  |  |  output: avg:merge(ss_net_profit)
-|  |  |  |  group by: ss_store_sk
-|  |  |  |  limit: 2
-|  |  |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=12B cardinality=2
-|  |  |  |  in pipelines: 34(GETNEXT), 02(OPEN)
-|  |  |  |
-|  |  |  33:EXCHANGE [HASH(ss_store_sk)]
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=5 row-size=12B cardinality=6
-|  |  |  |  in pipelines: 02(GETNEXT)
-|  |  |  |
-|  |  |  F09:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-|  |  |  Per-Instance Resources: mem-estimate=26.00MB mem-reservation=3.00MB thread-reservation=1
-|  |  |  03:AGGREGATE [STREAMING]
-|  |  |  |  output: avg(ss_net_profit)
-|  |  |  |  group by: ss_store_sk
-|  |  |  |  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |  tuple-ids=5 row-size=12B cardinality=6
-|  |  |  |  in pipelines: 02(GETNEXT)
-|  |  |  |
-|  |  |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|  |  |     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
-|  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
-|  |  |       partitions: 1824/1824 rows=2.88M
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|  |  |     parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
-|  |  |     parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
-|  |  |     mem-estimate=16.00MB mem-reservation=1.00MB thread-reservation=0
-|  |  |     tuple-ids=4 row-size=12B cardinality=53.06K
-|  |  |     in pipelines: 02(GETNEXT)
-|  |  |
-|  |  32:AGGREGATE [FINALIZE]
-|  |  |  output: avg:merge(ss_net_profit)
-|  |  |  group by: ss_item_sk
-|  |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=2 row-size=16B cardinality=17.98K
-|  |  |  in pipelines: 32(GETNEXT), 00(OPEN)
-|  |  |
-|  |  31:EXCHANGE [HASH(ss_item_sk)]
-|  |  |  mem-estimate=213.62KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=1 row-size=16B cardinality=17.98K
-|  |  |  in pipelines: 00(GETNEXT)
-|  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-|  |  Per-Instance Resources: mem-estimate=26.00MB mem-reservation=3.00MB thread-reservation=1
-|  |  01:AGGREGATE [STREAMING]
-|  |  |  output: avg(ss_net_profit)
-|  |  |  group by: ss_item_sk
-|  |  |  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=1 row-size=16B cardinality=17.98K
-|  |  |  in pipelines: 00(GETNEXT)
-|  |  |
-|  |  00:SCAN HDFS [tpcds_parquet.store_sales ss1, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|  |     predicates: ss_store_sk = CAST(4 AS INT)
-|  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
-|  |       partitions: 1824/1824 rows=2.88M
-|  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|  |     parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
-|  |     parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
-|  |     mem-estimate=16.00MB mem-reservation=1.00MB thread-reservation=0
-|  |     tuple-ids=0 row-size=16B cardinality=480.07K
-|  |     in pipelines: 00(GETNEXT)
-|  |
 |  17:SELECT
 |  |  predicates: rank() < CAST(11 AS BIGINT)
 |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -843,68 +666,68 @@
 |  |  tuple-ids=39,38 row-size=36B cardinality=17.98K
 |  |  in pipelines: 15(GETNEXT)
 |  |
-|  30:MERGING-EXCHANGE [UNPARTITIONED]
+|  38:MERGING-EXCHANGE [UNPARTITIONED]
 |  |  order by: avg(ss_net_profit) DESC
 |  |  mem-estimate=355.83KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=39 row-size=28B cardinality=17.98K
 |  |  in pipelines: 15(GETNEXT)
 |  |
-|  F02:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
+|  F08:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
 |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=7.94MB thread-reservation=1
 |  15:SORT
 |  |  order by: avg(ss_net_profit) DESC
 |  |  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB thread-reservation=0
 |  |  tuple-ids=39 row-size=28B cardinality=17.98K
-|  |  in pipelines: 15(GETNEXT), 25(OPEN)
+|  |  in pipelines: 15(GETNEXT), 33(OPEN)
 |  |
 |  14:NESTED LOOP JOIN [INNER JOIN, BROADCAST]
-|  |  join table id: 04
+|  |  join table id: 02
 |  |  predicates: avg(ss_net_profit) > CAST(0.9 AS DECIMAL(1,1)) * avg(ss_net_profit)
 |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=15,19 row-size=28B cardinality=17.98K
-|  |  in pipelines: 25(GETNEXT), 13(OPEN)
+|  |  in pipelines: 33(GETNEXT), 13(OPEN)
 |  |
-|  |--F19:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
+|  |--F16:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
 |  |  |  Per-Instance Resources: mem-estimate=16.01KB mem-reservation=0B thread-reservation=1
 |  |  JOIN BUILD
-|  |  |  join-table-id=04 plan-id=05 cohort-id=02
+|  |  |  join-table-id=02 plan-id=03 cohort-id=02
 |  |  |  mem-estimate=12B mem-reservation=0B thread-reservation=0
 |  |  |
-|  |  29:EXCHANGE [BROADCAST]
+|  |  37:EXCHANGE [BROADCAST]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=1
 |  |  |  in pipelines: 13(GETNEXT)
 |  |  |
-|  |  F05:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  |  F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  |  Per-Instance Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
 |  |  13:CARDINALITY CHECK
 |  |  |  limit: 1
 |  |  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=1
-|  |  |  in pipelines: 13(GETNEXT), 27(OPEN)
+|  |  |  in pipelines: 13(GETNEXT), 35(OPEN)
 |  |  |
-|  |  28:EXCHANGE [UNPARTITIONED]
+|  |  36:EXCHANGE [UNPARTITIONED]
 |  |  |  limit: 2
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=2
-|  |  |  in pipelines: 27(GETNEXT)
+|  |  |  in pipelines: 35(GETNEXT)
 |  |  |
-|  |  F04:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=6
+|  |  F10:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=6
 |  |  Per-Instance Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
-|  |  27:AGGREGATE [FINALIZE]
+|  |  35:AGGREGATE [FINALIZE]
 |  |  |  output: avg:merge(ss_net_profit)
 |  |  |  group by: ss_store_sk
 |  |  |  limit: 2
 |  |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |  |  tuple-ids=19 row-size=12B cardinality=2
-|  |  |  in pipelines: 27(GETNEXT), 11(OPEN)
+|  |  |  in pipelines: 35(GETNEXT), 11(OPEN)
 |  |  |
-|  |  26:EXCHANGE [HASH(ss_store_sk)]
+|  |  34:EXCHANGE [HASH(ss_store_sk)]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=18 row-size=12B cardinality=6
 |  |  |  in pipelines: 11(GETNEXT)
 |  |  |
-|  |  F03:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+|  |  F09:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
 |  |  Per-Instance Resources: mem-estimate=26.00MB mem-reservation=3.00MB thread-reservation=1
 |  |  12:AGGREGATE [STREAMING]
 |  |  |  output: avg(ss_net_profit)
@@ -914,10 +737,10 @@
 |  |  |  in pipelines: 11(GETNEXT)
 |  |  |
 |  |  11:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -927,19 +750,19 @@
 |  |     tuple-ids=17 row-size=12B cardinality=53.06K
 |  |     in pipelines: 11(GETNEXT)
 |  |
-|  25:AGGREGATE [FINALIZE]
+|  33:AGGREGATE [FINALIZE]
 |  |  output: avg:merge(ss_net_profit)
 |  |  group by: ss_item_sk
 |  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |  tuple-ids=15 row-size=16B cardinality=17.98K
-|  |  in pipelines: 25(GETNEXT), 09(OPEN)
+|  |  in pipelines: 33(GETNEXT), 09(OPEN)
 |  |
-|  24:EXCHANGE [HASH(ss_item_sk)]
+|  32:EXCHANGE [HASH(ss_item_sk)]
 |  |  mem-estimate=213.62KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=14 row-size=16B cardinality=17.98K
 |  |  in pipelines: 09(GETNEXT)
 |  |
-|  F01:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+|  F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
 |  Per-Instance Resources: mem-estimate=26.00MB mem-reservation=3.00MB thread-reservation=1
 |  10:AGGREGATE [STREAMING]
 |  |  output: avg(ss_net_profit)
@@ -949,10 +772,10 @@
 |  |  in pipelines: 09(GETNEXT)
 |  |
 |  09:SCAN HDFS [tpcds_parquet.store_sales ss1, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_store_sk = CAST(4 AS INT)
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -962,14 +785,168 @@
 |     tuple-ids=13 row-size=16B cardinality=480.07K
 |     in pipelines: 09(GETNEXT)
 |
-19:SCAN HDFS [tpcds_parquet.item i2, RANDOM]
-   HDFS partitions=1/1 files=1 size=1.73MB
-   runtime filters: RF000[bloom] -> i2.i_item_sk
+20:HASH JOIN [INNER JOIN, BROADCAST]
+|  hash-table-id=03
+|  hash predicates: ss_item_sk = i1.i_item_sk
+|  fk/pk conjuncts: none
+|  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=33,32,26 row-size=74B cardinality=1.80K
+|  in pipelines: 06(GETNEXT), 18(OPEN)
+|
+|--F17:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=4.57MB mem-reservation=3.88MB thread-reservation=1
+|  JOIN BUILD
+|  |  join-table-id=03 plan-id=04 cohort-id=01
+|  |  build expressions: i1.i_item_sk
+|  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
+|  |
+|  31:EXCHANGE [UNPARTITIONED]
+|  |  mem-estimate=710.69KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=26 row-size=38B cardinality=18.00K
+|  |  in pipelines: 18(GETNEXT)
+|  |
+|  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|  18:SCAN HDFS [tpcds_parquet.item i1, RANDOM]
+|     HDFS partitions=1/1 files=1 size=1.73MB
+|     stored statistics:
+|       table: rows=18.00K size=1.73MB
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=18.00K
+|     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+|     tuple-ids=26 row-size=38B cardinality=18.00K
+|     in pipelines: 18(GETNEXT)
+|
+08:SELECT
+|  predicates: rank() < CAST(11 AS BIGINT)
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
+|  tuple-ids=33,32 row-size=36B cardinality=1.80K
+|  in pipelines: 06(GETNEXT)
+|
+07:ANALYTIC
+|  functions: rank()
+|  order by: avg(ss_net_profit) ASC
+|  window: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+|  mem-estimate=4.00MB mem-reservation=4.00MB spill-buffer=2.00MB thread-reservation=0
+|  tuple-ids=33,32 row-size=36B cardinality=17.98K
+|  in pipelines: 06(GETNEXT)
+|
+30:MERGING-EXCHANGE [UNPARTITIONED]
+|  order by: avg(ss_net_profit) ASC
+|  mem-estimate=355.83KB mem-reservation=0B thread-reservation=0
+|  tuple-ids=33 row-size=28B cardinality=17.98K
+|  in pipelines: 06(GETNEXT)
+|
+F01:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=6
+Per-Instance Resources: mem-estimate=16.00MB mem-reservation=7.94MB thread-reservation=1
+06:SORT
+|  order by: avg(ss_net_profit) ASC
+|  mem-estimate=6.00MB mem-reservation=6.00MB spill-buffer=2.00MB thread-reservation=0
+|  tuple-ids=33 row-size=28B cardinality=17.98K
+|  in pipelines: 06(GETNEXT), 25(OPEN)
+|
+05:NESTED LOOP JOIN [INNER JOIN, BROADCAST]
+|  join table id: 04
+|  predicates: avg(ss_net_profit) > CAST(0.9 AS DECIMAL(1,1)) * avg(ss_net_profit)
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
+|  tuple-ids=2,6 row-size=28B cardinality=17.98K
+|  in pipelines: 25(GETNEXT), 04(OPEN)
+|
+|--F18:PLAN FRAGMENT [HASH(ss_item_sk)] hosts=3 instances=3
+|  |  Per-Instance Resources: mem-estimate=16.01KB mem-reservation=0B thread-reservation=1
+|  JOIN BUILD
+|  |  join-table-id=04 plan-id=05 cohort-id=01
+|  |  mem-estimate=12B mem-reservation=0B thread-reservation=0
+|  |
+|  29:EXCHANGE [BROADCAST]
+|  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=1
+|  |  in pipelines: 04(GETNEXT)
+|  |
+|  F04:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+|  Per-Instance Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
+|  04:CARDINALITY CHECK
+|  |  limit: 1
+|  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=1
+|  |  in pipelines: 04(GETNEXT), 27(OPEN)
+|  |
+|  28:EXCHANGE [UNPARTITIONED]
+|  |  limit: 2
+|  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=2
+|  |  in pipelines: 27(GETNEXT)
+|  |
+|  F03:PLAN FRAGMENT [HASH(ss_store_sk)] hosts=3 instances=6
+|  Per-Instance Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
+|  27:AGGREGATE [FINALIZE]
+|  |  output: avg:merge(ss_net_profit)
+|  |  group by: ss_store_sk
+|  |  limit: 2
+|  |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=6 row-size=12B cardinality=2
+|  |  in pipelines: 27(GETNEXT), 02(OPEN)
+|  |
+|  26:EXCHANGE [HASH(ss_store_sk)]
+|  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=5 row-size=12B cardinality=6
+|  |  in pipelines: 02(GETNEXT)
+|  |
+|  F02:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+|  Per-Instance Resources: mem-estimate=26.00MB mem-reservation=3.00MB thread-reservation=1
+|  03:AGGREGATE [STREAMING]
+|  |  output: avg(ss_net_profit)
+|  |  group by: ss_store_sk
+|  |  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=5 row-size=12B cardinality=6
+|  |  in pipelines: 02(GETNEXT)
+|  |
+|  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
+|     predicates: ss_addr_sk IS NULL, ss_store_sk = CAST(4 AS INT)
+|     stored statistics:
+|       table: rows=2.88M size=200.95MB
+|       partitions: 1824/1824 rows=2.88M
+|       columns: all
+|     extrapolated-rows=disabled max-scan-range-rows=130.09K
+|     parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
+|     parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
+|     mem-estimate=16.00MB mem-reservation=1.00MB thread-reservation=0
+|     tuple-ids=4 row-size=12B cardinality=53.06K
+|     in pipelines: 02(GETNEXT)
+|
+25:AGGREGATE [FINALIZE]
+|  output: avg:merge(ss_net_profit)
+|  group by: ss_item_sk
+|  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=2 row-size=16B cardinality=17.98K
+|  in pipelines: 25(GETNEXT), 00(OPEN)
+|
+24:EXCHANGE [HASH(ss_item_sk)]
+|  mem-estimate=213.62KB mem-reservation=0B thread-reservation=0
+|  tuple-ids=1 row-size=16B cardinality=17.98K
+|  in pipelines: 00(GETNEXT)
+|
+F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+Per-Instance Resources: mem-estimate=26.00MB mem-reservation=3.00MB thread-reservation=1
+01:AGGREGATE [STREAMING]
+|  output: avg(ss_net_profit)
+|  group by: ss_item_sk
+|  mem-estimate=10.00MB mem-reservation=2.00MB spill-buffer=64.00KB thread-reservation=0
+|  tuple-ids=1 row-size=16B cardinality=17.98K
+|  in pipelines: 00(GETNEXT)
+|
+00:SCAN HDFS [tpcds_parquet.store_sales ss1, RANDOM]
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
+   predicates: ss_store_sk = CAST(4 AS INT)
    stored statistics:
-     table: rows=18.00K size=1.73MB
+     table: rows=2.88M size=200.95MB
+     partitions: 1824/1824 rows=2.88M
      columns: all
-   extrapolated-rows=disabled max-scan-range-rows=18.00K
-   mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-   tuple-ids=27 row-size=38B cardinality=18.00K
-   in pipelines: 19(GETNEXT)
+   extrapolated-rows=disabled max-scan-range-rows=130.09K
+   parquet statistics predicates: ss_store_sk = CAST(4 AS INT)
+   parquet dictionary predicates: ss_store_sk = CAST(4 AS INT)
+   mem-estimate=16.00MB mem-reservation=1.00MB thread-reservation=0
+   tuple-ids=0 row-size=16B cardinality=480.07K
+   in pipelines: 00(GETNEXT)
 ====
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q46.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q46.test
index 1eb9bec..00ec59e 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q46.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q46.test
@@ -189,10 +189,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF004[bloom] -> store_sales.ss_addr_sk, RF006[bloom] -> store_sales.ss_store_sk, RF008[bloom] -> store_sales.ss_sold_date_sk, RF010[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -411,10 +411,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF004[bloom] -> store_sales.ss_addr_sk, RF006[bloom] -> store_sales.ss_store_sk, RF008[bloom] -> store_sales.ss_sold_date_sk, RF010[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -683,10 +683,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF004[bloom] -> store_sales.ss_addr_sk, RF006[bloom] -> store_sales.ss_store_sk, RF008[bloom] -> store_sales.ss_sold_date_sk, RF010[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q47.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q47.test
index a84459f..c1a49c4 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q47.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q47.test
@@ -148,10 +148,10 @@
 |  |     in pipelines: 25(GETNEXT)
 |  |
 |  24:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_store_sk, RF014[bloom] -> ss_item_sk, RF016[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -263,10 +263,10 @@
 |  |     in pipelines: 02(GETNEXT)
 |  |
 |  01:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_store_sk, RF008[bloom] -> ss_item_sk, RF010[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -352,10 +352,10 @@
 |     in pipelines: 15(GETNEXT)
 |
 14:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -513,10 +513,10 @@
 |  |     in pipelines: 25(GETNEXT)
 |  |
 |  24:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_store_sk, RF014[bloom] -> ss_item_sk, RF016[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -677,10 +677,10 @@
 |  |     in pipelines: 02(GETNEXT)
 |  |
 |  01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_store_sk, RF008[bloom] -> ss_item_sk, RF010[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -801,10 +801,10 @@
 |     in pipelines: 15(GETNEXT)
 |
 14:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -995,10 +995,10 @@
 |  |     in pipelines: 25(GETNEXT)
 |  |
 |  24:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_store_sk, RF014[bloom] -> ss_item_sk, RF016[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1192,10 +1192,10 @@
 |  |     in pipelines: 02(GETNEXT)
 |  |
 |  01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_store_sk, RF008[bloom] -> ss_item_sk, RF010[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1341,10 +1341,10 @@
 |     in pipelines: 15(GETNEXT)
 |
 14:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_item_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q48.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q48.test
index 97d136c..5faeeab 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q48.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q48.test
@@ -125,11 +125,11 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2))
 |     runtime filters: RF000[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_addr_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -294,11 +294,11 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2))
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_cdemo_sk, RF004[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_addr_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -484,11 +484,11 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit <= CAST(2000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit <= CAST(3000 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit <= CAST(25000 AS DECIMAL(5,0)), ss_net_profit >= CAST(0 AS DECIMAL(3,0)) OR ss_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ss_net_profit >= CAST(50 AS DECIMAL(3,0)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ss_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ss_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ss_sales_price >= CAST(150.00 AS DECIMAL(5,2))
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_cdemo_sk, RF004[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_addr_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q49.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q49.test
index b8873c9..681273f 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q49.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q49.test
@@ -214,11 +214,11 @@
 |  |     in pipelines: 24(GETNEXT)
 |  |
 |  23:SCAN HDFS [tpcds_parquet.store_sales sts]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: sts.ss_net_paid > CAST(0 AS DECIMAL(3,0)), sts.ss_net_profit > CAST(1 AS DECIMAL(3,0)), sts.ss_quantity > CAST(0 AS INT)
 |     runtime filters: RF004[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -573,11 +573,11 @@
 |  |     in pipelines: 24(GETNEXT)
 |  |
 |  23:SCAN HDFS [tpcds_parquet.store_sales sts, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: sts.ss_net_paid > CAST(0 AS DECIMAL(3,0)), sts.ss_net_profit > CAST(1 AS DECIMAL(3,0)), sts.ss_quantity > CAST(0 AS INT)
 |     runtime filters: RF004[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1021,11 +1021,11 @@
 |  |     in pipelines: 24(GETNEXT)
 |  |
 |  23:SCAN HDFS [tpcds_parquet.store_sales sts, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     predicates: sts.ss_net_paid > CAST(0 AS DECIMAL(3,0)), sts.ss_net_profit > CAST(1 AS DECIMAL(3,0)), sts.ss_quantity > CAST(0 AS INT)
 |     runtime filters: RF004[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q50.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q50.test
index ace53f3..30180a6 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q50.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q50.test
@@ -166,10 +166,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_store_sk, RF006[bloom] -> ss_customer_sk, RF007[bloom] -> ss_item_sk, RF008[bloom] -> ss_ticket_number
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -326,10 +326,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_store_sk, RF006[bloom] -> ss_customer_sk, RF007[bloom] -> ss_item_sk, RF008[bloom] -> ss_ticket_number
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -520,10 +520,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_store_sk, RF006[bloom] -> ss_customer_sk, RF007[bloom] -> ss_item_sk, RF008[bloom] -> ss_ticket_number
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q51.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q51.test
index 9f8595a..f616b86 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q51.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q51.test
@@ -195,11 +195,11 @@
 |     in pipelines: 07(GETNEXT)
 |
 06:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_item_sk IS NOT NULL
    runtime filters: RF000[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -208,8 +208,8 @@
    tuple-ids=5 row-size=16B cardinality=2.88M
    in pipelines: 06(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=232.88MB Threads=13
-Per-Host Resource Estimates: Memory=560MB
+Max Per-Host Resource Reservation: Memory=215.88MB Threads=13
+Per-Host Resource Estimates: Memory=543MB
 F08:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=21.29KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
@@ -224,7 +224,7 @@
 |  in pipelines: 16(GETNEXT)
 |
 F07:PLAN FRAGMENT [HASH(CASE WHEN ws_item_sk IS NOT NULL THEN ws_item_sk ELSE ss_item_sk END)] hosts=2 instances=2
-Per-Host Resources: mem-estimate=36.27MB mem-reservation=16.00MB thread-reservation=1
+Per-Host Resources: mem-estimate=36.41MB mem-reservation=16.00MB thread-reservation=1
 16:TOP-N [LIMIT=100]
 |  order by: item_sk ASC, d_date ASC
 |  mem-estimate=8.20KB mem-reservation=0B thread-reservation=0
@@ -253,16 +253,16 @@
 |  in pipelines: 13(GETNEXT), 10(OPEN)
 |
 25:EXCHANGE [HASH(CASE WHEN ws_item_sk IS NOT NULL THEN ws_item_sk ELSE ss_item_sk END)]
-|  mem-estimate=10.27MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=10.41MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=22N,21N,17N,16N row-size=124B cardinality=3.60M
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
-Per-Host Resources: mem-estimate=54.34MB mem-reservation=34.00MB thread-reservation=1
+F06:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+Per-Host Resources: mem-estimate=37.34MB mem-reservation=17.00MB thread-reservation=1
 12:HASH JOIN [FULL OUTER JOIN, PARTITIONED]
 |  hash predicates: ss_item_sk = ws_item_sk, d_date = d_date
 |  fk/pk conjuncts: d_date = d_date
-|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=17.00MB mem-reservation=17.00MB spill-buffer=1.00MB thread-reservation=0
 |  tuple-ids=22N,21N,17N,16N row-size=124B cardinality=3.60M
 |  in pipelines: 10(GETNEXT), 04(OPEN)
 |
@@ -422,11 +422,11 @@
 |     in pipelines: 07(GETNEXT)
 |
 06:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_item_sk IS NOT NULL
    runtime filters: RF000[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -435,8 +435,8 @@
    tuple-ids=5 row-size=16B cardinality=2.88M
    in pipelines: 06(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=323.75MB Threads=14
-Per-Host Resource Estimates: Memory=454MB
+Max Per-Host Resource Reservation: Memory=306.75MB Threads=16
+Per-Host Resource Estimates: Memory=458MB
 F08:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=21.29KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
@@ -451,7 +451,7 @@
 |  in pipelines: 16(GETNEXT)
 |
 F07:PLAN FRAGMENT [HASH(CASE WHEN ws_item_sk IS NOT NULL THEN ws_item_sk ELSE ss_item_sk END)] hosts=2 instances=2
-Per-Instance Resources: mem-estimate=36.27MB mem-reservation=16.00MB thread-reservation=1
+Per-Instance Resources: mem-estimate=36.82MB mem-reservation=16.00MB thread-reservation=1
 16:TOP-N [LIMIT=100]
 |  order by: item_sk ASC, d_date ASC
 |  mem-estimate=8.20KB mem-reservation=0B thread-reservation=0
@@ -480,26 +480,26 @@
 |  in pipelines: 13(GETNEXT), 10(OPEN)
 |
 25:EXCHANGE [HASH(CASE WHEN ws_item_sk IS NOT NULL THEN ws_item_sk ELSE ss_item_sk END)]
-|  mem-estimate=10.27MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=10.82MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=22N,21N,17N,16N row-size=124B cardinality=3.60M
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+F06:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
 Per-Instance Resources: mem-estimate=10.41MB mem-reservation=0B thread-reservation=1
 12:HASH JOIN [FULL OUTER JOIN, PARTITIONED]
 |  hash-table-id=00
 |  hash predicates: ss_item_sk = ws_item_sk, d_date = d_date
 |  fk/pk conjuncts: d_date = d_date
-|  mem-estimate=0B mem-reservation=0B spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
 |  tuple-ids=22N,21N,17N,16N row-size=124B cardinality=3.60M
 |  in pipelines: 10(GETNEXT), 04(OPEN)
 |
-|--F09:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
-|  |  Per-Instance Resources: mem-estimate=44.14MB mem-reservation=34.00MB thread-reservation=1
+|--F09:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+|  |  Per-Instance Resources: mem-estimate=18.64MB mem-reservation=8.50MB thread-reservation=1
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
 |  |  build expressions: ws_item_sk, d_date
-|  |  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  |
 |  24:EXCHANGE [HASH(ws_item_sk,d_date)]
 |  |  mem-estimate=10.14MB mem-reservation=0B thread-reservation=0
@@ -675,11 +675,11 @@
 |     in pipelines: 07(GETNEXT)
 |
 06:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_item_sk IS NOT NULL
    runtime filters: RF000[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q52.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q52.test
index 2a1912e..659d6ec 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q52.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q52.test
@@ -88,10 +88,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -200,10 +200,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -329,10 +329,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_sold_date_sk, RF002[bloom] -> store_sales.ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q53.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q53.test
index ce75dd6..7fcff3e 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q53.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q53.test
@@ -110,10 +110,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -245,10 +245,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -405,10 +405,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q54.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q54.test
index 489d6da..e6cbd22 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q54.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q54.test
@@ -308,10 +308,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 10:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -739,10 +739,10 @@
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 Per-Host Resources: mem-estimate=34.00MB mem-reservation=3.00MB thread-reservation=2 runtime-filters-memory=2.00MB
 10:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1244,10 +1244,10 @@
 Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
 Per-Instance Resources: mem-estimate=16.00MB mem-reservation=1.00MB thread-reservation=1
 10:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q55.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q55.test
index b349d0d..a5842e4 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q55.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q55.test
@@ -85,10 +85,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -197,10 +197,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -326,10 +326,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q56.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q56.test
index f082ef4..da509a0 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q56.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q56.test
@@ -385,10 +385,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_addr_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -877,10 +877,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_addr_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1471,10 +1471,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_addr_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q58.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q58.test
index 516a58f..58775e2 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q58.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q58.test
@@ -388,10 +388,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -876,10 +876,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1485,10 +1485,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q59.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q59.test
index 4105b3f..e5c9f08 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q59.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q59.test
@@ -169,10 +169,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF010[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF014[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -248,10 +248,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF008[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -398,10 +398,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF010[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF014[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -519,10 +519,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF008[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -703,10 +703,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF010[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF014[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -852,10 +852,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF008[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q60.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q60.test
index 771ff8a..e41cd25 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q60.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q60.test
@@ -386,10 +386,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_addr_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -878,10 +878,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_addr_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q61.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q61.test
index a011030..ffb99b8 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q61.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q61.test
@@ -175,10 +175,10 @@
 |  |     in pipelines: 16(GETNEXT)
 |  |
 |  14:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF020[bloom] -> ss_sold_date_sk, RF018[bloom] -> ss_item_sk, RF014[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -315,10 +315,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF010[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk, RF006[bloom] -> ss_promo_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_store_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -516,10 +516,10 @@
 |  |     in pipelines: 16(GETNEXT)
 |  |
 |  14:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF020[bloom] -> ss_sold_date_sk, RF018[bloom] -> ss_item_sk, RF014[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -718,10 +718,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF010[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk, RF006[bloom] -> ss_promo_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_store_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -968,10 +968,10 @@
 |  |     in pipelines: 16(GETNEXT)
 |  |
 |  14:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF020[bloom] -> ss_sold_date_sk, RF018[bloom] -> ss_item_sk, RF014[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1220,10 +1220,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF010[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk, RF006[bloom] -> ss_promo_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_store_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q63.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q63.test
index e08a9e3..471e230 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q63.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q63.test
@@ -133,10 +133,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -287,10 +287,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -466,10 +466,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q64.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q64.test
index 7b14fbe..3f5eb87 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q64.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q64.test
@@ -420,10 +420,10 @@
 |  |  |  |  |  |  |  |     in pipelines: 59(GETNEXT)
 |  |  |  |  |  |  |  |
 |  |  |  |  |  |  |  39:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |  |  |  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |  |  |  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |  |  |  |  |     runtime filters: RF080[bloom] -> ss_item_sk
 |  |  |  |  |  |  |     stored statistics:
-|  |  |  |  |  |  |       table: rows=2.88M size=201.02MB
+|  |  |  |  |  |  |       table: rows=2.88M size=200.95MB
 |  |  |  |  |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |  |  |  |  |       columns: all
 |  |  |  |  |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -767,10 +767,10 @@
 |  |  |  |  |  |  |     in pipelines: 20(GETNEXT)
 |  |  |  |  |  |  |
 |  |  |  |  |  |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |  |  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |  |  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |  |  |  |     runtime filters: RF040[bloom] -> ss_item_sk
 |  |  |  |  |  |     stored statistics:
-|  |  |  |  |  |       table: rows=2.88M size=201.02MB
+|  |  |  |  |  |       table: rows=2.88M size=200.95MB
 |  |  |  |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |  |  |  |       columns: all
 |  |  |  |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1421,10 +1421,10 @@
 |  |     in pipelines: 59(GETNEXT)
 |  |
 |  39:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF080[bloom] -> ss_item_sk, RF078[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1984,10 +1984,10 @@
 |     in pipelines: 20(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF040[bloom] -> ss_item_sk, RF038[bloom] -> ss_sold_date_sk, RF034[bloom] -> ss_item_sk, RF035[bloom] -> ss_ticket_number
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2729,10 +2729,10 @@
 |  |     in pipelines: 59(GETNEXT)
 |  |
 |  39:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF080[bloom] -> ss_item_sk, RF078[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -3439,10 +3439,10 @@
 |     in pipelines: 20(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF040[bloom] -> ss_item_sk, RF038[bloom] -> ss_sold_date_sk, RF034[bloom] -> ss_item_sk, RF035[bloom] -> ss_ticket_number
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q65.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q65.test
index 4f40746..e03bb52 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q65.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q65.test
@@ -113,10 +113,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -190,10 +190,10 @@
 |     in pipelines: 08(GETNEXT)
 |
 07:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF004[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -311,10 +311,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -430,10 +430,10 @@
 |     in pipelines: 08(GETNEXT)
 |
 07:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF004[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -568,10 +568,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -713,10 +713,10 @@
 |     in pipelines: 08(GETNEXT)
 |
 07:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF004[bloom] -> tpcds_parquet.store_sales.ss_store_sk, RF006[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q66.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q66.test
index 341f5cc..74115f2 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q66.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q66.test
@@ -168,10 +168,10 @@
 |  |     in pipelines: 16(GETNEXT)
 |  |
 |  14:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF020[bloom] -> ss_sold_date_sk, RF018[bloom] -> ss_item_sk, RF014[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -308,10 +308,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF010[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk, RF006[bloom] -> ss_promo_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_store_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -509,10 +509,10 @@
 |  |     in pipelines: 16(GETNEXT)
 |  |
 |  14:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF020[bloom] -> ss_sold_date_sk, RF018[bloom] -> ss_item_sk, RF014[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -711,10 +711,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF010[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk, RF006[bloom] -> ss_promo_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_store_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -961,10 +961,10 @@
 |  |     in pipelines: 16(GETNEXT)
 |  |
 |  14:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF020[bloom] -> ss_sold_date_sk, RF018[bloom] -> ss_item_sk, RF014[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1213,10 +1213,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF010[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_item_sk, RF006[bloom] -> ss_promo_sk, RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_store_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q67.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q67.test
index 3eed906..ae96817 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q67.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q67.test
@@ -173,10 +173,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -398,10 +398,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_item_sk, RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q68.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q68.test
index 5b18f62..213b00c 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q68.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q68.test
@@ -187,10 +187,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF004[bloom] -> store_sales.ss_addr_sk, RF006[bloom] -> store_sales.ss_store_sk, RF008[bloom] -> store_sales.ss_sold_date_sk, RF010[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -402,10 +402,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF004[bloom] -> store_sales.ss_addr_sk, RF006[bloom] -> store_sales.ss_store_sk, RF008[bloom] -> store_sales.ss_sold_date_sk, RF010[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -667,10 +667,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF004[bloom] -> store_sales.ss_addr_sk, RF006[bloom] -> store_sales.ss_store_sk, RF008[bloom] -> store_sales.ss_sold_date_sk, RF010[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q69.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q69.test
index cc86cf1..85af0d4 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q69.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q69.test
@@ -165,10 +165,10 @@
 |  |  |     in pipelines: 04(GETNEXT)
 |  |  |
 |  |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF004[bloom] -> ss_customer_sk, RF006[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -240,10 +240,10 @@
    tuple-ids=9 row-size=8B cardinality=1.44M
    in pipelines: 09(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=46.69MB Threads=21
-Per-Host Resource Estimates: Memory=543MB
+Max Per-Host Resource Reservation: Memory=48.62MB Threads=21
+Per-Host Resource Estimates: Memory=544MB
 F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=26.75KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: cd_gender, cd_marital_status, cd_education_status, count(*), cd_purchase_estimate, count(*), cd_credit_rating, count(*)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -251,12 +251,12 @@
 30:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC
 |  limit: 100
-|  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=26.75KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=13 row-size=79B cardinality=100
 |  in pipelines: 18(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=10.50MB mem-reservation=1.94MB thread-reservation=1
+F10:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=10.38MB mem-reservation=1.94MB thread-reservation=1
 18:TOP-N [LIMIT=100]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC
 |  mem-estimate=7.67KB mem-reservation=0B thread-reservation=0
@@ -271,12 +271,12 @@
 |  in pipelines: 29(GETNEXT), 09(OPEN)
 |
 28:EXCHANGE [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating)]
-|  mem-estimate=512.26KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=390.95KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=79B cardinality=5.60K
 |  in pipelines: 09(GETNEXT)
 |
-F09:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=17.32MB mem-reservation=6.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+F07:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=18.75MB mem-reservation=8.81MB thread-reservation=1 runtime-filters-memory=1.00MB
 17:AGGREGATE [STREAMING]
 |  output: count(*)
 |  group by: cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating
@@ -288,116 +288,37 @@
 |  hash predicates: cs_ship_customer_sk = c.c_customer_sk
 |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  in pipelines: 09(GETNEXT), 06(OPEN)
+|  in pipelines: 09(GETNEXT), 03(OPEN)
 |
-|--15:HASH JOIN [RIGHT ANTI JOIN, PARTITIONED]
-|  |  hash predicates: ws_bill_customer_sk = c.c_customer_sk
+|--15:HASH JOIN [LEFT ANTI JOIN, PARTITIONED]
+|  |  hash predicates: c.c_customer_sk = ws_bill_customer_sk
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  in pipelines: 06(GETNEXT), 03(OPEN)
+|  |  in pipelines: 03(GETNEXT), 06(OPEN)
 |  |
-|  |--14:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
-|  |  |  hash predicates: ss_customer_sk = c.c_customer_sk
-|  |  |  runtime filters: RF004[bloom] <- c.c_customer_sk
+|  |--26:EXCHANGE [HASH(ws_bill_customer_sk)]
+|  |  |  mem-estimate=513.25KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
+|  |  |  in pipelines: 06(GETNEXT)
+|  |  |
+|  |  F08:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  |  Per-Host Resources: mem-estimate=66.95MB mem-reservation=6.94MB thread-reservation=2 runtime-filters-memory=1.00MB
+|  |  08:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash predicates: ws_sold_date_sk = d_date_sk
+|  |  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
+|  |  |  runtime filters: RF010[bloom] <- d_date_sk
 |  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  |  in pipelines: 03(GETNEXT), 02(OPEN)
+|  |  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
+|  |  |  in pipelines: 06(GETNEXT), 07(OPEN)
 |  |  |
-|  |  |--25:EXCHANGE [HASH(c.c_customer_sk)]
-|  |  |  |  mem-estimate=813.54KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  |  |  in pipelines: 02(GETNEXT)
-|  |  |  |
-|  |  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=104.04MB mem-reservation=14.81MB thread-reservation=2 runtime-filters-memory=2.00MB
-|  |  |  13:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
-|  |  |  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
-|  |  |  |  runtime filters: RF008[bloom] <- ca.ca_address_sk
-|  |  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  |  |  in pipelines: 02(GETNEXT), 01(OPEN)
-|  |  |  |
-|  |  |  |--23:EXCHANGE [BROADCAST]
-|  |  |  |  |  mem-estimate=73.70KB mem-reservation=0B thread-reservation=0
-|  |  |  |  |  tuple-ids=1 row-size=18B cardinality=2.94K
-|  |  |  |  |  in pipelines: 01(GETNEXT)
-|  |  |  |  |
-|  |  |  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=2
-|  |  |  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
-|  |  |  |     HDFS partitions=1/1 files=1 size=1.16MB
-|  |  |  |     predicates: ca_state IN ('KY', 'GA', 'NM')
-|  |  |  |     stored statistics:
-|  |  |  |       table: rows=50.00K size=1.16MB
-|  |  |  |       columns: all
-|  |  |  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
-|  |  |  |     parquet statistics predicates: ca_state IN ('KY', 'GA', 'NM')
-|  |  |  |     parquet dictionary predicates: ca_state IN ('KY', 'GA', 'NM')
-|  |  |  |     mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=1
-|  |  |  |     tuple-ids=1 row-size=18B cardinality=2.94K
-|  |  |  |     in pipelines: 01(GETNEXT)
-|  |  |  |
-|  |  |  12:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
-|  |  |  |  fk/pk conjuncts: none
-|  |  |  |  runtime filters: RF010[bloom] <- c.c_current_cdemo_sk
-|  |  |  |  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
-|  |  |  |  tuple-ids=2,0 row-size=87B cardinality=100.00K
-|  |  |  |  in pipelines: 02(GETNEXT), 00(OPEN)
-|  |  |  |
-|  |  |  |--22:EXCHANGE [BROADCAST]
-|  |  |  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
-|  |  |  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |  |  |  in pipelines: 00(GETNEXT)
-|  |  |  |  |
-|  |  |  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  Per-Host Resources: mem-estimate=49.00MB mem-reservation=3.00MB thread-reservation=2 runtime-filters-memory=1.00MB
-|  |  |  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
-|  |  |  |     HDFS partitions=1/1 files=1 size=5.49MB
-|  |  |  |     runtime filters: RF008[bloom] -> c.c_current_addr_sk
-|  |  |  |     stored statistics:
-|  |  |  |       table: rows=100.00K size=5.49MB
-|  |  |  |       columns: all
-|  |  |  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
-|  |  |  |     mem-estimate=48.00MB mem-reservation=2.00MB thread-reservation=1
-|  |  |  |     tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |  |     in pipelines: 00(GETNEXT)
-|  |  |  |
-|  |  |  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=7.49MB
-|  |  |     runtime filters: RF010[bloom] -> cd_demo_sk
-|  |  |     stored statistics:
-|  |  |       table: rows=1.92M size=7.49MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
-|  |  |     mem-estimate=96.00MB mem-reservation=8.00MB thread-reservation=1
-|  |  |     tuple-ids=2 row-size=75B cardinality=1.92M
-|  |  |     in pipelines: 02(GETNEXT)
-|  |  |
-|  |  24:EXCHANGE [HASH(ss_customer_sk)]
-|  |  |  mem-estimate=1.27MB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  |  in pipelines: 03(GETNEXT)
-|  |  |
-|  |  F04:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  Per-Host Resources: mem-estimate=19.95MB mem-reservation=4.44MB thread-reservation=2 runtime-filters-memory=2.00MB
-|  |  05:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash predicates: ss_sold_date_sk = d_date_sk
-|  |  |  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
-|  |  |  runtime filters: RF006[bloom] <- d_date_sk
-|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  |  in pipelines: 03(GETNEXT), 04(OPEN)
-|  |  |
-|  |  |--21:EXCHANGE [BROADCAST]
+|  |  |--25:EXCHANGE [BROADCAST]
 |  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=4 row-size=12B cardinality=118
-|  |  |  |  in pipelines: 04(GETNEXT)
+|  |  |  |  tuple-ids=7 row-size=12B cardinality=118
+|  |  |  |  in pipelines: 07(GETNEXT)
 |  |  |  |
-|  |  |  F05:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
-|  |  |  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |  |  07:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
 |  |  |     HDFS partitions=1/1 files=1 size=2.15MB
 |  |  |     predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |  |     stored statistics:
@@ -407,44 +328,122 @@
 |  |  |     parquet statistics predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |  |     parquet dictionary predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |     tuple-ids=4 row-size=12B cardinality=118
-|  |  |     in pipelines: 04(GETNEXT)
+|  |  |     tuple-ids=7 row-size=12B cardinality=118
+|  |  |     in pipelines: 07(GETNEXT)
 |  |  |
-|  |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|  |     runtime filters: RF004[bloom] -> ss_customer_sk, RF006[bloom] -> ss_sold_date_sk
+|  |  06:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
+|  |     HDFS partitions=1/1 files=2 size=45.09MB
+|  |     runtime filters: RF010[bloom] -> ws_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
-|  |       partitions: 1824/1824 rows=2.88M
+|  |       table: rows=719.38K size=45.09MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |     tuple-ids=3 row-size=8B cardinality=2.88M
-|  |     in pipelines: 03(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=644.77K
+|  |     mem-estimate=64.00MB mem-reservation=4.00MB thread-reservation=1
+|  |     tuple-ids=6 row-size=8B cardinality=719.38K
+|  |     in pipelines: 06(GETNEXT)
 |  |
-|  26:EXCHANGE [HASH(ws_bill_customer_sk)]
-|  |  mem-estimate=513.25KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
-|  |  in pipelines: 06(GETNEXT)
-|  |
-|  F02:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
-|  Per-Host Resources: mem-estimate=66.95MB mem-reservation=6.94MB thread-reservation=2 runtime-filters-memory=1.00MB
-|  08:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash predicates: ws_sold_date_sk = d_date_sk
-|  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
-|  |  runtime filters: RF002[bloom] <- d_date_sk
+|  14:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
+|  |  hash predicates: ss_customer_sk = c.c_customer_sk
+|  |  runtime filters: RF002[bloom] <- c.c_customer_sk
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
-|  |  in pipelines: 06(GETNEXT), 07(OPEN)
+|  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
+|  |  in pipelines: 03(GETNEXT), 02(OPEN)
+|  |
+|  |--24:EXCHANGE [HASH(c.c_customer_sk)]
+|  |  |  mem-estimate=813.54KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
+|  |  |  in pipelines: 02(GETNEXT)
+|  |  |
+|  |  F04:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=104.04MB mem-reservation=14.81MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  |  13:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
+|  |  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
+|  |  |  runtime filters: RF006[bloom] <- ca.ca_address_sk
+|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
+|  |  |  in pipelines: 02(GETNEXT), 01(OPEN)
+|  |  |
+|  |  |--22:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=73.70KB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=1 row-size=18B cardinality=2.94K
+|  |  |  |  in pipelines: 01(GETNEXT)
+|  |  |  |
+|  |  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=2
+|  |  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=1.16MB
+|  |  |     predicates: ca_state IN ('KY', 'GA', 'NM')
+|  |  |     stored statistics:
+|  |  |       table: rows=50.00K size=1.16MB
+|  |  |       columns: all
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
+|  |  |     parquet statistics predicates: ca_state IN ('KY', 'GA', 'NM')
+|  |  |     parquet dictionary predicates: ca_state IN ('KY', 'GA', 'NM')
+|  |  |     mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=1
+|  |  |     tuple-ids=1 row-size=18B cardinality=2.94K
+|  |  |     in pipelines: 01(GETNEXT)
+|  |  |
+|  |  12:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
+|  |  |  fk/pk conjuncts: none
+|  |  |  runtime filters: RF008[bloom] <- c.c_current_cdemo_sk
+|  |  |  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
+|  |  |  tuple-ids=2,0 row-size=87B cardinality=100.00K
+|  |  |  in pipelines: 02(GETNEXT), 00(OPEN)
+|  |  |
+|  |  |--21:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
+|  |  |  |  in pipelines: 00(GETNEXT)
+|  |  |  |
+|  |  |  F05:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  Per-Host Resources: mem-estimate=49.00MB mem-reservation=3.00MB thread-reservation=2 runtime-filters-memory=1.00MB
+|  |  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=5.49MB
+|  |  |     runtime filters: RF006[bloom] -> c.c_current_addr_sk
+|  |  |     stored statistics:
+|  |  |       table: rows=100.00K size=5.49MB
+|  |  |       columns: all
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
+|  |  |     mem-estimate=48.00MB mem-reservation=2.00MB thread-reservation=1
+|  |  |     tuple-ids=0 row-size=12B cardinality=100.00K
+|  |  |     in pipelines: 00(GETNEXT)
+|  |  |
+|  |  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=7.49MB
+|  |     runtime filters: RF008[bloom] -> cd_demo_sk
+|  |     stored statistics:
+|  |       table: rows=1.92M size=7.49MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
+|  |     mem-estimate=96.00MB mem-reservation=8.00MB thread-reservation=1
+|  |     tuple-ids=2 row-size=75B cardinality=1.92M
+|  |     in pipelines: 02(GETNEXT)
+|  |
+|  23:EXCHANGE [HASH(ss_customer_sk)]
+|  |  mem-estimate=1.27MB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  |  in pipelines: 03(GETNEXT)
+|  |
+|  F02:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  Per-Host Resources: mem-estimate=19.95MB mem-reservation=4.44MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  05:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash predicates: ss_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
+|  |  runtime filters: RF004[bloom] <- d_date_sk
+|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  |  in pipelines: 03(GETNEXT), 04(OPEN)
 |  |
 |  |--20:EXCHANGE [BROADCAST]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=7 row-size=12B cardinality=118
-|  |  |  in pipelines: 07(GETNEXT)
+|  |  |  tuple-ids=4 row-size=12B cardinality=118
+|  |  |  in pipelines: 04(GETNEXT)
 |  |  |
 |  |  F03:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
-|  |  07:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
 |  |     HDFS partitions=1/1 files=1 size=2.15MB
 |  |     predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |     stored statistics:
@@ -454,19 +453,20 @@
 |  |     parquet statistics predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |     parquet dictionary predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
-|  |     tuple-ids=7 row-size=12B cardinality=118
-|  |     in pipelines: 07(GETNEXT)
+|  |     tuple-ids=4 row-size=12B cardinality=118
+|  |     in pipelines: 04(GETNEXT)
 |  |
-|  06:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
-|     HDFS partitions=1/1 files=2 size=45.09MB
-|     runtime filters: RF002[bloom] -> ws_sold_date_sk
+|  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
+|     runtime filters: RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=719.38K size=45.09MB
+|       table: rows=2.88M size=200.95MB
+|       partitions: 1824/1824 rows=2.88M
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=644.77K
-|     mem-estimate=64.00MB mem-reservation=4.00MB thread-reservation=1
-|     tuple-ids=6 row-size=8B cardinality=719.38K
-|     in pipelines: 06(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=130.09K
+|     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|     tuple-ids=3 row-size=8B cardinality=2.88M
+|     in pipelines: 03(GETNEXT)
 |
 27:EXCHANGE [HASH(cs_ship_customer_sk)]
 |  mem-estimate=690.82KB mem-reservation=0B thread-reservation=0
@@ -517,7 +517,7 @@
 Max Per-Host Resource Reservation: Memory=63.75MB Threads=21
 Per-Host Resource Estimates: Memory=272MB
 F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=26.75KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: cd_gender, cd_marital_status, cd_education_status, count(*), cd_purchase_estimate, count(*), cd_credit_rating, count(*)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -525,12 +525,12 @@
 30:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC
 |  limit: 100
-|  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=26.75KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=13 row-size=79B cardinality=100
 |  in pipelines: 18(GETNEXT)
 |
-F10:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating)] hosts=1 instances=1
-Per-Instance Resources: mem-estimate=10.50MB mem-reservation=1.94MB thread-reservation=1
+F10:PLAN FRAGMENT [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=10.38MB mem-reservation=1.94MB thread-reservation=1
 18:TOP-N [LIMIT=100]
 |  order by: cd_gender ASC, cd_marital_status ASC, cd_education_status ASC, cd_purchase_estimate ASC, cd_credit_rating ASC
 |  mem-estimate=7.67KB mem-reservation=0B thread-reservation=0
@@ -545,11 +545,11 @@
 |  in pipelines: 29(GETNEXT), 09(OPEN)
 |
 28:EXCHANGE [HASH(cd_gender,cd_marital_status,cd_education_status,cd_purchase_estimate,cd_credit_rating)]
-|  mem-estimate=512.26KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=390.95KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=79B cardinality=5.60K
 |  in pipelines: 09(GETNEXT)
 |
-F09:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
+F07:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
 Per-Instance Resources: mem-estimate=10.67MB mem-reservation=2.00MB thread-reservation=1
 17:AGGREGATE [STREAMING]
 |  output: count(*)
@@ -563,166 +563,61 @@
 |  hash predicates: cs_ship_customer_sk = c.c_customer_sk
 |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  in pipelines: 09(GETNEXT), 06(OPEN)
+|  in pipelines: 09(GETNEXT), 03(OPEN)
 |
-|--F12:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=2.44MB mem-reservation=1.94MB thread-reservation=1
+|--F12:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
+|  |  Per-Instance Resources: mem-estimate=3.29MB mem-reservation=1.94MB thread-reservation=1
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
 |  |  build expressions: c.c_customer_sk
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |
-|  15:HASH JOIN [RIGHT ANTI JOIN, PARTITIONED]
+|  15:HASH JOIN [LEFT ANTI JOIN, PARTITIONED]
 |  |  hash-table-id=01
-|  |  hash predicates: ws_bill_customer_sk = c.c_customer_sk
+|  |  hash predicates: c.c_customer_sk = ws_bill_customer_sk
 |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
 |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  in pipelines: 06(GETNEXT), 03(OPEN)
+|  |  in pipelines: 03(GETNEXT), 06(OPEN)
 |  |
-|  |--F13:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=3.29MB mem-reservation=1.94MB thread-reservation=1
+|  |--F13:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
+|  |  |  Per-Instance Resources: mem-estimate=2.44MB mem-reservation=1.94MB thread-reservation=1
 |  |  JOIN BUILD
 |  |  |  join-table-id=01 plan-id=02 cohort-id=02
-|  |  |  build expressions: c.c_customer_sk
+|  |  |  build expressions: ws_bill_customer_sk
 |  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |  |
-|  |  14:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
+|  |  26:EXCHANGE [HASH(ws_bill_customer_sk)]
+|  |  |  mem-estimate=513.25KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
+|  |  |  in pipelines: 06(GETNEXT)
+|  |  |
+|  |  F08:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  |  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=32.00MB mem-reservation=4.00MB thread-reservation=1
+|  |  08:HASH JOIN [INNER JOIN, BROADCAST]
 |  |  |  hash-table-id=02
-|  |  |  hash predicates: ss_customer_sk = c.c_customer_sk
+|  |  |  hash predicates: ws_sold_date_sk = d_date_sk
+|  |  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
 |  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  |  in pipelines: 03(GETNEXT), 02(OPEN)
+|  |  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
+|  |  |  in pipelines: 06(GETNEXT), 07(OPEN)
 |  |  |
-|  |  |--F14:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=3.73MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  |  JOIN BUILD
-|  |  |  |  join-table-id=02 plan-id=03 cohort-id=03
-|  |  |  |  build expressions: c.c_customer_sk
-|  |  |  |  runtime filters: RF004[bloom] <- c.c_customer_sk
-|  |  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |
-|  |  |  25:EXCHANGE [HASH(c.c_customer_sk)]
-|  |  |  |  mem-estimate=813.54KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  |  |  in pipelines: 02(GETNEXT)
-|  |  |  |
-|  |  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  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.00MB mem-reservation=8.00MB thread-reservation=1
-|  |  |  13:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  |  hash-table-id=03
-|  |  |  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
-|  |  |  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
-|  |  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
-|  |  |  |  in pipelines: 02(GETNEXT), 01(OPEN)
-|  |  |  |
-|  |  |  |--F15:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  |  Per-Instance Resources: mem-estimate=4.95MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  |  |  JOIN BUILD
-|  |  |  |  |  join-table-id=03 plan-id=04 cohort-id=04
-|  |  |  |  |  build expressions: ca.ca_address_sk
-|  |  |  |  |  runtime filters: RF008[bloom] <- ca.ca_address_sk
-|  |  |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |  |
-|  |  |  |  23:EXCHANGE [BROADCAST]
-|  |  |  |  |  mem-estimate=73.70KB mem-reservation=0B thread-reservation=0
-|  |  |  |  |  tuple-ids=1 row-size=18B cardinality=2.94K
-|  |  |  |  |  in pipelines: 01(GETNEXT)
-|  |  |  |  |
-|  |  |  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=1
-|  |  |  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
-|  |  |  |     HDFS partitions=1/1 files=1 size=1.16MB
-|  |  |  |     predicates: ca_state IN ('KY', 'GA', 'NM')
-|  |  |  |     stored statistics:
-|  |  |  |       table: rows=50.00K size=1.16MB
-|  |  |  |       columns: all
-|  |  |  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
-|  |  |  |     parquet statistics predicates: ca_state IN ('KY', 'GA', 'NM')
-|  |  |  |     parquet dictionary predicates: ca_state IN ('KY', 'GA', 'NM')
-|  |  |  |     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
-|  |  |  |     tuple-ids=1 row-size=18B cardinality=2.94K
-|  |  |  |     in pipelines: 01(GETNEXT)
-|  |  |  |
-|  |  |  12:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  |  hash-table-id=04
-|  |  |  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
-|  |  |  |  fk/pk conjuncts: none
-|  |  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=128.00KB thread-reservation=0
-|  |  |  |  tuple-ids=2,0 row-size=87B cardinality=100.00K
-|  |  |  |  in pipelines: 02(GETNEXT), 00(OPEN)
-|  |  |  |
-|  |  |  |--F16:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  |  Per-Instance Resources: mem-estimate=7.91MB mem-reservation=6.75MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  |  |  JOIN BUILD
-|  |  |  |  |  join-table-id=04 plan-id=05 cohort-id=04
-|  |  |  |  |  build expressions: c.c_current_cdemo_sk
-|  |  |  |  |  runtime filters: RF010[bloom] <- c.c_current_cdemo_sk
-|  |  |  |  |  mem-estimate=5.75MB mem-reservation=5.75MB spill-buffer=128.00KB thread-reservation=0
-|  |  |  |  |
-|  |  |  |  22:EXCHANGE [BROADCAST]
-|  |  |  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
-|  |  |  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |  |  |  in pipelines: 00(GETNEXT)
-|  |  |  |  |
-|  |  |  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  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.00MB mem-reservation=2.00MB thread-reservation=1
-|  |  |  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
-|  |  |  |     HDFS partitions=1/1 files=1 size=5.49MB
-|  |  |  |     runtime filters: RF008[bloom] -> c.c_current_addr_sk
-|  |  |  |     stored statistics:
-|  |  |  |       table: rows=100.00K size=5.49MB
-|  |  |  |       columns: all
-|  |  |  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
-|  |  |  |     mem-estimate=16.00MB mem-reservation=2.00MB thread-reservation=0
-|  |  |  |     tuple-ids=0 row-size=12B cardinality=100.00K
-|  |  |  |     in pipelines: 00(GETNEXT)
-|  |  |  |
-|  |  |  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=7.49MB
-|  |  |     runtime filters: RF010[bloom] -> cd_demo_sk
-|  |  |     stored statistics:
-|  |  |       table: rows=1.92M size=7.49MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
-|  |  |     mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=0
-|  |  |     tuple-ids=2 row-size=75B cardinality=1.92M
-|  |  |     in pipelines: 02(GETNEXT)
-|  |  |
-|  |  24:EXCHANGE [HASH(ss_customer_sk)]
-|  |  |  mem-estimate=1.35MB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  |  in pipelines: 03(GETNEXT)
-|  |  |
-|  |  F04:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-|  |  Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
-|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  05:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash-table-id=05
-|  |  |  hash predicates: ss_sold_date_sk = d_date_sk
-|  |  |  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
-|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
-|  |  |  in pipelines: 03(GETNEXT), 04(OPEN)
-|  |  |
-|  |  |--F17:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  |  |--F14:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
 |  |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  JOIN BUILD
-|  |  |  |  join-table-id=05 plan-id=06 cohort-id=03
+|  |  |  |  join-table-id=02 plan-id=03 cohort-id=03
 |  |  |  |  build expressions: d_date_sk
-|  |  |  |  runtime filters: RF006[bloom] <- d_date_sk
+|  |  |  |  runtime filters: RF010[bloom] <- d_date_sk
 |  |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |  |  |
-|  |  |  21:EXCHANGE [BROADCAST]
+|  |  |  25:EXCHANGE [BROADCAST]
 |  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=4 row-size=12B cardinality=118
-|  |  |  |  in pipelines: 04(GETNEXT)
+|  |  |  |  tuple-ids=7 row-size=12B cardinality=118
+|  |  |  |  in pipelines: 07(GETNEXT)
 |  |  |  |
-|  |  |  F05:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |  |  07:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
 |  |  |     HDFS partitions=1/1 files=1 size=2.15MB
 |  |  |     predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |  |     stored statistics:
@@ -732,53 +627,157 @@
 |  |  |     parquet statistics predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |  |     parquet dictionary predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |  |     tuple-ids=4 row-size=12B cardinality=118
-|  |  |     in pipelines: 04(GETNEXT)
+|  |  |     tuple-ids=7 row-size=12B cardinality=118
+|  |  |     in pipelines: 07(GETNEXT)
 |  |  |
-|  |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
-|  |     runtime filters: RF004[bloom] -> ss_customer_sk, RF006[bloom] -> ss_sold_date_sk
+|  |  06:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
+|  |     HDFS partitions=1/1 files=2 size=45.09MB
+|  |     runtime filters: RF010[bloom] -> ws_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
-|  |       partitions: 1824/1824 rows=2.88M
+|  |       table: rows=719.38K size=45.09MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
-|  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |     tuple-ids=3 row-size=8B cardinality=2.88M
-|  |     in pipelines: 03(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=644.77K
+|  |     mem-estimate=32.00MB mem-reservation=4.00MB thread-reservation=0
+|  |     tuple-ids=6 row-size=8B cardinality=719.38K
+|  |     in pipelines: 06(GETNEXT)
 |  |
-|  26:EXCHANGE [HASH(ws_bill_customer_sk)]
-|  |  mem-estimate=513.25KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
-|  |  in pipelines: 06(GETNEXT)
-|  |
-|  F02:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
-|  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=32.00MB mem-reservation=4.00MB thread-reservation=1
-|  08:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash-table-id=06
-|  |  hash predicates: ws_sold_date_sk = d_date_sk
-|  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
+|  14:HASH JOIN [RIGHT SEMI JOIN, PARTITIONED]
+|  |  hash-table-id=03
+|  |  hash predicates: ss_customer_sk = c.c_customer_sk
 |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=6,7 row-size=20B cardinality=46.82K
-|  |  in pipelines: 06(GETNEXT), 07(OPEN)
+|  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
+|  |  in pipelines: 03(GETNEXT), 02(OPEN)
 |  |
-|  |--F18:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  |--F15:PLAN FRAGMENT [HASH(c.c_customer_sk)] hosts=3 instances=3
+|  |  |  Per-Instance Resources: mem-estimate=3.73MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  JOIN BUILD
+|  |  |  join-table-id=03 plan-id=04 cohort-id=02
+|  |  |  build expressions: c.c_customer_sk
+|  |  |  runtime filters: RF002[bloom] <- c.c_customer_sk
+|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  |
+|  |  24:EXCHANGE [HASH(c.c_customer_sk)]
+|  |  |  mem-estimate=813.54KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
+|  |  |  in pipelines: 02(GETNEXT)
+|  |  |
+|  |  F04:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  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.00MB mem-reservation=8.00MB thread-reservation=1
+|  |  13:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash-table-id=04
+|  |  |  hash predicates: c.c_current_addr_sk = ca.ca_address_sk
+|  |  |  fk/pk conjuncts: c.c_current_addr_sk = ca.ca_address_sk
+|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
+|  |  |  tuple-ids=2,0,1 row-size=105B cardinality=6.83K
+|  |  |  in pipelines: 02(GETNEXT), 01(OPEN)
+|  |  |
+|  |  |--F16:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  |  Per-Instance Resources: mem-estimate=4.95MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  |  JOIN BUILD
+|  |  |  |  join-table-id=04 plan-id=05 cohort-id=04
+|  |  |  |  build expressions: ca.ca_address_sk
+|  |  |  |  runtime filters: RF006[bloom] <- ca.ca_address_sk
+|  |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
+|  |  |  |
+|  |  |  22:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=73.70KB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=1 row-size=18B cardinality=2.94K
+|  |  |  |  in pipelines: 01(GETNEXT)
+|  |  |  |
+|  |  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=1
+|  |  |  01:SCAN HDFS [tpcds_parquet.customer_address ca, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=1.16MB
+|  |  |     predicates: ca_state IN ('KY', 'GA', 'NM')
+|  |  |     stored statistics:
+|  |  |       table: rows=50.00K size=1.16MB
+|  |  |       columns: all
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
+|  |  |     parquet statistics predicates: ca_state IN ('KY', 'GA', 'NM')
+|  |  |     parquet dictionary predicates: ca_state IN ('KY', 'GA', 'NM')
+|  |  |     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
+|  |  |     tuple-ids=1 row-size=18B cardinality=2.94K
+|  |  |     in pipelines: 01(GETNEXT)
+|  |  |
+|  |  12:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash-table-id=05
+|  |  |  hash predicates: cd_demo_sk = c.c_current_cdemo_sk
+|  |  |  fk/pk conjuncts: none
+|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=128.00KB thread-reservation=0
+|  |  |  tuple-ids=2,0 row-size=87B cardinality=100.00K
+|  |  |  in pipelines: 02(GETNEXT), 00(OPEN)
+|  |  |
+|  |  |--F17:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  |  Per-Instance Resources: mem-estimate=7.91MB mem-reservation=6.75MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  |  JOIN BUILD
+|  |  |  |  join-table-id=05 plan-id=06 cohort-id=04
+|  |  |  |  build expressions: c.c_current_cdemo_sk
+|  |  |  |  runtime filters: RF008[bloom] <- c.c_current_cdemo_sk
+|  |  |  |  mem-estimate=5.75MB mem-reservation=5.75MB spill-buffer=128.00KB thread-reservation=0
+|  |  |  |
+|  |  |  21:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=1.16MB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=0 row-size=12B cardinality=100.00K
+|  |  |  |  in pipelines: 00(GETNEXT)
+|  |  |  |
+|  |  |  F05:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  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.00MB mem-reservation=2.00MB thread-reservation=1
+|  |  |  00:SCAN HDFS [tpcds_parquet.customer c, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=5.49MB
+|  |  |     runtime filters: RF006[bloom] -> c.c_current_addr_sk
+|  |  |     stored statistics:
+|  |  |       table: rows=100.00K size=5.49MB
+|  |  |       columns: all
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=100.00K
+|  |  |     mem-estimate=16.00MB mem-reservation=2.00MB thread-reservation=0
+|  |  |     tuple-ids=0 row-size=12B cardinality=100.00K
+|  |  |     in pipelines: 00(GETNEXT)
+|  |  |
+|  |  02:SCAN HDFS [tpcds_parquet.customer_demographics, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=7.49MB
+|  |     runtime filters: RF008[bloom] -> cd_demo_sk
+|  |     stored statistics:
+|  |       table: rows=1.92M size=7.49MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
+|  |     mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=0
+|  |     tuple-ids=2 row-size=75B cardinality=1.92M
+|  |     in pipelines: 02(GETNEXT)
+|  |
+|  23:EXCHANGE [HASH(ss_customer_sk)]
+|  |  mem-estimate=1.35MB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  |  in pipelines: 03(GETNEXT)
+|  |
+|  F02:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+|  Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
+|  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|  05:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash-table-id=06
+|  |  hash predicates: ss_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: ss_sold_date_sk = d_date_sk
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=3,4 row-size=20B cardinality=186.34K
+|  |  in pipelines: 03(GETNEXT), 04(OPEN)
+|  |
+|  |--F18:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=06 plan-id=07 cohort-id=02
 |  |  |  build expressions: d_date_sk
-|  |  |  runtime filters: RF002[bloom] <- d_date_sk
+|  |  |  runtime filters: RF004[bloom] <- d_date_sk
 |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |  |
 |  |  20:EXCHANGE [BROADCAST]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=7 row-size=12B cardinality=118
-|  |  |  in pipelines: 07(GETNEXT)
+|  |  |  tuple-ids=4 row-size=12B cardinality=118
+|  |  |  in pipelines: 04(GETNEXT)
 |  |  |
 |  |  F03:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  07:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |  04:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
 |  |     HDFS partitions=1/1 files=1 size=2.15MB
 |  |     predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |     stored statistics:
@@ -788,19 +787,20 @@
 |  |     parquet statistics predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |     parquet dictionary predicates: d_year = CAST(2001 AS INT), d_moy <= CAST(6 AS INT), d_moy >= CAST(4 AS INT)
 |  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |     tuple-ids=7 row-size=12B cardinality=118
-|  |     in pipelines: 07(GETNEXT)
+|  |     tuple-ids=4 row-size=12B cardinality=118
+|  |     in pipelines: 04(GETNEXT)
 |  |
-|  06:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
-|     HDFS partitions=1/1 files=2 size=45.09MB
-|     runtime filters: RF002[bloom] -> ws_sold_date_sk
+|  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
+|     runtime filters: RF002[bloom] -> ss_customer_sk, RF004[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=719.38K size=45.09MB
+|       table: rows=2.88M size=200.95MB
+|       partitions: 1824/1824 rows=2.88M
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=644.77K
-|     mem-estimate=32.00MB mem-reservation=4.00MB thread-reservation=0
-|     tuple-ids=6 row-size=8B cardinality=719.38K
-|     in pipelines: 06(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=130.09K
+|     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+|     tuple-ids=3 row-size=8B cardinality=2.88M
+|     in pipelines: 03(GETNEXT)
 |
 27:EXCHANGE [HASH(cs_ship_customer_sk)]
 |  mem-estimate=690.82KB mem-reservation=0B thread-reservation=0
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q70.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q70.test
index 55e2e37..b873aff 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q70.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q70.test
@@ -162,10 +162,10 @@
 |  |     in pipelines: 04(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_store_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -214,10 +214,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -422,10 +422,10 @@
 |  |     in pipelines: 04(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF006[bloom] -> ss_sold_date_sk, RF008[bloom] -> ss_store_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -488,10 +488,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF002[bloom] -> ss_store_sk, RF004[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q71.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q71.test
index b20f33e..40b578d 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q71.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q71.test
@@ -136,10 +136,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_sold_time_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -344,10 +344,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_sold_time_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -591,10 +591,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_sold_time_sk, RF002[bloom] -> tpcds_parquet.store_sales.ss_item_sk, RF008[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q72.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q72.test
index 274b672..947f76b 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q72.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q72.test
@@ -264,9 +264,9 @@
    in pipelines: 01(GETNEXT)
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=195.17MB Threads=25
-Per-Host Resource Estimates: Memory=1.29GB
+Per-Host Resource Estimates: Memory=1.16GB
 F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=42.27KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=56.49KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_desc, w_warehouse_name, d1.d_week_seq, sum(CASE WHEN p_promo_sk IS NULL THEN 1 ELSE 0 END), sum(CASE WHEN p_promo_sk IS NOT NULL THEN 1 ELSE 0 END), count(*)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -274,12 +274,12 @@
 36:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: count(*) DESC, i_item_desc ASC, w_warehouse_name ASC, d1.d_week_seq ASC
 |  limit: 100
-|  mem-estimate=42.27KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=56.49KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=170B cardinality=100
 |  in pipelines: 22(GETNEXT)
 |
-F12:PLAN FRAGMENT [HASH(i_item_desc,w_warehouse_name,d1.d_week_seq)] hosts=2 instances=2
-Per-Host Resources: mem-estimate=187.05MB mem-reservation=34.00MB thread-reservation=1
+F12:PLAN FRAGMENT [HASH(i_item_desc,w_warehouse_name,d1.d_week_seq)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=128.31MB mem-reservation=34.00MB thread-reservation=1
 22:TOP-N [LIMIT=100]
 |  order by: count(*) DESC, i_item_desc ASC, w_warehouse_name ASC, d1.d_week_seq ASC
 |  mem-estimate=16.60KB mem-reservation=0B thread-reservation=0
@@ -289,21 +289,21 @@
 35:AGGREGATE [FINALIZE]
 |  output: sum:merge(CASE WHEN p_promo_sk IS NULL THEN 1 ELSE 0 END), sum:merge(CASE WHEN p_promo_sk IS NOT NULL THEN 1 ELSE 0 END), count:merge(*)
 |  group by: i_item_desc, w_warehouse_name, d1.d_week_seq
-|  mem-estimate=176.71MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=117.80MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=11 row-size=170B cardinality=1.32M
 |  in pipelines: 35(GETNEXT), 00(OPEN)
 |
 34:EXCHANGE [HASH(i_item_desc,w_warehouse_name,d1.d_week_seq)]
-|  mem-estimate=10.34MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=10.51MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=11 row-size=170B cardinality=1.32M
 |  in pipelines: 00(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
-Per-Host Resources: mem-estimate=279.30MB mem-reservation=93.00MB thread-reservation=1 runtime-filters-memory=5.00MB
+F06:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=207.77MB mem-reservation=93.00MB thread-reservation=1 runtime-filters-memory=5.00MB
 21:AGGREGATE [STREAMING]
 |  output: sum(CAST(CASE WHEN p_promo_sk IS NULL THEN CAST(1 AS TINYINT) ELSE CAST(0 AS TINYINT) END AS BIGINT)), sum(CAST(CASE WHEN p_promo_sk IS NOT NULL THEN CAST(1 AS TINYINT) ELSE CAST(0 AS TINYINT) END AS BIGINT)), count(*)
 |  group by: i_item_desc, w_warehouse_name, d1.d_week_seq
-|  mem-estimate=176.71MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=117.80MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=11 row-size=170B cardinality=1.32M
 |  in pipelines: 00(GETNEXT)
 |
@@ -442,7 +442,7 @@
 |  fk/pk conjuncts: none
 |  other predicates: inv_quantity_on_hand < cs_quantity
 |  runtime filters: RF006[bloom] <- d1.d_date_sk, RF007[bloom] <- inv_item_sk
-|  mem-estimate=46.63MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=0,1,2,3,7,6 row-size=256B cardinality=8.12M
 |  in pipelines: 00(GETNEXT), 01(OPEN)
 |
@@ -587,9 +587,9 @@
    in pipelines: 00(GETNEXT)
 ---- PARALLELPLANS
 Max Per-Host Resource Reservation: Memory=228.73MB Threads=24
-Per-Host Resource Estimates: Memory=755MB
+Per-Host Resource Estimates: Memory=625MB
 F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=42.27KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=56.49KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_desc, w_warehouse_name, d1.d_week_seq, sum(CASE WHEN p_promo_sk IS NULL THEN 1 ELSE 0 END), sum(CASE WHEN p_promo_sk IS NOT NULL THEN 1 ELSE 0 END), count(*)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -597,12 +597,12 @@
 36:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: count(*) DESC, i_item_desc ASC, w_warehouse_name ASC, d1.d_week_seq ASC
 |  limit: 100
-|  mem-estimate=42.27KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=56.49KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=170B cardinality=100
 |  in pipelines: 22(GETNEXT)
 |
-F12:PLAN FRAGMENT [HASH(i_item_desc,w_warehouse_name,d1.d_week_seq)] hosts=2 instances=2
-Per-Instance Resources: mem-estimate=187.05MB mem-reservation=34.00MB thread-reservation=1
+F12:PLAN FRAGMENT [HASH(i_item_desc,w_warehouse_name,d1.d_week_seq)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=128.31MB mem-reservation=34.00MB thread-reservation=1
 22:TOP-N [LIMIT=100]
 |  order by: count(*) DESC, i_item_desc ASC, w_warehouse_name ASC, d1.d_week_seq ASC
 |  mem-estimate=16.60KB mem-reservation=0B thread-reservation=0
@@ -612,21 +612,21 @@
 35:AGGREGATE [FINALIZE]
 |  output: sum:merge(CASE WHEN p_promo_sk IS NULL THEN 1 ELSE 0 END), sum:merge(CASE WHEN p_promo_sk IS NOT NULL THEN 1 ELSE 0 END), count:merge(*)
 |  group by: i_item_desc, w_warehouse_name, d1.d_week_seq
-|  mem-estimate=176.71MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=117.80MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=11 row-size=170B cardinality=1.32M
 |  in pipelines: 35(GETNEXT), 00(OPEN)
 |
 34:EXCHANGE [HASH(i_item_desc,w_warehouse_name,d1.d_week_seq)]
-|  mem-estimate=10.34MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=10.51MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=11 row-size=170B cardinality=1.32M
 |  in pipelines: 00(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
-Per-Instance Resources: mem-estimate=186.83MB mem-reservation=34.00MB thread-reservation=1
+F06:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=127.93MB mem-reservation=34.00MB thread-reservation=1
 21:AGGREGATE [STREAMING]
 |  output: sum(CAST(CASE WHEN p_promo_sk IS NULL THEN CAST(1 AS TINYINT) ELSE CAST(0 AS TINYINT) END AS BIGINT)), sum(CAST(CASE WHEN p_promo_sk IS NOT NULL THEN CAST(1 AS TINYINT) ELSE CAST(0 AS TINYINT) END AS BIGINT)), count(*)
 |  group by: i_item_desc, w_warehouse_name, d1.d_week_seq
-|  mem-estimate=176.71MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=117.80MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=11 row-size=170B cardinality=1.32M
 |  in pipelines: 00(GETNEXT)
 |
@@ -638,7 +638,7 @@
 |  tuple-ids=0,1,2,3,7,6,5,4,8,9N,10N row-size=342B cardinality=1.32M
 |  in pipelines: 00(GETNEXT), 10(OPEN)
 |
-|--F14:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
+|--F14:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=11.72MB mem-reservation=9.50MB thread-reservation=1
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -670,7 +670,7 @@
 |  tuple-ids=0,1,2,3,7,6,5,4,8,9N row-size=326B cardinality=1.32M
 |  in pipelines: 00(GETNEXT), 09(OPEN)
 |
-|--F15:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
+|--F15:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=3.89MB mem-reservation=3.88MB thread-reservation=1
 |  JOIN BUILD
 |  |  join-table-id=01 plan-id=02 cohort-id=01
@@ -703,7 +703,7 @@
 |  tuple-ids=0,1,2,3,7,6,5,4,8 row-size=322B cardinality=1.32M
 |  in pipelines: 00(GETNEXT), 08(OPEN)
 |
-|--F16:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
+|--F16:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=8.59MB mem-reservation=6.75MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=02 plan-id=03 cohort-id=01
@@ -736,7 +736,7 @@
 |  tuple-ids=0,1,2,3,7,6,5,4 row-size=296B cardinality=1.32M
 |  in pipelines: 00(GETNEXT), 04(OPEN)
 |
-|--F17:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
+|--F17:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=24.25MB mem-reservation=18.00MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=03 plan-id=04 cohort-id=01
@@ -772,7 +772,7 @@
 |  tuple-ids=0,1,2,3,7,6,5 row-size=279B cardinality=1.32M
 |  in pipelines: 00(GETNEXT), 05(OPEN)
 |
-|--F18:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
+|--F18:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=4.93MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=04 plan-id=05 cohort-id=01
@@ -809,13 +809,13 @@
 |  tuple-ids=0,1,2,3,7,6 row-size=256B cardinality=8.12M
 |  in pipelines: 00(GETNEXT), 01(OPEN)
 |
-|--F19:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=2 instances=2
-|  |  Per-Instance Resources: mem-estimate=59.09MB mem-reservation=36.00MB thread-reservation=1 runtime-filters-memory=2.00MB
+|--F19:PLAN FRAGMENT [HASH(cs_sold_date_sk,cs_item_sk)] hosts=3 instances=3
+|  |  Per-Instance Resources: mem-estimate=46.46MB mem-reservation=36.00MB thread-reservation=1 runtime-filters-memory=2.00MB
 |  JOIN BUILD
 |  |  join-table-id=05 plan-id=06 cohort-id=01
 |  |  build expressions: d1.d_date_sk, inv_item_sk
 |  |  runtime filters: RF006[bloom] <- d1.d_date_sk, RF007[bloom] <- inv_item_sk
-|  |  mem-estimate=46.63MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  |  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  |
 |  28:EXCHANGE [HASH(d1.d_date_sk,inv_item_sk)]
 |  |  mem-estimate=10.46MB mem-reservation=0B thread-reservation=0
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q73.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q73.test
index 3da74ac..24f3ed2 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q73.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q73.test
@@ -128,10 +128,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF002[bloom] -> store_sales.ss_store_sk, RF004[bloom] -> store_sales.ss_sold_date_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -150,10 +150,10 @@
    tuple-ids=6 row-size=68B cardinality=100.00K
    in pipelines: 08(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=28.77MB Threads=13
-Per-Host Resource Estimates: Memory=304MB
+Max Per-Host Resource Reservation: Memory=25.02MB Threads=13
+Per-Host Resource Estimates: Memory=300MB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=160.56KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=272.81KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: c_last_name, c_first_name, c_salutation, c_preferred_cust_flag, ss_ticket_number, cnt
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -161,12 +161,12 @@
 18:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: cnt DESC
 |  limit: 1000
-|  mem-estimate=160.56KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=272.81KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=7 row-size=80B cardinality=1.00K
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=16.25MB mem-reservation=9.50MB thread-reservation=1 runtime-filters-memory=1.00MB
+F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=12.50MB mem-reservation=5.75MB thread-reservation=1 runtime-filters-memory=1.00MB
 10:TOP-N [LIMIT=1000]
 |  order by: cnt DESC
 |  mem-estimate=78.33KB mem-reservation=0B thread-reservation=0
@@ -177,7 +177,7 @@
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  fk/pk conjuncts: none
 |  runtime filters: RF000[bloom] <- c_customer_sk
-|  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
+|  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
 |  tuple-ids=4,6 row-size=88B cardinality=16.25K
 |  in pipelines: 15(GETNEXT), 08(OPEN)
 |
@@ -309,10 +309,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_store_sk, RF004[bloom] -> store_sales.ss_sold_date_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -320,10 +320,10 @@
    tuple-ids=0 row-size=24B cardinality=2.88M
    in pipelines: 00(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=41.58MB Threads=14
-Per-Host Resource Estimates: Memory=174MB
+Max Per-Host Resource Reservation: Memory=39.83MB Threads=16
+Per-Host Resource Estimates: Memory=179MB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=160.56KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=519.50KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: c_last_name, c_first_name, c_salutation, c_preferred_cust_flag, ss_ticket_number, cnt
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -331,11 +331,11 @@
 18:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: cnt DESC
 |  limit: 1000
-|  mem-estimate=160.56KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=519.50KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=7 row-size=80B cardinality=1.00K
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
+F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=6
 Per-Instance Resources: mem-estimate=328.09KB mem-reservation=0B thread-reservation=1
 10:TOP-N [LIMIT=1000]
 |  order by: cnt DESC
@@ -347,17 +347,17 @@
 |  hash-table-id=00
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  fk/pk conjuncts: none
-|  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
+|  mem-estimate=0B mem-reservation=0B spill-buffer=128.00KB thread-reservation=0
 |  tuple-ids=4,6 row-size=88B cardinality=16.25K
 |  in pipelines: 15(GETNEXT), 08(OPEN)
 |
-|--F08:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=16.08MB mem-reservation=9.50MB thread-reservation=1 runtime-filters-memory=1.00MB
+|--F08:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=6
+|  |  Per-Instance Resources: mem-estimate=10.45MB mem-reservation=3.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
 |  |  build expressions: c_customer_sk
 |  |  runtime filters: RF000[bloom] <- c_customer_sk
-|  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
+|  |  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
 |  |
 |  17:EXCHANGE [HASH(c_customer_sk)]
 |  |  mem-estimate=6.58MB mem-reservation=0B thread-reservation=0
@@ -512,10 +512,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_store_sk, RF004[bloom] -> store_sales.ss_sold_date_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q74.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q74.test
index fa5f31e..37bc34a 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q74.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q74.test
@@ -283,10 +283,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -347,10 +347,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -711,10 +711,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -810,10 +810,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1251,10 +1251,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  02:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF012[bloom] -> ss_sold_date_sk, RF010[bloom] -> ss_customer_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1368,10 +1368,10 @@
 |     in pipelines: 10(GETNEXT)
 |
 09:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF008[bloom] -> ss_sold_date_sk, RF006[bloom] -> ss_customer_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q75.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q75.test
index 3b52ae7..63d18de 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q75.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q75.test
@@ -236,10 +236,10 @@
 |  |  |  |     in pipelines: 33(GETNEXT)
 |  |  |  |
 |  |  |  32:SCAN HDFS [tpcds_parquet.store_sales]
-|  |  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |  |     runtime filters: RF046[bloom] -> ss_item_sk, RF044[bloom] -> ss_sold_date_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=2.88M size=201.02MB
+|  |  |       table: rows=2.88M size=200.95MB
 |  |  |       partitions: 1824/1824 rows=2.88M
 |  |  |       columns: all
 |  |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -465,10 +465,10 @@
 |  |  |     in pipelines: 09(GETNEXT)
 |  |  |
 |  |  08:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF022[bloom] -> ss_item_sk, RF020[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -825,10 +825,10 @@
 |  |  |     in pipelines: 33(GETNEXT)
 |  |  |
 |  |  32:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF026[bloom] -> ss_item_sk, RF024[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1172,10 +1172,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF014[bloom] -> ss_item_sk, RF012[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1608,10 +1608,10 @@
 |  |  |     in pipelines: 33(GETNEXT)
 |  |  |
 |  |  32:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF026[bloom] -> ss_item_sk, RF024[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2030,10 +2030,10 @@
 |  |     in pipelines: 09(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF014[bloom] -> ss_item_sk, RF012[bloom] -> ss_sold_date_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q76.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q76.test
index 8b74ae2..4176d4e 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q76.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q76.test
@@ -217,11 +217,11 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_store_sk IS NULL
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -229,124 +229,130 @@
    tuple-ids=0 row-size=20B cardinality=130.03K
    in pipelines: 01(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=44.44MB Threads=17
-Per-Host Resource Estimates: Memory=585MB
-F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=45.69MB Threads=19
+Per-Host Resource Estimates: Memory=618MB
+F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=25.23KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: channel, col_name, d_year, d_qoy, i_category, count(*), sum(ext_sales_price)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
-27:MERGING-EXCHANGE [UNPARTITIONED]
+28:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: channel ASC, col_name ASC, d_year ASC, d_qoy ASC, i_category ASC
 |  limit: 100
 |  mem-estimate=25.23KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=74B cardinality=100
 |  in pipelines: 17(GETNEXT)
 |
-F11:PLAN FRAGMENT [HASH(channel,col_name,d_year,d_qoy,i_category)] hosts=3 instances=3
+F12:PLAN FRAGMENT [HASH(channel,col_name,d_year,d_qoy,i_category)] hosts=3 instances=3
 Per-Host Resources: mem-estimate=13.46MB mem-reservation=1.94MB thread-reservation=1
 17:TOP-N [LIMIT=100]
 |  order by: channel ASC, col_name ASC, d_year ASC, d_qoy ASC, i_category ASC
 |  mem-estimate=7.22KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=74B cardinality=100
-|  in pipelines: 17(GETNEXT), 26(OPEN)
+|  in pipelines: 17(GETNEXT), 27(OPEN)
 |
-26:AGGREGATE [FINALIZE]
+27:AGGREGATE [FINALIZE]
 |  output: count:merge(*), sum:merge(ext_sales_price)
 |  group by: channel, col_name, d_year, d_qoy, i_category
 |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=11 row-size=74B cardinality=137.37K
-|  in pipelines: 26(GETNEXT), 01(OPEN), 07(OPEN), 12(OPEN)
+|  in pipelines: 27(GETNEXT), 01(OPEN), 07(OPEN), 11(OPEN)
 |
-25:EXCHANGE [HASH(channel,col_name,d_year,d_qoy,i_category)]
+26:EXCHANGE [HASH(channel,col_name,d_year,d_qoy,i_category)]
 |  mem-estimate=3.46MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=11 row-size=74B cardinality=137.37K
-|  in pipelines: 01(GETNEXT), 07(GETNEXT), 12(GETNEXT)
+|  in pipelines: 01(GETNEXT), 07(GETNEXT), 11(GETNEXT)
 |
-F10:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+F11:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 Per-Host Resources: mem-estimate=67.20MB mem-reservation=17.88MB thread-reservation=2 runtime-filters-memory=4.00MB
 16:AGGREGATE [STREAMING]
 |  output: count(*), sum(ext_sales_price)
 |  group by: channel, col_name, d_year, d_qoy, i_category
 |  mem-estimate=10.00MB mem-reservation=9.00MB spill-buffer=512.00KB thread-reservation=0
 |  tuple-ids=11 row-size=74B cardinality=137.37K
-|  in pipelines: 01(GETNEXT), 07(GETNEXT), 12(GETNEXT)
+|  in pipelines: 01(GETNEXT), 07(GETNEXT), 11(GETNEXT)
 |
 00:UNION
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=9 row-size=54B cardinality=137.37K
-|  in pipelines: 01(GETNEXT), 07(GETNEXT), 12(GETNEXT)
+|  in pipelines: 01(GETNEXT), 07(GETNEXT), 11(GETNEXT)
 |
-|--15:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash predicates: i_item_sk = cs_item_sk
-|  |  fk/pk conjuncts: i_item_sk = cs_item_sk
-|  |  runtime filters: RF008[bloom] <- cs_item_sk
+|--15:HASH JOIN [INNER JOIN, PARTITIONED]
+|  |  hash predicates: cs_item_sk = i_item_sk
+|  |  fk/pk conjuncts: cs_item_sk = i_item_sk
+|  |  runtime filters: RF008[bloom] <- i_item_sk
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=7,6,8 row-size=58B cardinality=7.17K
-|  |  in pipelines: 12(GETNEXT), 11(OPEN)
+|  |  tuple-ids=6,8,7 row-size=58B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT), 12(OPEN)
 |  |
-|  |--24:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=263.91KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
-|  |  |  in pipelines: 11(GETNEXT)
+|  |--25:EXCHANGE [HASH(i_item_sk)]
+|  |  |  mem-estimate=485.07KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=7 row-size=26B cardinality=18.00K
+|  |  |  in pipelines: 12(GETNEXT)
 |  |  |
-|  |  F09:PLAN FRAGMENT [HASH(cs_sold_date_sk)] hosts=1 instances=1
-|  |  Per-Host Resources: mem-estimate=3.90MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  14:HASH JOIN [INNER JOIN, PARTITIONED]
-|  |  |  hash predicates: cs_sold_date_sk = d_date_sk
-|  |  |  fk/pk conjuncts: none
-|  |  |  runtime filters: RF010[bloom] <- d_date_sk
-|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
-|  |  |  in pipelines: 11(GETNEXT), 13(OPEN)
-|  |  |
-|  |  |--23:EXCHANGE [HASH(d_date_sk)]
-|  |  |  |  mem-estimate=872.04KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=8 row-size=12B cardinality=73.05K
-|  |  |  |  in pipelines: 13(GETNEXT)
-|  |  |  |
-|  |  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
-|  |  |  13:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |  |     stored statistics:
-|  |  |       table: rows=73.05K size=2.15MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |     tuple-ids=8 row-size=12B cardinality=73.05K
-|  |  |     in pipelines: 13(GETNEXT)
-|  |  |
-|  |  22:EXCHANGE [HASH(cs_sold_date_sk)]
-|  |  |  mem-estimate=118.65KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=6 row-size=20B cardinality=7.17K
-|  |  |  in pipelines: 11(GETNEXT)
-|  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  Per-Host Resources: mem-estimate=193.00MB mem-reservation=9.00MB thread-reservation=2 runtime-filters-memory=1.00MB
-|  |  11:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
-|  |     HDFS partitions=1/1 files=3 size=96.62MB
-|  |     predicates: cs_ship_addr_sk IS NULL
-|  |     runtime filters: RF010[bloom] -> cs_sold_date_sk
+|  |  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=2
+|  |  12:SCAN HDFS [tpcds_parquet.item, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=1.73MB
 |  |     stored statistics:
-|  |       table: rows=1.44M size=96.62MB
+|  |       table: rows=18.00K size=1.73MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=650.14K
-|  |     mem-estimate=192.00MB mem-reservation=8.00MB thread-reservation=1
-|  |     tuple-ids=6 row-size=20B cardinality=7.17K
-|  |     in pipelines: 11(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=18.00K
+|  |     mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=1
+|  |     tuple-ids=7 row-size=26B cardinality=18.00K
+|  |     in pipelines: 12(GETNEXT)
 |  |
-|  12:SCAN HDFS [tpcds_parquet.item, RANDOM]
-|     HDFS partitions=1/1 files=1 size=1.73MB
-|     runtime filters: RF008[bloom] -> i_item_sk
+|  24:EXCHANGE [HASH(cs_item_sk)]
+|  |  mem-estimate=194.63KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT)
+|  |
+|  F08:PLAN FRAGMENT [HASH(cs_sold_date_sk)] hosts=3 instances=3
+|  Per-Host Resources: mem-estimate=3.90MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  14:HASH JOIN [INNER JOIN, PARTITIONED]
+|  |  hash predicates: cs_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: none
+|  |  runtime filters: RF010[bloom] <- d_date_sk
+|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT), 13(OPEN)
+|  |
+|  |--23:EXCHANGE [HASH(d_date_sk)]
+|  |  |  mem-estimate=872.04KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=8 row-size=12B cardinality=73.05K
+|  |  |  in pipelines: 13(GETNEXT)
+|  |  |
+|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=2
+|  |  13:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |     stored statistics:
+|  |       table: rows=73.05K size=2.15MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |     mem-estimate=48.00MB mem-reservation=512.00KB thread-reservation=1
+|  |     tuple-ids=8 row-size=12B cardinality=73.05K
+|  |     in pipelines: 13(GETNEXT)
+|  |
+|  22:EXCHANGE [HASH(cs_sold_date_sk)]
+|  |  mem-estimate=118.65KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=20B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT)
+|  |
+|  F06:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  Per-Host Resources: mem-estimate=194.00MB mem-reservation=10.00MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  11:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
+|     HDFS partitions=1/1 files=3 size=96.62MB
+|     predicates: cs_ship_addr_sk IS NULL
+|     runtime filters: RF008[bloom] -> cs_item_sk, RF010[bloom] -> cs_sold_date_sk
 |     stored statistics:
-|       table: rows=18.00K size=1.73MB
+|       table: rows=1.44M size=96.62MB
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=18.00K
-|     mem-estimate=32.00MB mem-reservation=256.00KB thread-reservation=1
-|     tuple-ids=7 row-size=26B cardinality=18.00K
-|     in pipelines: 12(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=650.14K
+|     mem-estimate=192.00MB mem-reservation=8.00MB thread-reservation=1
+|     tuple-ids=6 row-size=20B cardinality=7.17K
+|     in pipelines: 11(GETNEXT)
 |
 |--10:HASH JOIN [INNER JOIN, BROADCAST]
 |  |  hash predicates: i_item_sk = ws_item_sk
@@ -462,11 +468,11 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_store_sk IS NULL
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -474,142 +480,148 @@
    tuple-ids=0 row-size=20B cardinality=130.03K
    in pipelines: 01(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=66.94MB Threads=18
-Per-Host Resource Estimates: Memory=259MB
-F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=68.19MB Threads=20
+Per-Host Resource Estimates: Memory=277MB
+F13:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=48.05KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: channel, col_name, d_year, d_qoy, i_category, count(*), sum(ext_sales_price)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
-27:MERGING-EXCHANGE [UNPARTITIONED]
+28:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: channel ASC, col_name ASC, d_year ASC, d_qoy ASC, i_category ASC
 |  limit: 100
 |  mem-estimate=48.05KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=74B cardinality=100
 |  in pipelines: 17(GETNEXT)
 |
-F11:PLAN FRAGMENT [HASH(channel,col_name,d_year,d_qoy,i_category)] hosts=3 instances=6
+F12:PLAN FRAGMENT [HASH(channel,col_name,d_year,d_qoy,i_category)] hosts=3 instances=6
 Per-Instance Resources: mem-estimate=13.68MB mem-reservation=1.94MB thread-reservation=1
 17:TOP-N [LIMIT=100]
 |  order by: channel ASC, col_name ASC, d_year ASC, d_qoy ASC, i_category ASC
 |  mem-estimate=7.22KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=12 row-size=74B cardinality=100
-|  in pipelines: 17(GETNEXT), 26(OPEN)
+|  in pipelines: 17(GETNEXT), 27(OPEN)
 |
-26:AGGREGATE [FINALIZE]
+27:AGGREGATE [FINALIZE]
 |  output: count:merge(*), sum:merge(ext_sales_price)
 |  group by: channel, col_name, d_year, d_qoy, i_category
 |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=11 row-size=74B cardinality=137.37K
-|  in pipelines: 26(GETNEXT), 01(OPEN), 07(OPEN), 12(OPEN)
+|  in pipelines: 27(GETNEXT), 01(OPEN), 07(OPEN), 11(OPEN)
 |
-25:EXCHANGE [HASH(channel,col_name,d_year,d_qoy,i_category)]
+26:EXCHANGE [HASH(channel,col_name,d_year,d_qoy,i_category)]
 |  mem-estimate=3.68MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=11 row-size=74B cardinality=137.37K
-|  in pipelines: 01(GETNEXT), 07(GETNEXT), 12(GETNEXT)
+|  in pipelines: 01(GETNEXT), 07(GETNEXT), 11(GETNEXT)
 |
-F10:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Shared Resources: mem-estimate=4.00MB mem-reservation=4.00MB thread-reservation=0 runtime-filters-memory=4.00MB
+F11:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+Per-Host Shared Resources: mem-estimate=3.00MB mem-reservation=3.00MB thread-reservation=0 runtime-filters-memory=3.00MB
 Per-Instance Resources: mem-estimate=26.00MB mem-reservation=6.00MB thread-reservation=1
 16:AGGREGATE [STREAMING]
 |  output: count(*), sum(ext_sales_price)
 |  group by: channel, col_name, d_year, d_qoy, i_category
 |  mem-estimate=10.00MB mem-reservation=5.00MB spill-buffer=256.00KB thread-reservation=0
 |  tuple-ids=11 row-size=74B cardinality=137.37K
-|  in pipelines: 01(GETNEXT), 07(GETNEXT), 12(GETNEXT)
+|  in pipelines: 01(GETNEXT), 07(GETNEXT), 11(GETNEXT)
 |
 00:UNION
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=9 row-size=54B cardinality=137.37K
-|  in pipelines: 01(GETNEXT), 07(GETNEXT), 12(GETNEXT)
+|  in pipelines: 01(GETNEXT), 07(GETNEXT), 11(GETNEXT)
 |
-|--15:HASH JOIN [INNER JOIN, BROADCAST]
+|--15:HASH JOIN [INNER JOIN, PARTITIONED]
 |  |  hash-table-id=04
-|  |  hash predicates: i_item_sk = cs_item_sk
-|  |  fk/pk conjuncts: i_item_sk = cs_item_sk
+|  |  hash predicates: cs_item_sk = i_item_sk
+|  |  fk/pk conjuncts: cs_item_sk = i_item_sk
 |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=7,6,8 row-size=58B cardinality=7.17K
-|  |  in pipelines: 12(GETNEXT), 11(OPEN)
+|  |  tuple-ids=6,8,7 row-size=58B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT), 12(OPEN)
 |  |
-|  |--F17:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  |  Per-Instance Resources: mem-estimate=5.13MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |--F18:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+|  |  |  Per-Instance Resources: mem-estimate=3.41MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=04 plan-id=05 cohort-id=01
-|  |  |  build expressions: cs_item_sk
-|  |  |  runtime filters: RF008[bloom] <- cs_item_sk
-|  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
+|  |  |  build expressions: i_item_sk
+|  |  |  runtime filters: RF008[bloom] <- i_item_sk
+|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |  |
-|  |  24:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=263.91KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
-|  |  |  in pipelines: 11(GETNEXT)
+|  |  25:EXCHANGE [HASH(i_item_sk)]
+|  |  |  mem-estimate=485.07KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=7 row-size=26B cardinality=18.00K
+|  |  |  in pipelines: 12(GETNEXT)
 |  |  |
-|  |  F09:PLAN FRAGMENT [HASH(cs_sold_date_sk)] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=118.65KB mem-reservation=0B thread-reservation=1
-|  |  14:HASH JOIN [INNER JOIN, PARTITIONED]
-|  |  |  hash-table-id=05
-|  |  |  hash predicates: cs_sold_date_sk = d_date_sk
-|  |  |  fk/pk conjuncts: none
-|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
-|  |  |  in pipelines: 11(GETNEXT), 13(OPEN)
-|  |  |
-|  |  |--F18:PLAN FRAGMENT [HASH(cs_sold_date_sk)] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=3.79MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  |  JOIN BUILD
-|  |  |  |  join-table-id=05 plan-id=06 cohort-id=03
-|  |  |  |  build expressions: d_date_sk
-|  |  |  |  runtime filters: RF010[bloom] <- d_date_sk
-|  |  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  |
-|  |  |  23:EXCHANGE [HASH(d_date_sk)]
-|  |  |  |  mem-estimate=872.04KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=8 row-size=12B cardinality=73.05K
-|  |  |  |  in pipelines: 13(GETNEXT)
-|  |  |  |
-|  |  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |  13:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |  |     stored statistics:
-|  |  |       table: rows=73.05K size=2.15MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |  |     tuple-ids=8 row-size=12B cardinality=73.05K
-|  |  |     in pipelines: 13(GETNEXT)
-|  |  |
-|  |  22:EXCHANGE [HASH(cs_sold_date_sk)]
-|  |  |  mem-estimate=118.65KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=6 row-size=20B cardinality=7.17K
-|  |  |  in pipelines: 11(GETNEXT)
-|  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-|  |  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=48.00MB mem-reservation=8.00MB thread-reservation=1
-|  |  11:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
-|  |     HDFS partitions=1/1 files=3 size=96.62MB
-|  |     predicates: cs_ship_addr_sk IS NULL
-|  |     runtime filters: RF010[bloom] -> cs_sold_date_sk
+|  |  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=1
+|  |  12:SCAN HDFS [tpcds_parquet.item, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=1.73MB
 |  |     stored statistics:
-|  |       table: rows=1.44M size=96.62MB
+|  |       table: rows=18.00K size=1.73MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=650.14K
-|  |     mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=0
-|  |     tuple-ids=6 row-size=20B cardinality=7.17K
-|  |     in pipelines: 11(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=18.00K
+|  |     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
+|  |     tuple-ids=7 row-size=26B cardinality=18.00K
+|  |     in pipelines: 12(GETNEXT)
 |  |
-|  12:SCAN HDFS [tpcds_parquet.item, RANDOM]
-|     HDFS partitions=1/1 files=1 size=1.73MB
-|     runtime filters: RF008[bloom] -> i_item_sk
+|  24:EXCHANGE [HASH(cs_item_sk)]
+|  |  mem-estimate=194.63KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT)
+|  |
+|  F08:PLAN FRAGMENT [HASH(cs_sold_date_sk)] hosts=3 instances=3
+|  Per-Instance Resources: mem-estimate=118.65KB mem-reservation=0B thread-reservation=1
+|  14:HASH JOIN [INNER JOIN, PARTITIONED]
+|  |  hash-table-id=05
+|  |  hash predicates: cs_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: none
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=6,8 row-size=32B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT), 13(OPEN)
+|  |
+|  |--F19:PLAN FRAGMENT [HASH(cs_sold_date_sk)] hosts=3 instances=3
+|  |  |  Per-Instance Resources: mem-estimate=3.79MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  JOIN BUILD
+|  |  |  join-table-id=05 plan-id=06 cohort-id=01
+|  |  |  build expressions: d_date_sk
+|  |  |  runtime filters: RF010[bloom] <- d_date_sk
+|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  |
+|  |  23:EXCHANGE [HASH(d_date_sk)]
+|  |  |  mem-estimate=872.04KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=8 row-size=12B cardinality=73.05K
+|  |  |  in pipelines: 13(GETNEXT)
+|  |  |
+|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|  |  13:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |     stored statistics:
+|  |       table: rows=73.05K size=2.15MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+|  |     tuple-ids=8 row-size=12B cardinality=73.05K
+|  |     in pipelines: 13(GETNEXT)
+|  |
+|  22:EXCHANGE [HASH(cs_sold_date_sk)]
+|  |  mem-estimate=118.65KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=6 row-size=20B cardinality=7.17K
+|  |  in pipelines: 11(GETNEXT)
+|  |
+|  F06:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
+|  Per-Instance Resources: mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=1
+|  11:SCAN HDFS [tpcds_parquet.catalog_sales, RANDOM]
+|     HDFS partitions=1/1 files=3 size=96.62MB
+|     predicates: cs_ship_addr_sk IS NULL
+|     runtime filters: RF008[bloom] -> cs_item_sk, RF010[bloom] -> cs_sold_date_sk
 |     stored statistics:
-|       table: rows=18.00K size=1.73MB
+|       table: rows=1.44M size=96.62MB
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=18.00K
-|     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
-|     tuple-ids=7 row-size=26B cardinality=18.00K
-|     in pipelines: 12(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=650.14K
+|     mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=0
+|     tuple-ids=6 row-size=20B cardinality=7.17K
+|     in pipelines: 11(GETNEXT)
 |
 |--10:HASH JOIN [INNER JOIN, BROADCAST]
 |  |  hash-table-id=02
@@ -619,7 +631,7 @@
 |  |  tuple-ids=4,5,3 row-size=58B cardinality=173
 |  |  in pipelines: 07(GETNEXT), 08(OPEN)
 |  |
-|  |--F15:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|  |--F16:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=02 plan-id=03 cohort-id=01
@@ -643,7 +655,7 @@
 |  |  |  tuple-ids=5,3 row-size=32B cardinality=173
 |  |  |  in pipelines: 08(GETNEXT), 06(OPEN)
 |  |  |
-|  |  |--F16:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |--F17:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  JOIN BUILD
 |  |  |  |  join-table-id=03 plan-id=04 cohort-id=02
@@ -699,7 +711,7 @@
 |  tuple-ids=0,1,2 row-size=58B cardinality=130.03K
 |  in pipelines: 01(GETNEXT), 03(OPEN)
 |
-|--F13:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|--F14:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=5.73MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -732,7 +744,7 @@
 |  tuple-ids=0,1 row-size=46B cardinality=130.03K
 |  in pipelines: 01(GETNEXT), 02(OPEN)
 |
-|--F14:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|--F15:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
 |  |  Per-Instance Resources: mem-estimate=5.35MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=01 plan-id=02 cohort-id=01
@@ -758,11 +770,11 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    predicates: ss_store_sk IS NULL
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q77.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q77.test
index e17a94c..1cca16f 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q77.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q77.test
@@ -459,10 +459,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1014,10 +1014,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q78.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q78.test
index 198fb1b..ec2ad72 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q78.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q78.test
@@ -157,10 +157,10 @@
 |  |  |     in pipelines: 01(GETNEXT)
 |  |  |
 |  |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -286,7 +286,7 @@
    tuple-ids=10 row-size=36B cardinality=1.44M
    in pipelines: 12(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=152.56MB Threads=22
+Max Per-Host Resource Reservation: Memory=156.31MB Threads=22
 Per-Host Resource Estimates: Memory=1.00GB
 F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=37.63KB mem-reservation=0B thread-reservation=1
@@ -302,7 +302,7 @@
 |  in pipelines: 20(GETNEXT)
 |
 F03:PLAN FRAGMENT [HASH(d_year,cs_item_sk,cs_bill_customer_sk)] hosts=3 instances=3
-Per-Host Resources: mem-estimate=20.82MB mem-reservation=13.44MB thread-reservation=1 runtime-filters-memory=3.00MB
+Per-Host Resources: mem-estimate=20.75MB mem-reservation=13.44MB thread-reservation=1 runtime-filters-memory=3.00MB
 20:TOP-N [LIMIT=100]
 |  order by: ss_sold_year ASC, ss_item_sk ASC, ss_customer_sk ASC, ss_qty DESC, ss_wc DESC, ss_sp DESC, coalesce(ws_qty, 0) + coalesce(cs_qty, 0) ASC, coalesce(ws_wc, 0) + coalesce(cs_wc, 0) ASC, coalesce(ws_sp, 0) + coalesce(cs_sp, 0) ASC, round((ss_qty * 1.00) / (coalesce(ws_qty, 0) + coalesce(cs_qty, 0)), 2) ASC
 |  materialized: coalesce(ws_qty, 0) + coalesce(cs_qty, 0), coalesce(ws_wc, 0) + coalesce(cs_wc, 0), coalesce(ws_sp, 0) + coalesce(cs_sp, 0), round((ss_qty * 1.00) / (coalesce(ws_qty, 0) + coalesce(cs_qty, 0)), 2)
@@ -320,12 +320,12 @@
 |  in pipelines: 24(GETNEXT), 28(OPEN)
 |
 |--34:EXCHANGE [HASH(d_year,ss_item_sk,ss_customer_sk)]
-|  |  mem-estimate=469.56KB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=404.34KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=8N,3 row-size=112B cardinality=3.00K
 |  |  in pipelines: 28(GETNEXT)
 |  |
-|  F07:PLAN FRAGMENT [HASH(d_year,ws_item_sk,ws_bill_customer_sk)] hosts=3 instances=3
-|  Per-Host Resources: mem-estimate=19.24MB mem-reservation=9.69MB thread-reservation=1 runtime-filters-memory=3.00MB
+|  F07:PLAN FRAGMENT [HASH(d_year,ws_item_sk,ws_bill_customer_sk)] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=19.24MB mem-reservation=13.44MB thread-reservation=1 runtime-filters-memory=3.00MB
 |  18:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED]
 |  |  hash predicates: d_year = d_year, ws_bill_customer_sk = ss_customer_sk, ws_item_sk = ss_item_sk
 |  |  fk/pk conjuncts: ws_bill_customer_sk = ss_customer_sk, ws_item_sk = ss_item_sk
@@ -417,10 +417,10 @@
 |  |  |     in pipelines: 01(GETNEXT)
 |  |  |
 |  |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -431,7 +431,7 @@
 |  28:AGGREGATE [FINALIZE]
 |  |  output: sum:merge(ws_quantity), sum:merge(ws_wholesale_cost), sum:merge(ws_sales_price)
 |  |  group by: d_year, ws_item_sk, ws_bill_customer_sk
-|  |  mem-estimate=10.00MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
+|  |  mem-estimate=10.00MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  |  tuple-ids=8 row-size=56B cardinality=148.00K
 |  |  in pipelines: 28(GETNEXT), 06(OPEN)
 |  |
@@ -602,10 +602,10 @@
    tuple-ids=10 row-size=36B cardinality=1.44M
    in pipelines: 12(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=194.38MB Threads=27
-Per-Host Resource Estimates: Memory=452MB
+Max Per-Host Resource Reservation: Memory=186.25MB Threads=23
+Per-Host Resource Estimates: Memory=411MB
 F12:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=71.61KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=37.63KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: ss_sold_year, ss_item_sk, ss_customer_sk, round((ss_qty * 1.00) / (coalesce(ws_qty, 0) + coalesce(cs_qty, 0)), 2), ss_qty, ss_wc, ss_sp, coalesce(ws_qty, 0) + coalesce(cs_qty, 0), coalesce(ws_wc, 0) + coalesce(cs_wc, 0), coalesce(ws_sp, 0) + coalesce(cs_sp, 0)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -613,12 +613,12 @@
 35:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: ss_sold_year ASC, ss_item_sk ASC, ss_customer_sk ASC, ss_qty DESC, ss_wc DESC, ss_sp DESC, coalesce(ws_qty, 0) + coalesce(cs_qty, 0) ASC, coalesce(ws_wc, 0) + coalesce(cs_wc, 0) ASC, coalesce(ws_sp, 0) + coalesce(cs_sp, 0) ASC, round((ss_qty * 1.00) / (coalesce(ws_qty, 0) + coalesce(cs_qty, 0)), 2) ASC
 |  limit: 100
-|  mem-estimate=71.61KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=37.63KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=15 row-size=112B cardinality=100
 |  in pipelines: 20(GETNEXT)
 |
-F03:PLAN FRAGMENT [HASH(d_year,cs_item_sk,cs_bill_customer_sk)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=15.42MB mem-reservation=4.75MB thread-reservation=1
+F03:PLAN FRAGMENT [HASH(d_year,cs_item_sk,cs_bill_customer_sk)] hosts=3 instances=3
+Per-Instance Resources: mem-estimate=15.42MB mem-reservation=8.50MB thread-reservation=1
 20:TOP-N [LIMIT=100]
 |  order by: ss_sold_year ASC, ss_item_sk ASC, ss_customer_sk ASC, ss_qty DESC, ss_wc DESC, ss_sp DESC, coalesce(ws_qty, 0) + coalesce(cs_qty, 0) ASC, coalesce(ws_wc, 0) + coalesce(cs_wc, 0) ASC, coalesce(ws_sp, 0) + coalesce(cs_sp, 0) ASC, round((ss_qty * 1.00) / (coalesce(ws_qty, 0) + coalesce(cs_qty, 0)), 2) ASC
 |  materialized: coalesce(ws_qty, 0) + coalesce(cs_qty, 0), coalesce(ws_wc, 0) + coalesce(cs_wc, 0), coalesce(ws_sp, 0) + coalesce(cs_sp, 0), round((ss_qty * 1.00) / (coalesce(ws_qty, 0) + coalesce(cs_qty, 0)), 2)
@@ -635,8 +635,8 @@
 |  tuple-ids=13N,8N,3 row-size=168B cardinality=3.00K
 |  in pipelines: 24(GETNEXT), 28(OPEN)
 |
-|--F13:PLAN FRAGMENT [HASH(d_year,cs_item_sk,cs_bill_customer_sk)] hosts=3 instances=6
-|  |  Per-Instance Resources: mem-estimate=5.75MB mem-reservation=4.94MB thread-reservation=1 runtime-filters-memory=3.00MB
+|--F13:PLAN FRAGMENT [HASH(d_year,cs_item_sk,cs_bill_customer_sk)] hosts=3 instances=3
+|  |  Per-Instance Resources: mem-estimate=5.33MB mem-reservation=4.94MB thread-reservation=1 runtime-filters-memory=3.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
 |  |  build expressions: d_year, ss_customer_sk, ss_item_sk
@@ -644,12 +644,12 @@
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |
 |  34:EXCHANGE [HASH(d_year,ss_item_sk,ss_customer_sk)]
-|  |  mem-estimate=829.56KB mem-reservation=0B thread-reservation=0
+|  |  mem-estimate=404.34KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=8N,3 row-size=112B cardinality=3.00K
 |  |  in pipelines: 28(GETNEXT)
 |  |
-|  F07:PLAN FRAGMENT [HASH(d_year,ws_item_sk,ws_bill_customer_sk)] hosts=3 instances=6
-|  Per-Instance Resources: mem-estimate=14.07MB mem-reservation=2.88MB thread-reservation=1
+|  F07:PLAN FRAGMENT [HASH(d_year,ws_item_sk,ws_bill_customer_sk)] hosts=2 instances=2
+|  Per-Instance Resources: mem-estimate=14.07MB mem-reservation=8.50MB thread-reservation=1
 |  18:HASH JOIN [RIGHT OUTER JOIN, PARTITIONED]
 |  |  hash-table-id=01
 |  |  hash predicates: d_year = d_year, ws_bill_customer_sk = ss_customer_sk, ws_item_sk = ss_item_sk
@@ -658,7 +658,7 @@
 |  |  tuple-ids=8N,3 row-size=112B cardinality=3.00K
 |  |  in pipelines: 28(GETNEXT), 32(OPEN)
 |  |
-|  |--F14:PLAN FRAGMENT [HASH(d_year,ws_item_sk,ws_bill_customer_sk)] hosts=3 instances=6
+|  |--F14:PLAN FRAGMENT [HASH(d_year,ws_item_sk,ws_bill_customer_sk)] hosts=2 instances=2
 |  |  |  Per-Instance Resources: mem-estimate=5.34MB mem-reservation=4.94MB thread-reservation=1 runtime-filters-memory=3.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=01 plan-id=02 cohort-id=02
@@ -766,10 +766,10 @@
 |  |  |     in pipelines: 01(GETNEXT)
 |  |  |
 |  |  00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|  |     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|  |     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |  |     runtime filters: RF016[bloom] -> ss_sold_date_sk
 |  |     stored statistics:
-|  |       table: rows=2.88M size=201.02MB
+|  |       table: rows=2.88M size=200.95MB
 |  |       partitions: 1824/1824 rows=2.88M
 |  |       columns: all
 |  |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -780,7 +780,7 @@
 |  28:AGGREGATE [FINALIZE]
 |  |  output: sum:merge(ws_quantity), sum:merge(ws_wholesale_cost), sum:merge(ws_sales_price)
 |  |  group by: d_year, ws_item_sk, ws_bill_customer_sk
-|  |  mem-estimate=10.00MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
+|  |  mem-estimate=10.00MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  |  tuple-ids=8 row-size=56B cardinality=148.00K
 |  |  in pipelines: 28(GETNEXT), 06(OPEN)
 |  |
@@ -886,7 +886,7 @@
 24:AGGREGATE [FINALIZE]
 |  output: sum:merge(cs_quantity), sum:merge(cs_wholesale_cost), sum:merge(cs_sales_price)
 |  group by: d_year, cs_item_sk, cs_bill_customer_sk
-|  mem-estimate=10.00MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
+|  mem-estimate=10.00MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  tuple-ids=13 row-size=56B cardinality=294.63K
 |  in pipelines: 24(GETNEXT), 12(OPEN)
 |
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q79.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q79.test
index 46a78cd..82c0cda 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q79.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q79.test
@@ -134,10 +134,10 @@
 |  |     in pipelines: 03(GETNEXT)
 |  |
 |  00:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF002[bloom] -> store_sales.ss_sold_date_sk, RF004[bloom] -> store_sales.ss_store_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -156,10 +156,10 @@
    tuple-ids=6 row-size=40B cardinality=100.00K
    in pipelines: 08(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=27.52MB Threads=13
-Per-Host Resource Estimates: Memory=330MB
+Max Per-Host Resource Reservation: Memory=25.65MB Threads=13
+Per-Host Resource Estimates: Memory=328MB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=17.57KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=29.81KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: c_last_name, c_first_name, substr(s_city, 1, 30), ss_ticket_number, amt, profit
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -167,12 +167,12 @@
 18:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: c_last_name ASC, c_first_name ASC, substr(s_city, 1, 30) ASC, profit ASC
 |  limit: 100
-|  mem-estimate=17.57KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=29.81KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=7 row-size=88B cardinality=100
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
-Per-Host Resources: mem-estimate=10.80MB mem-reservation=5.75MB thread-reservation=1 runtime-filters-memory=1.00MB
+F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=3
+Per-Host Resources: mem-estimate=8.93MB mem-reservation=3.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 10:TOP-N [LIMIT=100]
 |  order by: c_last_name ASC, c_first_name ASC, substr(s_city, 1, 30) ASC, profit ASC
 |  materialized: substr(s_city, 1, 30)
@@ -184,7 +184,7 @@
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  fk/pk conjuncts: none
 |  runtime filters: RF000[bloom] <- c_customer_sk
-|  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
+|  mem-estimate=2.88MB mem-reservation=2.88MB spill-buffer=128.00KB thread-reservation=0
 |  tuple-ids=4,6 row-size=106B cardinality=46.86K
 |  in pipelines: 15(GETNEXT), 08(OPEN)
 |
@@ -316,10 +316,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_sold_date_sk, RF004[bloom] -> store_sales.ss_store_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -327,10 +327,10 @@
    tuple-ids=0 row-size=36B cardinality=2.88M
    in pipelines: 00(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=42.34MB Threads=14
-Per-Host Resource Estimates: Memory=169MB
+Max Per-Host Resource Reservation: Memory=42.46MB Threads=16
+Per-Host Resource Estimates: Memory=174MB
 F07:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=17.57KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=56.75KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: c_last_name, c_first_name, substr(s_city, 1, 30), ss_ticket_number, amt, profit
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -338,11 +338,11 @@
 18:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: c_last_name ASC, c_first_name ASC, substr(s_city, 1, 30) ASC, profit ASC
 |  limit: 100
-|  mem-estimate=17.57KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=56.75KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=7 row-size=88B cardinality=100
 |  in pipelines: 10(GETNEXT)
 |
-F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
+F06:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=6
 Per-Instance Resources: mem-estimate=1.41MB mem-reservation=0B thread-reservation=1
 10:TOP-N [LIMIT=100]
 |  order by: c_last_name ASC, c_first_name ASC, substr(s_city, 1, 30) ASC, profit ASC
@@ -355,17 +355,17 @@
 |  hash-table-id=00
 |  hash predicates: ss_customer_sk = c_customer_sk
 |  fk/pk conjuncts: none
-|  mem-estimate=0B mem-reservation=0B spill-buffer=256.00KB thread-reservation=0
+|  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=4,6 row-size=106B cardinality=46.86K
 |  in pipelines: 15(GETNEXT), 08(OPEN)
 |
-|--F08:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=9.60MB mem-reservation=5.75MB thread-reservation=1 runtime-filters-memory=1.00MB
+|--F08:PLAN FRAGMENT [HASH(ss_customer_sk)] hosts=3 instances=6
+|  |  Per-Instance Resources: mem-estimate=6.79MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
 |  |  build expressions: c_customer_sk
 |  |  runtime filters: RF000[bloom] <- c_customer_sk
-|  |  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
+|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  |
 |  17:EXCHANGE [HASH(c_customer_sk)]
 |  |  mem-estimate=3.85MB mem-reservation=0B thread-reservation=0
@@ -520,10 +520,10 @@
 |     in pipelines: 03(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> tpcds_parquet.store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_sold_date_sk, RF004[bloom] -> store_sales.ss_store_sk, RF006[bloom] -> store_sales.ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q80.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q80.test
index 507b58e..4699d14 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q80.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q80.test
@@ -472,10 +472,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_item_sk, RF004[bloom] -> ss_promo_sk, RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1039,10 +1039,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF006[bloom] -> ss_item_sk, RF004[bloom] -> ss_promo_sk, RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q82.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q82.test
index 07e5a92..a969b55 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q82.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q82.test
@@ -95,10 +95,10 @@
 |  |     in pipelines: 00(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF004[bloom] -> ss_item_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -121,9 +121,9 @@
    in pipelines: 01(GETNEXT)
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=96.31MB Threads=10
-Per-Host Resource Estimates: Memory=423MB
+Per-Host Resource Estimates: Memory=512MB
 F05:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=48.19KB mem-reservation=0B thread-reservation=1
+|  Per-Host Resources: mem-estimate=36.04KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_id, i_item_desc, i_current_price
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -131,12 +131,12 @@
 14:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: i_item_id ASC
 |  limit: 100
-|  mem-estimate=48.19KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=36.04KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=5 row-size=144B cardinality=100
 |  in pipelines: 08(GETNEXT)
 |
-F04:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=3 instances=3
-Per-Host Resources: mem-estimate=99.54MB mem-reservation=34.00MB thread-reservation=1
+F04:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=2 instances=2
+Per-Host Resources: mem-estimate=143.94MB mem-reservation=34.00MB thread-reservation=1
 08:TOP-N [LIMIT=100]
 |  order by: i_item_id ASC
 |  mem-estimate=14.11KB mem-reservation=0B thread-reservation=0
@@ -145,20 +145,20 @@
 |
 13:AGGREGATE [FINALIZE]
 |  group by: i_item_id, i_item_desc, i_current_price
-|  mem-estimate=89.10MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=133.65MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=1.18M
 |  in pipelines: 13(GETNEXT), 01(OPEN)
 |
 12:EXCHANGE [HASH(i_item_id,i_item_desc,i_current_price)]
-|  mem-estimate=10.43MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=10.29MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=1.18M
 |  in pipelines: 01(GETNEXT)
 |
-F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=192.30MB mem-reservation=55.88MB thread-reservation=2 runtime-filters-memory=2.00MB
+F00:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+Per-Host Resources: mem-estimate=236.85MB mem-reservation=55.88MB thread-reservation=2 runtime-filters-memory=2.00MB
 07:AGGREGATE [STREAMING]
 |  group by: i_item_id, i_item_desc, i_current_price
-|  mem-estimate=89.10MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=133.65MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=1.18M
 |  in pipelines: 01(GETNEXT)
 |
@@ -234,10 +234,10 @@
 |  |     in pipelines: 00(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF004[bloom] -> ss_item_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -259,10 +259,10 @@
    tuple-ids=1 row-size=16B cardinality=1.17M
    in pipelines: 01(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=189.62MB Threads=12
-Per-Host Resource Estimates: Memory=347MB
+Max Per-Host Resource Reservation: Memory=105.62MB Threads=10
+Per-Host Resource Estimates: Memory=393MB
 F05:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Instance Resources: mem-estimate=91.68KB mem-reservation=0B thread-reservation=1
+|  Per-Instance Resources: mem-estimate=36.04KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: i_item_id, i_item_desc, i_current_price
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
@@ -270,12 +270,12 @@
 14:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: i_item_id ASC
 |  limit: 100
-|  mem-estimate=91.68KB mem-reservation=0B thread-reservation=0
+|  mem-estimate=36.04KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=5 row-size=144B cardinality=100
 |  in pipelines: 08(GETNEXT)
 |
-F04:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=3 instances=6
-Per-Instance Resources: mem-estimate=55.42MB mem-reservation=34.00MB thread-reservation=1
+F04:PLAN FRAGMENT [HASH(i_item_id,i_item_desc,i_current_price)] hosts=2 instances=2
+Per-Instance Resources: mem-estimate=143.94MB mem-reservation=34.00MB thread-reservation=1
 08:TOP-N [LIMIT=100]
 |  order by: i_item_id ASC
 |  mem-estimate=14.11KB mem-reservation=0B thread-reservation=0
@@ -284,21 +284,21 @@
 |
 13:AGGREGATE [FINALIZE]
 |  group by: i_item_id, i_item_desc, i_current_price
-|  mem-estimate=44.55MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=133.65MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=1.18M
 |  in pipelines: 13(GETNEXT), 01(OPEN)
 |
 12:EXCHANGE [HASH(i_item_id,i_item_desc,i_current_price)]
-|  mem-estimate=10.87MB mem-reservation=0B thread-reservation=0
+|  mem-estimate=10.29MB mem-reservation=0B thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=1.18M
 |  in pipelines: 01(GETNEXT)
 |
-F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
+F00:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
 Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
-Per-Instance Resources: mem-estimate=76.55MB mem-reservation=50.00MB thread-reservation=1
+Per-Instance Resources: mem-estimate=165.65MB mem-reservation=50.00MB thread-reservation=1
 07:AGGREGATE [STREAMING]
 |  group by: i_item_id, i_item_desc, i_current_price
-|  mem-estimate=44.55MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
+|  mem-estimate=133.65MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=4 row-size=144B cardinality=1.18M
 |  in pipelines: 01(GETNEXT)
 |
@@ -310,7 +310,7 @@
 |  tuple-ids=1,3,0,2 row-size=206B cardinality=1.18M
 |  in pipelines: 01(GETNEXT), 02(OPEN)
 |
-|--F06:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|--F06:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
 |  |  Per-Instance Resources: mem-estimate=5.09MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -346,7 +346,7 @@
 |  tuple-ids=1,3,0 row-size=180B cardinality=1.18M
 |  in pipelines: 01(GETNEXT), 03(OPEN)
 |
-|--F07:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
+|--F07:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
 |  |  Per-Instance Resources: mem-estimate=6.49MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=01 plan-id=02 cohort-id=01
@@ -399,10 +399,10 @@
 |  |     in pipelines: 00(GETNEXT)
 |  |
 |  03:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF004[bloom] -> ss_item_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q85.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q85.test
index cfc0cc4..fa76ee5 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q85.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q85.test
@@ -233,44 +233,44 @@
    tuple-ids=4 row-size=39B cardinality=181.75K
    in pipelines: 04(GETNEXT)
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=78.65MB Threads=19
-Per-Host Resource Estimates: Memory=644MB
-F10:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=75.90MB Threads=20
+Per-Host Resource Estimates: Memory=642MB
+F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: substring(r_reason_desc, 1, 20), avg(ws_quantity), avg(wr_refunded_cash), avg(wr_fee)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
-27:MERGING-EXCHANGE [UNPARTITIONED]
+28:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: substring(r_reason_desc, 1, 20) ASC, avg(ws_quantity) ASC, avg(wr_refunded_cash) ASC, avg(wr_fee) ASC
 |  limit: 100
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=10 row-size=36B cardinality=33
 |  in pipelines: 16(GETNEXT)
 |
-F09:PLAN FRAGMENT [HASH(r_reason_desc)] hosts=1 instances=1
+F10:PLAN FRAGMENT [HASH(r_reason_desc)] hosts=1 instances=1
 Per-Host Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
 16:TOP-N [LIMIT=100]
 |  order by: substring(r_reason_desc, 1, 20) ASC, avg(ws_quantity) ASC, avg(wr_refunded_cash) ASC, avg(wr_fee) ASC
 |  materialized: substring(r_reason_desc, 1, 20)
 |  mem-estimate=1.16KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=10 row-size=36B cardinality=33
-|  in pipelines: 16(GETNEXT), 26(OPEN)
+|  in pipelines: 16(GETNEXT), 27(OPEN)
 |
-26:AGGREGATE [FINALIZE]
+27:AGGREGATE [FINALIZE]
 |  output: avg:merge(ws_quantity), avg:merge(wr_refunded_cash), avg:merge(wr_fee)
 |  group by: r_reason_desc
 |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=9 row-size=53B cardinality=33
-|  in pipelines: 26(GETNEXT), 04(OPEN)
+|  in pipelines: 27(GETNEXT), 04(OPEN)
 |
-25:EXCHANGE [HASH(r_reason_desc)]
+26:EXCHANGE [HASH(r_reason_desc)]
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=8 row-size=53B cardinality=33
 |  in pipelines: 04(GETNEXT)
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-Per-Host Resources: mem-estimate=66.02MB mem-reservation=17.88MB thread-reservation=2 runtime-filters-memory=4.00MB
+Per-Host Resources: mem-estimate=66.08MB mem-reservation=17.88MB thread-reservation=2 runtime-filters-memory=4.00MB
 15:AGGREGATE [STREAMING]
 |  output: avg(CAST(ws_quantity AS BIGINT)), avg(wr_refunded_cash), avg(wr_fee)
 |  group by: r_reason_desc
@@ -283,15 +283,15 @@
 |  fk/pk conjuncts: wr_reason_sk = r_reason_sk
 |  runtime filters: RF000[bloom] <- r_reason_sk
 |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=4,5,0,3,1,6,2,7 row-size=241B cardinality=365
+|  tuple-ids=4,0,3,1,6,5,2,7 row-size=241B cardinality=365
 |  in pipelines: 04(GETNEXT), 07(OPEN)
 |
-|--24:EXCHANGE [BROADCAST]
+|--25:EXCHANGE [BROADCAST]
 |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=7 row-size=33B cardinality=35
 |  |  in pipelines: 07(GETNEXT)
 |  |
-|  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=16.00KB thread-reservation=2
 |  07:SCAN HDFS [tpcds_parquet.reason, RANDOM]
 |     HDFS partitions=1/1 files=1 size=1.92KB
@@ -308,30 +308,30 @@
 |  fk/pk conjuncts: cd2.cd_demo_sk = wr_returning_cdemo_sk
 |  runtime filters: RF002[bloom] <- wr_returning_cdemo_sk, RF003[bloom] <- cd1.cd_marital_status, RF004[bloom] <- cd1.cd_education_status
 |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=4,5,0,3,1,6,2 row-size=208B cardinality=365
-|  in pipelines: 04(GETNEXT), 05(OPEN)
+|  tuple-ids=4,0,3,1,6,5,2 row-size=208B cardinality=365
+|  in pipelines: 04(GETNEXT), 00(OPEN)
 |
-|--23:EXCHANGE [BROADCAST]
-|  |  mem-estimate=129.44KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=5,0,3,1,6,2 row-size=170B cardinality=365
-|  |  in pipelines: 05(GETNEXT)
+|--24:EXCHANGE [BROADCAST]
+|  |  mem-estimate=198.44KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=0,3,1,6,5,2 row-size=170B cardinality=365
+|  |  in pipelines: 00(GETNEXT)
 |  |
-|  F01:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=54.21MB mem-reservation=6.12MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  F07:PLAN FRAGMENT [HASH(wr_refunded_addr_sk)] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=6.66MB mem-reservation=5.88MB thread-reservation=1 runtime-filters-memory=2.00MB
 |  12:HASH JOIN [INNER JOIN, BROADCAST]
 |  |  hash predicates: ws_web_page_sk = wp_web_page_sk
 |  |  fk/pk conjuncts: ws_web_page_sk = wp_web_page_sk
 |  |  runtime filters: RF008[bloom] <- wp_web_page_sk
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=5,0,3,1,6,2 row-size=170B cardinality=365
-|  |  in pipelines: 05(GETNEXT), 02(OPEN)
+|  |  tuple-ids=0,3,1,6,5,2 row-size=170B cardinality=365
+|  |  in pipelines: 00(GETNEXT), 02(OPEN)
 |  |
-|  |--22:EXCHANGE [BROADCAST]
+|  |--23:EXCHANGE [BROADCAST]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=2 row-size=4B cardinality=60
 |  |  |  in pipelines: 02(GETNEXT)
 |  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  Per-Host Resources: mem-estimate=16.00MB mem-reservation=8.00KB thread-reservation=2
 |  |  02:SCAN HDFS [tpcds_parquet.web_page, RANDOM]
 |  |     HDFS partitions=1/1 files=1 size=5.56KB
@@ -343,137 +343,143 @@
 |  |     tuple-ids=2 row-size=4B cardinality=60
 |  |     in pipelines: 02(GETNEXT)
 |  |
-|  11:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  hash predicates: ca_address_sk = wr_refunded_addr_sk
-|  |  fk/pk conjuncts: ca_address_sk = wr_refunded_addr_sk
+|  11:HASH JOIN [INNER JOIN, PARTITIONED]
+|  |  hash predicates: wr_refunded_addr_sk = ca_address_sk
+|  |  fk/pk conjuncts: wr_refunded_addr_sk = ca_address_sk
 |  |  other predicates: ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY') OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY') OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ca_state IN ('LA', 'IA', 'AR')
-|  |  runtime filters: RF010[bloom] <- wr_refunded_addr_sk
+|  |  runtime filters: RF010[bloom] <- ca_address_sk
 |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=5,0,3,1,6 row-size=166B cardinality=365
-|  |  in pipelines: 05(GETNEXT), 00(OPEN)
+|  |  tuple-ids=0,3,1,6,5 row-size=166B cardinality=365
+|  |  in pipelines: 00(GETNEXT), 05(OPEN)
 |  |
-|  |--21:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=328.65KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
-|  |  |  in pipelines: 00(GETNEXT)
+|  |--22:EXCHANGE [HASH(ca_address_sk)]
+|  |  |  mem-estimate=417.54KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=5 row-size=43B cardinality=8.82K
+|  |  |  in pipelines: 05(GETNEXT)
 |  |  |
-|  |  F05:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=1 instances=1
-|  |  Per-Host Resources: mem-estimate=20.23MB mem-reservation=13.44MB thread-reservation=1 runtime-filters-memory=3.00MB
-|  |  10:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash predicates: ws_sold_date_sk = d_date_sk
-|  |  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
-|  |  |  runtime filters: RF012[bloom] <- d_date_sk
-|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
-|  |  |  in pipelines: 00(GETNEXT), 06(OPEN)
+|  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=48.00MB mem-reservation=256.00KB thread-reservation=2
+|  |  05:SCAN HDFS [tpcds_parquet.customer_address, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=1.16MB
+|  |     predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
+|  |     stored statistics:
+|  |       table: rows=50.00K size=1.16MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
+|  |     parquet statistics predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
+|  |     parquet dictionary predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
+|  |     mem-estimate=48.00MB mem-reservation=256.00KB thread-reservation=1
+|  |     tuple-ids=5 row-size=43B cardinality=8.82K
+|  |     in pipelines: 05(GETNEXT)
+|  |
+|  21:EXCHANGE [HASH(wr_refunded_addr_sk)]
+|  |  mem-estimate=372.19KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
+|  |  in pipelines: 00(GETNEXT)
+|  |
+|  F04:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=16.48MB mem-reservation=9.69MB thread-reservation=1 runtime-filters-memory=3.00MB
+|  10:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash predicates: ws_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
+|  |  runtime filters: RF012[bloom] <- d_date_sk
+|  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
+|  |  in pipelines: 00(GETNEXT), 06(OPEN)
+|  |
+|  |--20:EXCHANGE [BROADCAST]
+|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=6 row-size=8B cardinality=373
+|  |  |  in pipelines: 06(GETNEXT)
 |  |  |
-|  |  |--20:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=8B cardinality=373
-|  |  |  |  in pipelines: 06(GETNEXT)
-|  |  |  |
-|  |  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=2
-|  |  |  06:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |  |     predicates: d_year = CAST(2000 AS INT)
-|  |  |     stored statistics:
-|  |  |       table: rows=73.05K size=2.15MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |  |     parquet statistics predicates: d_year = CAST(2000 AS INT)
-|  |  |     parquet dictionary predicates: d_year = CAST(2000 AS INT)
-|  |  |     mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |     tuple-ids=6 row-size=8B cardinality=373
-|  |  |     in pipelines: 06(GETNEXT)
+|  |  F05:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=2
+|  |  06:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |     predicates: d_year = CAST(2000 AS INT)
+|  |     stored statistics:
+|  |       table: rows=73.05K size=2.15MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |     parquet statistics predicates: d_year = CAST(2000 AS INT)
+|  |     parquet dictionary predicates: d_year = CAST(2000 AS INT)
+|  |     mem-estimate=32.00MB mem-reservation=512.00KB thread-reservation=1
+|  |     tuple-ids=6 row-size=8B cardinality=373
+|  |     in pipelines: 06(GETNEXT)
+|  |
+|  09:HASH JOIN [INNER JOIN, PARTITIONED]
+|  |  hash predicates: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
+|  |  fk/pk conjuncts: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
+|  |  other predicates: cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
+|  |  runtime filters: RF014[bloom] <- wr_item_sk, RF015[bloom] <- wr_order_number
+|  |  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
+|  |  tuple-ids=0,3,1 row-size=115B cardinality=7.72K
+|  |  in pipelines: 00(GETNEXT), 03(OPEN)
+|  |
+|  |--19:EXCHANGE [HASH(wr_item_sk,wr_order_number)]
+|  |  |  mem-estimate=5.46MB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
+|  |  |  in pipelines: 03(GETNEXT)
 |  |  |
-|  |  09:HASH JOIN [INNER JOIN, PARTITIONED]
-|  |  |  hash predicates: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
-|  |  |  fk/pk conjuncts: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
-|  |  |  other predicates: cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
-|  |  |  runtime filters: RF014[bloom] <- wr_item_sk, RF015[bloom] <- wr_order_number
-|  |  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
-|  |  |  tuple-ids=0,3,1 row-size=115B cardinality=7.72K
-|  |  |  in pipelines: 00(GETNEXT), 03(OPEN)
+|  |  F02:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Host Resources: mem-estimate=56.53MB mem-reservation=13.75MB thread-reservation=2 runtime-filters-memory=1.00MB
+|  |  08:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash predicates: cd1.cd_demo_sk = wr_refunded_cdemo_sk
+|  |  |  fk/pk conjuncts: none
+|  |  |  runtime filters: RF018[bloom] <- wr_refunded_cdemo_sk
+|  |  |  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
+|  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
+|  |  |  in pipelines: 03(GETNEXT), 01(OPEN)
 |  |  |
-|  |  |--19:EXCHANGE [HASH(wr_item_sk,wr_order_number)]
-|  |  |  |  mem-estimate=5.46MB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
-|  |  |  |  in pipelines: 03(GETNEXT)
+|  |  |--17:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=2.78MB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=1 row-size=40B cardinality=71.76K
+|  |  |  |  in pipelines: 01(GETNEXT)
 |  |  |  |
 |  |  |  F03:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Host Resources: mem-estimate=56.53MB mem-reservation=13.75MB thread-reservation=2 runtime-filters-memory=1.00MB
-|  |  |  08:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  |  hash predicates: cd1.cd_demo_sk = wr_refunded_cdemo_sk
-|  |  |  |  fk/pk conjuncts: none
-|  |  |  |  runtime filters: RF018[bloom] <- wr_refunded_cdemo_sk
-|  |  |  |  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
-|  |  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
-|  |  |  |  in pipelines: 03(GETNEXT), 01(OPEN)
-|  |  |  |
-|  |  |  |--17:EXCHANGE [BROADCAST]
-|  |  |  |  |  mem-estimate=2.78MB mem-reservation=0B thread-reservation=0
-|  |  |  |  |  tuple-ids=1 row-size=40B cardinality=71.76K
-|  |  |  |  |  in pipelines: 01(GETNEXT)
-|  |  |  |  |
-|  |  |  |  F04:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  Per-Host Resources: mem-estimate=129.00MB mem-reservation=5.00MB thread-reservation=2 runtime-filters-memory=1.00MB
-|  |  |  |  01:SCAN HDFS [tpcds_parquet.web_returns, RANDOM]
-|  |  |  |     HDFS partitions=1/1 files=1 size=5.66MB
-|  |  |  |     runtime filters: RF000[bloom] -> wr_reason_sk
-|  |  |  |     stored statistics:
-|  |  |  |       table: rows=71.76K size=5.66MB
-|  |  |  |       columns: all
-|  |  |  |     extrapolated-rows=disabled max-scan-range-rows=71.76K
-|  |  |  |     mem-estimate=128.00MB mem-reservation=4.00MB thread-reservation=1
-|  |  |  |     tuple-ids=1 row-size=40B cardinality=71.76K
-|  |  |  |     in pipelines: 01(GETNEXT)
-|  |  |  |
-|  |  |  03:SCAN HDFS [tpcds_parquet.customer_demographics cd1, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=7.49MB
-|  |  |     predicates: cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree'
-|  |  |     runtime filters: RF018[bloom] -> cd1.cd_demo_sk
+|  |  |  Per-Host Resources: mem-estimate=130.00MB mem-reservation=6.00MB thread-reservation=2 runtime-filters-memory=2.00MB
+|  |  |  01:SCAN HDFS [tpcds_parquet.web_returns, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=5.66MB
+|  |  |     runtime filters: RF000[bloom] -> wr_reason_sk, RF010[bloom] -> wr_refunded_addr_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=1.92M size=7.49MB
+|  |  |       table: rows=71.76K size=5.66MB
 |  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
-|  |  |     mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=1
-|  |  |     tuple-ids=3 row-size=39B cardinality=181.75K
-|  |  |     in pipelines: 03(GETNEXT)
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=71.76K
+|  |  |     mem-estimate=128.00MB mem-reservation=4.00MB thread-reservation=1
+|  |  |     tuple-ids=1 row-size=40B cardinality=71.76K
+|  |  |     in pipelines: 01(GETNEXT)
 |  |  |
-|  |  18:EXCHANGE [HASH(ws_item_sk,ws_order_number)]
-|  |  |  mem-estimate=1.31MB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=0 row-size=36B cardinality=71.94K
-|  |  |  in pipelines: 00(GETNEXT)
-|  |  |
-|  |  F02:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
-|  |  Per-Host Resources: mem-estimate=228.00MB mem-reservation=20.00MB thread-reservation=2 runtime-filters-memory=4.00MB
-|  |  00:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
-|  |     HDFS partitions=1/1 files=2 size=45.09MB
-|  |     predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
-|  |     runtime filters: RF008[bloom] -> ws_web_page_sk, RF012[bloom] -> ws_sold_date_sk, RF014[bloom] -> ws_item_sk, RF015[bloom] -> ws_order_number
+|  |  03:SCAN HDFS [tpcds_parquet.customer_demographics cd1, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=7.49MB
+|  |     predicates: cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree'
+|  |     runtime filters: RF018[bloom] -> cd1.cd_demo_sk
 |  |     stored statistics:
-|  |       table: rows=719.38K size=45.09MB
+|  |       table: rows=1.92M size=7.49MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=644.77K
-|  |     parquet dictionary predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
-|  |     mem-estimate=224.00MB mem-reservation=16.00MB thread-reservation=1
-|  |     tuple-ids=0 row-size=36B cardinality=71.94K
-|  |     in pipelines: 00(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
+|  |     mem-estimate=48.00MB mem-reservation=8.00MB thread-reservation=1
+|  |     tuple-ids=3 row-size=39B cardinality=181.75K
+|  |     in pipelines: 03(GETNEXT)
 |  |
-|  05:SCAN HDFS [tpcds_parquet.customer_address, RANDOM]
-|     HDFS partitions=1/1 files=1 size=1.16MB
-|     predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
-|     runtime filters: RF010[bloom] -> ca_address_sk
+|  18:EXCHANGE [HASH(ws_item_sk,ws_order_number)]
+|  |  mem-estimate=1.31MB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=0 row-size=36B cardinality=71.94K
+|  |  in pipelines: 00(GETNEXT)
+|  |
+|  F01:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  Per-Host Resources: mem-estimate=228.00MB mem-reservation=20.00MB thread-reservation=2 runtime-filters-memory=4.00MB
+|  00:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
+|     HDFS partitions=1/1 files=2 size=45.09MB
+|     predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
+|     runtime filters: RF008[bloom] -> ws_web_page_sk, RF012[bloom] -> ws_sold_date_sk, RF014[bloom] -> ws_item_sk, RF015[bloom] -> ws_order_number
 |     stored statistics:
-|       table: rows=50.00K size=1.16MB
+|       table: rows=719.38K size=45.09MB
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=50.00K
-|     parquet statistics predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
-|     parquet dictionary predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
-|     mem-estimate=48.00MB mem-reservation=256.00KB thread-reservation=1
-|     tuple-ids=5 row-size=43B cardinality=8.82K
-|     in pipelines: 05(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=644.77K
+|     parquet dictionary predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
+|     mem-estimate=224.00MB mem-reservation=16.00MB thread-reservation=1
+|     tuple-ids=0 row-size=36B cardinality=71.94K
+|     in pipelines: 00(GETNEXT)
 |
 04:SCAN HDFS [tpcds_parquet.customer_demographics cd2, RANDOM]
    HDFS partitions=1/1 files=1 size=7.49MB
@@ -487,38 +493,38 @@
    tuple-ids=4 row-size=39B cardinality=181.75K
    in pipelines: 04(GETNEXT)
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=98.09MB Threads=18
-Per-Host Resource Estimates: Memory=231MB
-F10:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
+Max Per-Host Resource Reservation: Memory=92.40MB Threads=19
+Per-Host Resource Estimates: Memory=226MB
+F11:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=16.00KB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
 |  output exprs: substring(r_reason_desc, 1, 20), avg(ws_quantity), avg(wr_refunded_cash), avg(wr_fee)
 |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
-27:MERGING-EXCHANGE [UNPARTITIONED]
+28:MERGING-EXCHANGE [UNPARTITIONED]
 |  order by: substring(r_reason_desc, 1, 20) ASC, avg(ws_quantity) ASC, avg(wr_refunded_cash) ASC, avg(wr_fee) ASC
 |  limit: 100
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=10 row-size=36B cardinality=33
 |  in pipelines: 16(GETNEXT)
 |
-F09:PLAN FRAGMENT [HASH(r_reason_desc)] hosts=1 instances=1
+F10:PLAN FRAGMENT [HASH(r_reason_desc)] hosts=1 instances=1
 Per-Instance Resources: mem-estimate=10.02MB mem-reservation=1.94MB thread-reservation=1
 16:TOP-N [LIMIT=100]
 |  order by: substring(r_reason_desc, 1, 20) ASC, avg(ws_quantity) ASC, avg(wr_refunded_cash) ASC, avg(wr_fee) ASC
 |  materialized: substring(r_reason_desc, 1, 20)
 |  mem-estimate=1.16KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=10 row-size=36B cardinality=33
-|  in pipelines: 16(GETNEXT), 26(OPEN)
+|  in pipelines: 16(GETNEXT), 27(OPEN)
 |
-26:AGGREGATE [FINALIZE]
+27:AGGREGATE [FINALIZE]
 |  output: avg:merge(ws_quantity), avg:merge(wr_refunded_cash), avg:merge(wr_fee)
 |  group by: r_reason_desc
 |  mem-estimate=10.00MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
 |  tuple-ids=9 row-size=53B cardinality=33
-|  in pipelines: 26(GETNEXT), 04(OPEN)
+|  in pipelines: 27(GETNEXT), 04(OPEN)
 |
-25:EXCHANGE [HASH(r_reason_desc)]
+26:EXCHANGE [HASH(r_reason_desc)]
 |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  tuple-ids=8 row-size=53B cardinality=33
 |  in pipelines: 04(GETNEXT)
@@ -538,10 +544,10 @@
 |  hash predicates: wr_reason_sk = r_reason_sk
 |  fk/pk conjuncts: wr_reason_sk = r_reason_sk
 |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=4,5,0,3,1,6,2,7 row-size=241B cardinality=365
+|  tuple-ids=4,0,3,1,6,5,2,7 row-size=241B cardinality=365
 |  in pipelines: 04(GETNEXT), 07(OPEN)
 |
-|--F11:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|--F12:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  JOIN BUILD
 |  |  join-table-id=00 plan-id=01 cohort-id=01
@@ -549,12 +555,12 @@
 |  |  runtime filters: RF000[bloom] <- r_reason_sk
 |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |
-|  24:EXCHANGE [BROADCAST]
+|  25:EXCHANGE [BROADCAST]
 |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=7 row-size=33B cardinality=35
 |  |  in pipelines: 07(GETNEXT)
 |  |
-|  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  F09:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=16.00KB thread-reservation=1
 |  07:SCAN HDFS [tpcds_parquet.reason, RANDOM]
 |     HDFS partitions=1/1 files=1 size=1.92KB
@@ -571,34 +577,33 @@
 |  hash predicates: cd2.cd_demo_sk = wr_returning_cdemo_sk, cd2.cd_marital_status = cd1.cd_marital_status, cd2.cd_education_status = cd1.cd_education_status
 |  fk/pk conjuncts: cd2.cd_demo_sk = wr_returning_cdemo_sk
 |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  tuple-ids=4,5,0,3,1,6,2 row-size=208B cardinality=365
-|  in pipelines: 04(GETNEXT), 05(OPEN)
+|  tuple-ids=4,0,3,1,6,5,2 row-size=208B cardinality=365
+|  in pipelines: 04(GETNEXT), 00(OPEN)
 |
-|--F12:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=7.00MB mem-reservation=6.88MB thread-reservation=1 runtime-filters-memory=3.00MB
+|--F13:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=7.07MB mem-reservation=6.88MB thread-reservation=1 runtime-filters-memory=3.00MB
 |  JOIN BUILD
 |  |  join-table-id=01 plan-id=02 cohort-id=01
 |  |  build expressions: wr_returning_cdemo_sk, cd1.cd_marital_status, cd1.cd_education_status
 |  |  runtime filters: RF002[bloom] <- wr_returning_cdemo_sk, RF003[bloom] <- cd1.cd_marital_status, RF004[bloom] <- cd1.cd_education_status
 |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |
-|  23:EXCHANGE [BROADCAST]
-|  |  mem-estimate=129.44KB mem-reservation=0B thread-reservation=0
-|  |  tuple-ids=5,0,3,1,6,2 row-size=170B cardinality=365
-|  |  in pipelines: 05(GETNEXT)
+|  24:EXCHANGE [BROADCAST]
+|  |  mem-estimate=198.44KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=0,3,1,6,5,2 row-size=170B cardinality=365
+|  |  in pipelines: 00(GETNEXT)
 |  |
-|  F01:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  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.00MB mem-reservation=256.00KB thread-reservation=1
+|  F07:PLAN FRAGMENT [HASH(wr_refunded_addr_sk)] hosts=2 instances=2
+|  Per-Instance Resources: mem-estimate=372.19KB mem-reservation=0B thread-reservation=1
 |  12:HASH JOIN [INNER JOIN, BROADCAST]
 |  |  hash-table-id=02
 |  |  hash predicates: ws_web_page_sk = wp_web_page_sk
 |  |  fk/pk conjuncts: ws_web_page_sk = wp_web_page_sk
 |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=5,0,3,1,6,2 row-size=170B cardinality=365
-|  |  in pipelines: 05(GETNEXT), 02(OPEN)
+|  |  tuple-ids=0,3,1,6,5,2 row-size=170B cardinality=365
+|  |  in pipelines: 00(GETNEXT), 02(OPEN)
 |  |
-|  |--F13:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |--F14:PLAN FRAGMENT [HASH(wr_refunded_addr_sk)] hosts=2 instances=2
 |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=02 plan-id=03 cohort-id=02
@@ -606,12 +611,12 @@
 |  |  |  runtime filters: RF008[bloom] <- wp_web_page_sk
 |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |  |
-|  |  22:EXCHANGE [BROADCAST]
+|  |  23:EXCHANGE [BROADCAST]
 |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=2 row-size=4B cardinality=60
 |  |  |  in pipelines: 02(GETNEXT)
 |  |  |
-|  |  F07:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  F08:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
 |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=8.00KB thread-reservation=1
 |  |  02:SCAN HDFS [tpcds_parquet.web_page, RANDOM]
 |  |     HDFS partitions=1/1 files=1 size=5.56KB
@@ -623,172 +628,178 @@
 |  |     tuple-ids=2 row-size=4B cardinality=60
 |  |     in pipelines: 02(GETNEXT)
 |  |
-|  11:HASH JOIN [INNER JOIN, BROADCAST]
+|  11:HASH JOIN [INNER JOIN, PARTITIONED]
 |  |  hash-table-id=03
-|  |  hash predicates: ca_address_sk = wr_refunded_addr_sk
-|  |  fk/pk conjuncts: ca_address_sk = wr_refunded_addr_sk
+|  |  hash predicates: wr_refunded_addr_sk = ca_address_sk
+|  |  fk/pk conjuncts: wr_refunded_addr_sk = ca_address_sk
 |  |  other predicates: ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY') OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY') OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ca_state IN ('IN', 'OH', 'NJ') OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ca_state IN ('LA', 'IA', 'AR'), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ca_state IN ('WI', 'CT', 'KY') OR ca_state IN ('LA', 'IA', 'AR')
 |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  tuple-ids=5,0,3,1,6 row-size=166B cardinality=365
-|  |  in pipelines: 05(GETNEXT), 00(OPEN)
+|  |  tuple-ids=0,3,1,6,5 row-size=166B cardinality=365
+|  |  in pipelines: 00(GETNEXT), 05(OPEN)
 |  |
-|  |--F14:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=5.20MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |--F15:PLAN FRAGMENT [HASH(wr_refunded_addr_sk)] hosts=2 instances=2
+|  |  |  Per-Instance Resources: mem-estimate=3.35MB mem-reservation=2.94MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  JOIN BUILD
 |  |  |  join-table-id=03 plan-id=04 cohort-id=02
-|  |  |  build expressions: wr_refunded_addr_sk
-|  |  |  runtime filters: RF010[bloom] <- wr_refunded_addr_sk
+|  |  |  build expressions: ca_address_sk
+|  |  |  runtime filters: RF010[bloom] <- ca_address_sk
+|  |  |  mem-estimate=1.94MB mem-reservation=1.94MB spill-buffer=64.00KB thread-reservation=0
+|  |  |
+|  |  22:EXCHANGE [HASH(ca_address_sk)]
+|  |  |  mem-estimate=417.54KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=5 row-size=43B cardinality=8.82K
+|  |  |  in pipelines: 05(GETNEXT)
+|  |  |
+|  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=1
+|  |  05:SCAN HDFS [tpcds_parquet.customer_address, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=1.16MB
+|  |     predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
+|  |     stored statistics:
+|  |       table: rows=50.00K size=1.16MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=50.00K
+|  |     parquet statistics predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
+|  |     parquet dictionary predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
+|  |     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
+|  |     tuple-ids=5 row-size=43B cardinality=8.82K
+|  |     in pipelines: 05(GETNEXT)
+|  |
+|  21:EXCHANGE [HASH(wr_refunded_addr_sk)]
+|  |  mem-estimate=372.19KB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
+|  |  in pipelines: 00(GETNEXT)
+|  |
+|  F04:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=2 instances=2
+|  Per-Instance Resources: mem-estimate=1.31MB mem-reservation=0B thread-reservation=1
+|  10:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  hash-table-id=04
+|  |  hash predicates: ws_sold_date_sk = d_date_sk
+|  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
+|  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
+|  |  in pipelines: 00(GETNEXT), 06(OPEN)
+|  |
+|  |--F16:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=2 instances=2
+|  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  JOIN BUILD
+|  |  |  join-table-id=04 plan-id=05 cohort-id=02
+|  |  |  build expressions: d_date_sk
+|  |  |  runtime filters: RF012[bloom] <- d_date_sk
 |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
 |  |  |
-|  |  21:EXCHANGE [BROADCAST]
-|  |  |  mem-estimate=328.65KB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
-|  |  |  in pipelines: 00(GETNEXT)
+|  |  20:EXCHANGE [BROADCAST]
+|  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=6 row-size=8B cardinality=373
+|  |  |  in pipelines: 06(GETNEXT)
 |  |  |
-|  |  F05:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=1 instances=1
-|  |  Per-Instance Resources: mem-estimate=1.31MB mem-reservation=0B thread-reservation=1
-|  |  10:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  hash-table-id=04
-|  |  |  hash predicates: ws_sold_date_sk = d_date_sk
-|  |  |  fk/pk conjuncts: ws_sold_date_sk = d_date_sk
-|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=64.00KB thread-reservation=0
-|  |  |  tuple-ids=0,3,1,6 row-size=123B cardinality=1.59K
-|  |  |  in pipelines: 00(GETNEXT), 06(OPEN)
+|  |  F05:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
+|  |  06:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=2.15MB
+|  |     predicates: d_year = CAST(2000 AS INT)
+|  |     stored statistics:
+|  |       table: rows=73.05K size=2.15MB
+|  |       columns: all
+|  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
+|  |     parquet statistics predicates: d_year = CAST(2000 AS INT)
+|  |     parquet dictionary predicates: d_year = CAST(2000 AS INT)
+|  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
+|  |     tuple-ids=6 row-size=8B cardinality=373
+|  |     in pipelines: 06(GETNEXT)
+|  |
+|  09:HASH JOIN [INNER JOIN, PARTITIONED]
+|  |  hash-table-id=05
+|  |  hash predicates: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
+|  |  fk/pk conjuncts: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
+|  |  other predicates: cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
+|  |  mem-estimate=0B mem-reservation=0B spill-buffer=256.00KB thread-reservation=0
+|  |  tuple-ids=0,3,1 row-size=115B cardinality=7.72K
+|  |  in pipelines: 00(GETNEXT), 03(OPEN)
+|  |
+|  |--F17:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=2 instances=2
+|  |  |  Per-Instance Resources: mem-estimate=12.21MB mem-reservation=6.75MB thread-reservation=1 runtime-filters-memory=2.00MB
+|  |  JOIN BUILD
+|  |  |  join-table-id=05 plan-id=06 cohort-id=02
+|  |  |  build expressions: wr_item_sk, wr_order_number
+|  |  |  runtime filters: RF014[bloom] <- wr_item_sk, RF015[bloom] <- wr_order_number
+|  |  |  mem-estimate=4.75MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
 |  |  |
-|  |  |--F15:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=4.89MB mem-reservation=4.88MB thread-reservation=1 runtime-filters-memory=1.00MB
+|  |  19:EXCHANGE [HASH(wr_item_sk,wr_order_number)]
+|  |  |  mem-estimate=5.46MB mem-reservation=0B thread-reservation=0
+|  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
+|  |  |  in pipelines: 03(GETNEXT)
+|  |  |
+|  |  F02:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  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.00MB mem-reservation=8.00MB thread-reservation=1
+|  |  08:HASH JOIN [INNER JOIN, BROADCAST]
+|  |  |  hash-table-id=06
+|  |  |  hash predicates: cd1.cd_demo_sk = wr_refunded_cdemo_sk
+|  |  |  fk/pk conjuncts: none
+|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=256.00KB thread-reservation=0
+|  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
+|  |  |  in pipelines: 03(GETNEXT), 01(OPEN)
+|  |  |
+|  |  |--F18:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
+|  |  |  |  Per-Instance Resources: mem-estimate=13.28MB mem-reservation=10.50MB thread-reservation=1 runtime-filters-memory=1.00MB
 |  |  |  JOIN BUILD
-|  |  |  |  join-table-id=04 plan-id=05 cohort-id=03
-|  |  |  |  build expressions: d_date_sk
-|  |  |  |  runtime filters: RF012[bloom] <- d_date_sk
-|  |  |  |  mem-estimate=3.88MB mem-reservation=3.88MB spill-buffer=64.00KB thread-reservation=0
+|  |  |  |  join-table-id=06 plan-id=07 cohort-id=03
+|  |  |  |  build expressions: wr_refunded_cdemo_sk
+|  |  |  |  runtime filters: RF018[bloom] <- wr_refunded_cdemo_sk
+|  |  |  |  mem-estimate=9.50MB mem-reservation=9.50MB spill-buffer=256.00KB thread-reservation=0
 |  |  |  |
-|  |  |  20:EXCHANGE [BROADCAST]
-|  |  |  |  mem-estimate=16.00KB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=6 row-size=8B cardinality=373
-|  |  |  |  in pipelines: 06(GETNEXT)
-|  |  |  |
-|  |  |  F06:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
-|  |  |  06:SCAN HDFS [tpcds_parquet.date_dim, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=2.15MB
-|  |  |     predicates: d_year = CAST(2000 AS INT)
-|  |  |     stored statistics:
-|  |  |       table: rows=73.05K size=2.15MB
-|  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=73.05K
-|  |  |     parquet statistics predicates: d_year = CAST(2000 AS INT)
-|  |  |     parquet dictionary predicates: d_year = CAST(2000 AS INT)
-|  |  |     mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=0
-|  |  |     tuple-ids=6 row-size=8B cardinality=373
-|  |  |     in pipelines: 06(GETNEXT)
-|  |  |
-|  |  09:HASH JOIN [INNER JOIN, PARTITIONED]
-|  |  |  hash-table-id=05
-|  |  |  hash predicates: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
-|  |  |  fk/pk conjuncts: ws_item_sk = wr_item_sk, ws_order_number = wr_order_number
-|  |  |  other predicates: cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'S' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_marital_status = 'W', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_marital_status = 'W', ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = 'College' OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
-|  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=512.00KB thread-reservation=0
-|  |  |  tuple-ids=0,3,1 row-size=115B cardinality=7.72K
-|  |  |  in pipelines: 00(GETNEXT), 03(OPEN)
-|  |  |
-|  |  |--F16:PLAN FRAGMENT [HASH(ws_item_sk,ws_order_number)] hosts=1 instances=1
-|  |  |  |  Per-Instance Resources: mem-estimate=15.96MB mem-reservation=10.50MB thread-reservation=1 runtime-filters-memory=2.00MB
-|  |  |  JOIN BUILD
-|  |  |  |  join-table-id=05 plan-id=06 cohort-id=03
-|  |  |  |  build expressions: wr_item_sk, wr_order_number
-|  |  |  |  runtime filters: RF014[bloom] <- wr_item_sk, RF015[bloom] <- wr_order_number
-|  |  |  |  mem-estimate=8.50MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
-|  |  |  |
-|  |  |  19:EXCHANGE [HASH(wr_item_sk,wr_order_number)]
-|  |  |  |  mem-estimate=5.46MB mem-reservation=0B thread-reservation=0
-|  |  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
-|  |  |  |  in pipelines: 03(GETNEXT)
+|  |  |  17:EXCHANGE [BROADCAST]
+|  |  |  |  mem-estimate=2.78MB mem-reservation=0B thread-reservation=0
+|  |  |  |  tuple-ids=1 row-size=40B cardinality=71.76K
+|  |  |  |  in pipelines: 01(GETNEXT)
 |  |  |  |
 |  |  |  F03:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  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.00MB mem-reservation=8.00MB thread-reservation=1
-|  |  |  08:HASH JOIN [INNER JOIN, BROADCAST]
-|  |  |  |  hash-table-id=06
-|  |  |  |  hash predicates: cd1.cd_demo_sk = wr_refunded_cdemo_sk
-|  |  |  |  fk/pk conjuncts: none
-|  |  |  |  mem-estimate=0B mem-reservation=0B spill-buffer=256.00KB thread-reservation=0
-|  |  |  |  tuple-ids=3,1 row-size=79B cardinality=71.76K
-|  |  |  |  in pipelines: 03(GETNEXT), 01(OPEN)
-|  |  |  |
-|  |  |  |--F17:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  |  Per-Instance Resources: mem-estimate=13.28MB mem-reservation=10.50MB thread-reservation=1 runtime-filters-memory=1.00MB
-|  |  |  |  JOIN BUILD
-|  |  |  |  |  join-table-id=06 plan-id=07 cohort-id=04
-|  |  |  |  |  build expressions: wr_refunded_cdemo_sk
-|  |  |  |  |  runtime filters: RF018[bloom] <- wr_refunded_cdemo_sk
-|  |  |  |  |  mem-estimate=9.50MB mem-reservation=9.50MB spill-buffer=256.00KB thread-reservation=0
-|  |  |  |  |
-|  |  |  |  17:EXCHANGE [BROADCAST]
-|  |  |  |  |  mem-estimate=2.78MB mem-reservation=0B thread-reservation=0
-|  |  |  |  |  tuple-ids=1 row-size=40B cardinality=71.76K
-|  |  |  |  |  in pipelines: 01(GETNEXT)
-|  |  |  |  |
-|  |  |  |  F04:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-|  |  |  |  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.00MB mem-reservation=4.00MB thread-reservation=1
-|  |  |  |  01:SCAN HDFS [tpcds_parquet.web_returns, RANDOM]
-|  |  |  |     HDFS partitions=1/1 files=1 size=5.66MB
-|  |  |  |     runtime filters: RF000[bloom] -> wr_reason_sk
-|  |  |  |     stored statistics:
-|  |  |  |       table: rows=71.76K size=5.66MB
-|  |  |  |       columns: all
-|  |  |  |     extrapolated-rows=disabled max-scan-range-rows=71.76K
-|  |  |  |     mem-estimate=16.00MB mem-reservation=4.00MB thread-reservation=0
-|  |  |  |     tuple-ids=1 row-size=40B cardinality=71.76K
-|  |  |  |     in pipelines: 01(GETNEXT)
-|  |  |  |
-|  |  |  03:SCAN HDFS [tpcds_parquet.customer_demographics cd1, RANDOM]
-|  |  |     HDFS partitions=1/1 files=1 size=7.49MB
-|  |  |     predicates: cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree'
-|  |  |     runtime filters: RF018[bloom] -> cd1.cd_demo_sk
+|  |  |  Per-Host Shared Resources: mem-estimate=2.00MB mem-reservation=2.00MB thread-reservation=0 runtime-filters-memory=2.00MB
+|  |  |  Per-Instance Resources: mem-estimate=16.00MB mem-reservation=4.00MB thread-reservation=1
+|  |  |  01:SCAN HDFS [tpcds_parquet.web_returns, RANDOM]
+|  |  |     HDFS partitions=1/1 files=1 size=5.66MB
+|  |  |     runtime filters: RF000[bloom] -> wr_reason_sk, RF010[bloom] -> wr_refunded_addr_sk
 |  |  |     stored statistics:
-|  |  |       table: rows=1.92M size=7.49MB
+|  |  |       table: rows=71.76K size=5.66MB
 |  |  |       columns: all
-|  |  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
-|  |  |     mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=0
-|  |  |     tuple-ids=3 row-size=39B cardinality=181.75K
-|  |  |     in pipelines: 03(GETNEXT)
+|  |  |     extrapolated-rows=disabled max-scan-range-rows=71.76K
+|  |  |     mem-estimate=16.00MB mem-reservation=4.00MB thread-reservation=0
+|  |  |     tuple-ids=1 row-size=40B cardinality=71.76K
+|  |  |     in pipelines: 01(GETNEXT)
 |  |  |
-|  |  18:EXCHANGE [HASH(ws_item_sk,ws_order_number)]
-|  |  |  mem-estimate=1.31MB mem-reservation=0B thread-reservation=0
-|  |  |  tuple-ids=0 row-size=36B cardinality=71.94K
-|  |  |  in pipelines: 00(GETNEXT)
-|  |  |
-|  |  F02:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
-|  |  Per-Host Shared Resources: mem-estimate=4.00MB mem-reservation=4.00MB thread-reservation=0 runtime-filters-memory=4.00MB
-|  |  Per-Instance Resources: mem-estimate=32.00MB mem-reservation=16.00MB thread-reservation=1
-|  |  00:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
-|  |     HDFS partitions=1/1 files=2 size=45.09MB
-|  |     predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
-|  |     runtime filters: RF008[bloom] -> ws_web_page_sk, RF012[bloom] -> ws_sold_date_sk, RF014[bloom] -> ws_item_sk, RF015[bloom] -> ws_order_number
+|  |  03:SCAN HDFS [tpcds_parquet.customer_demographics cd1, RANDOM]
+|  |     HDFS partitions=1/1 files=1 size=7.49MB
+|  |     predicates: cd1.cd_marital_status = 'M' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree', cd1.cd_education_status = 'Advanced Degree' OR cd1.cd_marital_status = 'S' AND cd1.cd_education_status = 'College' OR cd1.cd_marital_status = 'W' AND cd1.cd_education_status = '2 yr Degree'
+|  |     runtime filters: RF018[bloom] -> cd1.cd_demo_sk
 |  |     stored statistics:
-|  |       table: rows=719.38K size=45.09MB
+|  |       table: rows=1.92M size=7.49MB
 |  |       columns: all
-|  |     extrapolated-rows=disabled max-scan-range-rows=644.77K
-|  |     parquet dictionary predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
-|  |     mem-estimate=32.00MB mem-reservation=16.00MB thread-reservation=0
-|  |     tuple-ids=0 row-size=36B cardinality=71.94K
-|  |     in pipelines: 00(GETNEXT)
+|  |     extrapolated-rows=disabled max-scan-range-rows=1.92M
+|  |     mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=0
+|  |     tuple-ids=3 row-size=39B cardinality=181.75K
+|  |     in pipelines: 03(GETNEXT)
 |  |
-|  05:SCAN HDFS [tpcds_parquet.customer_address, RANDOM]
-|     HDFS partitions=1/1 files=1 size=1.16MB
-|     predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
-|     runtime filters: RF010[bloom] -> ca_address_sk
+|  18:EXCHANGE [HASH(ws_item_sk,ws_order_number)]
+|  |  mem-estimate=1.31MB mem-reservation=0B thread-reservation=0
+|  |  tuple-ids=0 row-size=36B cardinality=71.94K
+|  |  in pipelines: 00(GETNEXT)
+|  |
+|  F01:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
+|  Per-Host Shared Resources: mem-estimate=4.00MB mem-reservation=4.00MB thread-reservation=0 runtime-filters-memory=4.00MB
+|  Per-Instance Resources: mem-estimate=32.00MB mem-reservation=16.00MB thread-reservation=1
+|  00:SCAN HDFS [tpcds_parquet.web_sales, RANDOM]
+|     HDFS partitions=1/1 files=2 size=45.09MB
+|     predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
+|     runtime filters: RF008[bloom] -> ws_web_page_sk, RF012[bloom] -> ws_sold_date_sk, RF014[bloom] -> ws_item_sk, RF015[bloom] -> ws_order_number
 |     stored statistics:
-|       table: rows=50.00K size=1.16MB
+|       table: rows=719.38K size=45.09MB
 |       columns: all
-|     extrapolated-rows=disabled max-scan-range-rows=50.00K
-|     parquet statistics predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
-|     parquet dictionary predicates: ca_state IN ('IN', 'OH', 'NJ', 'WI', 'CT', 'KY', 'LA', 'IA', 'AR'), ca_country = 'United States'
-|     mem-estimate=16.00MB mem-reservation=256.00KB thread-reservation=0
-|     tuple-ids=5 row-size=43B cardinality=8.82K
-|     in pipelines: 05(GETNEXT)
+|     extrapolated-rows=disabled max-scan-range-rows=644.77K
+|     parquet dictionary predicates: ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit <= CAST(200 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit <= CAST(300 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit <= CAST(250 AS DECIMAL(5,0)), ws_net_profit >= CAST(100 AS DECIMAL(3,0)) OR ws_net_profit >= CAST(150 AS DECIMAL(5,0)) OR ws_net_profit >= CAST(50 AS DECIMAL(3,0)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price <= CAST(150.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price <= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price <= CAST(200.00 AS DECIMAL(5,2)), ws_sales_price >= CAST(100.00 AS DECIMAL(5,2)) OR ws_sales_price >= CAST(50.00 AS DECIMAL(4,2)) OR ws_sales_price >= CAST(150.00 AS DECIMAL(5,2))
+|     mem-estimate=32.00MB mem-reservation=16.00MB thread-reservation=0
+|     tuple-ids=0 row-size=36B cardinality=71.94K
+|     in pipelines: 00(GETNEXT)
 |
 04:SCAN HDFS [tpcds_parquet.customer_demographics cd2, RANDOM]
    HDFS partitions=1/1 files=1 size=7.49MB
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q87.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q87.test
index 4a2c958..8ba01f8 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q87.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q87.test
@@ -214,10 +214,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -517,10 +517,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> store_sales.ss_customer_sk, RF002[bloom] -> store_sales.ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q88.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q88.test
index e92f2ac..cc88f64 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q88.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q88.test
@@ -169,10 +169,10 @@
 |  |     in pipelines: 58(GETNEXT)
 |  |
 |  56:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF046[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -251,10 +251,10 @@
 |  |     in pipelines: 50(GETNEXT)
 |  |
 |  48:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF040[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -333,10 +333,10 @@
 |  |     in pipelines: 42(GETNEXT)
 |  |
 |  40:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF034[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -415,10 +415,10 @@
 |  |     in pipelines: 34(GETNEXT)
 |  |
 |  32:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF028[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -497,10 +497,10 @@
 |  |     in pipelines: 26(GETNEXT)
 |  |
 |  24:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF022[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -579,10 +579,10 @@
 |  |     in pipelines: 18(GETNEXT)
 |  |
 |  16:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -662,10 +662,10 @@
 |  |     in pipelines: 10(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF010[bloom] -> ss_sold_time_sk, RF008[bloom] -> ss_hdemo_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -740,10 +740,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> ss_sold_time_sk, RF002[bloom] -> ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -871,10 +871,10 @@
 |  |     in pipelines: 58(GETNEXT)
 |  |
 |  56:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF046[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -994,10 +994,10 @@
 |  |     in pipelines: 50(GETNEXT)
 |  |
 |  48:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF040[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1117,10 +1117,10 @@
 |  |     in pipelines: 42(GETNEXT)
 |  |
 |  40:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF034[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1240,10 +1240,10 @@
 |  |     in pipelines: 34(GETNEXT)
 |  |
 |  32:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF028[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1363,10 +1363,10 @@
 |  |     in pipelines: 26(GETNEXT)
 |  |
 |  24:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF022[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1486,10 +1486,10 @@
 |  |     in pipelines: 18(GETNEXT)
 |  |
 |  16:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1610,10 +1610,10 @@
 |  |     in pipelines: 10(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF010[bloom] -> ss_sold_time_sk, RF008[bloom] -> ss_hdemo_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1722,10 +1722,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> ss_sold_time_sk, RF002[bloom] -> ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -1885,10 +1885,10 @@
 |  |     in pipelines: 58(GETNEXT)
 |  |
 |  56:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF046[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2040,10 +2040,10 @@
 |  |     in pipelines: 50(GETNEXT)
 |  |
 |  48:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF040[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2195,10 +2195,10 @@
 |  |     in pipelines: 42(GETNEXT)
 |  |
 |  40:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF034[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2350,10 +2350,10 @@
 |  |     in pipelines: 34(GETNEXT)
 |  |
 |  32:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF028[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2505,10 +2505,10 @@
 |  |     in pipelines: 26(GETNEXT)
 |  |
 |  24:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF022[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2660,10 +2660,10 @@
 |  |     in pipelines: 18(GETNEXT)
 |  |
 |  16:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF016[bloom] -> ss_sold_time_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2816,10 +2816,10 @@
 |  |     in pipelines: 10(GETNEXT)
 |  |
 |  08:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-|     HDFS partitions=1824/1824 files=1824 size=201.02MB
+|     HDFS partitions=1824/1824 files=1824 size=200.95MB
 |     runtime filters: RF010[bloom] -> ss_sold_time_sk, RF008[bloom] -> ss_hdemo_sk
 |     stored statistics:
-|       table: rows=2.88M size=201.02MB
+|       table: rows=2.88M size=200.95MB
 |       partitions: 1824/1824 rows=2.88M
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -2953,10 +2953,10 @@
 |     in pipelines: 02(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF004[bloom] -> ss_sold_time_sk, RF002[bloom] -> ss_hdemo_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q89.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q89.test
index 7518b1c..76214c6 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q89.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q89.test
@@ -124,10 +124,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -278,10 +278,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -457,10 +457,10 @@
 |     in pipelines: 00(GETNEXT)
 |
 01:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_store_sk, RF002[bloom] -> ss_sold_date_sk, RF004[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q93.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q93.test
index 575a201..c51f8b1 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q93.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q93.test
@@ -81,9 +81,9 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -189,9 +189,9 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -314,9 +314,9 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q96.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q96.test
index 6eaa2cf..e52fd7a 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q96.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q96.test
@@ -92,10 +92,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales ss]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss.ss_store_sk, RF002[bloom] -> ss.ss_hdemo_sk, RF004[bloom] -> ss.ss_sold_time_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -215,10 +215,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales ss, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss.ss_store_sk, RF002[bloom] -> ss.ss_hdemo_sk, RF004[bloom] -> ss.ss_sold_time_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -363,10 +363,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales ss, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss.ss_store_sk, RF002[bloom] -> ss.ss_hdemo_sk, RF004[bloom] -> ss.ss_sold_time_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q97.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q97.test
index 7408ff8..5d1ac58 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q97.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q97.test
@@ -123,10 +123,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -275,10 +275,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -453,10 +453,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q98.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q98.test
index 4caa0ed..914b760 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q98.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpcds/tpcds-q98.test
@@ -106,10 +106,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -230,10 +230,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
@@ -371,10 +371,10 @@
 |     in pipelines: 01(GETNEXT)
 |
 00:SCAN HDFS [tpcds_parquet.store_sales, RANDOM]
-   HDFS partitions=1824/1824 files=1824 size=201.02MB
+   HDFS partitions=1824/1824 files=1824 size=200.95MB
    runtime filters: RF000[bloom] -> ss_sold_date_sk, RF002[bloom] -> ss_item_sk
    stored statistics:
-     table: rows=2.88M size=201.02MB
+     table: rows=2.88M size=200.95MB
      partitions: 1824/1824 rows=2.88M
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=130.09K
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpch-all.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpch-all.test
index 38741ef..53dda28 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpch-all.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpch-all.test
@@ -807,8 +807,8 @@
    runtime filters: RF000 -> l_orderkey
    row-size=52B cardinality=600.12K
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=46.69MB Threads=7
-Per-Host Resource Estimates: Memory=317MB
+Max Per-Host Resource Reservation: Memory=64.62MB Threads=10
+Per-Host Resource Estimates: Memory=365MB
 PLAN-ROOT SINK
 |
 09:MERGING-EXCHANGE [UNPARTITIONED]
@@ -2830,8 +2830,8 @@
    runtime filters: RF000 -> o_orderkey
    row-size=28B cardinality=1.50M
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=67.94MB Threads=7
-Per-Host Resource Estimates: Memory=528MB
+Max Per-Host Resource Reservation: Memory=50.94MB Threads=7
+Per-Host Resource Estimates: Memory=511MB
 PLAN-ROOT SINK
 |
 09:MERGING-EXCHANGE [UNPARTITIONED]
@@ -2872,8 +2872,8 @@
    runtime filters: RF000 -> l_orderkey
    row-size=90B cardinality=320.78K
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=75.94MB Threads=7
-Per-Host Resource Estimates: Memory=352MB
+Max Per-Host Resource Reservation: Memory=75.88MB Threads=10
+Per-Host Resource Estimates: Memory=388MB
 PLAN-ROOT SINK
 |
 09:MERGING-EXCHANGE [UNPARTITIONED]
@@ -3333,8 +3333,8 @@
    runtime filters: RF000 -> tpch.lineitem.l_suppkey
    row-size=46B cardinality=600.12K
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=67.62MB Threads=12
-Per-Host Resource Estimates: Memory=489MB
+Max Per-Host Resource Reservation: Memory=84.50MB Threads=14
+Per-Host Resource Estimates: Memory=515MB
 PLAN-ROOT SINK
 |
 17:MERGING-EXCHANGE [UNPARTITIONED]
@@ -4287,8 +4287,8 @@
    runtime filters: RF000 -> tpch.lineitem.l_suppkey, RF002 -> tpch.lineitem.l_partkey, RF003 -> tpch.lineitem.l_suppkey
    row-size=46B cardinality=600.12K
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=111.57MB Threads=13
-Per-Host Resource Estimates: Memory=679MB
+Max Per-Host Resource Reservation: Memory=93.63MB Threads=13
+Per-Host Resource Estimates: Memory=661MB
 PLAN-ROOT SINK
 |
 20:MERGING-EXCHANGE [UNPARTITIONED]
@@ -4375,8 +4375,8 @@
    runtime filters: RF000 -> tpch.lineitem.l_suppkey, RF002 -> tpch.lineitem.l_partkey, RF003 -> tpch.lineitem.l_suppkey
    row-size=46B cardinality=600.12K
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=127.38MB Threads=13
-Per-Host Resource Estimates: Memory=449MB
+Max Per-Host Resource Reservation: Memory=115.38MB Threads=15
+Per-Host Resource Estimates: Memory=455MB
 PLAN-ROOT SINK
 |
 20:MERGING-EXCHANGE [UNPARTITIONED]
@@ -4879,7 +4879,7 @@
    row-size=8B cardinality=1.50M
 ---- DISTRIBUTEDPLAN
 Max Per-Host Resource Reservation: Memory=45.81MB Threads=10
-Per-Host Resource Estimates: Memory=380MB
+Per-Host Resource Estimates: Memory=379MB
 PLAN-ROOT SINK
 |
 17:MERGING-EXCHANGE [UNPARTITIONED]
@@ -4948,7 +4948,7 @@
    row-size=8B cardinality=1.50M
 ---- PARALLELPLANS
 Max Per-Host Resource Reservation: Memory=45.81MB Threads=9
-Per-Host Resource Estimates: Memory=228MB
+Per-Host Resource Estimates: Memory=227MB
 PLAN-ROOT SINK
 |
 17:MERGING-EXCHANGE [UNPARTITIONED]
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/tpch-nested.test b/testdata/workloads/functional-planner/queries/PlannerTest/tpch-nested.test
index 7deee3b..f2e2ad8 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/tpch-nested.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/tpch-nested.test
@@ -36,7 +36,7 @@
 |  row-size=120B cardinality=1.50M
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate <= '1998-09-02'
    row-size=68B cardinality=1.50M
 ---- DISTRIBUTEDPLAN
@@ -64,7 +64,7 @@
 |  row-size=120B cardinality=1.50M
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate <= '1998-09-02'
    row-size=68B cardinality=1.50M
 ====
@@ -408,7 +408,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: c_mktsegment = 'BUILDING', !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate < '1995-03-15'
    predicates on l: l_shipdate > '1995-03-15'
@@ -463,7 +463,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: c_mktsegment = 'BUILDING', !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate < '1995-03-15'
    predicates on l: l_shipdate > '1995-03-15'
@@ -532,7 +532,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: o_orderdate >= '1993-07-01', o_orderdate < '1993-10-01'
    predicates on o_lineitems: l_commitdate < l_receiptdate
@@ -587,7 +587,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: o_orderdate >= '1993-07-01', o_orderdate < '1993-10-01'
    predicates on o_lineitems: l_commitdate < l_receiptdate
@@ -686,7 +686,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate >= '1994-01-01', o_orderdate < '1995-01-01'
    runtime filters: RF000 -> c_nationkey, RF004 -> c.c_nationkey
@@ -775,7 +775,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate >= '1994-01-01', o_orderdate < '1995-01-01'
    runtime filters: RF000 -> c_nationkey, RF004 -> c.c_nationkey
@@ -802,7 +802,7 @@
 |  row-size=16B cardinality=1
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_discount <= 0.07, l_discount >= 0.05, l_quantity < 24, l_shipdate < '1995-01-01', l_shipdate >= '1994-01-01'
    row-size=36B cardinality=1.50M
 ---- DISTRIBUTEDPLAN
@@ -821,7 +821,7 @@
 |  row-size=16B cardinality=1
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_discount <= 0.07, l_discount >= 0.05, l_quantity < 24, l_shipdate < '1995-01-01', l_shipdate >= '1994-01-01'
    row-size=36B cardinality=1.50M
 ====
@@ -932,7 +932,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems)
    predicates on l: l_shipdate >= '1995-01-01', l_shipdate <= '1996-12-31'
@@ -1023,7 +1023,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems)
    predicates on l: l_shipdate >= '1995-01-01', l_shipdate <= '1996-12-31'
@@ -1154,7 +1154,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate >= '1995-01-01', o_orderdate <= '1996-12-31'
    runtime filters: RF002 -> c_nationkey
@@ -1265,7 +1265,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate >= '1995-01-01', o_orderdate <= '1996-12-31'
    runtime filters: RF002 -> c_nationkey
@@ -1369,7 +1369,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders o]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(o.o_lineitems)
    row-size=24B cardinality=1.50M
 ---- DISTRIBUTEDPLAN
@@ -1455,7 +1455,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders o]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(o.o_lineitems)
    row-size=24B cardinality=1.50M
 ====
@@ -1540,7 +1540,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate >= '1993-10-01', o_orderdate < '1994-01-01'
    predicates on l: l_returnflag = 'R'
@@ -1607,7 +1607,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderdate >= '1993-10-01', o_orderdate < '1994-01-01'
    predicates on l: l_returnflag = 'R'
@@ -1880,7 +1880,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders o]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(o.o_lineitems)
    predicates on l: l_shipmode IN ('MAIL', 'SHIP'), l_commitdate < l_receiptdate, l_shipdate < l_commitdate, l_receiptdate >= '1994-01-01', l_receiptdate < '1995-01-01'
    row-size=24B cardinality=1.50M
@@ -1921,7 +1921,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders o]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(o.o_lineitems)
    predicates on l: l_shipmode IN ('MAIL', 'SHIP'), l_commitdate < l_receiptdate, l_shipdate < l_commitdate, l_receiptdate >= '1994-01-01', l_receiptdate < '1995-01-01'
    row-size=24B cardinality=1.50M
@@ -1979,7 +1979,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates on c_orders: (NOT o_comment LIKE '%special%requests%')
    row-size=20B cardinality=150.00K
 ---- DISTRIBUTEDPLAN
@@ -2031,7 +2031,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates on c_orders: (NOT o_comment LIKE '%special%requests%')
    row-size=20B cardinality=150.00K
 ====
@@ -2069,7 +2069,7 @@
 |     row-size=41B cardinality=200.00K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate < '1995-10-01', l_shipdate >= '1995-09-01'
    runtime filters: RF000 -> l_partkey
    row-size=36B cardinality=1.50M
@@ -2100,7 +2100,7 @@
 |     row-size=41B cardinality=200.00K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate < '1995-10-01', l_shipdate >= '1995-09-01'
    runtime filters: RF000 -> l_partkey
    row-size=36B cardinality=1.50M
@@ -2160,7 +2160,7 @@
 |  |  row-size=24B cardinality=1.50M
 |  |
 |  03:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-|     HDFS partitions=1/1 files=4 size=289.08MB
+|     HDFS partitions=1/1 files=4 size=289.02MB
 |     predicates: l_shipdate < '1996-04-01', l_shipdate >= '1996-01-01'
 |     row-size=36B cardinality=1.50M
 |
@@ -2179,7 +2179,7 @@
 |  row-size=24B cardinality=1.50M
 |
 01:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate < '1996-04-01', l_shipdate >= '1996-01-01'
    runtime filters: RF000 -> l.l_suppkey
    row-size=36B cardinality=1.50M
@@ -2224,7 +2224,7 @@
 |  |  row-size=24B cardinality=1.50M
 |  |
 |  03:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-|     HDFS partitions=1/1 files=4 size=289.08MB
+|     HDFS partitions=1/1 files=4 size=289.02MB
 |     predicates: l_shipdate < '1996-04-01', l_shipdate >= '1996-01-01'
 |     row-size=36B cardinality=1.50M
 |
@@ -2252,7 +2252,7 @@
 |  row-size=24B cardinality=1.50M
 |
 01:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate < '1996-04-01', l_shipdate >= '1996-01-01'
    runtime filters: RF000 -> l.l_suppkey
    row-size=36B cardinality=1.50M
@@ -2428,7 +2428,7 @@
 |  |  row-size=16B cardinality=15.00M
 |  |
 |  02:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-|     HDFS partitions=1/1 files=4 size=289.08MB
+|     HDFS partitions=1/1 files=4 size=289.02MB
 |     row-size=16B cardinality=15.00M
 |
 04:HASH JOIN [INNER JOIN]
@@ -2443,7 +2443,7 @@
 |     row-size=48B cardinality=1.00K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    runtime filters: RF000 -> l.l_partkey, RF002 -> l_partkey
    row-size=24B cardinality=15.00M
 ---- DISTRIBUTEDPLAN
@@ -2480,7 +2480,7 @@
 |  |  row-size=16B cardinality=15.00M
 |  |
 |  02:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-|     HDFS partitions=1/1 files=4 size=289.08MB
+|     HDFS partitions=1/1 files=4 size=289.02MB
 |     row-size=16B cardinality=15.00M
 |
 10:EXCHANGE [HASH(p_partkey)]
@@ -2499,7 +2499,7 @@
 |     row-size=48B cardinality=1.00K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    runtime filters: RF000 -> l.l_partkey, RF002 -> l_partkey
    row-size=24B cardinality=15.00M
 ====
@@ -2561,7 +2561,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    row-size=50B cardinality=150.00K
 ---- DISTRIBUTEDPLAN
@@ -2607,7 +2607,7 @@
 |     row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    row-size=50B cardinality=150.00K
 ====
@@ -2669,7 +2669,7 @@
 |     row-size=52B cardinality=1.43K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipmode IN ('AIR', 'AIR REG'), l_quantity <= 11 OR l_quantity <= 20 OR l_quantity <= 30, l_quantity <= 11 OR l_quantity <= 20 OR l_quantity >= 20, l_quantity <= 11 OR l_quantity >= 10 OR l_quantity <= 30, l_quantity <= 11 OR l_quantity >= 10 OR l_quantity >= 20, l_quantity >= 1 OR l_quantity <= 20 OR l_quantity <= 30, l_quantity >= 1 OR l_quantity <= 20 OR l_quantity >= 20, l_quantity >= 1 OR l_quantity >= 10 OR l_quantity <= 30, l_quantity >= 1 OR l_quantity >= 10 OR l_quantity >= 20, l_shipinstruct = 'DELIVER IN PERSON'
    runtime filters: RF000 -> l_partkey
    row-size=56B cardinality=1.50M
@@ -2702,7 +2702,7 @@
 |     row-size=52B cardinality=1.43K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipmode IN ('AIR', 'AIR REG'), l_quantity <= 11 OR l_quantity <= 20 OR l_quantity <= 30, l_quantity <= 11 OR l_quantity <= 20 OR l_quantity >= 20, l_quantity <= 11 OR l_quantity >= 10 OR l_quantity <= 30, l_quantity <= 11 OR l_quantity >= 10 OR l_quantity >= 20, l_quantity >= 1 OR l_quantity <= 20 OR l_quantity <= 30, l_quantity >= 1 OR l_quantity <= 20 OR l_quantity >= 20, l_quantity >= 1 OR l_quantity >= 10 OR l_quantity <= 30, l_quantity >= 1 OR l_quantity >= 10 OR l_quantity >= 20, l_shipinstruct = 'DELIVER IN PERSON'
    runtime filters: RF000 -> l_partkey
    row-size=56B cardinality=1.50M
@@ -2803,13 +2803,13 @@
 |  row-size=32B cardinality=1.50M
 |
 07:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate < '1995-01-01', l_shipdate >= '1994-01-01'
    runtime filters: RF000 -> l.l_partkey, RF001 -> l.l_suppkey
    row-size=36B cardinality=1.50M
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=164.33MB Threads=11
-Per-Host Resource Estimates: Memory=1.07GB
+Max Per-Host Resource Reservation: Memory=144.33MB Threads=11
+Per-Host Resource Estimates: Memory=1.05GB
 PLAN-ROOT SINK
 |
 21:MERGING-EXCHANGE [UNPARTITIONED]
@@ -2891,7 +2891,7 @@
 |  row-size=32B cardinality=1.50M
 |
 07:SCAN HDFS [tpch_nested_parquet.customer.c_orders.o_lineitems l]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: l_shipdate < '1995-01-01', l_shipdate >= '1994-01-01'
    runtime filters: RF000 -> l.l_partkey, RF001 -> l.l_suppkey
    row-size=36B cardinality=1.50M
@@ -3014,7 +3014,7 @@
 |     row-size=0B cardinality=10
 |
 01:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderstatus = 'F'
    predicates on l1: l1.l_receiptdate > l1.l_commitdate
@@ -3113,7 +3113,7 @@
 |     row-size=0B cardinality=10
 |
 01:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: !empty(c.c_orders)
    predicates on o: !empty(o.o_lineitems), o_orderstatus = 'F'
    predicates on l1: l1.l_receiptdate > l1.l_commitdate
@@ -3190,12 +3190,12 @@
 |  |  row-size=8B cardinality=1
 |  |
 |  01:SCAN HDFS [tpch_nested_parquet.customer c]
-|     HDFS partitions=1/1 files=4 size=289.08MB
+|     HDFS partitions=1/1 files=4 size=289.02MB
 |     predicates: c_acctbal > 0, substr(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')
 |     row-size=35B cardinality=15.00K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: substr(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')
    row-size=47B cardinality=15.00K
 ---- DISTRIBUTEDPLAN
@@ -3252,12 +3252,12 @@
 |  |  row-size=8B cardinality=1
 |  |
 |  01:SCAN HDFS [tpch_nested_parquet.customer c]
-|     HDFS partitions=1/1 files=4 size=289.08MB
+|     HDFS partitions=1/1 files=4 size=289.02MB
 |     predicates: c_acctbal > 0, substr(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')
 |     row-size=35B cardinality=15.00K
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
-   HDFS partitions=1/1 files=4 size=289.08MB
+   HDFS partitions=1/1 files=4 size=289.02MB
    predicates: substr(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')
    row-size=47B cardinality=15.00K
 ====