You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2025/12/31 02:36:12 UTC

(doris) branch master updated: [test](plan) update tpcds shape check (#59434)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5df1162d884 [test](plan) update tpcds shape check (#59434)
5df1162d884 is described below

commit 5df1162d8842d213ddcad62191f57a3024fa3e03
Author: morrySnow <zh...@selectdb.com>
AuthorDate: Wed Dec 31 10:36:05 2025 +0800

    [test](plan) update tpcds shape check (#59434)
    
    - remove colocate group
    - change tables' schema
---
 .../tpcds_sf100/noStatsRfPrune/query17.out         |   2 +-
 .../tpcds_sf100/noStatsRfPrune/query24.out         |   2 +-
 .../tpcds_sf100/noStatsRfPrune/query25.out         |   2 +-
 .../tpcds_sf100/noStatsRfPrune/query29.out         |   2 +-
 .../tpcds_sf100/noStatsRfPrune/query39.out         |  22 +-
 .../tpcds_sf100/noStatsRfPrune/query40.out         |   2 +-
 .../tpcds_sf100/noStatsRfPrune/query49.out         |   6 +-
 .../tpcds_sf100/noStatsRfPrune/query5.out          |  13 +-
 .../tpcds_sf100/noStatsRfPrune/query50.out         |   2 +-
 .../tpcds_sf100/noStatsRfPrune/query64.out         |   4 +-
 .../tpcds_sf100/noStatsRfPrune/query72.out         |   4 +-
 .../tpcds_sf100/noStatsRfPrune/query75.out         |   6 +-
 .../tpcds_sf100/noStatsRfPrune/query78.out         |   6 +-
 .../tpcds_sf100/noStatsRfPrune/query80.out         |   6 +-
 .../tpcds_sf100/noStatsRfPrune/query85.out         |   2 +-
 .../tpcds_sf100/noStatsRfPrune/query93.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query17.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query24.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query25.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query29.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query39.out         |  22 +-
 .../tpcds_sf100/no_stats_shape/query40.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query49.out         |   6 +-
 .../tpcds_sf100/no_stats_shape/query5.out          |  13 +-
 .../tpcds_sf100/no_stats_shape/query50.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query64.out         |   4 +-
 .../tpcds_sf100/no_stats_shape/query72.out         |   4 +-
 .../tpcds_sf100/no_stats_shape/query75.out         |   6 +-
 .../tpcds_sf100/no_stats_shape/query78.out         |   6 +-
 .../tpcds_sf100/no_stats_shape/query80.out         |   6 +-
 .../tpcds_sf100/no_stats_shape/query85.out         |   2 +-
 .../tpcds_sf100/no_stats_shape/query93.out         |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query14.out   |   4 +-
 .../shape_check/tpcds_sf100/rf_prune/query17.out   |   4 +-
 .../shape_check/tpcds_sf100/rf_prune/query18.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query24.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query25.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query29.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query35.out   |  44 +-
 .../shape_check/tpcds_sf100/rf_prune/query39.out   |  22 +-
 .../shape_check/tpcds_sf100/rf_prune/query40.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query49.out   |   6 +-
 .../shape_check/tpcds_sf100/rf_prune/query5.out    |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query50.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query54.out   |  36 +-
 .../shape_check/tpcds_sf100/rf_prune/query56.out   |  22 +-
 .../shape_check/tpcds_sf100/rf_prune/query60.out   |  44 +-
 .../shape_check/tpcds_sf100/rf_prune/query64.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query72.out   |   4 +-
 .../shape_check/tpcds_sf100/rf_prune/query75.out   |  99 ++--
 .../shape_check/tpcds_sf100/rf_prune/query78.out   |   6 +-
 .../shape_check/tpcds_sf100/rf_prune/query80.out   |   6 +-
 .../shape_check/tpcds_sf100/rf_prune/query85.out   |   2 +-
 .../shape_check/tpcds_sf100/rf_prune/query91.out   |  12 +-
 .../shape_check/tpcds_sf100/rf_prune/query93.out   |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query14.out |   4 +-
 .../data/shape_check/tpcds_sf100/shape/query17.out |   4 +-
 .../data/shape_check/tpcds_sf100/shape/query18.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query24.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query25.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query29.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query35.out |  42 +-
 .../data/shape_check/tpcds_sf100/shape/query39.out |  22 +-
 .../data/shape_check/tpcds_sf100/shape/query40.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query49.out |   6 +-
 .../data/shape_check/tpcds_sf100/shape/query5.out  |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query50.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query54.out |  36 +-
 .../data/shape_check/tpcds_sf100/shape/query56.out |  22 +-
 .../data/shape_check/tpcds_sf100/shape/query60.out |  44 +-
 .../data/shape_check/tpcds_sf100/shape/query64.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query72.out |   4 +-
 .../data/shape_check/tpcds_sf100/shape/query75.out |  99 ++--
 .../data/shape_check/tpcds_sf100/shape/query78.out |   6 +-
 .../data/shape_check/tpcds_sf100/shape/query80.out |   6 +-
 .../data/shape_check/tpcds_sf100/shape/query85.out |   2 +-
 .../data/shape_check/tpcds_sf100/shape/query91.out |  12 +-
 .../data/shape_check/tpcds_sf100/shape/query93.out |   2 +-
 .../tpcds_sf1000/bs_downgrade_shape/query54.out    |  36 +-
 .../data/shape_check/tpcds_sf1000/hint/query17.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query25.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query29.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query39.out |  22 +-
 .../data/shape_check/tpcds_sf1000/hint/query40.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query49.out |   6 +-
 .../data/shape_check/tpcds_sf1000/hint/query5.out  |  13 +-
 .../data/shape_check/tpcds_sf1000/hint/query50.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query54.out |  36 +-
 .../data/shape_check/tpcds_sf1000/hint/query64.out |   4 +-
 .../data/shape_check/tpcds_sf1000/hint/query69.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query72.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query75.out |  99 ++--
 .../data/shape_check/tpcds_sf1000/hint/query78.out |   6 +-
 .../data/shape_check/tpcds_sf1000/hint/query80.out |   6 +-
 .../data/shape_check/tpcds_sf1000/hint/query81.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query85.out |   2 +-
 .../data/shape_check/tpcds_sf1000/hint/query93.out |   2 +-
 .../shape_check/tpcds_sf1000/shape/query17.out     |   2 +-
 .../shape_check/tpcds_sf1000/shape/query24.out     |   2 +-
 .../shape_check/tpcds_sf1000/shape/query25.out     |   2 +-
 .../shape_check/tpcds_sf1000/shape/query29.out     |   2 +-
 .../shape_check/tpcds_sf1000/shape/query39.out     |  22 +-
 .../shape_check/tpcds_sf1000/shape/query40.out     |  14 +-
 .../shape_check/tpcds_sf1000/shape/query49.out     |   6 +-
 .../data/shape_check/tpcds_sf1000/shape/query5.out |  13 +-
 .../shape_check/tpcds_sf1000/shape/query50.out     |   2 +-
 .../shape_check/tpcds_sf1000/shape/query54.out     |  36 +-
 .../shape_check/tpcds_sf1000/shape/query64.out     |   4 +-
 .../shape_check/tpcds_sf1000/shape/query69.out     |   2 +-
 .../shape_check/tpcds_sf1000/shape/query72.out     |  30 +-
 .../shape_check/tpcds_sf1000/shape/query75.out     |  99 ++--
 .../shape_check/tpcds_sf1000/shape/query78.out     |  14 +-
 .../shape_check/tpcds_sf1000/shape/query80.out     |   6 +-
 .../shape_check/tpcds_sf1000/shape/query85.out     |   2 +-
 .../shape_check/tpcds_sf1000/shape/query93.out     |   2 +-
 .../suites/shape_check/tpcds_sf100/load.groovy     | 510 ++++++++++-----------
 .../suites/shape_check/tpcds_sf1000/load.groovy    | 501 ++++++++++----------
 117 files changed, 1141 insertions(+), 1200 deletions(-)

diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query17.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query17.out
index 2cb1cd6ed41..b417468c4e0 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query17.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query17.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF3 cs_bill_customer_sk->[sr_customer_sk,ss_customer_sk];RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 ----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 --------------------------------------------PhysicalProject
 ----------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF3 RF4 RF6
 --------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out
index 95e1d01aeae..05d4d4c3e8f 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out
@@ -15,7 +15,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ------------------------PhysicalProject
 --------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[store_sales] apply RFs: RF3 RF6
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query25.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query25.out
index 64bf6561b81..b7364ca004a 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query25.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query25.out
@@ -20,7 +20,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF3 cs_bill_customer_sk->[sr_customer_sk,ss_customer_sk];RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 --------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+----------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 ------------------------------------------PhysicalProject
 --------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF3 RF4 RF6
 ------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query29.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query29.out
index 6a7e2fc732d..a9fab35239e 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query29.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query29.out
@@ -20,7 +20,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF3 cs_bill_customer_sk->[sr_customer_sk,ss_customer_sk];RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 --------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+----------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 ------------------------------------------PhysicalProject
 --------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF3 RF4 RF6
 ------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query39.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query39.out
index 7f3fd870ff4..3545760ee50 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query39.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query39.out
@@ -5,22 +5,20 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ----PhysicalProject
 ------filter(( not (mean = 0.0)) and ((foo.stdev / foo.mean) > 1.0))
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[inv_date_sk]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[inv_date_sk]
+----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=()
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=()
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=()
+----------------------PhysicalOlapScan[inventory] apply RFs: RF2
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=()
---------------------------PhysicalOlapScan[inventory] apply RFs: RF2
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[warehouse]
+------------------------PhysicalOlapScan[item]
 ------------------PhysicalProject
---------------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
-----------------------PhysicalOlapScan[date_dim]
+--------------------PhysicalOlapScan[warehouse]
+--------------PhysicalProject
+----------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
+------------------PhysicalOlapScan[date_dim]
 --PhysicalResultSink
 ----PhysicalQuickSort[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query40.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query40.out
index 14654718173..5aee076d49a 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query40.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query40.out
@@ -14,7 +14,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=()
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+----------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF1 RF2
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out
index 5444fa73c97..3bd3679ea5a 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query49.out
@@ -30,7 +30,7 @@ PhysicalResultSink
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((ws.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ws_sold_date_sk]
 ----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF0 wr_order_number->[ws_order_number];RF1 wr_item_sk->[ws_item_sk]
+------------------------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF0 wr_order_number->[ws_order_number];RF1 wr_item_sk->[ws_item_sk]
 --------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------filter((ws.ws_net_paid > 0.00) and (ws.ws_net_profit > 1.00) and (ws.ws_quantity > 0))
 ------------------------------------------------------------------PhysicalOlapScan[web_sales(ws)] apply RFs: RF0 RF1 RF2
@@ -62,7 +62,7 @@ PhysicalResultSink
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[cs_sold_date_sk]
 ----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF3 cr_order_number->[cs_order_number];RF4 cr_item_sk->[cs_item_sk]
+------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF3 cr_order_number->[cs_order_number];RF4 cr_item_sk->[cs_item_sk]
 --------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------filter((cs.cs_net_paid > 0.00) and (cs.cs_net_profit > 1.00) and (cs.cs_quantity > 0))
 ------------------------------------------------------------------PhysicalOlapScan[catalog_sales(cs)] apply RFs: RF3 RF4 RF5
@@ -94,7 +94,7 @@ PhysicalResultSink
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((sts.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF8 d_date_sk->[ss_sold_date_sk]
 ----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF6 sr_ticket_number->[ss_ticket_number];RF7 sr_item_sk->[ss_item_sk]
+------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF6 sr_ticket_number->[ss_ticket_number];RF7 sr_item_sk->[ss_item_sk]
 --------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------filter((sts.ss_net_paid > 0.00) and (sts.ss_net_profit > 1.00) and (sts.ss_quantity > 0))
 ------------------------------------------------------------------PhysicalOlapScan[store_sales(sts)] apply RFs: RF6 RF7 RF8
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query5.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query5.out
index 8983f656899..695b99eef35 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query5.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query5.out
@@ -62,13 +62,12 @@ PhysicalResultSink
 --------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6
---------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
+--------------------------------------PhysicalProject
+----------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_date <= '2000-09-02') and (date_dim.d_date >= '2000-08-19'))
 ----------------------------------------PhysicalOlapScan[date_dim]
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query50.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query50.out
index e3e40cab6af..4909288c5f4 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query50.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query50.out
@@ -14,7 +14,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_store_sk = store.s_store_sk)) otherCondition=()
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_ticket_number->[ss_ticket_number];RF1 sr_item_sk->[ss_item_sk];RF2 sr_customer_sk->[ss_customer_sk]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_ticket_number->[ss_ticket_number];RF1 sr_item_sk->[ss_item_sk];RF2 sr_customer_sk->[ss_customer_sk]
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1 RF2
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query64.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query64.out
index 4b64f5149a4..d0fb71233dc 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query64.out
@@ -39,7 +39,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ------------------------------------------------------------------------PhysicalProject
 --------------------------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = cs_ui.cs_item_sk)) otherCondition=() build RFs:RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 ----------------------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+------------------------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 --------------------------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF8 RF19
 --------------------------------------------------------------------------------PhysicalProject
@@ -50,7 +50,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ----------------------------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------------------------------------------------------------------hashAgg[LOCAL]
 --------------------------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+----------------------------------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ------------------------------------------------------------------------------------------PhysicalProject
 --------------------------------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF19
 ------------------------------------------------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query72.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query72.out
index dd5198cb2d7..1e71bb2d91a 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query72.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query72.out
@@ -22,10 +22,10 @@ PhysicalResultSink
 --------------------------------------PhysicalProject
 ----------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((warehouse.w_warehouse_sk = inventory.inv_warehouse_sk)) otherCondition=()
 ------------------------------------------PhysicalProject
---------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity))
+--------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity))
 ----------------------------------------------PhysicalOlapScan[inventory] apply RFs: RF4
 ----------------------------------------------PhysicalProject
-------------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
+------------------------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
 --------------------------------------------------PhysicalProject
 ----------------------------------------------------hashJoin[LEFT_OUTER_JOIN broadcast] hashCondition=((catalog_sales.cs_promo_sk = promotion.p_promo_sk)) otherCondition=()
 ------------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query75.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query75.out
index 7a6c63c2385..9ae74d42171 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query75.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query75.out
@@ -16,7 +16,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+--------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
 ----------------------------------PhysicalProject
@@ -35,7 +35,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[ss_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+--------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2 RF3
 ----------------------------------PhysicalProject
@@ -54,7 +54,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ws_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
+--------------------------------hashJoin[LEFT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5
 ----------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query78.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query78.out
index a6034ca86ac..8904e8119f7 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query78.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query78.out
@@ -16,7 +16,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
 ----------------------------------PhysicalProject
@@ -31,7 +31,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN shuffle] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
 ----------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
+----------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query80.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query80.out
index 3f2cb3c7fce..e7517330625 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query80.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query80.out
@@ -23,7 +23,7 @@ PhysicalResultSink
 ----------------------------------------PhysicalProject
 ------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[ss_sold_date_sk]
 --------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+----------------------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 ------------------------------------------------PhysicalProject
 --------------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF2 RF3
 ------------------------------------------------PhysicalProject
@@ -52,7 +52,7 @@ PhysicalResultSink
 ----------------------------------------PhysicalProject
 ------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk)) otherCondition=()
 --------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+----------------------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ------------------------------------------------PhysicalProject
 --------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5 RF6 RF7
 ------------------------------------------------PhysicalProject
@@ -81,7 +81,7 @@ PhysicalResultSink
 ----------------------------------------PhysicalProject
 ------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF8 d_date_sk->[ws_sold_date_sk]
 --------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
+----------------------------------------------hashJoin[LEFT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
 ------------------------------------------------PhysicalProject
 --------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF10 RF11
 ------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query85.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query85.out
index 6a28590bf1e..3a62e85be1b 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query85.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query85.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk)) otherCondition=()
 ----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF0 ws_item_sk->[wr_item_sk];RF1 ws_order_number->[wr_order_number]
+------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF0 ws_item_sk->[wr_item_sk];RF1 ws_order_number->[wr_order_number]
 --------------------------------------------PhysicalProject
 ----------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF0 RF1 RF3 RF4 RF7
 --------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query93.out b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query93.out
index 77175ca96ff..713e1e07742 100644
--- a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query93.out
+++ b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query93.out
@@ -10,7 +10,7 @@ PhysicalResultSink
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_returns.sr_reason_sk = reason.r_reason_sk)) otherCondition=() build RFs:RF2 r_reason_sk->[sr_reason_sk]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF0 sr_item_sk->[ss_item_sk];RF1 sr_ticket_number->[ss_ticket_number]
+--------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF0 sr_item_sk->[ss_item_sk];RF1 sr_ticket_number->[ss_ticket_number]
 ----------------------PhysicalProject
 ------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1
 ----------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query17.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query17.out
index c599c71404d..ab60556add8 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query17.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query17.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF3 cs_bill_customer_sk->[sr_customer_sk,ss_customer_sk];RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 ----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_customer_sk->[ss_customer_sk];RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
+------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_customer_sk->[ss_customer_sk];RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
 --------------------------------------------PhysicalProject
 ----------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1 RF2 RF3 RF4 RF5 RF6 RF9
 --------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out
