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