This is an automated email from the ASF dual-hosted git repository.
englefly 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 7d66bc07db7 [opt](nereids) adjust Left join cost
factor:probeShortcutFactor (#60183)
7d66bc07db7 is described below
commit 7d66bc07db7196d249e9d00d83f82ec45285f6fd
Author: minghong <[email protected]>
AuthorDate: Wed Jan 28 10:34:26 2026 +0800
[opt](nereids) adjust Left join cost factor:probeShortcutFactor (#60183)
### What problem does this PR solve?
probeShortcutFactor is not reasonable when right row count is much more
than left row count.
tpch affected query(1T)
before:22.sql,49.008,2.729,2.582,2.666,2.582
after: 22.sql,1.466,1.439,1.384,1.379,1.379
tpcds affected queries(1T)
before:
query33.sql,3.252,0.490,0.454,0.412,0.412
query35.sql,12.897,1.059,1.054,1.039,1.039
query64.sql,139.298,2.788,20.533,8.234,2.788
query69.sql,3.004,0.835,0.773,0.772,0.772
after:
query33.sql,1.114,0.512,0.540,0.468,0.468
query35.sql,1.398,1.146,1.194,1.180,1.146
query64.sql,3.562,1.939,2.054,1.985,1.939
query69.sql,0.826,0.848,0.806,0.804,0.804
---
.../org/apache/doris/nereids/cost/CostModel.java | 3 +-
.../tpcds_sf100/constraints/query23.out | 12 +-
.../shape_check/tpcds_sf100/rf_prune/query33.out | 34 +++---
.../shape_check/tpcds_sf100/rf_prune/query35.out | 58 ++++-----
.../shape_check/tpcds_sf100/rf_prune/query64.out | 129 +++++++++++----------
.../data/shape_check/tpcds_sf100/shape/query33.out | 26 ++---
.../data/shape_check/tpcds_sf100/shape/query35.out | 58 ++++-----
.../data/shape_check/tpcds_sf100/shape/query64.out | 129 +++++++++++----------
.../data/shape_check/tpcds_sf1000/hint/query69.out | 34 +++---
.../shape_check/tpcds_sf1000/shape/query33.out | 26 ++---
.../shape_check/tpcds_sf1000/shape/query35.out | 44 +++----
.../shape_check/tpcds_sf1000/shape/query64.out | 129 +++++++++++----------
.../shape_check/tpcds_sf1000/shape/query69.out | 34 +++---
.../check_point/probeShortcutFactor.out | 10 ++
.../data/shape_check/tpch_sf1000/rf_prune/q22.out | 20 ++--
.../data/shape_check/tpch_sf1000/shape/q22.out | 20 ++--
.../check_point/probeShortcutFactor.groovy | 44 +++++++
17 files changed, 434 insertions(+), 376 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModel.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModel.java
index 9f828847eaa..34bb9dacddf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModel.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModel.java
@@ -452,7 +452,8 @@ class CostModel extends PlanVisitor<Cost, PlanContext> {
);
}
double probeShortcutFactor = 1.0;
- if (ConnectContext.get() != null &&
ConnectContext.get().getStatementContext() != null
+ if (rightRowCount < 10 * leftRowCount
+ && ConnectContext.get() != null &&
ConnectContext.get().getStatementContext() != null
&&
!ConnectContext.get().getStatementContext().isHasUnknownColStats()
&& physicalHashJoin.getJoinType().isLeftSemiOrAntiJoin()
&& physicalHashJoin.getOtherJoinConjuncts().isEmpty()
diff --git
a/regression-test/data/shape_check/tpcds_sf100/constraints/query23.out
b/regression-test/data/shape_check/tpcds_sf100/constraints/query23.out
index 9aac34d3e02..17c6c0e8b7a 100644
--- a/regression-test/data/shape_check/tpcds_sf100/constraints/query23.out
+++ b/regression-test/data/shape_check/tpcds_sf100/constraints/query23.out
@@ -53,29 +53,29 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
--------------hashAgg[LOCAL]
----------------PhysicalUnion
------------------PhysicalProject
---------------------hashJoin[LEFT_SEMI_JOIN shuffle]
hashCondition=((catalog_sales.cs_item_sk = frequent_ss_items.item_sk))
otherCondition=() build RFs:RF5 item_sk->[cs_item_sk]
+--------------------hashJoin[RIGHT_SEMI_JOIN shuffle]
hashCondition=((catalog_sales.cs_item_sk = frequent_ss_items.item_sk))
otherCondition=() build RFs:RF5 cs_item_sk->[item_sk]
+----------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply RFs: RF5
----------------------PhysicalProject
------------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((catalog_sales.cs_bill_customer_sk =
best_ss_customer.c_customer_sk)) otherCondition=() build RFs:RF4
c_customer_sk->[cs_bill_customer_sk]
--------------------------PhysicalProject
----------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF3 d_date_sk->[cs_sold_date_sk]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF3
RF4 RF5
+--------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF3
RF4
------------------------------PhysicalProject
--------------------------------filter((date_dim.d_moy = 5) and
(date_dim.d_year = 2000))
----------------------------------PhysicalOlapScan[date_dim]
--------------------------PhysicalCteConsumer ( cteId=CTEId#2 )
-----------------------PhysicalCteConsumer ( cteId=CTEId#0 )
------------------PhysicalProject
---------------------hashJoin[LEFT_SEMI_JOIN shuffle]
hashCondition=((web_sales.ws_item_sk = frequent_ss_items.item_sk))
otherCondition=() build RFs:RF8 item_sk->[ws_item_sk]
+--------------------hashJoin[RIGHT_SEMI_JOIN shuffle]
hashCondition=((web_sales.ws_item_sk = frequent_ss_items.item_sk))
otherCondition=() build RFs:RF8 ws_item_sk->[item_sk]
+----------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply RFs: RF8
----------------------PhysicalProject
------------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((web_sales.ws_bill_customer_sk =
best_ss_customer.c_customer_sk)) otherCondition=() build RFs:RF7
c_customer_sk->[ws_bill_customer_sk]
--------------------------PhysicalProject
----------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF6 d_date_sk->[ws_sold_date_sk]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6 RF7
RF8
+--------------------------------PhysicalOlapScan[web_sales] apply RFs: RF6 RF7
------------------------------PhysicalProject
--------------------------------filter((date_dim.d_moy = 5) and
(date_dim.d_year = 2000))
----------------------------------PhysicalOlapScan[date_dim]
--------------------------PhysicalCteConsumer ( cteId=CTEId#2 )
-----------------------PhysicalCteConsumer ( cteId=CTEId#0 )
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query33.out
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query33.out
index 514fc6cf682..a09b5b4ae49 100644
--- a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query33.out
+++ b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query33.out
@@ -9,18 +9,21 @@ PhysicalResultSink
------------hashAgg[LOCAL]
--------------PhysicalUnion
----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF3 i_manufact_id->[i_manufact_id]
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF3 i_manufact_id->[i_manufact_id]
+--------------------PhysicalProject
+----------------------filter((item.i_category = 'Home'))
+------------------------PhysicalOlapScan[item] apply RFs: RF3
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
--------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF2 i_item_sk->[ss_item_sk]
+----------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
------------------------------PhysicalProject
--------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk))
otherCondition=() build RFs:RF1 ca_address_sk->[ss_addr_sk]
----------------------------------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
-----------------------------------------PhysicalOlapScan[store_sales] apply
RFs: RF0 RF1 RF2
+----------------------------------------PhysicalOlapScan[store_sales] apply
RFs: RF0 RF1
--------------------------------------PhysicalProject
----------------------------------------filter((date_dim.d_moy = 1) and
(date_dim.d_year = 2002))
------------------------------------------PhysicalOlapScan[date_dim]
@@ -28,23 +31,23 @@ PhysicalResultSink
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF3
+--------------------------------PhysicalOlapScan[item]
+----------------PhysicalProject
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF7 i_manufact_id->[i_manufact_id]
--------------------PhysicalProject
----------------------filter((item.i_category = 'Home'))
-------------------------PhysicalOlapScan[item]
-----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF7 i_manufact_id->[i_manufact_id]
+------------------------PhysicalOlapScan[item] apply RFs: RF7
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
--------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF6 i_item_sk->[cs_item_sk]
+----------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=()
------------------------------PhysicalProject
--------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((catalog_sales.cs_bill_addr_sk =
customer_address.ca_address_sk)) otherCondition=() build RFs:RF5
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:RF4 d_date_sk->[cs_sold_date_sk]
--------------------------------------PhysicalProject
-----------------------------------------PhysicalOlapScan[catalog_sales] apply
RFs: RF4 RF5 RF6
+----------------------------------------PhysicalOlapScan[catalog_sales] apply
RFs: RF4 RF5
--------------------------------------PhysicalProject
----------------------------------------filter((date_dim.d_moy = 1) and
(date_dim.d_year = 2002))
------------------------------------------PhysicalOlapScan[date_dim]
@@ -52,19 +55,19 @@ PhysicalResultSink
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF7
+--------------------------------PhysicalOlapScan[item]
+----------------PhysicalProject
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF11 i_manufact_id->[i_manufact_id]
--------------------PhysicalProject
----------------------filter((item.i_category = 'Home'))
-------------------------PhysicalOlapScan[item]
-----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF11 i_manufact_id->[i_manufact_id]
+------------------------PhysicalOlapScan[item] apply RFs: RF11
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
--------------------------PhysicalProject
----------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build
RFs:RF10 ws_item_sk->[i_item_sk]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF10 RF11
+--------------------------------PhysicalOlapScan[item] apply RFs: RF10
------------------------------PhysicalProject
--------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk))
otherCondition=() build RFs:RF9 ca_address_sk->[ws_bill_addr_sk]
----------------------------------PhysicalProject
@@ -77,7 +80,4 @@ PhysicalResultSink
----------------------------------PhysicalProject
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
---------------------PhysicalProject
-----------------------filter((item.i_category = 'Home'))
-------------------------PhysicalOlapScan[item]
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 aa5b1beeef1..990cd91fc37 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,38 +10,38 @@ PhysicalResultSink
--------------hashAgg[LOCAL]
----------------PhysicalProject
------------------filter(OR[ifnull($c$1, FALSE),ifnull($c$2, FALSE)])
---------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk))
otherCondition=()
+--------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
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=()
+------------------------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
-----------------------------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:
RF3
-----------------------------------PhysicalProject
-------------------------------------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_address(ca)]
---------------------------PhysicalProject
-----------------------------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
-----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5
--------------------------PhysicalProject
----------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year =
2001))
------------------------------PhysicalOlapScan[date_dim]
+----------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=()
+------------------------hashJoin[RIGHT_SEMI_JOIN shuffle]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk)) otherCondition=()
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF3 d_date_sk->[ss_sold_date_sk]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF3
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_qoy < 4) and
(date_dim.d_year = 2001))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------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=()
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[customer(c)]
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[customer_address(ca)]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[customer_demographics]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0
+----------------------------PhysicalProject
+------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year
= 2001))
+--------------------------------PhysicalOlapScan[date_dim]
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 28df68528b5..92a15d7ac88 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
@@ -7,85 +7,86 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
--------PhysicalDistribute[DistributionSpecHash]
----------hashAgg[LOCAL]
------------PhysicalProject
---------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_first_shipto_date_sk = d3.d_date_sk))
otherCondition=()
+--------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF19 i_item_sk->[cr_item_sk,cs_item_sk,sr_item_sk,ss_item_sk]
----------------PhysicalProject
-------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_first_sales_date_sk = d2.d_date_sk))
otherCondition=()
+------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd2.hd_income_band_sk = ib2.ib_income_band_sk))
otherCondition=()
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk))
otherCondition=(( not (cd_marital_status = cd_marital_status))) build RFs:RF17
ss_customer_sk->[c_customer_sk]
+----------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd1.hd_income_band_sk = ib1.ib_income_band_sk))
otherCondition=()
------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((customer.c_current_addr_sk = ad2.ca_address_sk))
otherCondition=()
+--------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_addr_sk = ad2.ca_address_sk))
otherCondition=()
----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((customer.c_current_cdemo_sk = cd2.cd_demo_sk)) otherCondition=()
+------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_addr_sk = ad1.ca_address_sk)) otherCondition=()
--------------------------------PhysicalProject
----------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_hdemo_sk = hd2.hd_demo_sk)) otherCondition=()
------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[customer] apply RFs:
RF17
-------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd2.hd_income_band_sk = ib2.ib_income_band_sk))
otherCondition=()
+--------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_hdemo_sk = hd1.hd_demo_sk)) otherCondition=()
----------------------------------------PhysicalProject
-------------------------------------------PhysicalOlapScan[household_demographics(hd2)]
+------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_promo_sk = promotion.p_promo_sk))
otherCondition=()
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_cdemo_sk = cd2.cd_demo_sk))
otherCondition=(( not (cd_marital_status = cd_marital_status)))
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_cdemo_sk = cd1.cd_demo_sk))
otherCondition=()
+----------------------------------------------------PhysicalProject
+------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((customer.c_first_shipto_date_sk = d3.d_date_sk))
otherCondition=()
+--------------------------------------------------------PhysicalProject
+----------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((customer.c_first_sales_date_sk = d2.d_date_sk))
otherCondition=()
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_customer_sk =
customer.c_customer_sk)) otherCondition=()
+----------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_store_sk = store.s_store_sk))
otherCondition=()
+--------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk))
otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+------------------------------------------------------------------------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
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 RF5 RF19
+--------------------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------------------PhysicalOlapScan[store_returns]
apply RFs: RF4 RF19
+----------------------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------------------filter((sale
> (2 * refund)))
+--------------------------------------------------------------------------------hashAgg[GLOBAL]
+----------------------------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------------------------------------------------hashAgg[LOCAL]
+--------------------------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------------------------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
+--------------------------------------------------------------------------------------------PhysicalOlapScan[catalog_returns]
apply RFs: RF19
+------------------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------------------filter(d_year
IN (2001, 2002))
+----------------------------------------------------------------------------PhysicalOlapScan[date_dim(d1)]
+--------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------PhysicalOlapScan[store]
+----------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------PhysicalOlapScan[customer]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[date_dim(d2)]
+--------------------------------------------------------PhysicalProject
+----------------------------------------------------------PhysicalOlapScan[date_dim(d3)]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------PhysicalOlapScan[customer_demographics(cd1)]
+------------------------------------------------PhysicalProject
+--------------------------------------------------PhysicalOlapScan[customer_demographics(cd2)]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[promotion]
----------------------------------------PhysicalProject
-------------------------------------------PhysicalOlapScan[income_band(ib2)]
+------------------------------------------PhysicalOlapScan[household_demographics(hd1)]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[household_demographics(hd2)]
--------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[customer_demographics(cd2)]
+----------------------------------PhysicalOlapScan[customer_address(ad1)]
----------------------------PhysicalProject
------------------------------PhysicalOlapScan[customer_address(ad2)]
------------------------PhysicalProject
---------------------------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:RF11 ss_item_sk->[sr_item_sk];RF12
ss_ticket_number->[sr_ticket_number]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[store_returns] apply RFs: RF11
RF12
-----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_addr_sk = ad1.ca_address_sk)) otherCondition=()
build RFs:RF10 ss_addr_sk->[ca_address_sk]
---------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[customer_address(ad1)]
apply RFs: RF10
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_cdemo_sk = cd1.cd_demo_sk)) otherCondition=()
build RFs:RF9 ss_cdemo_sk->[cd_demo_sk]
-------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[customer_demographics(cd1)]
apply RFs: RF9
-------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF8 i_item_sk->[cr_item_sk,cs_item_sk,ss_item_sk]
---------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_promo_sk = promotion.p_promo_sk))
otherCondition=()
-------------------------------------------PhysicalProject
---------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_store_sk = store.s_store_sk)) otherCondition=()
-----------------------------------------------PhysicalProject
-------------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd1.hd_income_band_sk = ib1.ib_income_band_sk))
otherCondition=()
---------------------------------------------------PhysicalProject
-----------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_hdemo_sk = hd1.hd_demo_sk))
otherCondition=()
-------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_item_sk = cs_ui.cs_item_sk))
otherCondition=() build RFs:RF3 cs_item_sk->[ss_item_sk]
-----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk))
otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
---------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------PhysicalOlapScan[store_sales]
apply RFs: RF2 RF3 RF8
---------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------filter(d_year
IN (2001, 2002))
-------------------------------------------------------------------PhysicalOlapScan[date_dim(d1)]
-----------------------------------------------------------PhysicalProject
-------------------------------------------------------------filter((sale > (2
* refund)))
---------------------------------------------------------------hashAgg[GLOBAL]
-----------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
-------------------------------------------------------------------hashAgg[LOCAL]
---------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------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
---------------------------------------------------------------------------PhysicalOlapScan[catalog_returns]
apply RFs: RF8
-------------------------------------------------------PhysicalProject
---------------------------------------------------------PhysicalOlapScan[household_demographics(hd1)]
---------------------------------------------------PhysicalProject
-----------------------------------------------------PhysicalOlapScan[income_band(ib1)]
-----------------------------------------------PhysicalProject
-------------------------------------------------PhysicalOlapScan[store]
-------------------------------------------PhysicalProject
---------------------------------------------PhysicalOlapScan[promotion]
---------------------------------------PhysicalProject
-----------------------------------------filter((item.i_current_price <= 33.00)
and (item.i_current_price >= 24.00) and i_color IN ('blanched', 'brown',
'burlywood', 'chocolate', 'drab', 'medium'))
-------------------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalOlapScan[income_band(ib1)]
--------------------PhysicalProject
-----------------------PhysicalOlapScan[date_dim(d2)]
+----------------------PhysicalOlapScan[income_band(ib2)]
----------------PhysicalProject
-------------------PhysicalOlapScan[date_dim(d3)]
+------------------filter((item.i_current_price <= 33.00) and
(item.i_current_price >= 24.00) and i_color IN ('blanched', 'brown',
'burlywood', 'chocolate', 'drab', 'medium'))
+--------------------PhysicalOlapScan[item]
--PhysicalResultSink
----PhysicalQuickSort[MERGE_SORT]
------PhysicalDistribute[DistributionSpecGather]
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query33.out
b/regression-test/data/shape_check/tpcds_sf100/shape/query33.out
index 514fc6cf682..f5b2b8cb633 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query33.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query33.out
@@ -9,7 +9,10 @@ PhysicalResultSink
------------hashAgg[LOCAL]
--------------PhysicalUnion
----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF3 i_manufact_id->[i_manufact_id]
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF3 i_manufact_id->[i_manufact_id]
+--------------------PhysicalProject
+----------------------filter((item.i_category = 'Home'))
+------------------------PhysicalOlapScan[item] apply RFs: RF3
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
@@ -28,12 +31,12 @@ PhysicalResultSink
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF3
+--------------------------------PhysicalOlapScan[item]
+----------------PhysicalProject
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF7 i_manufact_id->[i_manufact_id]
--------------------PhysicalProject
----------------------filter((item.i_category = 'Home'))
-------------------------PhysicalOlapScan[item]
-----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF7 i_manufact_id->[i_manufact_id]
+------------------------PhysicalOlapScan[item] apply RFs: RF7
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
@@ -52,19 +55,19 @@ PhysicalResultSink
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF7
+--------------------------------PhysicalOlapScan[item]
+----------------PhysicalProject
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF11 i_manufact_id->[i_manufact_id]
--------------------PhysicalProject
----------------------filter((item.i_category = 'Home'))
-------------------------PhysicalOlapScan[item]
-----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF11 i_manufact_id->[i_manufact_id]
+------------------------PhysicalOlapScan[item] apply RFs: RF11
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
--------------------------PhysicalProject
----------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build
RFs:RF10 ws_item_sk->[i_item_sk]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF10 RF11
+--------------------------------PhysicalOlapScan[item] apply RFs: RF10
------------------------------PhysicalProject
--------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk))
otherCondition=() build RFs:RF9 ca_address_sk->[ws_bill_addr_sk]
----------------------------------PhysicalProject
@@ -77,7 +80,4 @@ PhysicalResultSink
----------------------------------PhysicalProject
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
---------------------PhysicalProject
-----------------------filter((item.i_category = 'Home'))
-------------------------PhysicalOlapScan[item]
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 fcecb53329b..ad8d398c404 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query35.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query35.out
@@ -10,38 +10,38 @@ PhysicalResultSink
--------------hashAgg[LOCAL]
----------------PhysicalProject
------------------filter(OR[ifnull($c$1, FALSE),ifnull($c$2, FALSE)])
---------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk))
otherCondition=()
+--------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
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]
+------------------------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
-----------------------------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
-------------------------------------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_address(ca)]
---------------------------PhysicalProject
-----------------------------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
-----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5
--------------------------PhysicalProject
----------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year =
2001))
------------------------------PhysicalOlapScan[date_dim]
+----------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=()
+------------------------hashJoin[RIGHT_SEMI_JOIN shuffle]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk))
otherCondition=() build RFs:RF4 c_customer_sk->[ss_customer_sk]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF3 d_date_sk->[ss_sold_date_sk]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF3
RF4
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_qoy < 4) and
(date_dim.d_year = 2001))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk))
otherCondition=() build RFs:RF2 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:RF1 ca_address_sk->[c_current_addr_sk]
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[customer(c)] apply RFs:
RF1 RF2
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[customer_address(ca)]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[customer_demographics]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0
+----------------------------PhysicalProject
+------------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year
= 2001))
+--------------------------------PhysicalOlapScan[date_dim]
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 9b91b5a6891..9c9971d7429 100644
--- a/regression-test/data/shape_check/tpcds_sf100/shape/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf100/shape/query64.out
@@ -7,85 +7,86 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
--------PhysicalDistribute[DistributionSpecHash]
----------hashAgg[LOCAL]
------------PhysicalProject
---------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_first_shipto_date_sk = d3.d_date_sk))
otherCondition=() build RFs:RF19 d_date_sk->[c_first_shipto_date_sk]
+--------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF19 i_item_sk->[cr_item_sk,cs_item_sk,sr_item_sk,ss_item_sk]
----------------PhysicalProject
-------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_first_sales_date_sk = d2.d_date_sk))
otherCondition=() build RFs:RF18 d_date_sk->[c_first_sales_date_sk]
+------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd2.hd_income_band_sk = ib2.ib_income_band_sk))
otherCondition=() build RFs:RF18 ib_income_band_sk->[hd_income_band_sk]
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk))
otherCondition=(( not (cd_marital_status = cd_marital_status))) build RFs:RF17
ss_customer_sk->[c_customer_sk]
+----------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd1.hd_income_band_sk = ib1.ib_income_band_sk))
otherCondition=() build RFs:RF17 ib_income_band_sk->[hd_income_band_sk]
------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((customer.c_current_addr_sk = ad2.ca_address_sk))
otherCondition=() build RFs:RF16 ca_address_sk->[c_current_addr_sk]
+--------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_addr_sk = ad2.ca_address_sk))
otherCondition=() build RFs:RF16 ca_address_sk->[c_current_addr_sk]
----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((customer.c_current_cdemo_sk = cd2.cd_demo_sk))
otherCondition=() build RFs:RF15 cd_demo_sk->[c_current_cdemo_sk]
+------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_addr_sk = ad1.ca_address_sk)) otherCondition=()
build RFs:RF15 ca_address_sk->[ss_addr_sk]
--------------------------------PhysicalProject
----------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_hdemo_sk = hd2.hd_demo_sk))
otherCondition=() build RFs:RF14 hd_demo_sk->[c_current_hdemo_sk]
------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[customer] apply RFs:
RF14 RF15 RF16 RF17 RF18 RF19
-------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd2.hd_income_band_sk = ib2.ib_income_band_sk))
otherCondition=() build RFs:RF13 ib_income_band_sk->[hd_income_band_sk]
+--------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_hdemo_sk = hd1.hd_demo_sk)) otherCondition=()
build RFs:RF13 hd_demo_sk->[ss_hdemo_sk]
----------------------------------------PhysicalProject
-------------------------------------------PhysicalOlapScan[household_demographics(hd2)]
apply RFs: RF13
+------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_promo_sk = promotion.p_promo_sk))
otherCondition=() build RFs:RF12 p_promo_sk->[ss_promo_sk]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_cdemo_sk = cd2.cd_demo_sk))
otherCondition=(( not (cd_marital_status = cd_marital_status))) build RFs:RF11
cd_demo_sk->[c_current_cdemo_sk]
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_cdemo_sk = cd1.cd_demo_sk))
otherCondition=() build RFs:RF10 cd_demo_sk->[ss_cdemo_sk]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((customer.c_first_shipto_date_sk = d3.d_date_sk))
otherCondition=() build RFs:RF9 d_date_sk->[c_first_shipto_date_sk]
+--------------------------------------------------------PhysicalProject
+----------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((customer.c_first_sales_date_sk = d2.d_date_sk))
otherCondition=() build RFs:RF8 d_date_sk->[c_first_sales_date_sk]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_customer_sk =
customer.c_customer_sk)) otherCondition=() build RFs:RF7
c_customer_sk->[ss_customer_sk]
+----------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_store_sk = store.s_store_sk))
otherCondition=() build RFs:RF6 s_store_sk->[ss_store_sk]
+--------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk))
otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+------------------------------------------------------------------------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
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 RF6 RF7 RF10 RF12 RF13 RF15 RF19
+--------------------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------------------PhysicalOlapScan[store_returns]
apply RFs: RF4 RF19
+----------------------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------------------filter((sale
> (2 * refund)))
+--------------------------------------------------------------------------------hashAgg[GLOBAL]
+----------------------------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------------------------------------------------hashAgg[LOCAL]
+--------------------------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------------------------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
+--------------------------------------------------------------------------------------------PhysicalOlapScan[catalog_returns]
apply RFs: RF19
+------------------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------------------filter(d_year
IN (2001, 2002))
+----------------------------------------------------------------------------PhysicalOlapScan[date_dim(d1)]
+--------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------PhysicalOlapScan[store]
+----------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------PhysicalOlapScan[customer]
apply RFs: RF8 RF9 RF11 RF14 RF16
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[date_dim(d2)]
+--------------------------------------------------------PhysicalProject
+----------------------------------------------------------PhysicalOlapScan[date_dim(d3)]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------PhysicalOlapScan[customer_demographics(cd1)]
+------------------------------------------------PhysicalProject
+--------------------------------------------------PhysicalOlapScan[customer_demographics(cd2)]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[promotion]
----------------------------------------PhysicalProject
-------------------------------------------PhysicalOlapScan[income_band(ib2)]
+------------------------------------------PhysicalOlapScan[household_demographics(hd1)]
apply RFs: RF17
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[household_demographics(hd2)]
apply RFs: RF18
--------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[customer_demographics(cd2)]
+----------------------------------PhysicalOlapScan[customer_address(ad1)]
----------------------------PhysicalProject
------------------------------PhysicalOlapScan[customer_address(ad2)]
------------------------PhysicalProject
---------------------------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:RF11 ss_item_sk->[sr_item_sk];RF12
ss_ticket_number->[sr_ticket_number]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[store_returns] apply RFs: RF11
RF12
-----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_addr_sk = ad1.ca_address_sk)) otherCondition=()
build RFs:RF10 ss_addr_sk->[ca_address_sk]
---------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[customer_address(ad1)]
apply RFs: RF10
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_cdemo_sk = cd1.cd_demo_sk)) otherCondition=()
build RFs:RF9 ss_cdemo_sk->[cd_demo_sk]
-------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[customer_demographics(cd1)]
apply RFs: RF9
-------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF8 i_item_sk->[cr_item_sk,cs_item_sk,ss_item_sk]
---------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_promo_sk = promotion.p_promo_sk))
otherCondition=() build RFs:RF7 p_promo_sk->[ss_promo_sk]
-------------------------------------------PhysicalProject
---------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_store_sk = store.s_store_sk)) otherCondition=()
build RFs:RF6 s_store_sk->[ss_store_sk]
-----------------------------------------------PhysicalProject
-------------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd1.hd_income_band_sk = ib1.ib_income_band_sk))
otherCondition=() build RFs:RF5 ib_income_band_sk->[hd_income_band_sk]
---------------------------------------------------PhysicalProject
-----------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_hdemo_sk = hd1.hd_demo_sk))
otherCondition=() build RFs:RF4 hd_demo_sk->[ss_hdemo_sk]
-------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_item_sk = cs_ui.cs_item_sk))
otherCondition=() build RFs:RF3 cs_item_sk->[ss_item_sk]
-----------------------------------------------------------PhysicalProject
-------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk))
otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
---------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------PhysicalOlapScan[store_sales]
apply RFs: RF2 RF3 RF4 RF6 RF7 RF8
---------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------filter(d_year
IN (2001, 2002))
-------------------------------------------------------------------PhysicalOlapScan[date_dim(d1)]
-----------------------------------------------------------PhysicalProject
-------------------------------------------------------------filter((sale > (2
* refund)))
---------------------------------------------------------------hashAgg[GLOBAL]
-----------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
-------------------------------------------------------------------hashAgg[LOCAL]
---------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------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
---------------------------------------------------------------------------PhysicalOlapScan[catalog_returns]
apply RFs: RF8
-------------------------------------------------------PhysicalProject
---------------------------------------------------------PhysicalOlapScan[household_demographics(hd1)]
apply RFs: RF5
---------------------------------------------------PhysicalProject
-----------------------------------------------------PhysicalOlapScan[income_band(ib1)]
-----------------------------------------------PhysicalProject
-------------------------------------------------PhysicalOlapScan[store]
-------------------------------------------PhysicalProject
---------------------------------------------PhysicalOlapScan[promotion]
---------------------------------------PhysicalProject
-----------------------------------------filter((item.i_current_price <= 33.00)
and (item.i_current_price >= 24.00) and i_color IN ('blanched', 'brown',
'burlywood', 'chocolate', 'drab', 'medium'))
-------------------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalOlapScan[income_band(ib1)]
--------------------PhysicalProject
-----------------------PhysicalOlapScan[date_dim(d2)]
+----------------------PhysicalOlapScan[income_band(ib2)]
----------------PhysicalProject
-------------------PhysicalOlapScan[date_dim(d3)]
+------------------filter((item.i_current_price <= 33.00) and
(item.i_current_price >= 24.00) and i_color IN ('blanched', 'brown',
'burlywood', 'chocolate', 'drab', 'medium'))
+--------------------PhysicalOlapScan[item]
--PhysicalResultSink
----PhysicalQuickSort[MERGE_SORT]
------PhysicalDistribute[DistributionSpecGather]
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 175f24b8cbd..953d0237ca5 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/hint/query69.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/hint/query69.out
@@ -9,39 +9,39 @@ PhysicalResultSink
------------PhysicalDistribute[DistributionSpecHash]
--------------hashAgg[LOCAL]
----------------PhysicalProject
-------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk))
otherCondition=() build RFs:RF6 c_customer_sk->[ss_customer_sk]
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk))
otherCondition=() build RFs:RF7 c_customer_sk->[ss_customer_sk]
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+----------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF6 d_date_sk->[ss_sold_date_sk]
------------------------PhysicalProject
---------------------------PhysicalOlapScan[store_sales] apply RFs: RF5 RF6
+--------------------------PhysicalOlapScan[store_sales] apply RFs: RF6 RF7
------------------------PhysicalProject
--------------------------filter((date_dim.d_moy <= 3) and (date_dim.d_moy >=
1) and (date_dim.d_year = 2002))
----------------------------PhysicalOlapScan[date_dim]
---------------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk))
otherCondition=() build RFs:RF4 c_customer_sk->[cs_ship_customer_sk]
+--------------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk))
otherCondition=() build RFs:RF5 c_customer_sk->[cs_ship_customer_sk]
----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF3 d_date_sk->[cs_sold_date_sk]
+------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF4 d_date_sk->[cs_sold_date_sk]
--------------------------PhysicalProject
-----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF3 RF4
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF4 RF5
--------------------------PhysicalProject
----------------------------filter((date_dim.d_moy <= 3) and (date_dim.d_moy
>= 1) and (date_dim.d_year = 2002))
------------------------------PhysicalOlapScan[date_dim]
----------------------PhysicalProject
-------------------------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]
+------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk))
otherCondition=() build RFs:RF3 c_current_cdemo_sk->[cd_demo_sk]
--------------------------PhysicalProject
-----------------------------PhysicalOlapScan[customer_demographics] apply RFs:
RF2
---------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=()
+----------------------------PhysicalOlapScan[customer_demographics] apply RFs:
RF3
+--------------------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=() build RFs:RF2 c_customer_sk->[ws_bill_customer_sk]
----------------------------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]
+------------------------------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[customer(c)] apply RFs: RF1
+----------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
RF2
--------------------------------PhysicalProject
-----------------------------------filter(ca_state IN ('IL', 'ME', 'TX'))
-------------------------------------PhysicalOlapScan[customer_address(ca)]
+----------------------------------filter((date_dim.d_moy <= 3) and
(date_dim.d_moy >= 1) and (date_dim.d_year = 2002))
+------------------------------------PhysicalOlapScan[date_dim]
----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=()
build RFs:RF0 ca_address_sk->[c_current_addr_sk]
--------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0
+----------------------------------PhysicalOlapScan[customer(c)] apply RFs: RF0
--------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_moy <= 3) and
(date_dim.d_moy >= 1) and (date_dim.d_year = 2002))
-------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------filter(ca_state IN ('IL', 'ME', 'TX'))
+------------------------------------PhysicalOlapScan[customer_address(ca)]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query33.out
b/regression-test/data/shape_check/tpcds_sf1000/shape/query33.out
index 1f4f083cdcf..f1cd1e4c777 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query33.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query33.out
@@ -9,7 +9,10 @@ PhysicalResultSink
------------hashAgg[LOCAL]
--------------PhysicalUnion
----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF3 i_manufact_id->[i_manufact_id]
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF3 i_manufact_id->[i_manufact_id]
+--------------------PhysicalProject
+----------------------filter((item.i_category = 'Books'))
+------------------------PhysicalOlapScan[item] apply RFs: RF3
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
@@ -28,12 +31,12 @@ PhysicalResultSink
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF3
+--------------------------------PhysicalOlapScan[item]
+----------------PhysicalProject
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF7 i_manufact_id->[i_manufact_id]
--------------------PhysicalProject
----------------------filter((item.i_category = 'Books'))
-------------------------PhysicalOlapScan[item]
-----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF7 i_manufact_id->[i_manufact_id]
+------------------------PhysicalOlapScan[item] apply RFs: RF7
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
@@ -52,12 +55,12 @@ PhysicalResultSink
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF7
+--------------------------------PhysicalOlapScan[item]
+----------------PhysicalProject
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF11 i_manufact_id->[i_manufact_id]
--------------------PhysicalProject
----------------------filter((item.i_category = 'Books'))
-------------------------PhysicalOlapScan[item]
-----------------PhysicalProject
-------------------hashJoin[LEFT_SEMI_JOIN broadcast]
hashCondition=((item.i_manufact_id = item.i_manufact_id)) otherCondition=()
build RFs:RF11 i_manufact_id->[i_manufact_id]
+------------------------PhysicalOlapScan[item] apply RFs: RF11
--------------------hashAgg[GLOBAL]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------hashAgg[LOCAL]
@@ -76,8 +79,5 @@ PhysicalResultSink
------------------------------------filter((customer_address.ca_gmt_offset =
-5.00))
--------------------------------------PhysicalOlapScan[customer_address]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item] apply RFs: RF11
---------------------PhysicalProject
-----------------------filter((item.i_category = 'Books'))
-------------------------PhysicalOlapScan[item]
+--------------------------------PhysicalOlapScan[item]
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query35.out
b/regression-test/data/shape_check/tpcds_sf1000/shape/query35.out
index 5eb3a1ba4f9..35be2410a0e 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query35.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query35.out
@@ -10,38 +10,38 @@ 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[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk))
otherCondition=()
----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk))
otherCondition=() build RFs:RF5 cd_demo_sk->[c_current_cdemo_sk]
---------------------------hashJoin[LEFT_SEMI_JOIN bucketShuffle]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=()
-----------------------------hashJoin[RIGHT_SEMI_JOIN shuffle]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk))
otherCondition=() build RFs:RF4 c_customer_sk->[ss_customer_sk]
+------------------------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
+--------------------------PhysicalProject
+----------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year =
1999))
+------------------------------PhysicalOlapScan[date_dim]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk))
otherCondition=() build RFs:RF4 cd_demo_sk->[c_current_cdemo_sk]
+--------------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=()
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF3 d_date_sk->[ws_sold_date_sk]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[web_sales] apply RFs: RF3
+--------------------------------PhysicalProject
+----------------------------------filter((date_dim.d_qoy < 4) and
(date_dim.d_year = 1999))
+------------------------------------PhysicalOlapScan[date_dim]
+----------------------------hashJoin[RIGHT_SEMI_JOIN shuffle]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk))
otherCondition=() build RFs:RF2 c_customer_sk->[ss_customer_sk]
------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF3 d_date_sk->[ss_sold_date_sk]
+--------------------------------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:
RF3 RF4
+------------------------------------PhysicalOlapScan[store_sales] apply RFs:
RF1 RF2
----------------------------------PhysicalProject
------------------------------------filter((date_dim.d_qoy < 4) and
(date_dim.d_year = 1999))
--------------------------------------PhysicalOlapScan[date_dim]
------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=()
build RFs:RF2 ca_address_sk->[c_current_addr_sk]
+--------------------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=()
build RFs:RF0 ca_address_sk->[c_current_addr_sk]
----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[customer(c)] apply RFs:
RF2 RF5
+------------------------------------PhysicalOlapScan[customer(c)] apply RFs:
RF0 RF4
----------------------------------PhysicalProject
------------------------------------PhysicalOlapScan[customer_address(ca)]
-----------------------------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 = 1999))
-------------------------------------PhysicalOlapScan[date_dim]
--------------------------PhysicalProject
----------------------------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
-----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF0
---------------------------PhysicalProject
-----------------------------filter((date_dim.d_qoy < 4) and (date_dim.d_year =
1999))
-------------------------------PhysicalOlapScan[date_dim]
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 0762e95d146..7d5490b3d05 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query64.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query64.out
@@ -7,85 +7,86 @@ PhysicalCteAnchor ( cteId=CTEId#1 )
--------PhysicalDistribute[DistributionSpecHash]
----------hashAgg[LOCAL]
------------PhysicalProject
---------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_first_shipto_date_sk = d3.d_date_sk))
otherCondition=() build RFs:RF19 d_date_sk->[c_first_shipto_date_sk]
+--------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF19 i_item_sk->[cr_item_sk,cs_item_sk,sr_item_sk,ss_item_sk]
----------------PhysicalProject
-------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk))
otherCondition=(( not (cd_marital_status = cd_marital_status))) build RFs:RF18
ss_customer_sk->[c_customer_sk]
+------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd2.hd_income_band_sk = ib2.ib_income_band_sk))
otherCondition=() build RFs:RF18 ib_income_band_sk->[hd_income_band_sk]
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN shuffle]
hashCondition=((customer.c_current_addr_sk = ad2.ca_address_sk))
otherCondition=() build RFs:RF17 ca_address_sk->[c_current_addr_sk]
+----------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd1.hd_income_band_sk = ib1.ib_income_band_sk))
otherCondition=() build RFs:RF17 ib_income_band_sk->[hd_income_band_sk]
------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_cdemo_sk = cd2.cd_demo_sk))
otherCondition=() build RFs:RF16 cd_demo_sk->[c_current_cdemo_sk]
+--------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_addr_sk = ad2.ca_address_sk))
otherCondition=() build RFs:RF16 ca_address_sk->[c_current_addr_sk]
----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_first_sales_date_sk = d2.d_date_sk))
otherCondition=() build RFs:RF15 d_date_sk->[c_first_sales_date_sk]
+------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_addr_sk = ad1.ca_address_sk)) otherCondition=()
build RFs:RF15 ca_address_sk->[ss_addr_sk]
--------------------------------PhysicalProject
----------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_hdemo_sk = hd2.hd_demo_sk))
otherCondition=() build RFs:RF14 hd_demo_sk->[c_current_hdemo_sk]
------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[customer] apply RFs:
RF14 RF15 RF16 RF17 RF18 RF19
-------------------------------------PhysicalProject
---------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd2.hd_income_band_sk = ib2.ib_income_band_sk))
otherCondition=() build RFs:RF13 ib_income_band_sk->[hd_income_band_sk]
-----------------------------------------PhysicalProject
-------------------------------------------PhysicalOlapScan[household_demographics(hd2)]
apply RFs: RF13
+--------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_hdemo_sk = hd1.hd_demo_sk)) otherCondition=()
build RFs:RF13 hd_demo_sk->[ss_hdemo_sk]
----------------------------------------PhysicalProject
-------------------------------------------PhysicalOlapScan[income_band(ib2)]
---------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[date_dim(d2)]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[customer_demographics(cd2)]
-------------------------PhysicalProject
---------------------------PhysicalOlapScan[customer_address(ad2)]
---------------------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 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
-------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_promo_sk = promotion.p_promo_sk))
otherCondition=() build RFs:RF9 p_promo_sk->[ss_promo_sk]
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_cdemo_sk = cd1.cd_demo_sk)) otherCondition=()
build RFs:RF8 cd_demo_sk->[ss_cdemo_sk]
-------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=()
build RFs:RF7 i_item_sk->[cr_item_sk,cs_item_sk,ss_item_sk]
---------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_store_sk = store.s_store_sk)) otherCondition=()
build RFs:RF6 s_store_sk->[ss_store_sk]
-------------------------------------------PhysicalProject
---------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((hd1.hd_income_band_sk = ib1.ib_income_band_sk))
otherCondition=() build RFs:RF5 ib_income_band_sk->[hd_income_band_sk]
-----------------------------------------------PhysicalProject
-------------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_hdemo_sk = hd1.hd_demo_sk)) otherCondition=()
build RFs:RF4 hd_demo_sk->[ss_hdemo_sk]
---------------------------------------------------PhysicalProject
-----------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_item_sk = cs_ui.cs_item_sk))
otherCondition=() build RFs:RF3 cs_item_sk->[ss_item_sk]
-------------------------------------------------------PhysicalProject
---------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk))
otherCondition=() build RFs:RF2 d_date_sk->[ss_sold_date_sk]
-----------------------------------------------------------PhysicalProject
-------------------------------------------------------------PhysicalOlapScan[store_sales]
apply RFs: RF2 RF3 RF4 RF6 RF7 RF8 RF9 RF12
-----------------------------------------------------------PhysicalProject
-------------------------------------------------------------filter(d_year IN
(1999, 2000))
---------------------------------------------------------------PhysicalOlapScan[date_dim(d1)]
-------------------------------------------------------PhysicalProject
---------------------------------------------------------filter((sale > (2 *
refund)))
-----------------------------------------------------------hashAgg[GLOBAL]
-------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
---------------------------------------------------------------hashAgg[LOCAL]
+------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_promo_sk = promotion.p_promo_sk))
otherCondition=() build RFs:RF12 p_promo_sk->[ss_promo_sk]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer.c_current_cdemo_sk = cd2.cd_demo_sk))
otherCondition=(( not (cd_marital_status = cd_marital_status))) build RFs:RF11
cd_demo_sk->[c_current_cdemo_sk]
+------------------------------------------------PhysicalProject
+--------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_cdemo_sk = cd1.cd_demo_sk))
otherCondition=() build RFs:RF10 cd_demo_sk->[ss_cdemo_sk]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((customer.c_first_shipto_date_sk = d3.d_date_sk))
otherCondition=() build RFs:RF9 d_date_sk->[c_first_shipto_date_sk]
+--------------------------------------------------------PhysicalProject
+----------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((customer.c_first_sales_date_sk = d2.d_date_sk))
otherCondition=() build RFs:RF8 d_date_sk->[c_first_sales_date_sk]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_customer_sk =
customer.c_customer_sk)) otherCondition=() build RFs:RF7
c_customer_sk->[ss_customer_sk]
----------------------------------------------------------------PhysicalProject
-------------------------------------------------------------------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]
+------------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_store_sk = store.s_store_sk))
otherCondition=() build RFs:RF6 s_store_sk->[ss_store_sk]
--------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------PhysicalOlapScan[catalog_sales]
apply RFs: RF0 RF1 RF7
+----------------------------------------------------------------------hashJoin[INNER_JOIN
broadcast] hashCondition=((store_sales.ss_sold_date_sk = d1.d_date_sk))
otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+------------------------------------------------------------------------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
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 RF6 RF7 RF10 RF12 RF13 RF15 RF19
+--------------------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------------------PhysicalOlapScan[store_returns]
apply RFs: RF4 RF19
+----------------------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------------------filter((sale
> (2 * refund)))
+--------------------------------------------------------------------------------hashAgg[GLOBAL]
+----------------------------------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------------------------------------------------hashAgg[LOCAL]
+--------------------------------------------------------------------------------------PhysicalProject
+----------------------------------------------------------------------------------------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
+--------------------------------------------------------------------------------------------PhysicalOlapScan[catalog_returns]
apply RFs: RF19
+------------------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------------------filter(d_year
IN (1999, 2000))
+----------------------------------------------------------------------------PhysicalOlapScan[date_dim(d1)]
--------------------------------------------------------------------PhysicalProject
-----------------------------------------------------------------------PhysicalOlapScan[catalog_returns]
apply RFs: RF7
---------------------------------------------------PhysicalProject
-----------------------------------------------------PhysicalOlapScan[household_demographics(hd1)]
apply RFs: RF5
-----------------------------------------------PhysicalProject
-------------------------------------------------PhysicalOlapScan[income_band(ib1)]
-------------------------------------------PhysicalProject
---------------------------------------------PhysicalOlapScan[store]
---------------------------------------PhysicalProject
-----------------------------------------filter((item.i_current_price <= 58.00)
and (item.i_current_price >= 49.00) and i_color IN ('blush', 'lace', 'lawn',
'misty', 'orange', 'pink'))
-------------------------------------------PhysicalOlapScan[item]
+----------------------------------------------------------------------PhysicalOlapScan[store]
+----------------------------------------------------------------PhysicalProject
+------------------------------------------------------------------PhysicalOlapScan[customer]
apply RFs: RF8 RF9 RF11 RF14 RF16
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[date_dim(d2)]
+--------------------------------------------------------PhysicalProject
+----------------------------------------------------------PhysicalOlapScan[date_dim(d3)]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------PhysicalOlapScan[customer_demographics(cd1)]
+------------------------------------------------PhysicalProject
+--------------------------------------------------PhysicalOlapScan[customer_demographics(cd2)]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[promotion]
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[household_demographics(hd1)]
apply RFs: RF17
------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[customer_demographics(cd1)]
+--------------------------------------PhysicalOlapScan[household_demographics(hd2)]
apply RFs: RF18
--------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[promotion]
+----------------------------------PhysicalOlapScan[customer_address(ad1)]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[customer_address(ad2)]
------------------------PhysicalProject
---------------------------PhysicalOlapScan[customer_address(ad1)]
+--------------------------PhysicalOlapScan[income_band(ib1)]
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[income_band(ib2)]
----------------PhysicalProject
-------------------PhysicalOlapScan[date_dim(d3)]
+------------------filter((item.i_current_price <= 58.00) and
(item.i_current_price >= 49.00) and i_color IN ('blush', 'lace', 'lawn',
'misty', 'orange', 'pink'))
+--------------------PhysicalOlapScan[item]
--PhysicalResultSink
----PhysicalQuickSort[MERGE_SORT]
------PhysicalDistribute[DistributionSpecGather]
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 175f24b8cbd..953d0237ca5 100644
--- a/regression-test/data/shape_check/tpcds_sf1000/shape/query69.out
+++ b/regression-test/data/shape_check/tpcds_sf1000/shape/query69.out
@@ -9,39 +9,39 @@ PhysicalResultSink
------------PhysicalDistribute[DistributionSpecHash]
--------------hashAgg[LOCAL]
----------------PhysicalProject
-------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk))
otherCondition=() build RFs:RF6 c_customer_sk->[ss_customer_sk]
+------------------hashJoin[RIGHT_SEMI_JOIN shuffleBucket]
hashCondition=((c.c_customer_sk = store_sales.ss_customer_sk))
otherCondition=() build RFs:RF7 c_customer_sk->[ss_customer_sk]
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF5 d_date_sk->[ss_sold_date_sk]
+----------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF6 d_date_sk->[ss_sold_date_sk]
------------------------PhysicalProject
---------------------------PhysicalOlapScan[store_sales] apply RFs: RF5 RF6
+--------------------------PhysicalOlapScan[store_sales] apply RFs: RF6 RF7
------------------------PhysicalProject
--------------------------filter((date_dim.d_moy <= 3) and (date_dim.d_moy >=
1) and (date_dim.d_year = 2002))
----------------------------PhysicalOlapScan[date_dim]
---------------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk))
otherCondition=() build RFs:RF4 c_customer_sk->[cs_ship_customer_sk]
+--------------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((c.c_customer_sk = catalog_sales.cs_ship_customer_sk))
otherCondition=() build RFs:RF5 c_customer_sk->[cs_ship_customer_sk]
----------------------PhysicalProject
-------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF3 d_date_sk->[cs_sold_date_sk]
+------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF4 d_date_sk->[cs_sold_date_sk]
--------------------------PhysicalProject
-----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF3 RF4
+----------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF4 RF5
--------------------------PhysicalProject
----------------------------filter((date_dim.d_moy <= 3) and (date_dim.d_moy
>= 1) and (date_dim.d_year = 2002))
------------------------------PhysicalOlapScan[date_dim]
----------------------PhysicalProject
-------------------------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]
+------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((customer_demographics.cd_demo_sk = c.c_current_cdemo_sk))
otherCondition=() build RFs:RF3 c_current_cdemo_sk->[cd_demo_sk]
--------------------------PhysicalProject
-----------------------------PhysicalOlapScan[customer_demographics] apply RFs:
RF2
---------------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=()
+----------------------------PhysicalOlapScan[customer_demographics] apply RFs:
RF3
+--------------------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((c.c_customer_sk = web_sales.ws_bill_customer_sk))
otherCondition=() build RFs:RF2 c_customer_sk->[ws_bill_customer_sk]
----------------------------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]
+------------------------------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[customer(c)] apply RFs: RF1
+----------------------------------PhysicalOlapScan[web_sales] apply RFs: RF1
RF2
--------------------------------PhysicalProject
-----------------------------------filter(ca_state IN ('IL', 'ME', 'TX'))
-------------------------------------PhysicalOlapScan[customer_address(ca)]
+----------------------------------filter((date_dim.d_moy <= 3) and
(date_dim.d_moy >= 1) and (date_dim.d_year = 2002))
+------------------------------------PhysicalOlapScan[date_dim]
----------------------------PhysicalProject
-------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+------------------------------hashJoin[INNER_JOIN broadcast]
hashCondition=((c.c_current_addr_sk = ca.ca_address_sk)) otherCondition=()
build RFs:RF0 ca_address_sk->[c_current_addr_sk]
--------------------------------PhysicalProject
-----------------------------------PhysicalOlapScan[web_sales] apply RFs: RF0
+----------------------------------PhysicalOlapScan[customer(c)] apply RFs: RF0
--------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_moy <= 3) and
(date_dim.d_moy >= 1) and (date_dim.d_year = 2002))
-------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------filter(ca_state IN ('IL', 'ME', 'TX'))
+------------------------------------PhysicalOlapScan[customer_address(ca)]
diff --git
a/regression-test/data/shape_check/tpch_sf1000/check_point/probeShortcutFactor.out
b/regression-test/data/shape_check/tpch_sf1000/check_point/probeShortcutFactor.out
new file mode 100644
index 00000000000..c11e94e4777
--- /dev/null
+++
b/regression-test/data/shape_check/tpch_sf1000/check_point/probeShortcutFactor.out
@@ -0,0 +1,10 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !select --
+PhysicalResultSink
+--hashJoin[RIGHT_ANTI_JOIN shuffle] hashCondition=((orders.o_custkey =
customer.c_custkey)) otherCondition=() build RFs:RF0 c_custkey->[o_custkey]
+----PhysicalProject
+------PhysicalOlapScan[orders] apply RFs: RF0
+----PhysicalProject
+------filter(substring(c_phone, 1, 2) IN ('13', '17', '18', '23', '29', '30',
'31'))
+--------PhysicalOlapScan[customer]
+
diff --git a/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out
b/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out
index 69a80f708f9..5f75b319bf0 100644
--- a/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out
+++ b/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out
@@ -8,18 +8,18 @@ PhysicalResultSink
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
--------------PhysicalProject
-----------------NestedLoopJoin[INNER_JOIN](cast(c_acctbal as DECIMALV3(38, 4))
> avg(c_acctbal))
+----------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((orders.o_custkey = customer.c_custkey)) otherCondition=() build
RFs:RF0 c_custkey->[o_custkey]
------------------PhysicalProject
---------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle]
hashCondition=((orders.o_custkey = customer.c_custkey)) otherCondition=()
+--------------------PhysicalOlapScan[orders] apply RFs: RF0
+------------------PhysicalProject
+--------------------NestedLoopJoin[INNER_JOIN](cast(c_acctbal as DECIMALV3(38,
4)) > avg(c_acctbal))
----------------------PhysicalProject
------------------------filter(substring(c_phone, 1, 2) IN ('13', '17', '18',
'23', '29', '30', '31'))
--------------------------PhysicalOlapScan[customer]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[orders]
-------------------hashAgg[GLOBAL]
---------------------PhysicalDistribute[DistributionSpecGather]
-----------------------hashAgg[LOCAL]
-------------------------PhysicalProject
---------------------------filter((customer.c_acctbal > 0.00) and
substring(c_phone, 1, 2) IN ('13', '17', '18', '23', '29', '30', '31'))
-----------------------------PhysicalOlapScan[customer]
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecGather]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------filter((customer.c_acctbal > 0.00) and
substring(c_phone, 1, 2) IN ('13', '17', '18', '23', '29', '30', '31'))
+--------------------------------PhysicalOlapScan[customer]
diff --git a/regression-test/data/shape_check/tpch_sf1000/shape/q22.out
b/regression-test/data/shape_check/tpch_sf1000/shape/q22.out
index 69a80f708f9..5f75b319bf0 100644
--- a/regression-test/data/shape_check/tpch_sf1000/shape/q22.out
+++ b/regression-test/data/shape_check/tpch_sf1000/shape/q22.out
@@ -8,18 +8,18 @@ PhysicalResultSink
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
--------------PhysicalProject
-----------------NestedLoopJoin[INNER_JOIN](cast(c_acctbal as DECIMALV3(38, 4))
> avg(c_acctbal))
+----------------hashJoin[RIGHT_ANTI_JOIN shuffle]
hashCondition=((orders.o_custkey = customer.c_custkey)) otherCondition=() build
RFs:RF0 c_custkey->[o_custkey]
------------------PhysicalProject
---------------------hashJoin[LEFT_ANTI_JOIN bucketShuffle]
hashCondition=((orders.o_custkey = customer.c_custkey)) otherCondition=()
+--------------------PhysicalOlapScan[orders] apply RFs: RF0
+------------------PhysicalProject
+--------------------NestedLoopJoin[INNER_JOIN](cast(c_acctbal as DECIMALV3(38,
4)) > avg(c_acctbal))
----------------------PhysicalProject
------------------------filter(substring(c_phone, 1, 2) IN ('13', '17', '18',
'23', '29', '30', '31'))
--------------------------PhysicalOlapScan[customer]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[orders]
-------------------hashAgg[GLOBAL]
---------------------PhysicalDistribute[DistributionSpecGather]
-----------------------hashAgg[LOCAL]
-------------------------PhysicalProject
---------------------------filter((customer.c_acctbal > 0.00) and
substring(c_phone, 1, 2) IN ('13', '17', '18', '23', '29', '30', '31'))
-----------------------------PhysicalOlapScan[customer]
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecGather]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------filter((customer.c_acctbal > 0.00) and
substring(c_phone, 1, 2) IN ('13', '17', '18', '23', '29', '30', '31'))
+--------------------------------PhysicalOlapScan[customer]
diff --git
a/regression-test/suites/shape_check/tpch_sf1000/check_point/probeShortcutFactor.groovy
b/regression-test/suites/shape_check/tpch_sf1000/check_point/probeShortcutFactor.groovy
new file mode 100644
index 00000000000..5f140c93bb3
--- /dev/null
+++
b/regression-test/suites/shape_check/tpch_sf1000/check_point/probeShortcutFactor.groovy
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("probeShortcutFactor") {
+ String db = context.config.getDbNameByFile(new File(context.file.parent))
+ if (isCloudMode()) {
+ return
+ }
+ sql "use ${db}"
+ sql 'set enable_nereids_planner=true'
+ sql 'set enable_nereids_distribute_planner=false'
+ sql 'set enable_fallback_to_original_planner=false'
+ sql 'set exec_mem_limit=21G'
+ sql 'SET enable_pipeline_engine = true'
+ sql 'set parallel_pipeline_task_num=8'
+ sql 'set be_number_for_test=3'
+ sql "set runtime_filter_type=8"
+ sql 'set enable_runtime_filter_prune=false'
+ sql "set disable_nereids_rules=PRUNE_EMPTY_PARTITION"
+
+ // should use right anti join, not left anti join
+ qt_select """
+ explain shape plan
+ select c_custkey, c_phone, c_acctbal
+ from customer left anti join orders on o_custkey=c_custkey
+ where substring(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18',
'17') ;
+ """
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]