index 0a726e5efa9..127d6fdc0b2 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out
@@ -15,7 +15,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ------------------------PhysicalProject
 --------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[sr_item_sk,ss_item_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_ticket_number->[ss_ticket_number];RF1 sr_item_sk->[ss_item_sk]
+------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_ticket_number->[ss_ticket_number];RF1 sr_item_sk->[ss_item_sk]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1 RF2 RF3 RF6
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query25.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query25.out
index 0b34b0af789..d0b614050db 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query25.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query25.out
@@ -20,7 +20,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF3 cs_bill_customer_sk->[sr_customer_sk,ss_customer_sk];RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 --------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_customer_sk->[ss_customer_sk];RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
+----------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_customer_sk->[ss_customer_sk];RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
 ------------------------------------------PhysicalProject
 --------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1 RF2 RF3 RF4 RF5 RF6 RF9
 ------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query29.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query29.out
index 644e9640820..b88da052ab5 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query29.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query29.out
@@ -20,7 +20,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF3 cs_bill_customer_sk->[sr_customer_sk,ss_customer_sk];RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 --------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_customer_sk->[ss_customer_sk];RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
+----------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_customer_sk->[ss_customer_sk];RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
 ------------------------------------------PhysicalProject
 --------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1 RF2 RF3 RF4 RF5 RF6 RF9
 ------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query39.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query39.out
index 7e590db4e6d..faa3527f55a 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query39.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query39.out
@@ -5,22 +5,20 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ----PhysicalProject
 ------filter(( not (mean = 0.0)) and ((foo.stdev / foo.mean) > 1.0))
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[inv_date_sk]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[inv_date_sk]
+----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF1 w_warehouse_sk->[inv_warehouse_sk]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF1 w_warehouse_sk->[inv_warehouse_sk]
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[inv_item_sk]
+----------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[inv_item_sk]
---------------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[warehouse]
+------------------------PhysicalOlapScan[item]
 ------------------PhysicalProject
---------------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
-----------------------PhysicalOlapScan[date_dim]
+--------------------PhysicalOlapScan[warehouse]
+--------------PhysicalProject
+----------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
+------------------PhysicalOlapScan[date_dim]
 --PhysicalResultSink
 ----PhysicalQuickSort[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query40.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query40.out
index aae0d788557..0ce74535ba3 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query40.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query40.out
@@ -14,7 +14,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF0 w_warehouse_sk->[cs_warehouse_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+----------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF2
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out
index 5444fa73c97..3bd3679ea5a 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query49.out
@@ -30,7 +30,7 @@ PhysicalResultSink
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((ws.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ws_sold_date_sk]
 ----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF0 wr_order_number->[ws_order_number];RF1 wr_item_sk->[ws_item_sk]
+------------------------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF0 wr_order_number->[ws_order_number];RF1 wr_item_sk->[ws_item_sk]
 --------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------filter((ws.ws_net_paid > 0.00) and (ws.ws_net_profit > 1.00) and (ws.ws_quantity > 0))
 ------------------------------------------------------------------PhysicalOlapScan[web_sales(ws)] apply RFs: RF0 RF1 RF2
@@ -62,7 +62,7 @@ PhysicalResultSink
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[cs_sold_date_sk]
 ----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF3 cr_order_number->[cs_order_number];RF4 cr_item_sk->[cs_item_sk]
+------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF3 cr_order_number->[cs_order_number];RF4 cr_item_sk->[cs_item_sk]
 --------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------filter((cs.cs_net_paid > 0.00) and (cs.cs_net_profit > 1.00) and (cs.cs_quantity > 0))
 ------------------------------------------------------------------PhysicalOlapScan[catalog_sales(cs)] apply RFs: RF3 RF4 RF5
@@ -94,7 +94,7 @@ PhysicalResultSink
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((sts.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF8 d_date_sk->[ss_sold_date_sk]
 ----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF6 sr_ticket_number->[ss_ticket_number];RF7 sr_item_sk->[ss_item_sk]
+------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF6 sr_ticket_number->[ss_ticket_number];RF7 sr_item_sk->[ss_item_sk]
 --------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------filter((sts.ss_net_paid > 0.00) and (sts.ss_net_profit > 1.00) and (sts.ss_quantity > 0))
 ------------------------------------------------------------------PhysicalOlapScan[store_sales(sts)] apply RFs: RF6 RF7 RF8
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query5.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query5.out
index c353f9bb9ff..06f53170859 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query5.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query5.out
@@ -62,13 +62,12 @@ PhysicalResultSink
 --------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6 RF7
---------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5 RF7
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
+--------------------------------------PhysicalProject
+----------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5 RF7
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_date <= '2000-09-02') and (date_dim.d_date >= '2000-08-19'))
 ----------------------------------------PhysicalOlapScan[date_dim]
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query50.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query50.out
index 28bcc477078..28aa8e090d0 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query50.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query50.out
@@ -14,7 +14,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_store_sk = store.s_store_sk)) otherCondition=() build RFs:RF3 s_store_sk->[ss_store_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_ticket_number->[ss_ticket_number];RF1 sr_item_sk->[ss_item_sk];RF2 sr_customer_sk->[ss_customer_sk]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF0 sr_ticket_number->[ss_ticket_number];RF1 sr_item_sk->[ss_item_sk];RF2 sr_customer_sk->[ss_customer_sk]
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1 RF2 RF3 RF4
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query64.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query64.out
index 440f2f8cdc5..b46c4cb0b6d 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query64.out
@@ -39,7 +39,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ------------------------------------------------------------------------PhysicalProject
 --------------------------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = cs_ui.cs_item_sk)) otherCondition=() build RFs:RF4 cs_item_sk->[sr_item_sk,ss_item_sk]
 ----------------------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_item_sk->[ss_item_sk];RF3 sr_ticket_number->[ss_ticket_number]
+------------------------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_item_sk->[ss_item_sk];RF3 sr_ticket_number->[ss_ticket_number]
 --------------------------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2 RF3 RF4 RF5 RF8 RF9 RF10 RF12 RF13 RF15 RF19
 --------------------------------------------------------------------------------PhysicalProject
@@ -50,7 +50,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ----------------------------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------------------------------------------------------------------hashAgg[LOCAL]
 --------------------------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
+----------------------------------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
 ------------------------------------------------------------------------------------------PhysicalProject
 --------------------------------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF19
 ------------------------------------------------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query72.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query72.out
index 74e055d94e8..b919a9701c1 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query72.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query72.out
@@ -22,10 +22,10 @@ PhysicalResultSink
 --------------------------------------PhysicalProject
 ----------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((warehouse.w_warehouse_sk = inventory.inv_warehouse_sk)) otherCondition=() build RFs:RF1 w_warehouse_sk->[inv_warehouse_sk]
 ------------------------------------------PhysicalProject
---------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF0 cs_item_sk->[inv_item_sk]
+--------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF0 cs_item_sk->[inv_item_sk]
 ----------------------------------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2 RF4
 ----------------------------------------------PhysicalProject
-------------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
+------------------------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
 --------------------------------------------------PhysicalProject
 ----------------------------------------------------hashJoin[LEFT_OUTER_JOIN broadcast] hashCondition=((catalog_sales.cs_promo_sk = promotion.p_promo_sk)) otherCondition=()
 ------------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query75.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query75.out
index 7a6c63c2385..9ae74d42171 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query75.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query75.out
@@ -16,7 +16,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+--------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
 ----------------------------------PhysicalProject
@@ -35,7 +35,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[ss_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+--------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2 RF3
 ----------------------------------PhysicalProject
@@ -54,7 +54,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ws_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
+--------------------------------hashJoin[LEFT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5
 ----------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query78.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query78.out
index a6034ca86ac..8904e8119f7 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query78.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query78.out
@@ -16,7 +16,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
 ----------------------------------PhysicalProject
@@ -31,7 +31,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN shuffle] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
 ----------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
+----------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query80.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query80.out
index e980bad3f49..50a83dfe4d7 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query80.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query80.out
@@ -23,7 +23,7 @@ PhysicalResultSink
 ----------------------------------------PhysicalProject
 ------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[ss_sold_date_sk]
 --------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+----------------------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 ------------------------------------------------PhysicalProject
 --------------------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1 RF2 RF3
 ------------------------------------------------PhysicalProject
@@ -52,7 +52,7 @@ PhysicalResultSink
 ----------------------------------------PhysicalProject
 ------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk)) otherCondition=() build RFs:RF4 cp_catalog_page_sk->[cs_catalog_page_sk]
 --------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+----------------------------------------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ------------------------------------------------PhysicalProject
 --------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF4 RF5 RF6 RF7
 ------------------------------------------------PhysicalProject
@@ -81,7 +81,7 @@ PhysicalResultSink
 ----------------------------------------PhysicalProject
 ------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF8 d_date_sk->[ws_sold_date_sk]
 --------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[LEFT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
+----------------------------------------------hashJoin[LEFT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
 ------------------------------------------------PhysicalProject
 --------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9 RF10 RF11
 ------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query85.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query85.out
index fde67057518..5d3d86b5381 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query85.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query85.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk)) otherCondition=() build RFs:RF2 wp_web_page_sk->[ws_web_page_sk]
 ----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF0 ws_item_sk->[wr_item_sk];RF1 ws_order_number->[wr_order_number]
+------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF0 ws_item_sk->[wr_item_sk];RF1 ws_order_number->[wr_order_number]
 --------------------------------------------PhysicalProject
 ----------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF0 RF1 RF3 RF4 RF7 RF9
 --------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query93.out b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query93.out
index 77175ca96ff..713e1e07742 100644
--- a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query93.out
+++ b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query93.out
@@ -10,7 +10,7 @@ PhysicalResultSink
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_returns.sr_reason_sk = reason.r_reason_sk)) otherCondition=() build RFs:RF2 r_reason_sk->[sr_reason_sk]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF0 sr_item_sk->[ss_item_sk];RF1 sr_ticket_number->[ss_ticket_number]
+--------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF0 sr_item_sk->[ss_item_sk];RF1 sr_ticket_number->[ss_ticket_number]
 ----------------------PhysicalProject
 ------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 RF1
 ----------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query14.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query14.out
index 2295b9a8a9d..b63fb4c1788 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query14.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query14.out
@@ -108,8 +108,8 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------hashAgg[LOCAL]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=()
-----------------------------------------hashJoin[LEFT_SEMI_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = cross_items.ss_item_sk)) otherCondition=()
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=()
+----------------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = cross_items.ss_item_sk)) otherCondition=()
 ------------------------------------------PhysicalProject
 --------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF13 d_date_sk->[cs_sold_date_sk]
 ----------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query17.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query17.out
index 9d260c97301..cd8c1a74171 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query17.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query17.out
@@ -9,7 +9,7 @@ PhysicalResultSink
 ------------PhysicalDistribute[DistributionSpecHash]
 --------------hashAgg[LOCAL]
 ----------------PhysicalProject
-------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF8 sr_customer_sk->[cs_bill_customer_sk];RF9 sr_item_sk->[cs_item_sk]
+------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF8 sr_customer_sk->[cs_bill_customer_sk];RF9 sr_item_sk->[cs_item_sk]
 --------------------PhysicalProject
 ----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = d3.d_date_sk)) otherCondition=() build RFs:RF7 d_date_sk->[cs_sold_date_sk]
 ------------------------PhysicalProject
@@ -22,7 +22,7 @@ PhysicalResultSink
 ------------------------PhysicalProject
 --------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=()
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query18.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query18.out
index 178c86ab50e..550a2c38d6e 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query18.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query18.out
@@ -29,7 +29,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[customer_demographics(cd2)] apply RFs: RF1
 ----------------------------------PhysicalProject
-------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF0 ca_address_sk->[c_current_addr_sk]
+------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF0 ca_address_sk->[c_current_addr_sk]
 --------------------------------------PhysicalProject
 ----------------------------------------filter(c_birth_month IN (1, 10, 2, 4, 7, 8))
 ------------------------------------------PhysicalOlapScan[customer] apply RFs: RF0
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out
index c8dac09f5d2..883fe69a43d 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out
@@ -7,7 +7,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------PhysicalDistribute[DistributionSpecHash]
 ----------hashAgg[LOCAL]
 ------------PhysicalProject
---------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
+--------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=()
 ----------------PhysicalProject
 ------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
 --------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query25.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query25.out
index 477eca33124..1cd28321fbe 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query25.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query25.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=()
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ----------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query29.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query29.out
index 850049c8ff7..f9c20bc3c15 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query29.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query29.out
@@ -18,7 +18,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+--------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 --------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query35.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query35.out
index 1e39cd24a47..aa5b1beeef1 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query35.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query35.out
@@ -10,33 +10,33 @@ PhysicalResultSink
 --------------hashAgg[LOCAL]
 ----------------PhysicalProject
 ------------------filter(OR[ifnull($c$1, FALSE),ifnull($c$2, FALSE)])
---------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk)) otherCondition=()
-----------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
-------------------------hashJoin[LEFT_SEMI_JOIN shuffle] hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk)) otherCondition=() build RFs:RF5 ss_customer_sk->[c_customer_sk]
+--------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk)) otherCondition=()
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk)) otherCondition=()
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk)) otherCondition=()
-------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=()
+----------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=()
+------------------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk)) otherCondition=() build RFs:RF3 ss_customer_sk->[c_customer_sk,ws_bill_customer_sk]
+--------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
 ----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[customer(c)] apply RFs: RF5
+------------------------------------PhysicalOlapScan[customer(c)] apply RFs: RF3
 ----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[customer_address(ca)]
+------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ws_sold_date_sk]
+--------------------------------------PhysicalProject
+----------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF2 RF3
+--------------------------------------PhysicalProject
+----------------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
+------------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF1
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
+----------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[customer_demographics]
+--------------------------------PhysicalOlapScan[customer_address(ca)]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
-------------------------------PhysicalProject
---------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
-----------------------------------PhysicalOlapScan[date_dim]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
-----------------------------PhysicalProject
-------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
---------------------------------PhysicalOlapScan[date_dim]
+----------------------------PhysicalOlapScan[customer_demographics]
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query39.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query39.out
index 157c57a9772..545d1d506f2 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query39.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query39.out
@@ -5,22 +5,20 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ----PhysicalProject
 ------filter(( not (mean = 0.0)) and ((foo.stdev / foo.mean) > 1.0))
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=()
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=()
+----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=()
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=()
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
+----------------------PhysicalOlapScan[inventory] apply RFs: RF0
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
---------------------------PhysicalOlapScan[inventory] apply RFs: RF0
---------------------------PhysicalProject
-----------------------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
-------------------------------PhysicalOlapScan[date_dim]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[item]
+------------------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
+--------------------------PhysicalOlapScan[date_dim]
 ------------------PhysicalProject
---------------------PhysicalOlapScan[warehouse]
+--------------------PhysicalOlapScan[item]
+--------------PhysicalProject
+----------------PhysicalOlapScan[warehouse]
 --PhysicalResultSink
 ----PhysicalQuickSort[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query40.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query40.out
index ade38048fb9..e2bb9f0aecf 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query40.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query40.out
@@ -10,7 +10,7 @@ PhysicalResultSink
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=()
 ------------------PhysicalProject
---------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
+--------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
 ----------------------PhysicalProject
 ------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
 ----------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out
index 423e1cf346f..dd5da5b7235 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query49.out
@@ -28,7 +28,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((wr.wr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[web_returns(wr)] apply RFs: RF1 RF2
@@ -60,7 +60,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((cr.cr_return_amount > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[catalog_returns(cr)] apply RFs: RF4 RF5
@@ -92,7 +92,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((sr.sr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[store_returns(sr)] apply RFs: RF7 RF8
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query5.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query5.out
index c198b22632c..b3caf7592cd 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query5.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query5.out
@@ -64,7 +64,7 @@ PhysicalResultSink
 ------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6
 --------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
+------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
 --------------------------------------------PhysicalProject
 ----------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5
 --------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query50.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query50.out
index 0b39425d1b4..05f6bb74928 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query50.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query50.out
@@ -12,7 +12,7 @@ PhysicalResultSink
 ------------------PhysicalProject
 --------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk)) otherCondition=()
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
+------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
 --------------------------PhysicalProject
 ----------------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2 RF3
 --------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query54.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query54.out
index ad8a262d794..dff6ea82501 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query54.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query54.out
@@ -26,29 +26,27 @@ PhysicalResultSink
 ------------------------------------------PhysicalOlapScan[customer_address] apply RFs: RF3 RF4 RF5
 ----------------------------------------PhysicalProject
 ------------------------------------------hashAgg[GLOBAL]
---------------------------------------------PhysicalDistribute[DistributionSpecHash]
-----------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
 ------------------------------------------------PhysicalProject
---------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
-----------------------------------------------------PhysicalProject
-------------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+--------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
 ----------------------------------------------------PhysicalProject
-------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
---------------------------------------------------------PhysicalProject
-----------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
-------------------------------------------------------------PhysicalUnion
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
+------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
+--------------------------------------------------------PhysicalUnion
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ------------------------------------------------------------PhysicalProject
---------------------------------------------------------------filter((item.i_category = 'Women') and (item.i_class = 'maternity'))
-----------------------------------------------------------------PhysicalOlapScan[item]
+--------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
 --------------------------------------------------------PhysicalProject
-----------------------------------------------------------filter((date_dim.d_moy = 5) and (date_dim.d_year = 1998))
-------------------------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------------------------------filter((item.i_category = 'Women') and (item.i_class = 'maternity'))
+------------------------------------------------------------PhysicalOlapScan[item]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------filter((date_dim.d_moy = 5) and (date_dim.d_year = 1998))
+--------------------------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[store]
 ----------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query56.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query56.out
index f6bec2a4d4d..5b7be746eba 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query56.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query56.out
@@ -13,7 +13,7 @@ PhysicalResultSink
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF3 ca_address_sk->[ss_addr_sk]
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF3 ca_address_sk->[ss_addr_sk]
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[ss_item_sk]
 --------------------------------PhysicalProject
@@ -37,16 +37,13 @@ PhysicalResultSink
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF7 cs_bill_addr_sk->[ca_address_sk]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -6.00))
---------------------------------PhysicalOlapScan[customer_address] apply RFs: RF7
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF7 ca_address_sk->[cs_bill_addr_sk]
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF6 i_item_sk->[cs_item_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[cs_sold_date_sk]
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5 RF6
+--------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5 RF6 RF7
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 2) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
@@ -56,21 +53,21 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------filter(i_color IN ('cyan', 'green', 'powder'))
 --------------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalProject
+------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------PhysicalOlapScan[customer_address]
 ----------------PhysicalProject
 ------------------hashAgg[GLOBAL]
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF11 ws_bill_addr_sk->[ca_address_sk]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -6.00))
---------------------------------PhysicalOlapScan[customer_address] apply RFs: RF11
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF11 ca_address_sk->[ws_bill_addr_sk]
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF10 i_item_sk->[ws_item_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF9 RF10
+--------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF9 RF10 RF11
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 2) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
@@ -80,4 +77,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------filter(i_color IN ('cyan', 'green', 'powder'))
 --------------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalProject
+------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------PhysicalOlapScan[customer_address]
 
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query60.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query60.out
index 4408176d2fb..2c2038cf390 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query60.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query60.out
@@ -37,9 +37,9 @@ PhysicalResultSink
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF7 ca_address_sk->[cs_bill_addr_sk]
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF7 i_item_sk->[cs_item_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF6 i_item_sk->[cs_item_sk]
+------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF6 ca_address_sk->[cs_bill_addr_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[cs_sold_date_sk]
 ------------------------------------PhysicalProject
@@ -47,23 +47,23 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 8) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
---------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF4 i_item_id->[i_item_id]
-----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[item] apply RFs: RF4
-----------------------------------PhysicalProject
-------------------------------------filter((item.i_category = 'Children'))
---------------------------------------PhysicalOlapScan[item]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -7.00))
---------------------------------PhysicalOlapScan[customer_address]
+--------------------------------PhysicalProject
+----------------------------------filter((customer_address.ca_gmt_offset = -7.00))
+------------------------------------PhysicalOlapScan[customer_address]
+----------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF4 i_item_id->[i_item_id]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[item] apply RFs: RF4
+------------------------------PhysicalProject
+--------------------------------filter((item.i_category = 'Children'))
+----------------------------------PhysicalOlapScan[item]
 ----------------PhysicalProject
 ------------------hashAgg[GLOBAL]
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF11 ca_address_sk->[ws_bill_addr_sk]
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF11 i_item_sk->[ws_item_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF10 i_item_sk->[ws_item_sk]
+------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF10 ca_address_sk->[ws_bill_addr_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
 ------------------------------------PhysicalProject
@@ -71,13 +71,13 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 8) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
---------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF8 i_item_id->[i_item_id]
-----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[item] apply RFs: RF8
-----------------------------------PhysicalProject
-------------------------------------filter((item.i_category = 'Children'))
---------------------------------------PhysicalOlapScan[item]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -7.00))
---------------------------------PhysicalOlapScan[customer_address]
+--------------------------------PhysicalProject
+----------------------------------filter((customer_address.ca_gmt_offset = -7.00))
+------------------------------------PhysicalOlapScan[customer_address]
+----------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF8 i_item_id->[i_item_id]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[item] apply RFs: RF8
+------------------------------PhysicalProject
+--------------------------------filter((item.i_category = 'Children'))
+----------------------------------PhysicalOlapScan[item]
 
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query64.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query64.out
index 1c68a5089d1..28df68528b5 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query64.out
@@ -66,7 +66,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ----------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------------------------------------------------hashAgg[LOCAL]
 --------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
+----------------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=()
 ------------------------------------------------------------------------PhysicalProject
 --------------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF8
 ------------------------------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query72.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query72.out
index 972612d05e0..d9bae0d5f9f 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query72.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query72.out
@@ -8,13 +8,13 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[LEFT_OUTER_JOIN broadcast] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
+----------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
 ------------------PhysicalProject
 --------------------hashJoin[LEFT_OUTER_JOIN broadcast] hashCondition=((catalog_sales.cs_promo_sk = promotion.p_promo_sk)) otherCondition=()
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((warehouse.w_warehouse_sk = inventory.inv_warehouse_sk)) otherCondition=()
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF6 d_date_sk->[inv_date_sk];RF7 cs_item_sk->[inv_item_sk]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF6 d_date_sk->[inv_date_sk];RF7 cs_item_sk->[inv_item_sk]
 ------------------------------PhysicalOlapScan[inventory] apply RFs: RF6 RF7
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_week_seq = d2.d_week_seq)) otherCondition=()
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query75.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query75.out
index 89334acaef5..3c86d7b6782 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query75.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query75.out
@@ -7,57 +7,54 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------PhysicalDistribute[DistributionSpecHash]
 ----------hashAgg[LOCAL]
 ------------PhysicalUnion
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Home'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (1998, 1999))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Home'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (1998, 1999))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Home'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (1998, 1999))
-----------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Home'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (1998, 1999))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Home'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (1998, 1999))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Home'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (1998, 1999))
+--------------------------PhysicalOlapScan[date_dim]
 --PhysicalResultSink
 ----PhysicalTopN[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query78.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query78.out
index a6034ca86ac..4e8eee0aa8f 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query78.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query78.out
@@ -16,7 +16,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
 ----------------------------------PhysicalProject
@@ -31,7 +31,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN broadcast] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
 ----------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
+----------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query80.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query80.out
index 5afd260e3e1..2fe776ea5a2 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query80.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query80.out
@@ -15,7 +15,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[store_returns] apply RFs: RF4 RF5
 --------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk)) otherCondition=()
 --------------------------------PhysicalProject
-----------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
+----------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF9 RF10
 ------------------------------------PhysicalProject
@@ -73,7 +73,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[web_returns] apply RFs: RF16 RF17
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query85.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query85.out
index 1d6abeb68b4..48664fc2882 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query85.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query85.out
@@ -25,7 +25,7 @@ PhysicalResultSink
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_address.ca_address_sk = web_returns.wr_refunded_addr_sk)) otherCondition=(OR[AND[ca_state IN ('DE', 'FL', 'TX'),(web_sales.ws_net_profit >= 100.00),(web_sales.ws_net_profit <= 200.00)],AND[ca_state IN ('ID', 'IN', 'ND'),(web_sales.ws_net_profit >= 150.00)],AND[ca_state IN ('IL', 'MT', 'OH'),(web_sales.ws_net_profit <= 250.00)]]) build RFs:RF3 ca_address_sk->[wr_refunded_addr_sk]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF1 RF2 RF3
 ----------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query91.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query91.out
index a780e5955cf..7266157a304 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query91.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query91.out
@@ -17,19 +17,19 @@ PhysicalResultSink
 ----------------------------PhysicalProject
 ------------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF3 RF4
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_address.ca_address_sk = customer.c_current_addr_sk)) otherCondition=() build RFs:RF2 c_current_addr_sk->[ca_address_sk]
+------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk)) otherCondition=() build RFs:RF2 c_current_cdemo_sk->[cd_demo_sk]
 --------------------------------PhysicalProject
-----------------------------------filter((customer_address.ca_gmt_offset = -6.00))
-------------------------------------PhysicalOlapScan[customer_address] apply RFs: RF2
+----------------------------------filter(OR[AND[(customer_demographics.cd_marital_status = 'M'),(customer_demographics.cd_education_status = 'Unknown')],AND[(customer_demographics.cd_marital_status = 'W'),(customer_demographics.cd_education_status = 'Advanced Degree')]] and cd_education_status IN ('Advanced Degree', 'Unknown') and cd_marital_status IN ('M', 'W'))
+------------------------------------PhysicalOlapScan[customer_demographics] apply RFs: RF2
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((household_demographics.hd_demo_sk = customer.c_current_hdemo_sk)) otherCondition=() build RFs:RF1 hd_demo_sk->[c_current_hdemo_sk]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk)) otherCondition=() build RFs:RF0 cd_demo_sk->[c_current_cdemo_sk]
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_address.ca_address_sk = customer.c_current_addr_sk)) otherCondition=() build RFs:RF0 ca_address_sk->[c_current_addr_sk]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[customer] apply RFs: RF0 RF1
 ----------------------------------------PhysicalProject
-------------------------------------------filter(OR[AND[(customer_demographics.cd_marital_status = 'M'),(customer_demographics.cd_education_status = 'Unknown')],AND[(customer_demographics.cd_marital_status = 'W'),(customer_demographics.cd_education_status = 'Advanced Degree')]] and cd_education_status IN ('Advanced Degree', 'Unknown') and cd_marital_status IN ('M', 'W'))
---------------------------------------------PhysicalOlapScan[customer_demographics]
+------------------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------------------PhysicalOlapScan[customer_address]
 ------------------------------------PhysicalProject
 --------------------------------------filter((hd_buy_potential like '1001-5000%'))
 ----------------------------------------PhysicalOlapScan[household_demographics]
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query93.out b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query93.out
index 45f02ddf38e..c5ea5c176ca 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query93.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query93.out
@@ -8,7 +8,7 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN colocated] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
+----------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
 ------------------PhysicalProject
 --------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2
 ------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query14.out b/regression-test/data/shape_check/tpcds_sf100/shape/query14.out
index 1db93e324dc..4583e0e2465 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query14.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query14.out
@@ -108,8 +108,8 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------hashAgg[LOCAL]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF15 i_item_sk->[cs_item_sk,ss_item_sk]
-----------------------------------------hashJoin[LEFT_SEMI_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = cross_items.ss_item_sk)) otherCondition=() build RFs:RF14 ss_item_sk->[cs_item_sk]
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF15 i_item_sk->[cs_item_sk,ss_item_sk]
+----------------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = cross_items.ss_item_sk)) otherCondition=() build RFs:RF14 ss_item_sk->[cs_item_sk]
 ------------------------------------------PhysicalProject
 --------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF13 d_date_sk->[cs_sold_date_sk]
 ----------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query17.out b/regression-test/data/shape_check/tpcds_sf100/shape/query17.out
index 8500161113d..eee9aaed2bf 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query17.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query17.out
@@ -9,7 +9,7 @@ PhysicalResultSink
 ------------PhysicalDistribute[DistributionSpecHash]
 --------------hashAgg[LOCAL]
 ----------------PhysicalProject
-------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF8 sr_customer_sk->[cs_bill_customer_sk];RF9 sr_item_sk->[cs_item_sk]
+------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) and (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF8 sr_customer_sk->[cs_bill_customer_sk];RF9 sr_item_sk->[cs_item_sk]
 --------------------PhysicalProject
 ----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = d3.d_date_sk)) otherCondition=() build RFs:RF7 d_date_sk->[cs_sold_date_sk]
 ------------------------PhysicalProject
@@ -22,7 +22,7 @@ PhysicalResultSink
 ------------------------PhysicalProject
 --------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF5 i_item_sk->[sr_item_sk,ss_item_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query18.out b/regression-test/data/shape_check/tpcds_sf100/shape/query18.out
index 178c86ab50e..550a2c38d6e 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query18.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query18.out
@@ -29,7 +29,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[customer_demographics(cd2)] apply RFs: RF1
 ----------------------------------PhysicalProject
-------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF0 ca_address_sk->[c_current_addr_sk]
+------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF0 ca_address_sk->[c_current_addr_sk]
 --------------------------------------PhysicalProject
 ----------------------------------------filter(c_birth_month IN (1, 10, 2, 4, 7, 8))
 ------------------------------------------PhysicalOlapScan[customer] apply RFs: RF0
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query24.out b/regression-test/data/shape_check/tpcds_sf100/shape/query24.out
index 8c90a2a2051..719ba11f16c 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query24.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query24.out
@@ -7,7 +7,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------PhysicalDistribute[DistributionSpecHash]
 ----------hashAgg[LOCAL]
 ------------PhysicalProject
---------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF5 sr_ticket_number->[ss_ticket_number];RF6 sr_item_sk->[i_item_sk,ss_item_sk]
+--------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF5 sr_ticket_number->[ss_ticket_number];RF6 sr_item_sk->[i_item_sk,ss_item_sk]
 ----------------PhysicalProject
 ------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
 --------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query25.out b/regression-test/data/shape_check/tpcds_sf100/shape/query25.out
index a6fa452b180..38da21a1c33 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query25.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query25.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF5 i_item_sk->[sr_item_sk,ss_item_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ----------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query29.out b/regression-test/data/shape_check/tpcds_sf100/shape/query29.out
index 3eb756f83de..676863c1828 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query29.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query29.out
@@ -18,7 +18,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF5 i_item_sk->[sr_item_sk,ss_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+--------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 --------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query35.out b/regression-test/data/shape_check/tpcds_sf100/shape/query35.out
index 787ca8a9fd3..fcecb53329b 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query35.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query35.out
@@ -10,33 +10,33 @@ PhysicalResultSink
 --------------hashAgg[LOCAL]
 ----------------PhysicalProject
 ------------------filter(OR[ifnull($c$1, FALSE),ifnull($c$2, FALSE)])
---------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk)) otherCondition=()
-----------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
-------------------------hashJoin[LEFT_SEMI_JOIN shuffle] hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk)) otherCondition=() build RFs:RF5 ss_customer_sk->[c_customer_sk]
+--------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk)) otherCondition=()
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk)) otherCondition=() build RFs:RF5 cd_demo_sk->[c_current_cdemo_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk)) otherCondition=() build RFs:RF4 cd_demo_sk->[c_current_cdemo_sk]
-------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=() build RFs:RF3 ca_address_sk->[c_current_addr_sk]
+----------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=() build RFs:RF4 ca_address_sk->[c_current_addr_sk]
+------------------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk)) otherCondition=() build RFs:RF3 ss_customer_sk->[c_customer_sk,ws_bill_customer_sk]
+--------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[customer(c)] apply RFs: RF3 RF4 RF5
 ----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[customer_address(ca)]
+------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ws_sold_date_sk]
+--------------------------------------PhysicalProject
+----------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF2 RF3
+--------------------------------------PhysicalProject
+----------------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
+------------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF1
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
+----------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[customer_demographics]
+--------------------------------PhysicalOlapScan[customer_address(ca)]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
-------------------------------PhysicalProject
---------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
-----------------------------------PhysicalOlapScan[date_dim]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
-----------------------------PhysicalProject
-------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year = 2001))
---------------------------------PhysicalOlapScan[date_dim]
+----------------------------PhysicalOlapScan[customer_demographics]
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query39.out b/regression-test/data/shape_check/tpcds_sf100/shape/query39.out
index f43f8407d82..1bb47a581fd 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query39.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query39.out
@@ -5,22 +5,20 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ----PhysicalProject
 ------filter(( not (mean = 0.0)) and ((foo.stdev / foo.mean) > 1.0))
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF2 w_warehouse_sk->[inv_warehouse_sk]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF2 w_warehouse_sk->[inv_warehouse_sk]
+----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF1 i_item_sk->[inv_item_sk]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF1 i_item_sk->[inv_item_sk]
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
+----------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
---------------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
---------------------------PhysicalProject
-----------------------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
-------------------------------PhysicalOlapScan[date_dim]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[item]
+------------------------filter((date_dim.d_year = 1998) and d_moy IN (1, 2))
+--------------------------PhysicalOlapScan[date_dim]
 ------------------PhysicalProject
---------------------PhysicalOlapScan[warehouse]
+--------------------PhysicalOlapScan[item]
+--------------PhysicalProject
+----------------PhysicalOlapScan[warehouse]
 --PhysicalResultSink
 ----PhysicalQuickSort[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query40.out b/regression-test/data/shape_check/tpcds_sf100/shape/query40.out
index 5ff27658e2e..0629760fb1d 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query40.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query40.out
@@ -10,7 +10,7 @@ PhysicalResultSink
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF4 w_warehouse_sk->[cs_warehouse_sk]
 ------------------PhysicalProject
---------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
+--------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
 ----------------------PhysicalProject
 ------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
 ----------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query49.out b/regression-test/data/shape_check/tpcds_sf100/shape/query49.out
index 423e1cf346f..dd5da5b7235 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query49.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query49.out
@@ -28,7 +28,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((wr.wr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[web_returns(wr)] apply RFs: RF1 RF2
@@ -60,7 +60,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((cr.cr_return_amount > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[catalog_returns(cr)] apply RFs: RF4 RF5
@@ -92,7 +92,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((sr.sr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[store_returns(sr)] apply RFs: RF7 RF8
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query5.out b/regression-test/data/shape_check/tpcds_sf100/shape/query5.out
index d61bb667b49..333a44b8d65 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query5.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query5.out
@@ -64,7 +64,7 @@ PhysicalResultSink
 ------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6 RF7
 --------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
+------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
 --------------------------------------------PhysicalProject
 ----------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5 RF7
 --------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query50.out b/regression-test/data/shape_check/tpcds_sf100/shape/query50.out
index 18be632aaa5..d391b632b30 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query50.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query50.out
@@ -12,7 +12,7 @@ PhysicalResultSink
 ------------------PhysicalProject
 --------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk)) otherCondition=() build RFs:RF4 d_date_sk->[ss_sold_date_sk]
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
+------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
 --------------------------PhysicalProject
 ----------------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2 RF3 RF4 RF5
 --------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query54.out b/regression-test/data/shape_check/tpcds_sf100/shape/query54.out
index ad8a262d794..dff6ea82501 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query54.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query54.out
@@ -26,29 +26,27 @@ PhysicalResultSink
 ------------------------------------------PhysicalOlapScan[customer_address] apply RFs: RF3 RF4 RF5
 ----------------------------------------PhysicalProject
 ------------------------------------------hashAgg[GLOBAL]
---------------------------------------------PhysicalDistribute[DistributionSpecHash]
-----------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
 ------------------------------------------------PhysicalProject
---------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
-----------------------------------------------------PhysicalProject
-------------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+--------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
 ----------------------------------------------------PhysicalProject
-------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
---------------------------------------------------------PhysicalProject
-----------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
-------------------------------------------------------------PhysicalUnion
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
+------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
+--------------------------------------------------------PhysicalUnion
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ------------------------------------------------------------PhysicalProject
---------------------------------------------------------------filter((item.i_category = 'Women') and (item.i_class = 'maternity'))
-----------------------------------------------------------------PhysicalOlapScan[item]
+--------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
 --------------------------------------------------------PhysicalProject
-----------------------------------------------------------filter((date_dim.d_moy = 5) and (date_dim.d_year = 1998))
-------------------------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------------------------------filter((item.i_category = 'Women') and (item.i_class = 'maternity'))
+------------------------------------------------------------PhysicalOlapScan[item]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------filter((date_dim.d_moy = 5) and (date_dim.d_year = 1998))
+--------------------------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[store]
 ----------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query56.out b/regression-test/data/shape_check/tpcds_sf100/shape/query56.out
index f6bec2a4d4d..5b7be746eba 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query56.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query56.out
@@ -13,7 +13,7 @@ PhysicalResultSink
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF3 ca_address_sk->[ss_addr_sk]
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF3 ca_address_sk->[ss_addr_sk]
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[ss_item_sk]
 --------------------------------PhysicalProject
@@ -37,16 +37,13 @@ PhysicalResultSink
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF7 cs_bill_addr_sk->[ca_address_sk]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -6.00))
---------------------------------PhysicalOlapScan[customer_address] apply RFs: RF7
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF7 ca_address_sk->[cs_bill_addr_sk]
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF6 i_item_sk->[cs_item_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[cs_sold_date_sk]
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5 RF6
+--------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5 RF6 RF7
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 2) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
@@ -56,21 +53,21 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------filter(i_color IN ('cyan', 'green', 'powder'))
 --------------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalProject
+------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------PhysicalOlapScan[customer_address]
 ----------------PhysicalProject
 ------------------hashAgg[GLOBAL]
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF11 ws_bill_addr_sk->[ca_address_sk]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -6.00))
---------------------------------PhysicalOlapScan[customer_address] apply RFs: RF11
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF11 ca_address_sk->[ws_bill_addr_sk]
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF10 i_item_sk->[ws_item_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF9 RF10
+--------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF9 RF10 RF11
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 2) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
@@ -80,4 +77,7 @@ PhysicalResultSink
 ----------------------------------PhysicalProject
 ------------------------------------filter(i_color IN ('cyan', 'green', 'powder'))
 --------------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalProject
+------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------PhysicalOlapScan[customer_address]
 
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query60.out b/regression-test/data/shape_check/tpcds_sf100/shape/query60.out
index 4408176d2fb..2c2038cf390 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query60.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query60.out
@@ -37,9 +37,9 @@ PhysicalResultSink
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF7 ca_address_sk->[cs_bill_addr_sk]
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF7 i_item_sk->[cs_item_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF6 i_item_sk->[cs_item_sk]
+------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF6 ca_address_sk->[cs_bill_addr_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[cs_sold_date_sk]
 ------------------------------------PhysicalProject
@@ -47,23 +47,23 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 8) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
---------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF4 i_item_id->[i_item_id]
-----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[item] apply RFs: RF4
-----------------------------------PhysicalProject
-------------------------------------filter((item.i_category = 'Children'))
---------------------------------------PhysicalOlapScan[item]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -7.00))
---------------------------------PhysicalOlapScan[customer_address]
+--------------------------------PhysicalProject
+----------------------------------filter((customer_address.ca_gmt_offset = -7.00))
+------------------------------------PhysicalOlapScan[customer_address]
+----------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF4 i_item_id->[i_item_id]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[item] apply RFs: RF4
+------------------------------PhysicalProject
+--------------------------------filter((item.i_category = 'Children'))
+----------------------------------PhysicalOlapScan[item]
 ----------------PhysicalProject
 ------------------hashAgg[GLOBAL]
 --------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF11 ca_address_sk->[ws_bill_addr_sk]
+--------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF11 i_item_sk->[ws_item_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF10 i_item_sk->[ws_item_sk]
+------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) otherCondition=() build RFs:RF10 ca_address_sk->[ws_bill_addr_sk]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
 ------------------------------------PhysicalProject
@@ -71,13 +71,13 @@ PhysicalResultSink
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_moy = 8) and (date_dim.d_year = 2000))
 ----------------------------------------PhysicalOlapScan[date_dim]
---------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF8 i_item_id->[i_item_id]
-----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[item] apply RFs: RF8
-----------------------------------PhysicalProject
-------------------------------------filter((item.i_category = 'Children'))
---------------------------------------PhysicalOlapScan[item]
-----------------------------PhysicalProject
-------------------------------filter((customer_address.ca_gmt_offset = -7.00))
---------------------------------PhysicalOlapScan[customer_address]
+--------------------------------PhysicalProject
+----------------------------------filter((customer_address.ca_gmt_offset = -7.00))
+------------------------------------PhysicalOlapScan[customer_address]
+----------------------------hashJoin[LEFT_SEMI_JOIN broadcast] hashCondition=((item.i_item_id = item.i_item_id)) otherCondition=() build RFs:RF8 i_item_id->[i_item_id]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[item] apply RFs: RF8
+------------------------------PhysicalProject
+--------------------------------filter((item.i_category = 'Children'))
+----------------------------------PhysicalOlapScan[item]
 
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query64.out b/regression-test/data/shape_check/tpcds_sf100/shape/query64.out
index fa33c2e2a82..9b91b5a6891 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query64.out
@@ -66,7 +66,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ----------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------------------------------------------------hashAgg[LOCAL]
 --------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
+----------------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
 ------------------------------------------------------------------------PhysicalProject
 --------------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF8
 ------------------------------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query72.out b/regression-test/data/shape_check/tpcds_sf100/shape/query72.out
index de210e70c05..cdeca0b5995 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query72.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query72.out
@@ -8,13 +8,13 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[LEFT_OUTER_JOIN broadcast] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
+----------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
 ------------------PhysicalProject
 --------------------hashJoin[LEFT_OUTER_JOIN broadcast] hashCondition=((catalog_sales.cs_promo_sk = promotion.p_promo_sk)) otherCondition=()
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((warehouse.w_warehouse_sk = inventory.inv_warehouse_sk)) otherCondition=() build RFs:RF8 w_warehouse_sk->[inv_warehouse_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF6 d_date_sk->[inv_date_sk];RF7 cs_item_sk->[inv_item_sk]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF6 d_date_sk->[inv_date_sk];RF7 cs_item_sk->[inv_item_sk]
 ------------------------------PhysicalOlapScan[inventory] apply RFs: RF6 RF7 RF8
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_week_seq = d2.d_week_seq)) otherCondition=() build RFs:RF5 d_week_seq->[d_week_seq]
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query75.out b/regression-test/data/shape_check/tpcds_sf100/shape/query75.out
index 89334acaef5..3c86d7b6782 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query75.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query75.out
@@ -7,57 +7,54 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------PhysicalDistribute[DistributionSpecHash]
 ----------hashAgg[LOCAL]
 ------------PhysicalUnion
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Home'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (1998, 1999))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Home'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (1998, 1999))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Home'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (1998, 1999))
-----------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Home'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (1998, 1999))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Home'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (1998, 1999))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Home'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (1998, 1999))
+--------------------------PhysicalOlapScan[date_dim]
 --PhysicalResultSink
 ----PhysicalTopN[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query78.out b/regression-test/data/shape_check/tpcds_sf100/shape/query78.out
index a6034ca86ac..4e8eee0aa8f 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query78.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query78.out
@@ -16,7 +16,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
 ----------------------------------PhysicalProject
@@ -31,7 +31,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN broadcast] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
 ----------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
+----------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query80.out b/regression-test/data/shape_check/tpcds_sf100/shape/query80.out
index b64c3639ecb..7cd025842ee 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query80.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query80.out
@@ -15,7 +15,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[store_returns] apply RFs: RF4 RF5
 --------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk)) otherCondition=() build RFs:RF11 cp_catalog_page_sk->[cs_catalog_page_sk]
 --------------------------------PhysicalProject
-----------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
+----------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF9 RF10
 ------------------------------------PhysicalProject
@@ -73,7 +73,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[web_returns] apply RFs: RF16 RF17
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query85.out b/regression-test/data/shape_check/tpcds_sf100/shape/query85.out
index ec90a2a41d8..af0dad84124 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query85.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query85.out
@@ -25,7 +25,7 @@ PhysicalResultSink
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_address.ca_address_sk = web_returns.wr_refunded_addr_sk)) otherCondition=(OR[AND[ca_state IN ('DE', 'FL', 'TX'),(web_sales.ws_net_profit >= 100.00),(web_sales.ws_net_profit <= 200.00)],AND[ca_state IN ('ID', 'IN', 'ND'),(web_sales.ws_net_profit >= 150.00)],AND[ca_state IN ('IL', 'MT', 'OH'),(web_sales.ws_net_profit <= 250.00)]]) build RFs:RF3 ca_address_sk->[wr_refunded_addr_sk]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF1 RF2 RF3 RF8
 ----------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query91.out b/regression-test/data/shape_check/tpcds_sf100/shape/query91.out
index 6caabb13af2..55b198b8831 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query91.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query91.out
@@ -17,19 +17,19 @@ PhysicalResultSink
 ----------------------------PhysicalProject
 ------------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF3 RF4 RF5
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((customer_address.ca_address_sk = customer.c_current_addr_sk)) otherCondition=() build RFs:RF2 c_current_addr_sk->[ca_address_sk]
+------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk)) otherCondition=() build RFs:RF2 c_current_cdemo_sk->[cd_demo_sk]
 --------------------------------PhysicalProject
-----------------------------------filter((customer_address.ca_gmt_offset = -6.00))
-------------------------------------PhysicalOlapScan[customer_address] apply RFs: RF2
+----------------------------------filter(OR[AND[(customer_demographics.cd_marital_status = 'M'),(customer_demographics.cd_education_status = 'Unknown')],AND[(customer_demographics.cd_marital_status = 'W'),(customer_demographics.cd_education_status = 'Advanced Degree')]] and cd_education_status IN ('Advanced Degree', 'Unknown') and cd_marital_status IN ('M', 'W'))
+------------------------------------PhysicalOlapScan[customer_demographics] apply RFs: RF2
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((household_demographics.hd_demo_sk = customer.c_current_hdemo_sk)) otherCondition=() build RFs:RF1 hd_demo_sk->[c_current_hdemo_sk]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk)) otherCondition=() build RFs:RF0 cd_demo_sk->[c_current_cdemo_sk]
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_address.ca_address_sk = customer.c_current_addr_sk)) otherCondition=() build RFs:RF0 ca_address_sk->[c_current_addr_sk]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[customer] apply RFs: RF0 RF1
 ----------------------------------------PhysicalProject
-------------------------------------------filter(OR[AND[(customer_demographics.cd_marital_status = 'M'),(customer_demographics.cd_education_status = 'Unknown')],AND[(customer_demographics.cd_marital_status = 'W'),(customer_demographics.cd_education_status = 'Advanced Degree')]] and cd_education_status IN ('Advanced Degree', 'Unknown') and cd_marital_status IN ('M', 'W'))
---------------------------------------------PhysicalOlapScan[customer_demographics]
+------------------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------------------PhysicalOlapScan[customer_address]
 ------------------------------------PhysicalProject
 --------------------------------------filter((hd_buy_potential like '1001-5000%'))
 ----------------------------------------PhysicalOlapScan[household_demographics]
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query93.out b/regression-test/data/shape_check/tpcds_sf100/shape/query93.out
index 45f02ddf38e..c5ea5c176ca 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query93.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query93.out
@@ -8,7 +8,7 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN colocated] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
+----------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
 ------------------PhysicalProject
 --------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2
 ------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query54.out b/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query54.out
index b7c2fe2adcd..52d8d8daa44 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query54.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query54.out
@@ -26,29 +26,27 @@ PhysicalResultSink
 ------------------------------------------PhysicalOlapScan[customer_address] apply RFs: RF3 RF4 RF5
 ----------------------------------------PhysicalProject
 ------------------------------------------hashAgg[GLOBAL]
---------------------------------------------PhysicalDistribute[DistributionSpecHash]
-----------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
 ------------------------------------------------PhysicalProject
---------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
-----------------------------------------------------PhysicalProject
-------------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+--------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
 ----------------------------------------------------PhysicalProject
-------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
---------------------------------------------------------PhysicalProject
-----------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
-------------------------------------------------------------PhysicalUnion
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
+------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
+--------------------------------------------------------PhysicalUnion
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ------------------------------------------------------------PhysicalProject
---------------------------------------------------------------filter((item.i_category = 'Music') and (item.i_class = 'country'))
-----------------------------------------------------------------PhysicalOlapScan[item]
+--------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
 --------------------------------------------------------PhysicalProject
-----------------------------------------------------------filter((date_dim.d_moy = 1) and (date_dim.d_year = 1999))
-------------------------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------------------------------filter((item.i_category = 'Music') and (item.i_class = 'country'))
+------------------------------------------------------------PhysicalOlapScan[item]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------filter((date_dim.d_moy = 1) and (date_dim.d_year = 1999))
+--------------------------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[store]
 ----------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query17.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query17.out
index 02ab42f1f74..d71dedcd7d8 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query17.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query17.out
@@ -22,7 +22,7 @@ PhysicalResultSink
 ------------------------PhysicalProject
 --------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() build RFs:RF5 s_store_sk->[ss_store_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query25.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query25.out
index 9e41ac46188..45df71928c5 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query25.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query25.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF5 i_item_sk->[sr_item_sk,ss_item_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ----------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query29.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query29.out
index 0e55603d42d..9b5cfebde62 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query29.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query29.out
@@ -18,7 +18,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF5 i_item_sk->[sr_item_sk,ss_item_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+--------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 --------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query39.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query39.out
index 8ad91b8ce2e..a5b3b0534cd 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query39.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query39.out
@@ -5,22 +5,20 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ----PhysicalProject
 ------filter(( not (mean = 0.0)) and ((foo.stdev / foo.mean) > 1.0))
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[inv_item_sk]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[inv_item_sk]
+----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF1 w_warehouse_sk->[inv_warehouse_sk]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF1 w_warehouse_sk->[inv_warehouse_sk]
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
+----------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
---------------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
---------------------------PhysicalProject
-----------------------------filter((date_dim.d_year = 2000) and d_moy IN (1, 2))
-------------------------------PhysicalOlapScan[date_dim]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[warehouse]
+------------------------filter((date_dim.d_year = 2000) and d_moy IN (1, 2))
+--------------------------PhysicalOlapScan[date_dim]
 ------------------PhysicalProject
---------------------PhysicalOlapScan[item]
+--------------------PhysicalOlapScan[warehouse]
+--------------PhysicalProject
+----------------PhysicalOlapScan[item]
 --PhysicalResultSink
 ----PhysicalQuickSort[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query40.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query40.out
index 694413852d2..b6bda804ade 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query40.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query40.out
@@ -10,7 +10,7 @@ PhysicalResultSink
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF4 w_warehouse_sk->[cs_warehouse_sk]
 ------------------PhysicalProject
---------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_item_sk->[cr_item_sk];RF3 cs_order_number->[cr_order_number]
+--------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_item_sk->[cr_item_sk];RF3 cs_order_number->[cr_order_number]
 ----------------------PhysicalProject
 ------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
 ----------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out
index 84bca335a10..2c3bc534c87 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query49.out
@@ -28,7 +28,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((wr.wr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[web_returns(wr)] apply RFs: RF1 RF2
@@ -60,7 +60,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((cr.cr_return_amount > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[catalog_returns(cr)] apply RFs: RF4 RF5
@@ -92,7 +92,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((sr.sr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[store_returns(sr)] apply RFs: RF7 RF8
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query5.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query5.out
index b089989d0f8..3b1ff1209f9 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query5.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query5.out
@@ -62,13 +62,12 @@ PhysicalResultSink
 --------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6 RF7
---------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5 RF7
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
+--------------------------------------PhysicalProject
+----------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5 RF7
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_date <= '2000-09-02') and (date_dim.d_date >= '2000-08-19'))
 ----------------------------------------PhysicalOlapScan[date_dim]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query50.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query50.out
index 3af090a8b3a..3b6c817e7d1 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query50.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query50.out
@@ -12,7 +12,7 @@ PhysicalResultSink
 ------------------PhysicalProject
 --------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk)) otherCondition=() build RFs:RF4 d_date_sk->[ss_sold_date_sk]
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
+------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
 --------------------------PhysicalProject
 ----------------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2 RF3 RF4 RF5
 --------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query54.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query54.out
index ddc3b69f35f..da0206313a6 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query54.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query54.out
@@ -26,29 +26,27 @@ PhysicalResultSink
 ------------------------------------------PhysicalOlapScan[customer_address] apply RFs: RF3 RF4 RF5
 ----------------------------------------PhysicalProject
 ------------------------------------------hashAgg[GLOBAL]
---------------------------------------------PhysicalDistribute[DistributionSpecHash]
-----------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
 ------------------------------------------------PhysicalProject
---------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF2 customer_sk->[c_customer_sk]
-----------------------------------------------------PhysicalProject
-------------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+--------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF2
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
 ----------------------------------------------------PhysicalProject
-------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
---------------------------------------------------------PhysicalProject
-----------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
-------------------------------------------------------------PhysicalUnion
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
+------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk,ws_item_sk]
+--------------------------------------------------------PhysicalUnion
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ------------------------------------------------------------PhysicalProject
---------------------------------------------------------------filter((item.i_category = 'Music') and (item.i_class = 'country'))
-----------------------------------------------------------------PhysicalOlapScan[item]
+--------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0 RF1
 --------------------------------------------------------PhysicalProject
-----------------------------------------------------------filter((date_dim.d_moy = 1) and (date_dim.d_year = 1999))
-------------------------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------------------------------filter((item.i_category = 'Music') and (item.i_class = 'country'))
+------------------------------------------------------------PhysicalOlapScan[item]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------filter((date_dim.d_moy = 1) and (date_dim.d_year = 1999))
+--------------------------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[store]
 ----------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query64.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query64.out
index 784e1659a15..292fadafc52 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query64.out
@@ -23,7 +23,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ----------------------------------------PhysicalProject
 ------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_addr_sk = ad1.ca_address_sk)) otherCondition=() build RFs:RF12 ca_address_sk->[ss_addr_sk]
 --------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF10 sr_item_sk->[i_item_sk,ss_item_sk];RF11 sr_ticket_number->[ss_ticket_number]
+----------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF10 sr_item_sk->[i_item_sk,ss_item_sk];RF11 sr_ticket_number->[ss_ticket_number]
 ------------------------------------------------PhysicalProject
 --------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_hdemo_sk = hd1.hd_demo_sk)) otherCondition=() build RFs:RF9 hd_demo_sk->[ss_hdemo_sk]
 ----------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ss_item_sk]
@@ -81,7 +81,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------hashAgg[LOCAL]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query69.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query69.out
index 1c2ef9fa1f7..175f24b8cbd 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query69.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query69.out
@@ -29,7 +29,7 @@ PhysicalResultSink
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk)) otherCondition=() build RFs:RF2 c_current_cdemo_sk->[cd_demo_sk]
 --------------------------PhysicalProject
 ----------------------------PhysicalOlapScan[customer_demographics] apply RFs: RF2
---------------------------hashJoin[LEFT_ANTI_JOIN shuffle] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
+--------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=() build RFs:RF1 ca_address_sk->[c_current_addr_sk]
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query72.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query72.out
index 0ce74757cb9..53c444dc157 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query72.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query72.out
@@ -10,7 +10,7 @@ PhysicalResultSink
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN broadcast] hashCondition=((warehouse.w_warehouse_sk = inventory.inv_warehouse_sk)) otherCondition=() build RFs:RF10 w_warehouse_sk->[inv_warehouse_sk]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF8 d_date_sk->[inv_date_sk];RF9 cs_item_sk->[inv_item_sk]
+--------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF8 d_date_sk->[inv_date_sk];RF9 cs_item_sk->[inv_item_sk]
 ----------------------PhysicalOlapScan[inventory] apply RFs: RF8 RF9 RF10
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_week_seq = d2.d_week_seq)) otherCondition=() build RFs:RF7 d_week_seq->[d_week_seq]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query75.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query75.out
index 8fcdeb91302..cb7767db6f4 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query75.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query75.out
@@ -7,57 +7,54 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------PhysicalDistribute[DistributionSpecHash]
 ----------hashAgg[LOCAL]
 ------------PhysicalUnion
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Sports'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (2001, 2002))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Sports'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (2001, 2002))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Sports'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (2001, 2002))
-----------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Sports'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (2001, 2002))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Sports'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (2001, 2002))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Sports'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (2001, 2002))
+--------------------------PhysicalOlapScan[date_dim]
 --PhysicalResultSink
 ----PhysicalTopN[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query78.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query78.out
index 990698673eb..d72bf6a7c0e 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query78.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query78.out
@@ -14,7 +14,7 @@ PhysicalResultSink
 ----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------hashAgg[LOCAL]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
+----------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
 ----------------------------------PhysicalProject
@@ -29,7 +29,7 @@ PhysicalResultSink
 ----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------hashAgg[LOCAL]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
+----------------------------hashJoin[LEFT_ANTI_JOIN shuffle] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
 ----------------------------------PhysicalProject
@@ -44,7 +44,7 @@ PhysicalResultSink
 ------------------PhysicalDistribute[DistributionSpecHash]
 --------------------hashAgg[LOCAL]
 ----------------------PhysicalProject
-------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
+------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query80.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query80.out
index e33fb4f9e86..6661e34bc17 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query80.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query80.out
@@ -15,7 +15,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[store_returns] apply RFs: RF4 RF5
 --------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk)) otherCondition=() build RFs:RF11 cp_catalog_page_sk->[cs_catalog_page_sk]
 --------------------------------PhysicalProject
-----------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
+----------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF9 RF10
 ------------------------------------PhysicalProject
@@ -73,7 +73,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[web_returns] apply RFs: RF16 RF17
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query81.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query81.out
index dc6759a4716..4b434815a2a 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query81.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query81.out
@@ -26,7 +26,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN broadcast] hashCondition=((ctr1.ctr_state = ctr2.ctr_state)) otherCondition=((cast(ctr_total_return as DECIMALV3(38, 5)) > (avg(ctr_total_return) * 1.2))) build RFs:RF4 ctr_state->[ctr_state]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN shuffle] hashCondition=((ctr1.ctr_customer_sk = customer.c_customer_sk)) otherCondition=() build RFs:RF3 ctr_customer_sk->[c_customer_sk]
+--------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((ctr1.ctr_customer_sk = customer.c_customer_sk)) otherCondition=() build RFs:RF3 ctr_customer_sk->[c_customer_sk]
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_address.ca_address_sk = customer.c_current_addr_sk)) otherCondition=() build RFs:RF2 ca_address_sk->[c_current_addr_sk]
 --------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query85.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query85.out
index 75967c5f17e..6ebad3a1de8 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query85.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query85.out
@@ -27,7 +27,7 @@ PhysicalResultSink
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk)) otherCondition=(OR[AND[(cd1.cd_marital_status = 'D'),(cd1.cd_education_status = 'Primary'),(web_sales.ws_sales_price >= 100.00),(web_sales.ws_sales_price <= 150.00)],AND[(cd1.cd_marital_status = 'S'),(cd1.cd_education_status = 'College'),(web_sales.ws_sales_price <= 100.00)],AND[(cd1.cd_marital_status = 'U'),(cd1.cd_education_status = 'Advanced Degree'),(we [...]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF1 RF2 RF3 RF8
 ----------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query93.out b/regression-test/data/shape_check/tpcds_sf1000/hint/query93.out
index 8478d4b304a..1a11c2f534f 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query93.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query93.out
@@ -8,7 +8,7 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN colocated] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
+----------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
 ------------------PhysicalProject
 --------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2
 ------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query17.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query17.out
index 5c5b2c95f6a..82a1cff667d 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query17.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query17.out
@@ -22,7 +22,7 @@ PhysicalResultSink
 ------------------------PhysicalProject
 --------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() build RFs:RF5 s_store_sk->[ss_store_sk]
 ----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out
index f7c2fac6077..ec4d93d573f 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out
@@ -7,7 +7,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------PhysicalDistribute[DistributionSpecHash]
 ----------hashAgg[LOCAL]
 ------------PhysicalProject
---------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF5 sr_ticket_number->[ss_ticket_number];RF6 sr_item_sk->[i_item_sk,ss_item_sk]
+--------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF5 sr_ticket_number->[ss_ticket_number];RF6 sr_item_sk->[i_item_sk,ss_item_sk]
 ----------------PhysicalProject
 ------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
 --------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query25.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query25.out
index 4d6eb90379d..ee55420cf01 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query25.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query25.out
@@ -21,7 +21,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() build RFs:RF5 s_store_sk->[ss_store_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+----------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ------------------------------PhysicalProject
 --------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 ----------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query29.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query29.out
index b238e2d84e1..7505cb3ea50 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query29.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query29.out
@@ -18,7 +18,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() build RFs:RF5 s_store_sk->[ss_store_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
+--------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF2 sr_customer_sk->[ss_customer_sk];RF3 sr_item_sk->[ss_item_sk];RF4 sr_ticket_number->[ss_ticket_number]
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
 --------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query39.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query39.out
index 94a93dbec9a..b826c2ac599 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query39.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query39.out
@@ -5,22 +5,20 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 ----PhysicalProject
 ------filter(( not (mean = 0.0)) and ((foo.stdev / foo.mean) > 1.0))
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute[DistributionSpecHash]
-------------hashAgg[LOCAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[inv_item_sk]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[inv_item_sk]
+----------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF1 w_warehouse_sk->[inv_warehouse_sk]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF1 w_warehouse_sk->[inv_warehouse_sk]
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
+----------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((inventory.inv_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[inv_date_sk]
---------------------------PhysicalOlapScan[inventory] apply RFs: RF0 RF1 RF2
---------------------------PhysicalProject
-----------------------------filter((date_dim.d_year = 2000) and d_moy IN (1, 2))
-------------------------------PhysicalOlapScan[date_dim]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[warehouse]
+------------------------filter((date_dim.d_year = 2000) and d_moy IN (1, 2))
+--------------------------PhysicalOlapScan[date_dim]
 ------------------PhysicalProject
---------------------PhysicalOlapScan[item]
+--------------------PhysicalOlapScan[warehouse]
+--------------PhysicalProject
+----------------PhysicalOlapScan[item]
 --PhysicalResultSink
 ----PhysicalQuickSort[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query40.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query40.out
index 041e5711184..9ecf8a19e0c 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query40.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query40.out
@@ -8,23 +8,23 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF4 w_warehouse_sk->[cs_warehouse_sk]
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF3 cs_order_number->[cr_order_number];RF4 cs_item_sk->[cr_item_sk]
 ------------------PhysicalProject
---------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
+--------------------PhysicalOlapScan[catalog_returns] apply RFs: RF3 RF4
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)) otherCondition=() build RFs:RF2 w_warehouse_sk->[cs_warehouse_sk]
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF4
+--------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF2
 ------------------------------PhysicalProject
 --------------------------------filter((item.i_current_price <= 1.49) and (item.i_current_price >= 0.99))
 ----------------------------------PhysicalOlapScan[item]
 --------------------------PhysicalProject
 ----------------------------filter((date_dim.d_date <= '2001-06-01') and (date_dim.d_date >= '2001-04-02'))
 ------------------------------PhysicalOlapScan[date_dim]
-------------------PhysicalProject
---------------------PhysicalOlapScan[warehouse]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[warehouse]
 
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out
index 84bca335a10..2c3bc534c87 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query49.out
@@ -28,7 +28,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((ws.ws_item_sk = wr.wr_item_sk) and (ws.ws_order_number = wr.wr_order_number)) otherCondition=() build RFs:RF1 ws_order_number->[wr_order_number];RF2 ws_item_sk->[wr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((wr.wr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[web_returns(wr)] apply RFs: RF1 RF2
@@ -60,7 +60,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((cs.cs_item_sk = cr.cr_item_sk) and (cs.cs_order_number = cr.cr_order_number)) otherCondition=() build RFs:RF4 cs_order_number->[cr_order_number];RF5 cs_item_sk->[cr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((cr.cr_return_amount > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[catalog_returns(cr)] apply RFs: RF4 RF5
@@ -92,7 +92,7 @@ PhysicalResultSink
 --------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------------------------hashAgg[LOCAL]
 ------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
+--------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((sts.ss_item_sk = sr.sr_item_sk) and (sts.ss_ticket_number = sr.sr_ticket_number)) otherCondition=() build RFs:RF7 ss_ticket_number->[sr_ticket_number];RF8 ss_item_sk->[sr_item_sk]
 ----------------------------------------------------------PhysicalProject
 ------------------------------------------------------------filter((sr.sr_return_amt > 10000.00))
 --------------------------------------------------------------PhysicalOlapScan[store_returns(sr)] apply RFs: RF7 RF8
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query5.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query5.out
index d61bb667b49..f4faa729b20 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query5.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query5.out
@@ -62,13 +62,12 @@ PhysicalResultSink
 --------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6 RF7
---------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------PhysicalProject
-------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5 RF7
---------------------------------------------PhysicalProject
-----------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
+--------------------------------------PhysicalProject
+----------------------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and (web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() build RFs:RF4 wr_item_sk->[ws_item_sk];RF5 wr_order_number->[ws_order_number]
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 RF5 RF7
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF6
 ------------------------------------PhysicalProject
 --------------------------------------filter((date_dim.d_date <= '2000-09-02') and (date_dim.d_date >= '2000-08-19'))
 ----------------------------------------PhysicalOlapScan[date_dim]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query50.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query50.out
index 18be632aaa5..d391b632b30 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query50.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query50.out
@@ -12,7 +12,7 @@ PhysicalResultSink
 ------------------PhysicalProject
 --------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk)) otherCondition=() build RFs:RF4 d_date_sk->[ss_sold_date_sk]
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
+------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_customer_sk = store_returns.sr_customer_sk) and (store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF1 sr_ticket_number->[ss_ticket_number];RF2 sr_item_sk->[ss_item_sk];RF3 sr_customer_sk->[ss_customer_sk]
 --------------------------PhysicalProject
 ----------------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2 RF3 RF4 RF5
 --------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query54.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query54.out
index 62d473efd02..e8e53738331 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query54.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query54.out
@@ -26,29 +26,27 @@ PhysicalResultSink
 ------------------------------------------PhysicalOlapScan[customer_address] apply RFs: RF8 RF9 RF10 RF11 RF12 RF13
 ----------------------------------------PhysicalProject
 ------------------------------------------hashAgg[GLOBAL]
---------------------------------------------PhysicalDistribute[DistributionSpecHash]
-----------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF6 customer_sk->[c_customer_sk];RF7 customer_sk->[c_customer_sk]
 ------------------------------------------------PhysicalProject
---------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer.c_customer_sk = cs_or_ws_sales.customer_sk)) otherCondition=() build RFs:RF6 customer_sk->[c_customer_sk];RF7 customer_sk->[c_customer_sk]
-----------------------------------------------------PhysicalProject
-------------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF6 RF7
+--------------------------------------------------PhysicalOlapScan[customer] apply RFs: RF6 RF7
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF4 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk];RF5 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
 ----------------------------------------------------PhysicalProject
-------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF4 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk];RF5 d_date_sk->[cs_sold_date_sk,ws_sold_date_sk]
---------------------------------------------------------PhysicalProject
-----------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[cs_item_sk,ws_item_sk];RF3 i_item_sk->[cs_item_sk,ws_item_sk]
-------------------------------------------------------------PhysicalUnion
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF2 RF3 RF4 RF5
---------------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF2 RF3 RF4 RF5
+------------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cs_or_ws_sales.item_sk = item.i_item_sk)) otherCondition=() build RFs:RF2 i_item_sk->[cs_item_sk,ws_item_sk];RF3 i_item_sk->[cs_item_sk,ws_item_sk]
+--------------------------------------------------------PhysicalUnion
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
 ------------------------------------------------------------PhysicalProject
---------------------------------------------------------------filter((item.i_category = 'Music') and (item.i_class = 'country'))
-----------------------------------------------------------------PhysicalOlapScan[item]
+--------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF2 RF3 RF4 RF5
+----------------------------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF2 RF3 RF4 RF5
 --------------------------------------------------------PhysicalProject
-----------------------------------------------------------filter((date_dim.d_moy = 1) and (date_dim.d_year = 1999))
-------------------------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------------------------------filter((item.i_category = 'Music') and (item.i_class = 'country'))
+------------------------------------------------------------PhysicalOlapScan[item]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------filter((date_dim.d_moy = 1) and (date_dim.d_year = 1999))
+--------------------------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[store]
 ----------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query64.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query64.out
index 83080f1d504..0762e95d146 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query64.out
@@ -35,7 +35,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 --------------------PhysicalProject
 ----------------------hashJoin[INNER_JOIN shuffle] hashCondition=((store_sales.ss_addr_sk = ad1.ca_address_sk)) otherCondition=() build RFs:RF12 ca_address_sk->[ss_addr_sk]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF10 ss_item_sk->[sr_item_sk];RF11 ss_ticket_number->[sr_ticket_number]
+--------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF10 ss_item_sk->[sr_item_sk];RF11 ss_ticket_number->[sr_ticket_number]
 ----------------------------PhysicalProject
 ------------------------------PhysicalOlapScan[store_returns] apply RFs: RF10 RF11
 ----------------------------PhysicalProject
@@ -64,7 +64,7 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
 ------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------------------------------------------hashAgg[LOCAL]
 ----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
+------------------------------------------------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF0 cr_item_sk->[cs_item_sk];RF1 cr_order_number->[cs_order_number]
 --------------------------------------------------------------------PhysicalProject
 ----------------------------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF7
 --------------------------------------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query69.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query69.out
index 1c2ef9fa1f7..175f24b8cbd 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query69.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query69.out
@@ -29,7 +29,7 @@ PhysicalResultSink
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk)) otherCondition=() build RFs:RF2 c_current_cdemo_sk->[cd_demo_sk]
 --------------------------PhysicalProject
 ----------------------------PhysicalOlapScan[customer_demographics] apply RFs: RF2
---------------------------hashJoin[LEFT_ANTI_JOIN shuffle] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
+--------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk)) otherCondition=()
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=() build RFs:RF1 ca_address_sk->[c_current_addr_sk]
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query72.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query72.out
index 92fd2650882..e3b47aad8ef 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query72.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query72.out
@@ -8,17 +8,18 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN broadcast] hashCondition=((warehouse.w_warehouse_sk = inventory.inv_warehouse_sk)) otherCondition=() build RFs:RF10 w_warehouse_sk->[inv_warehouse_sk]
+----------------hashJoin[LEFT_OUTER_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=()
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF8 inv_date_sk->[d_date_sk];RF9 inv_item_sk->[cs_item_sk,i_item_sk]
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((warehouse.w_warehouse_sk = inventory.inv_warehouse_sk)) otherCondition=() build RFs:RF8 w_warehouse_sk->[inv_warehouse_sk]
 ----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN shuffle] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF7 i_item_sk->[cs_item_sk]
+------------------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((catalog_sales.cs_item_sk = inventory.inv_item_sk) and (inventory.inv_date_sk = d2.d_date_sk)) otherCondition=((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity)) build RFs:RF6 d_date_sk->[inv_date_sk];RF7 cs_item_sk->[inv_item_sk]
+--------------------------PhysicalOlapScan[inventory] apply RFs: RF6 RF7 RF8
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_week_seq = d2.d_week_seq)) otherCondition=() build RFs:RF6 d_week_seq->[d_week_seq]
+----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((d1.d_week_seq = d2.d_week_seq)) otherCondition=() build RFs:RF5 d_week_seq->[d_week_seq]
 ------------------------------PhysicalProject
---------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) and (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) otherCondition=() build RFs:RF4 cs_item_sk->[cr_item_sk];RF5 cs_order_number->[cr_order_number]
-----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF4 RF5
+--------------------------------PhysicalOlapScan[date_dim(d2)] apply RFs: RF5
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[cs_item_sk]
 ----------------------------------PhysicalProject
 ------------------------------------hashJoin[LEFT_OUTER_JOIN broadcast] hashCondition=((catalog_sales.cs_promo_sk = promotion.p_promo_sk)) otherCondition=()
 --------------------------------------PhysicalProject
@@ -28,14 +29,14 @@ PhysicalResultSink
 ----------------------------------------------PhysicalProject
 ------------------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_ship_date_sk = d3.d_date_sk) and (catalog_sales.cs_sold_date_sk = d1.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_ship_date_sk];RF1 d_date_sk->[cs_sold_date_sk]
 --------------------------------------------------PhysicalProject
-----------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF2 RF3 RF7 RF9
+----------------------------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1 RF2 RF3 RF4
 --------------------------------------------------PhysicalProject
 ----------------------------------------------------NestedLoopJoin[INNER_JOIN](d3.d_date > days_add(d_date, 5))
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------PhysicalOlapScan[date_dim(d3)]
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------filter((d1.d_year = 1998))
-----------------------------------------------------------PhysicalOlapScan[date_dim(d1)] apply RFs: RF6
+----------------------------------------------------------PhysicalOlapScan[date_dim(d1)]
 ----------------------------------------------PhysicalProject
 ------------------------------------------------filter((household_demographics.hd_buy_potential = '1001-5000'))
 --------------------------------------------------PhysicalOlapScan[household_demographics]
@@ -44,13 +45,12 @@ PhysicalResultSink
 ----------------------------------------------PhysicalOlapScan[customer_demographics]
 --------------------------------------PhysicalProject
 ----------------------------------------PhysicalOlapScan[promotion]
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[date_dim(d2)] apply RFs: RF8
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item] apply RFs: RF9
-----------------------PhysicalOlapScan[inventory] apply RFs: RF10
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[warehouse]
 ------------------PhysicalProject
---------------------PhysicalOlapScan[warehouse]
+--------------------PhysicalOlapScan[catalog_returns]
 
 
 
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query75.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query75.out
index 8fcdeb91302..cb7767db6f4 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query75.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query75.out
@@ -7,57 +7,54 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------PhysicalDistribute[DistributionSpecHash]
 ----------hashAgg[LOCAL]
 ------------PhysicalUnion
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Sports'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (2001, 2002))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Sports'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (2001, 2002))
-----------------------------PhysicalOlapScan[date_dim]
---------------PhysicalDistribute[DistributionSpecExecutionAny]
-----------------PhysicalProject
-------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Sports'))
---------------------------------PhysicalOlapScan[item]
-------------------------PhysicalProject
---------------------------filter(d_year IN (2001, 2002))
-----------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF2 cs_order_number->[cr_order_number];RF3 cs_item_sk->[cr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[catalog_returns] apply RFs: RF2 RF3
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = catalog_sales.cs_item_sk)) otherCondition=() build RFs:RF0 i_item_sk->[cs_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0 RF1
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Sports'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (2001, 2002))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF6 ss_ticket_number->[sr_ticket_number];RF7 ss_item_sk->[sr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[store_returns] apply RFs: RF6 RF7
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = store_sales.ss_item_sk)) otherCondition=() build RFs:RF4 i_item_sk->[ss_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[store_sales] apply RFs: RF4 RF5
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Sports'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (2001, 2002))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF10 ws_order_number->[wr_order_number];RF11 ws_item_sk->[wr_item_sk]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[web_returns] apply RFs: RF10 RF11
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN broadcast] hashCondition=((date_dim.d_date_sk = web_sales.ws_sold_date_sk)) otherCondition=() build RFs:RF9 d_date_sk->[ws_sold_date_sk]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((item.i_item_sk = web_sales.ws_item_sk)) otherCondition=() build RFs:RF8 i_item_sk->[ws_item_sk]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
+--------------------------PhysicalProject
+----------------------------filter((item.i_category = 'Sports'))
+------------------------------PhysicalOlapScan[item]
+----------------------PhysicalProject
+------------------------filter(d_year IN (2001, 2002))
+--------------------------PhysicalOlapScan[date_dim]
 --PhysicalResultSink
 ----PhysicalTopN[MERGE_SORT]
 ------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query78.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query78.out
index 0663ee2198a..a3b55973d30 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query78.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query78.out
@@ -16,7 +16,7 @@ PhysicalResultSink
 --------------------------PhysicalProject
 ----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
+--------------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((store_returns.sr_ticket_number = store_sales.ss_ticket_number) and (store_sales.ss_item_sk = store_returns.sr_item_sk)) otherCondition=()
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
 ----------------------------------PhysicalProject
@@ -29,16 +29,16 @@ PhysicalResultSink
 ----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------hashAgg[LOCAL]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
+----------------------------hashJoin[LEFT_ANTI_JOIN shuffle] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
---------------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((web_returns.wr_order_number = web_sales.ws_order_number) and (web_sales.ws_item_sk = web_returns.wr_item_sk)) otherCondition=()
+--------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF1 d_date_sk->[ws_sold_date_sk]
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
 ----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[web_returns]
+------------------------------------filter((date_dim.d_year = 1998))
+--------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------PhysicalProject
---------------------------------filter((date_dim.d_year = 1998))
-----------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalOlapScan[web_returns]
 --------------PhysicalProject
 ----------------hashAgg[GLOBAL]
 ------------------PhysicalDistribute[DistributionSpecHash]
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------PhysicalProject
 ------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) otherCondition=() build RFs:RF0 d_date_sk->[cs_sold_date_sk]
 --------------------------PhysicalProject
-----------------------------hashJoin[LEFT_ANTI_JOIN colocated] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
+----------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle] hashCondition=((catalog_returns.cr_order_number = catalog_sales.cs_order_number) and (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) otherCondition=()
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
 ------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query80.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query80.out
index e33fb4f9e86..6661e34bc17 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query80.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query80.out
@@ -15,7 +15,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((store_sales.ss_item_sk = store_returns.sr_item_sk) and (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) otherCondition=() build RFs:RF4 ss_item_sk->[sr_item_sk];RF5 ss_ticket_number->[sr_ticket_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[store_returns] apply RFs: RF4 RF5
 --------------------------------PhysicalProject
@@ -46,7 +46,7 @@ PhysicalResultSink
 ----------------------------PhysicalProject
 ------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk)) otherCondition=() build RFs:RF11 cp_catalog_page_sk->[cs_catalog_page_sk]
 --------------------------------PhysicalProject
-----------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
+----------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) and (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) otherCondition=() build RFs:RF9 cs_item_sk->[cr_item_sk];RF10 cs_order_number->[cr_order_number]
 ------------------------------------PhysicalProject
 --------------------------------------PhysicalOlapScan[catalog_returns] apply RFs: RF9 RF10
 ------------------------------------PhysicalProject
@@ -73,7 +73,7 @@ PhysicalResultSink
 ------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------hashAgg[LOCAL]
 ----------------------------PhysicalProject
-------------------------------hashJoin[RIGHT_OUTER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
+------------------------------hashJoin[RIGHT_OUTER_JOIN shuffle] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF16 ws_item_sk->[wr_item_sk];RF17 ws_order_number->[wr_order_number]
 --------------------------------PhysicalProject
 ----------------------------------PhysicalOlapScan[web_returns] apply RFs: RF16 RF17
 --------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query85.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query85.out
index 05a73d3e721..27f904f559e 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query85.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query85.out
@@ -25,7 +25,7 @@ PhysicalResultSink
 --------------------------------PhysicalProject
 ----------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk)) otherCondition=(OR[AND[(cd1.cd_marital_status = 'D'),(cd1.cd_education_status = 'Primary'),(web_sales.ws_sales_price >= 100.00),(web_sales.ws_sales_price <= 150.00)],AND[(cd1.cd_marital_status = 'S'),(cd1.cd_education_status = 'College'),(web_sales.ws_sales_price <= 100.00)],AND[(cd1.cd_marital_status = 'U'),(cd1.cd_education_status = 'Advanced Degree'),(we [...]
 ------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN colocated] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+--------------------------------------hashJoin[INNER_JOIN broadcast] hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and (web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=() build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
 ----------------------------------------PhysicalProject
 ------------------------------------------PhysicalOlapScan[web_returns] apply RFs: RF1 RF2 RF3 RF9
 ----------------------------------------PhysicalProject
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query93.out b/regression-test/data/shape_check/tpcds_sf1000/shape/query93.out
index 5f2b776e674..5a99fd09e06 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query93.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query93.out
@@ -8,7 +8,7 @@ PhysicalResultSink
 ----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN colocated] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
+----------------hashJoin[INNER_JOIN bucketShuffle] hashCondition=((store_returns.sr_item_sk = store_sales.ss_item_sk) and (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) otherCondition=() build RFs:RF1 sr_item_sk->[ss_item_sk];RF2 sr_ticket_number->[ss_ticket_number]
 ------------------PhysicalProject
 --------------------PhysicalOlapScan[store_sales] apply RFs: RF1 RF2
 ------------------PhysicalProject
diff --git a/regression-test/suites/shape_check/tpcds_sf100/load.groovy b/regression-test/suites/shape_check/tpcds_sf100/load.groovy
index 8853fd2b724..7a76c4aca65 100644
--- a/regression-test/suites/shape_check/tpcds_sf100/load.groovy
+++ b/regression-test/suites/shape_check/tpcds_sf100/load.groovy
@@ -27,18 +27,18 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS customer_demographics (
-        cd_demo_sk bigint not null,
-        cd_gender char(1),
-        cd_marital_status char(1),
-        cd_education_status char(20),
+        cd_demo_sk int not null,
+        cd_gender varchar(1),
+        cd_marital_status varchar(1),
+        cd_education_status varchar(20),
         cd_purchase_estimate integer,
-        cd_credit_rating char(10),
+        cd_credit_rating varchar(10),
         cd_dep_count integer,
         cd_dep_employed_count integer,
         cd_dep_college_count integer
     )
     DUPLICATE KEY(cd_demo_sk)
-    DISTRIBUTED BY HASH(cd_gender) BUCKETS 12
+    DISTRIBUTED BY HASH(cd_demo_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -50,9 +50,9 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS reason (
-        r_reason_sk bigint not null,
-        r_reason_id char(16) not null,
-        r_reason_desc char(100)
+        r_reason_sk int not null,
+        r_reason_id varchar(16) not null,
+        r_reason_desc varchar(100)
     )
     DUPLICATE KEY(r_reason_sk)
     DISTRIBUTED BY HASH(r_reason_sk) BUCKETS 1
@@ -67,8 +67,8 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS date_dim (
-        d_date_sk bigint not null,
-        d_date_id char(16) not null,
+        d_date_sk int not null,
+        d_date_id varchar(16) not null,
         d_date datev2,
         d_month_seq integer,
         d_week_seq integer,
@@ -81,34 +81,23 @@ suite("load") {
         d_fy_year integer,
         d_fy_quarter_seq integer,
         d_fy_week_seq integer,
-        d_day_name char(9),
-        d_quarter_name char(6),
-        d_holiday char(1),
-        d_weekend char(1),
-        d_following_holiday char(1),
+        d_day_name varchar(9),
+        d_quarter_name varchar(6),
+        d_holiday varchar(1),
+        d_weekend varchar(1),
+        d_following_holiday varchar(1),
         d_first_dom integer,
         d_last_dom integer,
         d_same_day_ly integer,
         d_same_day_lq integer,
-        d_current_day char(1),
-        d_current_week char(1),
-        d_current_month char(1),
-        d_current_quarter char(1),
-        d_current_year char(1)
+        d_current_day varchar(1),
+        d_current_week varchar(1),
+        d_current_month varchar(1),
+        d_current_quarter varchar(1),
+        d_current_year varchar(1)
     )
     DUPLICATE KEY(d_date_sk)
-    PARTITION BY RANGE(d_date_sk)
-    (
-    PARTITION `ppast` values less than("2450815"),
-    PARTITION `p1998` values less than("2451180"),
-    PARTITION `p1999` values less than("2451545"),
-    PARTITION `p2000` values less than("2451911"),
-    PARTITION `p2001` values less than("2452276"),
-    PARTITION `p2002` values less than("2452641"),
-    PARTITION `p2003` values less than("2453006"),
-    PARTITION `pfuture` values less than("9999999")
-    )
-    DISTRIBUTED BY HASH(d_date_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(d_date_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -120,18 +109,18 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS warehouse (
-        w_warehouse_sk bigint not null,
-        w_warehouse_id char(16) not null,
+        w_warehouse_sk int not null,
+        w_warehouse_id varchar(16) not null,
         w_warehouse_name varchar(20),
         w_warehouse_sq_ft integer,
-        w_street_number char(10),
+        w_street_number varchar(10),
         w_street_name varchar(60),
-        w_street_type char(15),
-        w_suite_number char(10),
+        w_street_type varchar(15),
+        w_suite_number varchar(10),
         w_city varchar(60),
         w_county varchar(30),
-        w_state char(2),
-        w_zip char(10),
+        w_state varchar(2),
+        w_zip varchar(10),
         w_country varchar(20),
         w_gmt_offset decimalv3(5,2)
     )
@@ -148,25 +137,25 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS catalog_sales (
-        cs_sold_date_sk bigint,
-        cs_item_sk bigint not null,
-        cs_order_number bigint not null,
-        cs_sold_time_sk bigint,
-        cs_ship_date_sk bigint,
-        cs_bill_customer_sk bigint,
-        cs_bill_cdemo_sk bigint,
-        cs_bill_hdemo_sk bigint,
-        cs_bill_addr_sk bigint,
-        cs_ship_customer_sk bigint,
-        cs_ship_cdemo_sk bigint,
-        cs_ship_hdemo_sk bigint,
-        cs_ship_addr_sk bigint,
-        cs_call_center_sk bigint,
-        cs_catalog_page_sk bigint,
-        cs_ship_mode_sk bigint,
-        cs_warehouse_sk bigint,
-        cs_promo_sk bigint,
-        cs_quantity integer,
+        cs_sold_date_sk int,
+        cs_item_sk int not null,
+        cs_order_number int not null,
+        cs_sold_time_sk int,
+        cs_ship_date_sk int,
+        cs_bill_customer_sk int,
+        cs_bill_cdemo_sk int,
+        cs_bill_hdemo_sk int,
+        cs_bill_addr_sk int,
+        cs_ship_customer_sk int,
+        cs_ship_cdemo_sk int,
+        cs_ship_hdemo_sk int,
+        cs_ship_addr_sk int,
+        cs_call_center_sk int,
+        cs_catalog_page_sk int,
+        cs_ship_mode_sk int,
+        cs_warehouse_sk int,
+        cs_promo_sk int,
+        cs_quantity int,
         cs_wholesale_cost decimalv3(7,2),
         cs_list_price decimalv3(7,2),
         cs_sales_price decimalv3(7,2),
@@ -183,11 +172,10 @@ suite("load") {
         cs_net_paid_inc_ship_tax decimalv3(7,2),
         cs_net_profit decimalv3(7,2)
     )
-    DUPLICATE KEY(cs_sold_date_sk, cs_item_sk)
-    DISTRIBUTED BY HASH(cs_item_sk, cs_order_number) BUCKETS 32
+    DUPLICATE KEY(`cs_sold_date_sk`, `cs_item_sk`, `cs_order_number`)
+    DISTRIBUTED BY HASH(cs_item_sk, cs_order_number) BUCKETS 261
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "catalog"
+    "replication_num" = "1"
     )
     '''
 
@@ -197,34 +185,34 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS call_center (
-    cc_call_center_sk bigint not null,
-    cc_call_center_id char(16) not null,
-    cc_rec_start_date datev2,
-    cc_rec_end_date datev2,
+    cc_call_center_sk int not null,
+    cc_call_center_id varchar(16) not null,
+    cc_rec_start_date date,
+    cc_rec_end_date date,
     cc_closed_date_sk integer,
     cc_open_date_sk integer,
     cc_name varchar(50),
     cc_class varchar(50),
     cc_employees integer,
     cc_sq_ft integer,
-    cc_hours char(20),
+    cc_hours varchar(20),
     cc_manager varchar(40),
     cc_mkt_id integer,
-    cc_mkt_class char(50),
+    cc_mkt_class varchar(50),
     cc_mkt_desc varchar(100),
     cc_market_manager varchar(40),
     cc_division integer,
     cc_division_name varchar(50),
     cc_company integer,
-    cc_company_name char(50),
-    cc_street_number char(10),
+    cc_company_name varchar(50),
+    cc_street_number varchar(10),
     cc_street_name varchar(60),
-    cc_street_type char(15),
-    cc_suite_number char(10),
+    cc_street_type varchar(15),
+    cc_suite_number varchar(10),
     cc_city varchar(60),
     cc_county varchar(30),
-    cc_state char(2),
-    cc_zip char(10),
+    cc_state varchar(2),
+    cc_zip varchar(10),
     cc_country varchar(20),
     cc_gmt_offset decimalv3(5,2),
     cc_tax_percentage decimalv3(5,2)
@@ -242,13 +230,13 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS inventory (
-        inv_date_sk bigint not null,
-        inv_item_sk bigint not null,
-        inv_warehouse_sk bigint,
+        inv_date_sk int not null,
+        inv_item_sk int not null,
+        inv_warehouse_sk int,
         inv_quantity_on_hand integer
     )
     DUPLICATE KEY(inv_date_sk, inv_item_sk, inv_warehouse_sk)
-    DISTRIBUTED BY HASH(inv_date_sk, inv_item_sk, inv_warehouse_sk) BUCKETS 32
+    DISTRIBUTED BY HASH(inv_item_sk) BUCKETS 63
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -260,23 +248,23 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS catalog_returns (
-    cr_item_sk bigint not null,
-    cr_order_number bigint not null,
-    cr_returned_date_sk bigint,
-    cr_returned_time_sk bigint,
-    cr_refunded_customer_sk bigint,
-    cr_refunded_cdemo_sk bigint,
-    cr_refunded_hdemo_sk bigint,
-    cr_refunded_addr_sk bigint,
-    cr_returning_customer_sk bigint,
-    cr_returning_cdemo_sk bigint,
-    cr_returning_hdemo_sk bigint,
-    cr_returning_addr_sk bigint,
-    cr_call_center_sk bigint,
-    cr_catalog_page_sk bigint,
-    cr_ship_mode_sk bigint,
-    cr_warehouse_sk bigint,
-    cr_reason_sk bigint,
+    cr_returned_date_sk int,
+    cr_item_sk int not null,
+    cr_order_number int not null,
+    cr_returned_time_sk int,
+    cr_refunded_customer_sk int,
+    cr_refunded_cdemo_sk int,
+    cr_refunded_hdemo_sk int,
+    cr_refunded_addr_sk int,
+    cr_returning_customer_sk int,
+    cr_returning_cdemo_sk int,
+    cr_returning_hdemo_sk int,
+    cr_returning_addr_sk int,
+    cr_call_center_sk int,
+    cr_catalog_page_sk int,
+    cr_ship_mode_sk int,
+    cr_warehouse_sk int,
+    cr_reason_sk int,
     cr_return_quantity integer,
     cr_return_amount decimalv3(7,2),
     cr_return_tax decimalv3(7,2),
@@ -288,11 +276,10 @@ suite("load") {
     cr_store_credit decimalv3(7,2),
     cr_net_loss decimalv3(7,2)
     )
-    DUPLICATE KEY(cr_item_sk, cr_order_number)
-    DISTRIBUTED BY HASH(cr_item_sk, cr_order_number) BUCKETS 32
+    DUPLICATE KEY(`cr_returned_date_sk`, `cr_item_sk`, `cr_order_number`)
+    DISTRIBUTED BY HASH(cr_item_sk, cr_order_number) BUCKETS 36
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "catalog"
+    "replication_num" = "1"
     )
     '''
 
@@ -302,14 +289,14 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS household_demographics (
-        hd_demo_sk bigint not null,
-        hd_income_band_sk bigint,
-        hd_buy_potential char(15),
+        hd_demo_sk int not null,
+        hd_income_band_sk int,
+        hd_buy_potential varchar(15),
         hd_dep_count integer,
         hd_vehicle_count integer
     )
     DUPLICATE KEY(hd_demo_sk)
-    DISTRIBUTED BY HASH(hd_demo_sk) BUCKETS 3
+    DISTRIBUTED BY HASH(hd_demo_sk) BUCKETS 1
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -321,22 +308,22 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS customer_address (
-        ca_address_sk bigint not null,
-        ca_address_id char(16) not null,
-        ca_street_number char(10),
+        ca_address_sk int not null,
+        ca_address_id varchar(16) not null,
+        ca_street_number varchar(10),
         ca_street_name varchar(60),
-        ca_street_type char(15),
-        ca_suite_number char(10),
+        ca_street_type varchar(15),
+        ca_suite_number varchar(10),
         ca_city varchar(60),
         ca_county varchar(30),
-        ca_state char(2),
-        ca_zip char(10),
+        ca_state varchar(2),
+        ca_zip varchar(10),
         ca_country varchar(20),
         ca_gmt_offset decimalv3(5,2),
-        ca_location_type char(20)
+        ca_location_type varchar(20)
     )
     DUPLICATE KEY(ca_address_sk)
-    DISTRIBUTED BY HASH(ca_address_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(ca_address_sk) BUCKETS 18
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -348,7 +335,7 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS income_band (
-        ib_income_band_sk bigint not null,
+        ib_income_band_sk int not null,
         ib_lower_bound integer,
         ib_upper_bound integer
     )
@@ -365,8 +352,8 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS catalog_page (
-    cp_catalog_page_sk bigint not null,
-    cp_catalog_page_id char(16) not null,
+    cp_catalog_page_sk int not null,
+    cp_catalog_page_id varchar(16) not null,
     cp_start_date_sk integer,
     cp_end_date_sk integer,
     cp_department varchar(50),
@@ -388,31 +375,31 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS item (
-        i_item_sk bigint not null,
-        i_item_id char(16) not null,
+        i_item_sk int not null,
+        i_item_id varchar(16) not null,
         i_rec_start_date datev2,
         i_rec_end_date datev2,
         i_item_desc varchar(200),
         i_current_price decimalv3(7,2),
         i_wholesale_cost decimalv3(7,2),
         i_brand_id integer,
-        i_brand char(50),
+        i_brand varchar(50),
         i_class_id integer,
         i_class char(50),
         i_category_id integer,
-        i_category char(50),
+        i_category varchar(50),
         i_manufact_id integer,
-        i_manufact char(50),
-        i_size char(20),
-        i_formulation char(20),
-        i_color char(20),
-        i_units char(10),
-        i_container char(10),
+        i_manufact varchar(50),
+        i_size varchar(20),
+        i_formulation varchar(20),
+        i_color varchar(20),
+        i_units varchar(10),
+        i_container varchar(10),
         i_manager_id integer,
-        i_product_name char(50)
+        i_product_name varchar(50)
     )
     DUPLICATE KEY(i_item_sk)
-    DISTRIBUTED BY HASH(i_item_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(i_item_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -424,20 +411,20 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_returns (
-        wr_item_sk bigint not null,
-        wr_order_number bigint not null,
-        wr_returned_date_sk bigint,
-        wr_returned_time_sk bigint,
-        wr_refunded_customer_sk bigint,
-        wr_refunded_cdemo_sk bigint,
-        wr_refunded_hdemo_sk bigint,
-        wr_refunded_addr_sk bigint,
-        wr_returning_customer_sk bigint,
-        wr_returning_cdemo_sk bigint,
-        wr_returning_hdemo_sk bigint,
-        wr_returning_addr_sk bigint,
-        wr_web_page_sk bigint,
-        wr_reason_sk bigint,
+        wr_returned_date_sk int,
+        wr_item_sk int not null,
+        wr_order_number int not null,
+        wr_returned_time_sk int,
+        wr_refunded_customer_sk int,
+        wr_refunded_cdemo_sk int,
+        wr_refunded_hdemo_sk int,
+        wr_refunded_addr_sk int,
+        wr_returning_customer_sk int,
+        wr_returning_cdemo_sk int,
+        wr_returning_hdemo_sk int,
+        wr_returning_addr_sk int,
+        wr_web_page_sk int,
+        wr_reason_sk int,
         wr_return_quantity integer,
         wr_return_amt decimalv3(7,2),
         wr_return_tax decimalv3(7,2),
@@ -449,11 +436,10 @@ suite("load") {
         wr_account_credit decimalv3(7,2),
         wr_net_loss decimalv3(7,2)
     )
-    DUPLICATE KEY(wr_item_sk, wr_order_number)
-    DISTRIBUTED BY HASH(wr_item_sk, wr_order_number) BUCKETS 32
+    DUPLICATE KEY(`wr_returned_date_sk`, `wr_item_sk`, `wr_order_number`)
+    DISTRIBUTED BY HASH(`wr_item_sk`, `wr_order_number`) BUCKETS 18
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "web"
+    "replication_num" = "1"
     )
     '''
 
@@ -463,13 +449,13 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_site (
-        web_site_sk bigint not null,
-        web_site_id char(16) not null,
+        web_site_sk int not null,
+        web_site_id varchar(16) not null,
         web_rec_start_date datev2,
         web_rec_end_date datev2,
         web_name varchar(50),
-        web_open_date_sk bigint,
-        web_close_date_sk bigint,
+        web_open_date_sk int,
+        web_close_date_sk int,
         web_class varchar(50),
         web_manager varchar(40),
         web_mkt_id integer,
@@ -477,15 +463,15 @@ suite("load") {
         web_mkt_desc varchar(100),
         web_market_manager varchar(40),
         web_company_id integer,
-        web_company_name char(50),
-        web_street_number char(10),
+        web_company_name varchar(50),
+        web_street_number varchar(10),
         web_street_name varchar(60),
-        web_street_type char(15),
-        web_suite_number char(10),
+        web_street_type varchar(15),
+        web_suite_number varchar(10),
         web_city varchar(60),
         web_county varchar(30),
-        web_state char(2),
-        web_zip char(10),
+        web_state varchar(2),
+        web_zip varchar(10),
         web_country varchar(20),
         web_gmt_offset decimalv3(5,2),
         web_tax_percentage decimalv3(5,2)
@@ -503,25 +489,25 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS promotion (
-        p_promo_sk bigint not null,
-        p_promo_id char(16) not null,
-        p_start_date_sk bigint,
-        p_end_date_sk bigint,
-        p_item_sk bigint,
+        p_promo_sk int not null,
+        p_promo_id varchar(16) not null,
+        p_start_date_sk int,
+        p_end_date_sk int,
+        p_item_sk int,
         p_cost decimalv3(15,2),
         p_response_targe integer,
-        p_promo_name char(50),
-        p_channel_dmail char(1),
-        p_channel_email char(1),
-        p_channel_catalog char(1),
-        p_channel_tv char(1),
-        p_channel_radio char(1),
-        p_channel_press char(1),
-        p_channel_event char(1),
-        p_channel_demo char(1),
+        p_promo_name varchar(50),
+        p_channel_dmail varchar(1),
+        p_channel_email varchar(1),
+        p_channel_catalog varchar(1),
+        p_channel_tv varchar(1),
+        p_channel_radio varchar(1),
+        p_channel_press varchar(1),
+        p_channel_event varchar(1),
+        p_channel_demo varchar(1),
         p_channel_details varchar(100),
-        p_purpose char(15),
-        p_discount_active char(1)
+        p_purpose varchar(15),
+        p_discount_active varchar(1)
     )
     DUPLICATE KEY(p_promo_sk)
     DISTRIBUTED BY HASH(p_promo_sk) BUCKETS 1
@@ -536,24 +522,24 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_sales (
-        ws_sold_date_sk bigint,
-        ws_item_sk bigint not null,
-        ws_order_number bigint not null,
-        ws_sold_time_sk bigint,
-        ws_ship_date_sk bigint,
-        ws_bill_customer_sk bigint,
-        ws_bill_cdemo_sk bigint,
-        ws_bill_hdemo_sk bigint,
-        ws_bill_addr_sk bigint,
-        ws_ship_customer_sk bigint,
-        ws_ship_cdemo_sk bigint,
-        ws_ship_hdemo_sk bigint,
-        ws_ship_addr_sk bigint,
-        ws_web_page_sk bigint,
-        ws_web_site_sk bigint,
-        ws_ship_mode_sk bigint,
-        ws_warehouse_sk bigint,
-        ws_promo_sk bigint,
+        ws_sold_date_sk int,
+        ws_item_sk int not null,
+        ws_order_number int not null,
+        ws_sold_time_sk int,
+        ws_ship_date_sk int,
+        ws_bill_customer_sk int,
+        ws_bill_cdemo_sk int,
+        ws_bill_hdemo_sk int,
+        ws_bill_addr_sk int,
+        ws_ship_customer_sk int,
+        ws_ship_cdemo_sk int,
+        ws_ship_hdemo_sk int,
+        ws_ship_addr_sk int,
+        ws_web_page_sk int,
+        ws_web_site_sk int,
+        ws_ship_mode_sk int,
+        ws_warehouse_sk int,
+        ws_promo_sk int,
         ws_quantity integer,
         ws_wholesale_cost decimalv3(7,2),
         ws_list_price decimalv3(7,2),
@@ -571,11 +557,10 @@ suite("load") {
         ws_net_paid_inc_ship_tax decimalv3(7,2),
         ws_net_profit decimalv3(7,2)
     )
-    DUPLICATE KEY(ws_sold_date_sk, ws_item_sk)
-    DISTRIBUTED BY HASH(ws_item_sk, ws_order_number) BUCKETS 32
+    DUPLICATE KEY(`ws_sold_date_sk`, `ws_item_sk`, `ws_order_number`)
+    DISTRIBUTED BY HASH(ws_item_sk, ws_order_number) BUCKETS 126
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "web"
+    "replication_num" = "1"
     )
     '''
 
@@ -585,15 +570,15 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS store (
-        s_store_sk bigint not null,
-        s_store_id char(16) not null,
+        s_store_sk int not null,
+        s_store_id varchar(16) not null,
         s_rec_start_date datev2,
         s_rec_end_date datev2,
-        s_closed_date_sk bigint,
+        s_closed_date_sk int,
         s_store_name varchar(50),
         s_number_employees integer,
         s_floor_space integer,
-        s_hours char(20),
+        s_hours varchar(20),
         s_manager varchar(40),
         s_market_id integer,
         s_geography_class varchar(100),
@@ -605,12 +590,12 @@ suite("load") {
         s_company_name varchar(50),
         s_street_number varchar(10),
         s_street_name varchar(60),
-        s_street_type char(15),
-        s_suite_number char(10),
+        s_street_type varchar(15),
+        s_suite_number varchar(10),
         s_city varchar(60),
         s_county varchar(30),
-        s_state char(2),
-        s_zip char(10),
+        s_state varchar(2),
+        s_zip varchar(10),
         s_country varchar(20),
         s_gmt_offset decimalv3(5,2),
         s_tax_percentage decimalv3(5,2)
@@ -628,19 +613,19 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS time_dim (
-        t_time_sk bigint not null,
-        t_time_id char(16) not null,
+        t_time_sk int not null,
+        t_time_id varchar(16) not null,
         t_time integer,
         t_hour integer,
         t_minute integer,
         t_second integer,
-        t_am_pm char(2),
-        t_shift char(20),
-        t_sub_shift char(20),
-        t_meal_time char(20)
+        t_am_pm varchar(2),
+        t_shift varchar(20),
+        t_sub_shift varchar(20),
+        t_meal_time varchar(20)
     )
     DUPLICATE KEY(t_time_sk)
-    DISTRIBUTED BY HASH(t_time_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(t_time_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -652,16 +637,16 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_page (
-            wp_web_page_sk bigint not null,
-            wp_web_page_id char(16) not null,
+            wp_web_page_sk int not null,
+            wp_web_page_id varchar(16) not null,
             wp_rec_start_date datev2,
             wp_rec_end_date datev2,
-            wp_creation_date_sk bigint,
-            wp_access_date_sk bigint,
-            wp_autogen_flag char(1),
-            wp_customer_sk bigint,
+            wp_creation_date_sk int,
+            wp_access_date_sk int,
+            wp_autogen_flag varchar(1),
+            wp_customer_sk int,
             wp_url varchar(100),
-            wp_type char(50),
+            wp_type varchar(50),
             wp_char_count integer,
             wp_link_count integer,
             wp_image_count integer,
@@ -680,16 +665,16 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS store_returns (
-        sr_item_sk bigint not null,
-        sr_ticket_number bigint not null,
-        sr_returned_date_sk bigint,
-        sr_return_time_sk bigint,
-        sr_customer_sk bigint,
-        sr_cdemo_sk bigint,
-        sr_hdemo_sk bigint,
-        sr_addr_sk bigint,
-        sr_store_sk bigint,
-        sr_reason_sk bigint,
+        sr_returned_date_sk int,
+        sr_item_sk int not null,
+        sr_ticket_number int not null,
+        sr_return_time_sk int,
+        sr_customer_sk int,
+        sr_cdemo_sk int,
+        sr_hdemo_sk int,
+        sr_addr_sk int,
+        sr_store_sk int,
+        sr_reason_sk int,
         sr_return_quantity integer,
         sr_return_amt decimalv3(7,2),
         sr_return_tax decimalv3(7,2),
@@ -701,11 +686,10 @@ suite("load") {
         sr_store_credit decimalv3(7,2),
         sr_net_loss decimalv3(7,2)
     )
-    duplicate key(sr_item_sk, sr_ticket_number)
-    distributed by hash (sr_item_sk, sr_ticket_number) buckets 32
+    duplicate key(`sr_returned_date_sk`, `sr_item_sk`, `sr_ticket_number`)
+    distributed by hash (sr_item_sk, sr_ticket_number) buckets 36
     properties (
-    "replication_num" = "1",
-    "colocate_with" = "store"
+    "replication_num" = "1"
     )
     '''
 
@@ -715,16 +699,16 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS store_sales (
-        ss_sold_date_sk bigint,
-        ss_item_sk bigint not null,
-        ss_ticket_number bigint not null,
-        ss_sold_time_sk bigint,
-        ss_customer_sk bigint,
-        ss_cdemo_sk bigint,
-        ss_hdemo_sk bigint,
-        ss_addr_sk bigint,
-        ss_store_sk bigint,
-        ss_promo_sk bigint,
+        ss_sold_date_sk int,
+        ss_item_sk int not null,
+        ss_ticket_number int not null,
+        ss_sold_time_sk int,
+        ss_customer_sk int,
+        ss_cdemo_sk int,
+        ss_hdemo_sk int,
+        ss_addr_sk int,
+        ss_store_sk int,
+        ss_promo_sk int,
         ss_quantity integer,
         ss_wholesale_cost decimalv3(7,2),
         ss_list_price decimalv3(7,2),
@@ -739,8 +723,8 @@ suite("load") {
         ss_net_paid_inc_tax decimalv3(7,2),
         ss_net_profit decimalv3(7,2)
     )
-    DUPLICATE KEY(ss_sold_date_sk, ss_item_sk)
-    DISTRIBUTED BY HASH(ss_item_sk, ss_ticket_number) BUCKETS 32
+    DUPLICATE KEY(`ss_sold_date_sk`, `ss_item_sk`, `ss_ticket_number`)
+    DISTRIBUTED BY HASH(ss_item_sk, ss_ticket_number) BUCKETS 261
     PROPERTIES (
     "replication_num" = "1",
     "colocate_with" = "store"
@@ -753,12 +737,12 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS ship_mode (
-        sm_ship_mode_sk bigint not null,
-        sm_ship_mode_id char(16) not null,
-        sm_type char(30),
-        sm_code char(10),
-        sm_carrier char(20),
-        sm_contract char(20)
+        sm_ship_mode_sk int not null,
+        sm_ship_mode_id varchar(16) not null,
+        sm_type varchar(30),
+        sm_code varchar(10),
+        sm_carrier varchar(20),
+        sm_contract varchar(20)
     )
     DUPLICATE KEY(sm_ship_mode_sk)
     DISTRIBUTED BY HASH(sm_ship_mode_sk) BUCKETS 1
@@ -773,27 +757,27 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS customer (
-        c_customer_sk bigint not null,
-        c_customer_id char(16) not null,
-        c_current_cdemo_sk bigint,
-        c_current_hdemo_sk bigint,
-        c_current_addr_sk bigint,
-        c_first_shipto_date_sk bigint,
-        c_first_sales_date_sk bigint,
-        c_salutation char(10),
-        c_first_name char(20),
-        c_last_name char(30),
-        c_preferred_cust_flag char(1),
+        c_customer_sk int not null,
+        c_customer_id varchar(16) not null,
+        c_current_cdemo_sk int,
+        c_current_hdemo_sk int,
+        c_current_addr_sk int,
+        c_first_shipto_date_sk int,
+        c_first_sales_date_sk int,
+        c_salutation varchar(10),
+        c_first_name varchar(20),
+        c_last_name varchar(30),
+        c_preferred_cust_flag varchar(1),
         c_birth_day integer,
         c_birth_month integer,
         c_birth_year integer,
         c_birth_country varchar(20),
-        c_login char(13),
-        c_email_address char(50),
-        c_last_review_date_sk bigint
+        c_login varchar(13),
+        c_email_address varchar(50),
+        c_last_review_date_sk int
     )
     DUPLICATE KEY(c_customer_sk)
-    DISTRIBUTED BY HASH(c_customer_id) BUCKETS 12
+    DISTRIBUTED BY HASH(c_customer_sk) BUCKETS 18
     PROPERTIES (
     "replication_num" = "1"
     )
diff --git a/regression-test/suites/shape_check/tpcds_sf1000/load.groovy b/regression-test/suites/shape_check/tpcds_sf1000/load.groovy
index 5ea4258b820..52eee1cd28d 100644
--- a/regression-test/suites/shape_check/tpcds_sf1000/load.groovy
+++ b/regression-test/suites/shape_check/tpcds_sf1000/load.groovy
@@ -20,25 +20,25 @@ suite("load") {
     sql "drop database if exists ${database}"
     sql "create database ${database}"
     sql "use ${database}"
-    
+
     sql '''
     drop table if exists customer_demographics
     '''
 
     sql '''
     CREATE TABLE IF NOT EXISTS customer_demographics (
-        cd_demo_sk bigint not null,
-        cd_gender char(1),
-        cd_marital_status char(1),
-        cd_education_status char(20),
+        cd_demo_sk int not null,
+        cd_gender varchar(1),
+        cd_marital_status varchar(1),
+        cd_education_status varchar(20),
         cd_purchase_estimate integer,
-        cd_credit_rating char(10),
+        cd_credit_rating varchar(10),
         cd_dep_count integer,
         cd_dep_employed_count integer,
         cd_dep_college_count integer
     )
     DUPLICATE KEY(cd_demo_sk)
-    DISTRIBUTED BY HASH(cd_gender) BUCKETS 12
+    DISTRIBUTED BY HASH(cd_demo_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -50,9 +50,9 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS reason (
-        r_reason_sk bigint not null,
-        r_reason_id char(16) not null,
-        r_reason_desc char(100)
+        r_reason_sk int not null,
+        r_reason_id varchar(16) not null,
+        r_reason_desc varchar(100)
     )
     DUPLICATE KEY(r_reason_sk)
     DISTRIBUTED BY HASH(r_reason_sk) BUCKETS 1
@@ -67,8 +67,8 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS date_dim (
-        d_date_sk bigint not null,
-        d_date_id char(16) not null,
+        d_date_sk int not null,
+        d_date_id varchar(16) not null,
         d_date datev2,
         d_month_seq integer,
         d_week_seq integer,
@@ -81,23 +81,23 @@ suite("load") {
         d_fy_year integer,
         d_fy_quarter_seq integer,
         d_fy_week_seq integer,
-        d_day_name char(9),
-        d_quarter_name char(6),
-        d_holiday char(1),
-        d_weekend char(1),
-        d_following_holiday char(1),
+        d_day_name varchar(9),
+        d_quarter_name varchar(6),
+        d_holiday varchar(1),
+        d_weekend varchar(1),
+        d_following_holiday varchar(1),
         d_first_dom integer,
         d_last_dom integer,
         d_same_day_ly integer,
         d_same_day_lq integer,
-        d_current_day char(1),
-        d_current_week char(1),
-        d_current_month char(1),
-        d_current_quarter char(1),
-        d_current_year char(1)
+        d_current_day varchar(1),
+        d_current_week varchar(1),
+        d_current_month varchar(1),
+        d_current_quarter varchar(1),
+        d_current_year varchar(1)
     )
     DUPLICATE KEY(d_date_sk)
-    DISTRIBUTED BY HASH(d_date_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(d_date_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -109,18 +109,18 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS warehouse (
-        w_warehouse_sk bigint not null,
-        w_warehouse_id char(16) not null,
+        w_warehouse_sk int not null,
+        w_warehouse_id varchar(16) not null,
         w_warehouse_name varchar(20),
         w_warehouse_sq_ft integer,
-        w_street_number char(10),
+        w_street_number varchar(10),
         w_street_name varchar(60),
-        w_street_type char(15),
-        w_suite_number char(10),
+        w_street_type varchar(15),
+        w_suite_number varchar(10),
         w_city varchar(60),
         w_county varchar(30),
-        w_state char(2),
-        w_zip char(10),
+        w_state varchar(2),
+        w_zip varchar(10),
         w_country varchar(20),
         w_gmt_offset decimalv3(5,2)
     )
@@ -137,25 +137,25 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS catalog_sales (
-        cs_sold_date_sk bigint,
-        cs_item_sk bigint not null,
-        cs_order_number bigint not null,
-        cs_sold_time_sk bigint,
-        cs_ship_date_sk bigint,
-        cs_bill_customer_sk bigint,
-        cs_bill_cdemo_sk bigint,
-        cs_bill_hdemo_sk bigint,
-        cs_bill_addr_sk bigint,
-        cs_ship_customer_sk bigint,
-        cs_ship_cdemo_sk bigint,
-        cs_ship_hdemo_sk bigint,
-        cs_ship_addr_sk bigint,
-        cs_call_center_sk bigint,
-        cs_catalog_page_sk bigint,
-        cs_ship_mode_sk bigint,
-        cs_warehouse_sk bigint,
-        cs_promo_sk bigint,
-        cs_quantity integer,
+        cs_sold_date_sk int,
+        cs_item_sk int not null,
+        cs_order_number int not null,
+        cs_sold_time_sk int,
+        cs_ship_date_sk int,
+        cs_bill_customer_sk int,
+        cs_bill_cdemo_sk int,
+        cs_bill_hdemo_sk int,
+        cs_bill_addr_sk int,
+        cs_ship_customer_sk int,
+        cs_ship_cdemo_sk int,
+        cs_ship_hdemo_sk int,
+        cs_ship_addr_sk int,
+        cs_call_center_sk int,
+        cs_catalog_page_sk int,
+        cs_ship_mode_sk int,
+        cs_warehouse_sk int,
+        cs_promo_sk int,
+        cs_quantity int,
         cs_wholesale_cost decimalv3(7,2),
         cs_list_price decimalv3(7,2),
         cs_sales_price decimalv3(7,2),
@@ -172,11 +172,10 @@ suite("load") {
         cs_net_paid_inc_ship_tax decimalv3(7,2),
         cs_net_profit decimalv3(7,2)
     )
-    DUPLICATE KEY(cs_sold_date_sk, cs_item_sk)
-    DISTRIBUTED BY HASH(cs_item_sk, cs_order_number) BUCKETS 32
+    DUPLICATE KEY(`cs_sold_date_sk`, `cs_item_sk`, `cs_order_number`)
+    DISTRIBUTED BY HASH(cs_item_sk, cs_order_number) BUCKETS 261
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "catalog"
+    "replication_num" = "1"
     )
     '''
 
@@ -186,34 +185,34 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS call_center (
-    cc_call_center_sk bigint not null,
-    cc_call_center_id char(16) not null,
-    cc_rec_start_date datev2,
-    cc_rec_end_date datev2,
+    cc_call_center_sk int not null,
+    cc_call_center_id varchar(16) not null,
+    cc_rec_start_date date,
+    cc_rec_end_date date,
     cc_closed_date_sk integer,
     cc_open_date_sk integer,
     cc_name varchar(50),
     cc_class varchar(50),
     cc_employees integer,
     cc_sq_ft integer,
-    cc_hours char(20),
+    cc_hours varchar(20),
     cc_manager varchar(40),
     cc_mkt_id integer,
-    cc_mkt_class char(50),
+    cc_mkt_class varchar(50),
     cc_mkt_desc varchar(100),
     cc_market_manager varchar(40),
     cc_division integer,
     cc_division_name varchar(50),
     cc_company integer,
-    cc_company_name char(50),
-    cc_street_number char(10),
+    cc_company_name varchar(50),
+    cc_street_number varchar(10),
     cc_street_name varchar(60),
-    cc_street_type char(15),
-    cc_suite_number char(10),
+    cc_street_type varchar(15),
+    cc_suite_number varchar(10),
     cc_city varchar(60),
     cc_county varchar(30),
-    cc_state char(2),
-    cc_zip char(10),
+    cc_state varchar(2),
+    cc_zip varchar(10),
     cc_country varchar(20),
     cc_gmt_offset decimalv3(5,2),
     cc_tax_percentage decimalv3(5,2)
@@ -231,13 +230,13 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS inventory (
-        inv_date_sk bigint not null,
-        inv_item_sk bigint not null,
-        inv_warehouse_sk bigint,
+        inv_date_sk int not null,
+        inv_item_sk int not null,
+        inv_warehouse_sk int,
         inv_quantity_on_hand integer
     )
     DUPLICATE KEY(inv_date_sk, inv_item_sk, inv_warehouse_sk)
-    DISTRIBUTED BY HASH(inv_date_sk, inv_item_sk, inv_warehouse_sk) BUCKETS 32
+    DISTRIBUTED BY HASH(inv_item_sk) BUCKETS 63
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -249,23 +248,23 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS catalog_returns (
-    cr_item_sk bigint not null,
-    cr_order_number bigint not null,
-    cr_returned_date_sk bigint,
-    cr_returned_time_sk bigint,
-    cr_refunded_customer_sk bigint,
-    cr_refunded_cdemo_sk bigint,
-    cr_refunded_hdemo_sk bigint,
-    cr_refunded_addr_sk bigint,
-    cr_returning_customer_sk bigint,
-    cr_returning_cdemo_sk bigint,
-    cr_returning_hdemo_sk bigint,
-    cr_returning_addr_sk bigint,
-    cr_call_center_sk bigint,
-    cr_catalog_page_sk bigint,
-    cr_ship_mode_sk bigint,
-    cr_warehouse_sk bigint,
-    cr_reason_sk bigint,
+    cr_returned_date_sk int,
+    cr_item_sk int not null,
+    cr_order_number int not null,
+    cr_returned_time_sk int,
+    cr_refunded_customer_sk int,
+    cr_refunded_cdemo_sk int,
+    cr_refunded_hdemo_sk int,
+    cr_refunded_addr_sk int,
+    cr_returning_customer_sk int,
+    cr_returning_cdemo_sk int,
+    cr_returning_hdemo_sk int,
+    cr_returning_addr_sk int,
+    cr_call_center_sk int,
+    cr_catalog_page_sk int,
+    cr_ship_mode_sk int,
+    cr_warehouse_sk int,
+    cr_reason_sk int,
     cr_return_quantity integer,
     cr_return_amount decimalv3(7,2),
     cr_return_tax decimalv3(7,2),
@@ -277,11 +276,10 @@ suite("load") {
     cr_store_credit decimalv3(7,2),
     cr_net_loss decimalv3(7,2)
     )
-    DUPLICATE KEY(cr_item_sk, cr_order_number)
-    DISTRIBUTED BY HASH(cr_item_sk, cr_order_number) BUCKETS 32
+    DUPLICATE KEY(`cr_returned_date_sk`, `cr_item_sk`, `cr_order_number`)
+    DISTRIBUTED BY HASH(cr_item_sk, cr_order_number) BUCKETS 36
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "catalog"
+    "replication_num" = "1"
     )
     '''
 
@@ -291,14 +289,14 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS household_demographics (
-        hd_demo_sk bigint not null,
-        hd_income_band_sk bigint,
-        hd_buy_potential char(15),
+        hd_demo_sk int not null,
+        hd_income_band_sk int,
+        hd_buy_potential varchar(15),
         hd_dep_count integer,
         hd_vehicle_count integer
     )
     DUPLICATE KEY(hd_demo_sk)
-    DISTRIBUTED BY HASH(hd_demo_sk) BUCKETS 3
+    DISTRIBUTED BY HASH(hd_demo_sk) BUCKETS 1
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -310,22 +308,22 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS customer_address (
-        ca_address_sk bigint not null,
-        ca_address_id char(16) not null,
-        ca_street_number char(10),
+        ca_address_sk int not null,
+        ca_address_id varchar(16) not null,
+        ca_street_number varchar(10),
         ca_street_name varchar(60),
-        ca_street_type char(15),
-        ca_suite_number char(10),
+        ca_street_type varchar(15),
+        ca_suite_number varchar(10),
         ca_city varchar(60),
         ca_county varchar(30),
-        ca_state char(2),
-        ca_zip char(10),
+        ca_state varchar(2),
+        ca_zip varchar(10),
         ca_country varchar(20),
         ca_gmt_offset decimalv3(5,2),
-        ca_location_type char(20)
+        ca_location_type varchar(20)
     )
     DUPLICATE KEY(ca_address_sk)
-    DISTRIBUTED BY HASH(ca_address_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(ca_address_sk) BUCKETS 18
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -337,7 +335,7 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS income_band (
-        ib_income_band_sk bigint not null,
+        ib_income_band_sk int not null,
         ib_lower_bound integer,
         ib_upper_bound integer
     )
@@ -354,8 +352,8 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS catalog_page (
-    cp_catalog_page_sk bigint not null,
-    cp_catalog_page_id char(16) not null,
+    cp_catalog_page_sk int not null,
+    cp_catalog_page_id varchar(16) not null,
     cp_start_date_sk integer,
     cp_end_date_sk integer,
     cp_department varchar(50),
@@ -377,31 +375,31 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS item (
-        i_item_sk bigint not null,
-        i_item_id char(16) not null,
+        i_item_sk int not null,
+        i_item_id varchar(16) not null,
         i_rec_start_date datev2,
         i_rec_end_date datev2,
         i_item_desc varchar(200),
         i_current_price decimalv3(7,2),
         i_wholesale_cost decimalv3(7,2),
         i_brand_id integer,
-        i_brand char(50),
+        i_brand varchar(50),
         i_class_id integer,
         i_class char(50),
         i_category_id integer,
-        i_category char(50),
+        i_category varchar(50),
         i_manufact_id integer,
-        i_manufact char(50),
-        i_size char(20),
-        i_formulation char(20),
-        i_color char(20),
-        i_units char(10),
-        i_container char(10),
+        i_manufact varchar(50),
+        i_size varchar(20),
+        i_formulation varchar(20),
+        i_color varchar(20),
+        i_units varchar(10),
+        i_container varchar(10),
         i_manager_id integer,
-        i_product_name char(50)
+        i_product_name varchar(50)
     )
     DUPLICATE KEY(i_item_sk)
-    DISTRIBUTED BY HASH(i_item_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(i_item_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -413,20 +411,20 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_returns (
-        wr_item_sk bigint not null,
-        wr_order_number bigint not null,
-        wr_returned_date_sk bigint,
-        wr_returned_time_sk bigint,
-        wr_refunded_customer_sk bigint,
-        wr_refunded_cdemo_sk bigint,
-        wr_refunded_hdemo_sk bigint,
-        wr_refunded_addr_sk bigint,
-        wr_returning_customer_sk bigint,
-        wr_returning_cdemo_sk bigint,
-        wr_returning_hdemo_sk bigint,
-        wr_returning_addr_sk bigint,
-        wr_web_page_sk bigint,
-        wr_reason_sk bigint,
+        wr_returned_date_sk int,
+        wr_item_sk int not null,
+        wr_order_number int not null,
+        wr_returned_time_sk int,
+        wr_refunded_customer_sk int,
+        wr_refunded_cdemo_sk int,
+        wr_refunded_hdemo_sk int,
+        wr_refunded_addr_sk int,
+        wr_returning_customer_sk int,
+        wr_returning_cdemo_sk int,
+        wr_returning_hdemo_sk int,
+        wr_returning_addr_sk int,
+        wr_web_page_sk int,
+        wr_reason_sk int,
         wr_return_quantity integer,
         wr_return_amt decimalv3(7,2),
         wr_return_tax decimalv3(7,2),
@@ -438,11 +436,10 @@ suite("load") {
         wr_account_credit decimalv3(7,2),
         wr_net_loss decimalv3(7,2)
     )
-    DUPLICATE KEY(wr_item_sk, wr_order_number)
-    DISTRIBUTED BY HASH(wr_item_sk, wr_order_number) BUCKETS 32
+    DUPLICATE KEY(`wr_returned_date_sk`, `wr_item_sk`, `wr_order_number`)
+    DISTRIBUTED BY HASH(`wr_item_sk`, `wr_order_number`) BUCKETS 18
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "web"
+    "replication_num" = "1"
     )
     '''
 
@@ -452,13 +449,13 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_site (
-        web_site_sk bigint not null,
-        web_site_id char(16) not null,
+        web_site_sk int not null,
+        web_site_id varchar(16) not null,
         web_rec_start_date datev2,
         web_rec_end_date datev2,
         web_name varchar(50),
-        web_open_date_sk bigint,
-        web_close_date_sk bigint,
+        web_open_date_sk int,
+        web_close_date_sk int,
         web_class varchar(50),
         web_manager varchar(40),
         web_mkt_id integer,
@@ -466,15 +463,15 @@ suite("load") {
         web_mkt_desc varchar(100),
         web_market_manager varchar(40),
         web_company_id integer,
-        web_company_name char(50),
-        web_street_number char(10),
+        web_company_name varchar(50),
+        web_street_number varchar(10),
         web_street_name varchar(60),
-        web_street_type char(15),
-        web_suite_number char(10),
+        web_street_type varchar(15),
+        web_suite_number varchar(10),
         web_city varchar(60),
         web_county varchar(30),
-        web_state char(2),
-        web_zip char(10),
+        web_state varchar(2),
+        web_zip varchar(10),
         web_country varchar(20),
         web_gmt_offset decimalv3(5,2),
         web_tax_percentage decimalv3(5,2)
@@ -492,25 +489,25 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS promotion (
-        p_promo_sk bigint not null,
-        p_promo_id char(16) not null,
-        p_start_date_sk bigint,
-        p_end_date_sk bigint,
-        p_item_sk bigint,
+        p_promo_sk int not null,
+        p_promo_id varchar(16) not null,
+        p_start_date_sk int,
+        p_end_date_sk int,
+        p_item_sk int,
         p_cost decimalv3(15,2),
         p_response_targe integer,
-        p_promo_name char(50),
-        p_channel_dmail char(1),
-        p_channel_email char(1),
-        p_channel_catalog char(1),
-        p_channel_tv char(1),
-        p_channel_radio char(1),
-        p_channel_press char(1),
-        p_channel_event char(1),
-        p_channel_demo char(1),
+        p_promo_name varchar(50),
+        p_channel_dmail varchar(1),
+        p_channel_email varchar(1),
+        p_channel_catalog varchar(1),
+        p_channel_tv varchar(1),
+        p_channel_radio varchar(1),
+        p_channel_press varchar(1),
+        p_channel_event varchar(1),
+        p_channel_demo varchar(1),
         p_channel_details varchar(100),
-        p_purpose char(15),
-        p_discount_active char(1)
+        p_purpose varchar(15),
+        p_discount_active varchar(1)
     )
     DUPLICATE KEY(p_promo_sk)
     DISTRIBUTED BY HASH(p_promo_sk) BUCKETS 1
@@ -525,24 +522,24 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_sales (
-        ws_sold_date_sk bigint,
-        ws_item_sk bigint not null,
-        ws_order_number bigint not null,
-        ws_sold_time_sk bigint,
-        ws_ship_date_sk bigint,
-        ws_bill_customer_sk bigint,
-        ws_bill_cdemo_sk bigint,
-        ws_bill_hdemo_sk bigint,
-        ws_bill_addr_sk bigint,
-        ws_ship_customer_sk bigint,
-        ws_ship_cdemo_sk bigint,
-        ws_ship_hdemo_sk bigint,
-        ws_ship_addr_sk bigint,
-        ws_web_page_sk bigint,
-        ws_web_site_sk bigint,
-        ws_ship_mode_sk bigint,
-        ws_warehouse_sk bigint,
-        ws_promo_sk bigint,
+        ws_sold_date_sk int,
+        ws_item_sk int not null,
+        ws_order_number int not null,
+        ws_sold_time_sk int,
+        ws_ship_date_sk int,
+        ws_bill_customer_sk int,
+        ws_bill_cdemo_sk int,
+        ws_bill_hdemo_sk int,
+        ws_bill_addr_sk int,
+        ws_ship_customer_sk int,
+        ws_ship_cdemo_sk int,
+        ws_ship_hdemo_sk int,
+        ws_ship_addr_sk int,
+        ws_web_page_sk int,
+        ws_web_site_sk int,
+        ws_ship_mode_sk int,
+        ws_warehouse_sk int,
+        ws_promo_sk int,
         ws_quantity integer,
         ws_wholesale_cost decimalv3(7,2),
         ws_list_price decimalv3(7,2),
@@ -560,11 +557,10 @@ suite("load") {
         ws_net_paid_inc_ship_tax decimalv3(7,2),
         ws_net_profit decimalv3(7,2)
     )
-    DUPLICATE KEY(ws_sold_date_sk, ws_item_sk)
-    DISTRIBUTED BY HASH(ws_item_sk, ws_order_number) BUCKETS 32
+    DUPLICATE KEY(`ws_sold_date_sk`, `ws_item_sk`, `ws_order_number`)
+    DISTRIBUTED BY HASH(ws_item_sk, ws_order_number) BUCKETS 126
     PROPERTIES (
-    "replication_num" = "1",
-    "colocate_with" = "web"
+    "replication_num" = "1"
     )
     '''
 
@@ -574,15 +570,15 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS store (
-        s_store_sk bigint not null,
-        s_store_id char(16) not null,
+        s_store_sk int not null,
+        s_store_id varchar(16) not null,
         s_rec_start_date datev2,
         s_rec_end_date datev2,
-        s_closed_date_sk bigint,
+        s_closed_date_sk int,
         s_store_name varchar(50),
         s_number_employees integer,
         s_floor_space integer,
-        s_hours char(20),
+        s_hours varchar(20),
         s_manager varchar(40),
         s_market_id integer,
         s_geography_class varchar(100),
@@ -594,12 +590,12 @@ suite("load") {
         s_company_name varchar(50),
         s_street_number varchar(10),
         s_street_name varchar(60),
-        s_street_type char(15),
-        s_suite_number char(10),
+        s_street_type varchar(15),
+        s_suite_number varchar(10),
         s_city varchar(60),
         s_county varchar(30),
-        s_state char(2),
-        s_zip char(10),
+        s_state varchar(2),
+        s_zip varchar(10),
         s_country varchar(20),
         s_gmt_offset decimalv3(5,2),
         s_tax_percentage decimalv3(5,2)
@@ -617,19 +613,19 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS time_dim (
-        t_time_sk bigint not null,
-        t_time_id char(16) not null,
+        t_time_sk int not null,
+        t_time_id varchar(16) not null,
         t_time integer,
         t_hour integer,
         t_minute integer,
         t_second integer,
-        t_am_pm char(2),
-        t_shift char(20),
-        t_sub_shift char(20),
-        t_meal_time char(20)
+        t_am_pm varchar(2),
+        t_shift varchar(20),
+        t_sub_shift varchar(20),
+        t_meal_time varchar(20)
     )
     DUPLICATE KEY(t_time_sk)
-    DISTRIBUTED BY HASH(t_time_sk) BUCKETS 12
+    DISTRIBUTED BY HASH(t_time_sk) BUCKETS 9
     PROPERTIES (
     "replication_num" = "1"
     )
@@ -641,16 +637,16 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS web_page (
-            wp_web_page_sk bigint not null,
-            wp_web_page_id char(16) not null,
+            wp_web_page_sk int not null,
+            wp_web_page_id varchar(16) not null,
             wp_rec_start_date datev2,
             wp_rec_end_date datev2,
-            wp_creation_date_sk bigint,
-            wp_access_date_sk bigint,
-            wp_autogen_flag char(1),
-            wp_customer_sk bigint,
+            wp_creation_date_sk int,
+            wp_access_date_sk int,
+            wp_autogen_flag varchar(1),
+            wp_customer_sk int,
             wp_url varchar(100),
-            wp_type char(50),
+            wp_type varchar(50),
             wp_char_count integer,
             wp_link_count integer,
             wp_image_count integer,
@@ -669,16 +665,16 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS store_returns (
-        sr_item_sk bigint not null,
-        sr_ticket_number bigint not null,
-        sr_returned_date_sk bigint,
-        sr_return_time_sk bigint,
-        sr_customer_sk bigint,
-        sr_cdemo_sk bigint,
-        sr_hdemo_sk bigint,
-        sr_addr_sk bigint,
-        sr_store_sk bigint,
-        sr_reason_sk bigint,
+        sr_returned_date_sk int,
+        sr_item_sk int not null,
+        sr_ticket_number int not null,
+        sr_return_time_sk int,
+        sr_customer_sk int,
+        sr_cdemo_sk int,
+        sr_hdemo_sk int,
+        sr_addr_sk int,
+        sr_store_sk int,
+        sr_reason_sk int,
         sr_return_quantity integer,
         sr_return_amt decimalv3(7,2),
         sr_return_tax decimalv3(7,2),
@@ -690,11 +686,10 @@ suite("load") {
         sr_store_credit decimalv3(7,2),
         sr_net_loss decimalv3(7,2)
     )
-    duplicate key(sr_item_sk, sr_ticket_number)
-    distributed by hash (sr_item_sk, sr_ticket_number) buckets 32
+    duplicate key(`sr_returned_date_sk`, `sr_item_sk`, `sr_ticket_number`)
+    distributed by hash (sr_item_sk, sr_ticket_number) buckets 36
     properties (
-    "replication_num" = "1",
-    "colocate_with" = "store"
+    "replication_num" = "1"
     )
     '''
 
@@ -704,16 +699,16 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS store_sales (
-        ss_sold_date_sk bigint,
-        ss_item_sk bigint not null,
-        ss_ticket_number bigint not null,
-        ss_sold_time_sk bigint,
-        ss_customer_sk bigint,
-        ss_cdemo_sk bigint,
-        ss_hdemo_sk bigint,
-        ss_addr_sk bigint,
-        ss_store_sk bigint,
-        ss_promo_sk bigint,
+        ss_sold_date_sk int,
+        ss_item_sk int not null,
+        ss_ticket_number int not null,
+        ss_sold_time_sk int,
+        ss_customer_sk int,
+        ss_cdemo_sk int,
+        ss_hdemo_sk int,
+        ss_addr_sk int,
+        ss_store_sk int,
+        ss_promo_sk int,
         ss_quantity integer,
         ss_wholesale_cost decimalv3(7,2),
         ss_list_price decimalv3(7,2),
@@ -728,8 +723,8 @@ suite("load") {
         ss_net_paid_inc_tax decimalv3(7,2),
         ss_net_profit decimalv3(7,2)
     )
-    DUPLICATE KEY(ss_sold_date_sk, ss_item_sk)
-    DISTRIBUTED BY HASH(ss_item_sk, ss_ticket_number) BUCKETS 32
+    DUPLICATE KEY(`ss_sold_date_sk`, `ss_item_sk`, `ss_ticket_number`)
+    DISTRIBUTED BY HASH(ss_item_sk, ss_ticket_number) BUCKETS 261
     PROPERTIES (
     "replication_num" = "1",
     "colocate_with" = "store"
@@ -742,12 +737,12 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS ship_mode (
-        sm_ship_mode_sk bigint not null,
-        sm_ship_mode_id char(16) not null,
-        sm_type char(30),
-        sm_code char(10),
-        sm_carrier char(20),
-        sm_contract char(20)
+        sm_ship_mode_sk int not null,
+        sm_ship_mode_id varchar(16) not null,
+        sm_type varchar(30),
+        sm_code varchar(10),
+        sm_carrier varchar(20),
+        sm_contract varchar(20)
     )
     DUPLICATE KEY(sm_ship_mode_sk)
     DISTRIBUTED BY HASH(sm_ship_mode_sk) BUCKETS 1
@@ -762,27 +757,27 @@ suite("load") {
 
     sql '''
     CREATE TABLE IF NOT EXISTS customer (
-        c_customer_sk bigint not null,
-        c_customer_id char(16) not null,
-        c_current_cdemo_sk bigint,
-        c_current_hdemo_sk bigint,
-        c_current_addr_sk bigint,
-        c_first_shipto_date_sk bigint,
-        c_first_sales_date_sk bigint,
-        c_salutation char(10),
-        c_first_name char(20),
-        c_last_name char(30),
-        c_preferred_cust_flag char(1),
+        c_customer_sk int not null,
+        c_customer_id varchar(16) not null,
+        c_current_cdemo_sk int,
+        c_current_hdemo_sk int,
+        c_current_addr_sk int,
+        c_first_shipto_date_sk int,
+        c_first_sales_date_sk int,
+        c_salutation varchar(10),
+        c_first_name varchar(20),
+        c_last_name varchar(30),
+        c_preferred_cust_flag varchar(1),
         c_birth_day integer,
         c_birth_month integer,
         c_birth_year integer,
         c_birth_country varchar(20),
-        c_login char(13),
-        c_email_address char(50),
-        c_last_review_date_sk bigint
+        c_login varchar(13),
+        c_email_address varchar(50),
+        c_last_review_date_sk int
     )
     DUPLICATE KEY(c_customer_sk)
-    DISTRIBUTED BY HASH(c_customer_id) BUCKETS 12
+    DISTRIBUTED BY HASH(c_customer_sk) BUCKETS 18
     PROPERTIES (
     "replication_num" = "1"
     )


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org