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

HappenLee pushed a commit to branch 4.1_performance
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 26843114a62bd3bb59b10de4009f797d7a130e31
Author: feiniaofeiafei <[email protected]>
AuthorDate: Mon Aug 3 14:51:16 2026 +0800

    pick eager-agg change (#66374)
    
    picked from https://github.com/apache/doris/pull/63690
    https://github.com/apache/doris/pull/65005
    https://github.com/apache/doris/pull/65257
    https://github.com/apache/doris/pull/65703 #66117
    
    ---------
    
    Co-authored-by: minghong <[email protected]>
---
 .../shape_check/tpcds_sf1000/dphyper/query12.out   | 29 +++++++
 .../shape_check/tpcds_sf1000/dphyper/query20.out   | 29 +++++++
 .../shape_check/tpcds_sf1000/dphyper/query23.out   | 80 +++++++++++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query3.out    | 26 +++++++
 .../shape_check/tpcds_sf1000/dphyper/query31.out   | 73 ++++++++++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query37.out   | 31 ++++++++
 .../shape_check/tpcds_sf1000/dphyper/query38.out   | 62 +++++++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query42.out   | 26 +++++++
 .../shape_check/tpcds_sf1000/dphyper/query5.out    | 85 ++++++++++++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query52.out   | 26 +++++++
 .../shape_check/tpcds_sf1000/dphyper/query55.out   | 26 +++++++
 .../shape_check/tpcds_sf1000/dphyper/query70.out   | 46 +++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query8.out    | 48 ++++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query82.out   | 31 ++++++++
 .../shape_check/tpcds_sf1000/dphyper/query83.out   | 87 +++++++++++++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query87.out   | 60 +++++++++++++++
 .../shape_check/tpcds_sf1000/dphyper/query98.out   | 29 +++++++
 .../tpcds_sf1000_nopkfk/shape/query12.out          | 29 +++++++
 .../tpcds_sf1000_nopkfk/shape/query20.out          | 29 +++++++
 .../tpcds_sf1000_nopkfk/shape/query23.out          | 90 ++++++++++++++++++++++
 .../tpcds_sf1000_nopkfk/shape/query3.out           | 26 +++++++
 .../tpcds_sf1000_nopkfk/shape/query31.out          | 73 ++++++++++++++++++
 .../tpcds_sf1000_nopkfk/shape/query37.out          | 31 ++++++++
 .../tpcds_sf1000_nopkfk/shape/query38.out          | 62 +++++++++++++++
 .../tpcds_sf1000_nopkfk/shape/query42.out          | 26 +++++++
 .../tpcds_sf1000_nopkfk/shape/query5.out           | 85 ++++++++++++++++++++
 .../tpcds_sf1000_nopkfk/shape/query52.out          | 26 +++++++
 .../tpcds_sf1000_nopkfk/shape/query55.out          | 26 +++++++
 .../tpcds_sf1000_nopkfk/shape/query70.out          | 47 +++++++++++
 .../tpcds_sf1000_nopkfk/shape/query8.out           | 48 ++++++++++++
 .../tpcds_sf1000_nopkfk/shape/query82.out          | 31 ++++++++
 .../tpcds_sf1000_nopkfk/shape/query83.out          | 90 ++++++++++++++++++++++
 .../tpcds_sf1000_nopkfk/shape/query87.out          | 60 +++++++++++++++
 .../tpcds_sf1000_nopkfk/shape/query98.out          | 29 +++++++
 34 files changed, 1602 insertions(+)

diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query12.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query12.out
new file mode 100644
index 00000000000..87c6e1440e3
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query12.out
@@ -0,0 +1,29 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_12 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------PhysicalWindow
+------------PhysicalQuickSort[LOCAL_SORT]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build 
RFs:RF1 i_item_sk->ws_item_sk
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF0 d_date_sk->ws_sold_date_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[web_sales] apply RFs: 
RF0 RF1
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_date <= '2001-07-15') and 
(date_dim.d_date >= '2001-06-15'))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------filter(item.i_category IN ('Books', 'Electronics', 
'Men'))
+------------------------------PhysicalOlapScan[item]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query20.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query20.out
new file mode 100644
index 00000000000..e1007a24d3a
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query20.out
@@ -0,0 +1,29 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_20 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------PhysicalWindow
+------------PhysicalQuickSort[LOCAL_SORT]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->cs_item_sk
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF0 d_date_sk->cs_sold_date_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[catalog_sales] apply 
RFs: RF0 RF1
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_date <= '2002-07-18') and 
(date_dim.d_date >= '2002-06-18'))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------filter(item.i_category IN ('Books', 'Music', 
'Sports'))
+------------------------------PhysicalOlapScan[item]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query23.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query23.out
new file mode 100644
index 00000000000..a3cdd62bd9a
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query23.out
@@ -0,0 +1,80 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_23 --
+PhysicalCteAnchor ( cteId=CTEId#0 )
+--PhysicalCteProducer ( cteId=CTEId#0 )
+----PhysicalProject
+------filter((cnt > 4))
+--------hashAgg[GLOBAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------hashAgg[GLOBAL]
+----------------PhysicalDistribute[DistributionSpecHash]
+------------------hashAgg[LOCAL]
+--------------------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
+------------------------PhysicalProject
+--------------------------filter(date_dim.d_year IN (2000, 2001, 2002, 2003))
+----------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------PhysicalOlapScan[item]
+--PhysicalCteAnchor ( cteId=CTEId#2 )
+----PhysicalCteProducer ( cteId=CTEId#2 )
+------PhysicalProject
+--------NestedLoopJoin[INNER_JOIN](cast(ssales as DECIMALV3(38, 6)) > (0.9500 
* max_store_sales.tpcds_cmax))
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------filter(( not store_sales.ss_customer_sk IS NULL))
+--------------------PhysicalOlapScan[store_sales]
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecGather]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF2 d_date_sk->ss_sold_date_sk
+----------------------------PhysicalProject
+------------------------------filter(( not store_sales.ss_customer_sk IS NULL))
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF2
+----------------------------PhysicalProject
+------------------------------filter(date_dim.d_year IN (2000, 2001, 2002, 
2003))
+--------------------------------PhysicalOlapScan[date_dim]
+----PhysicalResultSink
+------PhysicalLimit[GLOBAL]
+--------PhysicalLimit[LOCAL]
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecGather]
+--------------hashAgg[LOCAL]
+----------------PhysicalUnion
+------------------PhysicalProject
+--------------------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
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_moy = 7) and 
(date_dim.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalCteConsumer ( cteId=CTEId#2 )
+------------------PhysicalProject
+--------------------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
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_moy = 7) and 
(date_dim.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalCteConsumer ( cteId=CTEId#2 )
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query3.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query3.out
new file mode 100644
index 00000000000..b709c5f74f4
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query3.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_3 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((dt.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((dt.d_moy = 11))
+----------------------------------PhysicalOlapScan[date_dim(dt)]
+--------------------PhysicalProject
+----------------------filter((item.i_manufact_id = 816))
+------------------------PhysicalOlapScan[item]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query31.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query31.out
new file mode 100644
index 00000000000..1bf507c80af
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query31.out
@@ -0,0 +1,73 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_31 --
+PhysicalCteAnchor ( cteId=CTEId#0 )
+--PhysicalCteProducer ( cteId=CTEId#0 )
+----PhysicalProject
+------hashAgg[GLOBAL]
+--------PhysicalDistribute[DistributionSpecHash]
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk)) 
otherCondition=() build RFs:RF1 ca_address_sk->ss_addr_sk
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------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
+--------------------------PhysicalProject
+----------------------------filter((ss.d_year = 1999) and ss.d_qoy IN (1, 2, 
3))
+------------------------------PhysicalOlapScan[date_dim]
+----------------PhysicalProject
+------------------PhysicalOlapScan[customer_address]
+--PhysicalCteAnchor ( cteId=CTEId#1 )
+----PhysicalCteProducer ( cteId=CTEId#1 )
+------PhysicalProject
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) 
otherCondition=() build RFs:RF3 ca_address_sk->ws_bill_addr_sk
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------hashAgg[LOCAL]
+------------------------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((ws.d_year = 1999) and ws.d_qoy IN (1, 2, 
3))
+--------------------------------PhysicalOlapScan[date_dim]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[customer_address]
+----PhysicalResultSink
+------PhysicalQuickSort[MERGE_SORT]
+--------PhysicalDistribute[DistributionSpecGather]
+----------PhysicalQuickSort[LOCAL_SORT]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN shuffleBucket] hashCondition=((ws1.ca_county 
= ws3.ca_county)) otherCondition=((if((ws2.web_sales > 0.00), 
(cast(ws3.web_sales as DECIMALV3(38, 8)) / ws2.web_sales), NULL) > 
if((ss2.store_sales > 0.00), (cast(ss3.store_sales as DECIMALV3(38, 8)) / 
ss2.store_sales), NULL))) build RFs:RF9 ca_county->ca_county
+----------------PhysicalProject
+------------------filter((ws3.d_qoy = 3) and (ws3.d_year = 1999))
+--------------------PhysicalCteConsumer ( cteId=CTEId#1 ) apply RFs: RF9
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN shuffleBucket] 
hashCondition=((ss2.ca_county = ss3.ca_county)) otherCondition=() build RFs:RF8 
ca_county->ca_county
+--------------------PhysicalProject
+----------------------filter((ss3.d_qoy = 3) and (ss3.d_year = 1999))
+------------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply RFs: RF8
+--------------------hashJoin[INNER_JOIN colocated] 
hashCondition=((ss1.ca_county = ws1.ca_county)) 
otherCondition=((if((ws1.web_sales > 0.00), (cast(ws2.web_sales as 
DECIMALV3(38, 8)) / ws1.web_sales), NULL) > if((ss1.store_sales > 0.00), 
(cast(ss2.store_sales as DECIMALV3(38, 8)) / ss1.store_sales), NULL))) build 
RFs:RF6 ca_county->ca_county;RF7 ca_county->ca_county
+----------------------hashJoin[INNER_JOIN shuffle] 
hashCondition=((ss1.ca_county = ss2.ca_county)) otherCondition=() build RFs:RF5 
ca_county->ca_county
+------------------------PhysicalProject
+--------------------------filter((ss1.d_qoy = 1) and (ss1.d_year = 1999))
+----------------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply RFs: 
RF5 RF6
+------------------------PhysicalProject
+--------------------------filter((ss2.d_qoy = 2) and (ss2.d_year = 1999))
+----------------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply RFs: 
RF7
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN shuffle] 
hashCondition=((ws1.ca_county = ws2.ca_county)) otherCondition=() build RFs:RF4 
ca_county->ca_county
+--------------------------PhysicalProject
+----------------------------filter((ws1.d_qoy = 1) and (ws1.d_year = 1999))
+------------------------------PhysicalCteConsumer ( cteId=CTEId#1 ) apply RFs: 
RF4
+--------------------------PhysicalProject
+----------------------------filter((ws2.d_qoy = 2) and (ws2.d_year = 1999))
+------------------------------PhysicalCteConsumer ( cteId=CTEId#1 )
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query37.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query37.out
new file mode 100644
index 00000000000..8eb64456db5
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query37.out
@@ -0,0 +1,31 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_37 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((date_dim.d_date_sk = inventory.inv_date_sk)) otherCondition=() 
build RFs:RF2 d_date_sk->inv_date_sk
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->inv_item_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalProject
+--------------------------filter((inventory.inv_quantity_on_hand <= 500) and 
(inventory.inv_quantity_on_hand >= 100))
+----------------------------PhysicalOlapScan[inventory] apply RFs: RF1 RF2
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF0 i_item_sk->cs_item_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[catalog_sales] apply RFs: 
RF0
+--------------------------PhysicalProject
+----------------------------filter((item.i_current_price <= 59.00) and 
(item.i_current_price >= 29.00) and item.i_manufact_id IN (705, 742, 777, 944))
+------------------------------PhysicalOlapScan[item]
+------------------PhysicalProject
+--------------------filter((date_dim.d_date <= '2002-05-28') and 
(date_dim.d_date >= '2002-03-29'))
+----------------------PhysicalOlapScan[date_dim]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query38.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query38.out
new file mode 100644
index 00000000000..1bd21d41817
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query38.out
@@ -0,0 +1,62 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_38 --
+PhysicalResultSink
+--PhysicalLimit[GLOBAL]
+----PhysicalLimit[LOCAL]
+------hashAgg[GLOBAL]
+--------PhysicalDistribute[DistributionSpecGather]
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------PhysicalIntersect
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF1 c_customer_sk->ws_bill_customer_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------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 RF1
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_month_seq <= 1200) 
and (date_dim.d_month_seq >= 1189))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[customer]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF3 c_customer_sk->cs_bill_customer_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF2 d_date_sk->cs_sold_date_sk
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[catalog_sales] apply 
RFs: RF2 RF3
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_month_seq <= 1200) 
and (date_dim.d_month_seq >= 1189))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[customer]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF5 c_customer_sk->ss_customer_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF4 d_date_sk->ss_sold_date_sk
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: 
RF4 RF5
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_month_seq <= 1200) 
and (date_dim.d_month_seq >= 1189))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[customer]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query42.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query42.out
new file mode 100644
index 00000000000..4cfed0b1822
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query42.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_42 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((dt.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((dt.d_moy = 11) and (dt.d_year = 1998))
+----------------------------------PhysicalOlapScan[date_dim(dt)]
+--------------------PhysicalProject
+----------------------filter((item.i_manager_id = 1))
+------------------------PhysicalOlapScan[item]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query5.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query5.out
new file mode 100644
index 00000000000..55a696a6283
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query5.out
@@ -0,0 +1,85 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_5 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalRepeat
+------------------PhysicalUnion
+--------------------PhysicalProject
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.store_sk = store.s_store_sk)) otherCondition=() 
build RFs:RF2 s_store_sk->ss_store_sk;RF3 s_store_sk->sr_store_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.date_sk = date_dim.d_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk;RF1 d_date_sk->sr_returned_date_sk
+------------------------------------PhysicalUnion
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[store_sales] 
apply RFs: RF0 RF2
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[store_returns] 
apply RFs: RF1 RF3
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_date <= '2000-09-02') 
and (date_dim.d_date >= '2000-08-19'))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[store]
+--------------------PhysicalProject
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.page_sk = catalog_page.cp_catalog_page_sk)) 
otherCondition=() build RFs:RF6 cp_catalog_page_sk->cs_catalog_page_sk;RF7 
cp_catalog_page_sk->cr_catalog_page_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.date_sk = date_dim.d_date_sk)) otherCondition=() 
build RFs:RF4 d_date_sk->cs_sold_date_sk;RF5 d_date_sk->cr_returned_date_sk
+------------------------------------PhysicalUnion
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[catalog_sales] 
apply RFs: RF4 RF6
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[catalog_returns]
 apply RFs: RF5 RF7
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_date <= '2000-09-02') 
and (date_dim.d_date >= '2000-08-19'))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[catalog_page]
+--------------------PhysicalProject
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.wsr_web_site_sk = web_site.web_site_sk)) 
otherCondition=() build RFs:RF12 web_site_sk->ws_web_site_sk;RF13 
web_site_sk->ws_web_site_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.date_sk = date_dim.d_date_sk)) otherCondition=() 
build RFs:RF10 d_date_sk->ws_sold_date_sk;RF11 d_date_sk->wr_returned_date_sk
+------------------------------------PhysicalUnion
+--------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[web_sales] apply 
RFs: RF10 RF12
+--------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+----------------------------------------PhysicalProject
+------------------------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and 
(web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() 
build RFs:RF8 wr_item_sk->ws_item_sk;RF9 wr_order_number->ws_order_number
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[web_sales] 
apply RFs: RF8 RF9 RF13
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[web_returns] 
apply RFs: RF11
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_date <= '2000-09-02') 
and (date_dim.d_date >= '2000-08-19'))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[web_site]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query52.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query52.out
new file mode 100644
index 00000000000..94a16f6ec1e
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query52.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_52 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((dt.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((dt.d_moy = 12) and (dt.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim(dt)]
+--------------------PhysicalProject
+----------------------filter((item.i_manager_id = 1))
+------------------------PhysicalOlapScan[item]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query55.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query55.out
new file mode 100644
index 00000000000..800ff2cc6f6
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query55.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_55 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) 
otherCondition=() build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_moy = 11) and 
(date_dim.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------PhysicalProject
+----------------------filter((item.i_manager_id = 52))
+------------------------PhysicalOlapScan[item]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query70.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query70.out
new file mode 100644
index 00000000000..12fee5ea539
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query70.out
@@ -0,0 +1,46 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_70 --
+PhysicalResultSink
+--PhysicalProject
+----PhysicalTopN[MERGE_SORT]
+------PhysicalDistribute[DistributionSpecGather]
+--------PhysicalTopN[LOCAL_SORT]
+----------PhysicalProject
+------------PhysicalWindow
+--------------PhysicalQuickSort[LOCAL_SORT]
+----------------PhysicalDistribute[DistributionSpecHash]
+------------------PhysicalProject
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalRepeat
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() 
build RFs:RF4 s_store_sk->ss_store_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF3 d_date_sk->ss_sold_date_sk
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: 
RF3 RF4
+------------------------------------PhysicalProject
+--------------------------------------filter((d1.d_month_seq <= 1231) and 
(d1.d_month_seq >= 1220))
+----------------------------------------PhysicalOlapScan[date_dim(d1)]
+--------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((store.s_state = store.s_state)) otherCondition=() build RFs:RF2 
s_state->s_state
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[store] apply RFs: RF2
+----------------------------------hashAgg[GLOBAL]
+------------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------------hashAgg[LOCAL]
+----------------------------------------PhysicalProject
+------------------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() 
build RFs:RF1 s_store_sk->ss_store_sk
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN 
bucketShuffle] hashCondition=((date_dim.d_date_sk = 
store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF0 
d_date_sk->ss_sold_date_sk
+------------------------------------------------hashAgg[GLOBAL]
+--------------------------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------------------------hashAgg[LOCAL]
+------------------------------------------------------PhysicalProject
+--------------------------------------------------------PhysicalOlapScan[store_sales]
 apply RFs: RF0 RF1
+------------------------------------------------PhysicalProject
+--------------------------------------------------filter((date_dim.d_month_seq 
<= 1231) and (date_dim.d_month_seq >= 1220))
+----------------------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[store]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query8.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query8.out
new file mode 100644
index 00000000000..690bd64a419
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query8.out
@@ -0,0 +1,48 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_8 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((expr_substring(s_zip, 1, 2) = expr_substring(ca_zip, 1, 2))) 
otherCondition=()
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN shuffleBucket] 
hashCondition=((store_sales.ss_store_sk = store.s_store_sk)) otherCondition=() 
build RFs:RF2 ss_store_sk->s_store_sk
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[store] apply RFs: RF2
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------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 = 2) and 
(date_dim.d_year = 1998))
+------------------------------------PhysicalOlapScan[date_dim]
+------------------PhysicalProject
+--------------------PhysicalIntersect
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------filter(substring(ca_zip, 1, 5) IN ('10298', 
'10374', '10425', '11340', '11489', '11618', '11652', '11686', '11855', 
'11912', '12197', '12318', '12320', '12350', '13086', '13123', '13261', 
'13338', '13376', '13378', '13443', '13844', '13869', '13918', '14073', 
'14155', '14196', '14242', '14312', '14440', '14530', '14851', '15371', 
'15475', '15543', '15734', '15751', '15782', '15794', '16005', '16226', 
'16364', '16515', '16704', '16791', '16891', '17167', '171 [...]
+--------------------------------PhysicalOlapScan[customer_address]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------PhysicalProject
+--------------------------filter((cnt > 10))
+----------------------------hashAgg[GLOBAL]
+------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------hashAgg[LOCAL]
+----------------------------------PhysicalProject
+------------------------------------hashJoin[INNER_JOIN shuffle] 
hashCondition=((customer_address.ca_address_sk = customer.c_current_addr_sk)) 
otherCondition=() build RFs:RF0 ca_address_sk->c_current_addr_sk
+--------------------------------------PhysicalProject
+----------------------------------------filter((customer.c_preferred_cust_flag 
= 'Y'))
+------------------------------------------PhysicalOlapScan[customer] apply 
RFs: RF0
+--------------------------------------PhysicalProject
+----------------------------------------filter(substring(customer_address.ca_zip,
 1, 5) IN ('10298', '10374', '10425', '11340', '11489', '11618', '11652', 
'11686', '11855', '11912', '12197', '12318', '12320', '12350', '13086', 
'13123', '13261', '13338', '13376', '13378', '13443', '13844', '13869', 
'13918', '14073', '14155', '14196', '14242', '14312', '14440', '14530', 
'14851', '15371', '15475', '15543', '15734', '15751', '15782', '15794', 
'16005', '16226', '16364', '16515', '16704', '167 [...]
+------------------------------------------PhysicalOlapScan[customer_address]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query82.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query82.out
new file mode 100644
index 00000000000..f7b3e0c0efb
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query82.out
@@ -0,0 +1,31 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_82 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((date_dim.d_date_sk = inventory.inv_date_sk)) otherCondition=() 
build RFs:RF2 d_date_sk->inv_date_sk
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->inv_item_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalProject
+--------------------------filter((inventory.inv_quantity_on_hand <= 500) and 
(inventory.inv_quantity_on_hand >= 100))
+----------------------------PhysicalOlapScan[inventory] apply RFs: RF1 RF2
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF0 i_item_sk->ss_item_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0
+--------------------------PhysicalProject
+----------------------------filter((item.i_current_price <= 88.00) and 
(item.i_current_price >= 58.00) and item.i_manufact_id IN (259, 485, 559, 580))
+------------------------------PhysicalOlapScan[item]
+------------------PhysicalProject
+--------------------filter((date_dim.d_date <= '2001-03-14') and 
(date_dim.d_date >= '2001-01-13'))
+----------------------PhysicalOlapScan[date_dim]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query83.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query83.out
new file mode 100644
index 00000000000..c95e6fff510
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query83.out
@@ -0,0 +1,87 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_83 --
+PhysicalResultSink
+--PhysicalProject
+----PhysicalTopN[MERGE_SORT]
+------PhysicalDistribute[DistributionSpecGather]
+--------PhysicalTopN[LOCAL_SORT]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN colocated] hashCondition=((item.i_item_id = 
item.i_item_id)) otherCondition=() build RFs:RF13 i_item_id->i_item_id;RF14 
i_item_id->i_item_id
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN colocated] hashCondition=((item.i_item_id 
= item.i_item_id)) otherCondition=() build RFs:RF12 i_item_id->i_item_id
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store_returns.sr_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF11 i_item_sk->sr_item_sk
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_returns.sr_returned_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF10 d_date_sk->sr_returned_date_sk
+--------------------------------hashAgg[GLOBAL]
+----------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------hashAgg[LOCAL]
+--------------------------------------PhysicalProject
+----------------------------------------PhysicalOlapScan[store_returns] apply 
RFs: RF10 RF11
+--------------------------------PhysicalProject
+----------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_date = date_dim.d_date)) otherCondition=() build 
RFs:RF9 d_date->d_date
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[date_dim] apply RFs: RF9
+------------------------------------PhysicalProject
+--------------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_week_seq = date_dim.d_week_seq)) otherCondition=() 
build RFs:RF8 d_week_seq->d_week_seq
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[date_dim] apply 
RFs: RF8
+----------------------------------------PhysicalProject
+------------------------------------------filter(date_dim.d_date IN 
('2001-07-13', '2001-09-10', '2001-11-16'))
+--------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[item] apply RFs: RF12 RF13
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN shuffle] 
hashCondition=((catalog_returns.cr_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF7 i_item_sk->cr_item_sk
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_returns.cr_returned_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF6 d_date_sk->cr_returned_date_sk
+--------------------------------hashAgg[GLOBAL]
+----------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------hashAgg[LOCAL]
+--------------------------------------PhysicalProject
+----------------------------------------PhysicalOlapScan[catalog_returns] 
apply RFs: RF6 RF7
+--------------------------------PhysicalProject
+----------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_date = date_dim.d_date)) otherCondition=() build 
RFs:RF5 d_date->d_date
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[date_dim] apply RFs: RF5
+------------------------------------PhysicalProject
+--------------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_week_seq = date_dim.d_week_seq)) otherCondition=() 
build RFs:RF4 d_week_seq->d_week_seq
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[date_dim] apply 
RFs: RF4
+----------------------------------------PhysicalProject
+------------------------------------------filter(date_dim.d_date IN 
('2001-07-13', '2001-09-10', '2001-11-16'))
+--------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[item] apply RFs: RF14
+--------------hashAgg[GLOBAL]
+----------------PhysicalDistribute[DistributionSpecHash]
+------------------hashAgg[LOCAL]
+--------------------PhysicalProject
+----------------------hashJoin[INNER_JOIN shuffle] 
hashCondition=((web_returns.wr_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF3 i_item_sk->wr_item_sk
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_returns.wr_returned_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF2 d_date_sk->wr_returned_date_sk
+----------------------------hashAgg[GLOBAL]
+------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------hashAgg[LOCAL]
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[web_returns] apply RFs: 
RF2 RF3
+----------------------------PhysicalProject
+------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_date = date_dim.d_date)) otherCondition=() build 
RFs:RF1 d_date->d_date
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[date_dim] apply RFs: RF1
+--------------------------------PhysicalProject
+----------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_week_seq = date_dim.d_week_seq)) otherCondition=() 
build RFs:RF0 d_week_seq->d_week_seq
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[date_dim] apply RFs: RF0
+------------------------------------PhysicalProject
+--------------------------------------filter(date_dim.d_date IN ('2001-07-13', 
'2001-09-10', '2001-11-16'))
+----------------------------------------PhysicalOlapScan[date_dim]
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[item]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query87.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query87.out
new file mode 100644
index 00000000000..88b7ac29d2e
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query87.out
@@ -0,0 +1,60 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_87 --
+PhysicalResultSink
+--hashAgg[GLOBAL]
+----PhysicalDistribute[DistributionSpecGather]
+------hashAgg[LOCAL]
+--------PhysicalProject
+----------PhysicalExcept
+------------hashAgg[GLOBAL]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF1 c_customer_sk->ss_customer_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------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
+--------------------------------PhysicalProject
+----------------------------------filter((date_dim.d_month_seq <= 1213) and 
(date_dim.d_month_seq >= 1202))
+------------------------------------PhysicalOlapScan[date_dim]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[customer]
+------------hashAgg[GLOBAL]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF3 c_customer_sk->cs_bill_customer_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF2 d_date_sk->cs_sold_date_sk
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[catalog_sales] apply RFs: 
RF2 RF3
+--------------------------------PhysicalProject
+----------------------------------filter((date_dim.d_month_seq <= 1213) and 
(date_dim.d_month_seq >= 1202))
+------------------------------------PhysicalOlapScan[date_dim]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[customer]
+------------hashAgg[GLOBAL]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF5 c_customer_sk->ws_bill_customer_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF4 d_date_sk->ws_sold_date_sk
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 
RF5
+--------------------------------PhysicalProject
+----------------------------------filter((date_dim.d_month_seq <= 1213) and 
(date_dim.d_month_seq >= 1202))
+------------------------------------PhysicalOlapScan[date_dim]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[customer]
+
diff --git a/regression-test/data/shape_check/tpcds_sf1000/dphyper/query98.out 
b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query98.out
new file mode 100644
index 00000000000..1ca937421b2
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000/dphyper/query98.out
@@ -0,0 +1,29 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_98 --
+PhysicalResultSink
+--PhysicalQuickSort[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalQuickSort[LOCAL_SORT]
+--------PhysicalProject
+----------PhysicalWindow
+------------PhysicalQuickSort[LOCAL_SORT]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: 
RF0 RF1
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_date <= '1999-03-07') and 
(date_dim.d_date >= '1999-02-05'))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------filter(item.i_category IN ('Jewelry', 'Men', 
'Sports'))
+------------------------------PhysicalOlapScan[item]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query12.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query12.out
new file mode 100644
index 00000000000..e67e726c019
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query12.out
@@ -0,0 +1,29 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_12 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------PhysicalWindow
+------------PhysicalQuickSort[LOCAL_SORT]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF1 d_date_sk->ws_sold_date_sk
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_item_sk = item.i_item_sk)) otherCondition=() build 
RFs:RF0 i_item_sk->ws_item_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[web_sales] apply RFs: 
RF0 RF1
+------------------------------PhysicalProject
+--------------------------------filter(item.i_category IN ('Books', 
'Electronics', 'Men'))
+----------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalProject
+----------------------------filter((date_dim.d_date <= '2001-07-15') and 
(date_dim.d_date >= '2001-06-15'))
+------------------------------PhysicalOlapScan[date_dim]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query20.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query20.out
new file mode 100644
index 00000000000..ab5983e7e2f
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query20.out
@@ -0,0 +1,29 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_20 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------PhysicalWindow
+------------PhysicalQuickSort[LOCAL_SORT]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF1 d_date_sk->cs_sold_date_sk
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF0 i_item_sk->cs_item_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[catalog_sales] apply 
RFs: RF0 RF1
+------------------------------PhysicalProject
+--------------------------------filter(item.i_category IN ('Books', 'Music', 
'Sports'))
+----------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalProject
+----------------------------filter((date_dim.d_date <= '2002-07-18') and 
(date_dim.d_date >= '2002-06-18'))
+------------------------------PhysicalOlapScan[date_dim]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query23.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query23.out
new file mode 100644
index 00000000000..859cc6e9a80
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query23.out
@@ -0,0 +1,90 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_23 --
+PhysicalCteAnchor ( cteId=CTEId#0 )
+--PhysicalCteProducer ( cteId=CTEId#0 )
+----PhysicalProject
+------filter((cnt > 4))
+--------hashAgg[GLOBAL]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------hashAgg[GLOBAL]
+----------------PhysicalDistribute[DistributionSpecHash]
+------------------hashAgg[LOCAL]
+--------------------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
+------------------------PhysicalProject
+--------------------------filter(date_dim.d_year IN (2000, 2001, 2002, 2003))
+----------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------PhysicalOlapScan[item]
+--PhysicalCteAnchor ( cteId=CTEId#2 )
+----PhysicalCteProducer ( cteId=CTEId#2 )
+------PhysicalProject
+--------NestedLoopJoin[INNER_JOIN](cast(ssales as DECIMALV3(38, 6)) > (0.9500 
* tpcds_cmax))
+----------PhysicalProject
+------------hashAgg[GLOBAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF4 c_customer_sk->ss_customer_sk
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[store_sales] apply RFs: RF4
+------------------PhysicalProject
+--------------------PhysicalOlapScan[customer]
+----------PhysicalProject
+------------hashAgg[GLOBAL]
+--------------PhysicalDistribute[DistributionSpecGather]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashAgg[GLOBAL]
+----------------------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
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF2 c_customer_sk->ss_customer_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: 
RF2 RF3
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[customer]
+--------------------------PhysicalProject
+----------------------------filter(date_dim.d_year IN (2000, 2001, 2002, 2003))
+------------------------------PhysicalOlapScan[date_dim]
+----PhysicalResultSink
+------PhysicalLimit[GLOBAL]
+--------PhysicalLimit[LOCAL]
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecGather]
+--------------hashAgg[LOCAL]
+----------------PhysicalUnion
+------------------PhysicalProject
+--------------------hashJoin[RIGHT_SEMI_JOIN shuffle] 
hashCondition=((catalog_sales.cs_item_sk = frequent_ss_items.item_sk)) 
otherCondition=() build RFs:RF7 cs_item_sk->item_sk
+----------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply RFs: RF7
+----------------------PhysicalProject
+------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((catalog_sales.cs_bill_customer_sk = 
best_ss_customer.c_customer_sk)) otherCondition=() build RFs:RF6 
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:RF5 d_date_sk->cs_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[catalog_sales] apply RFs: RF5 
RF6
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_moy = 7) and 
(date_dim.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalCteConsumer ( cteId=CTEId#2 )
+------------------PhysicalProject
+--------------------hashJoin[RIGHT_SEMI_JOIN shuffle] 
hashCondition=((web_sales.ws_item_sk = frequent_ss_items.item_sk)) 
otherCondition=() build RFs:RF10 ws_item_sk->item_sk
+----------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply RFs: RF10
+----------------------PhysicalProject
+------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((web_sales.ws_bill_customer_sk = 
best_ss_customer.c_customer_sk)) otherCondition=() build RFs:RF9 
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:RF8 d_date_sk->ws_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[web_sales] apply RFs: RF8 RF9
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_moy = 7) and 
(date_dim.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalCteConsumer ( cteId=CTEId#2 )
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query3.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query3.out
new file mode 100644
index 00000000000..b709c5f74f4
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query3.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_3 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((dt.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((dt.d_moy = 11))
+----------------------------------PhysicalOlapScan[date_dim(dt)]
+--------------------PhysicalProject
+----------------------filter((item.i_manufact_id = 816))
+------------------------PhysicalOlapScan[item]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query31.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query31.out
new file mode 100644
index 00000000000..db4754413b8
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query31.out
@@ -0,0 +1,73 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_31 --
+PhysicalCteAnchor ( cteId=CTEId#0 )
+--PhysicalCteProducer ( cteId=CTEId#0 )
+----PhysicalProject
+------hashAgg[GLOBAL]
+--------PhysicalDistribute[DistributionSpecHash]
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk)) 
otherCondition=() build RFs:RF1 ca_address_sk->ss_addr_sk
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------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
+--------------------------PhysicalProject
+----------------------------filter((ss.d_year = 1999) and ss.d_qoy IN (1, 2, 
3))
+------------------------------PhysicalOlapScan[date_dim]
+----------------PhysicalProject
+------------------PhysicalOlapScan[customer_address]
+--PhysicalCteAnchor ( cteId=CTEId#1 )
+----PhysicalCteProducer ( cteId=CTEId#1 )
+------PhysicalProject
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)) 
otherCondition=() build RFs:RF3 ca_address_sk->ws_bill_addr_sk
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------hashAgg[LOCAL]
+------------------------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((ws.d_year = 1999) and ws.d_qoy IN (1, 2, 
3))
+--------------------------------PhysicalOlapScan[date_dim]
+------------------PhysicalProject
+--------------------PhysicalOlapScan[customer_address]
+----PhysicalResultSink
+------PhysicalQuickSort[MERGE_SORT]
+--------PhysicalDistribute[DistributionSpecGather]
+----------PhysicalQuickSort[LOCAL_SORT]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN shuffleBucket] hashCondition=((ws1.ca_county 
= ws3.ca_county)) otherCondition=((if((ws2.web_sales > 0.00), 
(cast(ws3.web_sales as DECIMALV3(38, 8)) / ws2.web_sales), NULL) > 
if((ss2.store_sales > 0.00), (cast(ss3.store_sales as DECIMALV3(38, 8)) / 
ss2.store_sales), NULL))) build RFs:RF10 ca_county->ca_county
+----------------PhysicalProject
+------------------filter((ws3.d_qoy = 3) and (ws3.d_year = 1999))
+--------------------PhysicalCteConsumer ( cteId=CTEId#1 ) apply RFs: RF10
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN shuffleBucket] 
hashCondition=((ws1.ca_county = ws2.ca_county)) 
otherCondition=((if((ws1.web_sales > 0.00), (cast(ws2.web_sales as 
DECIMALV3(38, 8)) / ws1.web_sales), NULL) > if((ss1.store_sales > 0.00), 
(cast(ss2.store_sales as DECIMALV3(38, 8)) / ss1.store_sales), NULL))) build 
RFs:RF9 ca_county->ca_county
+--------------------PhysicalProject
+----------------------filter((ws2.d_qoy = 2) and (ws2.d_year = 1999))
+------------------------PhysicalCteConsumer ( cteId=CTEId#1 ) apply RFs: RF9
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((ss1.ca_county = ws1.ca_county)) otherCondition=() build RFs:RF7 
ca_county->ca_county;RF8 ca_county->ca_county
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((ss2.ca_county = ss3.ca_county)) otherCondition=() build RFs:RF5 
ca_county->ca_county;RF6 ca_county->ca_county
+--------------------------hashJoin[INNER_JOIN shuffle] 
hashCondition=((ss1.ca_county = ss2.ca_county)) otherCondition=() build RFs:RF4 
ca_county->ca_county
+----------------------------PhysicalProject
+------------------------------filter((ss1.d_qoy = 1) and (ss1.d_year = 1999))
+--------------------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply 
RFs: RF4 RF6 RF7
+----------------------------PhysicalProject
+------------------------------filter((ss2.d_qoy = 2) and (ss2.d_year = 1999))
+--------------------------------PhysicalCteConsumer ( cteId=CTEId#0 ) apply 
RFs: RF5 RF8
+--------------------------PhysicalProject
+----------------------------filter((ss3.d_qoy = 3) and (ss3.d_year = 1999))
+------------------------------PhysicalCteConsumer ( cteId=CTEId#0 )
+----------------------PhysicalProject
+------------------------filter((ws1.d_qoy = 1) and (ws1.d_year = 1999))
+--------------------------PhysicalCteConsumer ( cteId=CTEId#1 )
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query37.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query37.out
new file mode 100644
index 00000000000..8eb64456db5
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query37.out
@@ -0,0 +1,31 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_37 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((date_dim.d_date_sk = inventory.inv_date_sk)) otherCondition=() 
build RFs:RF2 d_date_sk->inv_date_sk
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->inv_item_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalProject
+--------------------------filter((inventory.inv_quantity_on_hand <= 500) and 
(inventory.inv_quantity_on_hand >= 100))
+----------------------------PhysicalOlapScan[inventory] apply RFs: RF1 RF2
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF0 i_item_sk->cs_item_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[catalog_sales] apply RFs: 
RF0
+--------------------------PhysicalProject
+----------------------------filter((item.i_current_price <= 59.00) and 
(item.i_current_price >= 29.00) and item.i_manufact_id IN (705, 742, 777, 944))
+------------------------------PhysicalOlapScan[item]
+------------------PhysicalProject
+--------------------filter((date_dim.d_date <= '2002-05-28') and 
(date_dim.d_date >= '2002-03-29'))
+----------------------PhysicalOlapScan[date_dim]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query38.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query38.out
new file mode 100644
index 00000000000..1bd21d41817
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query38.out
@@ -0,0 +1,62 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_38 --
+PhysicalResultSink
+--PhysicalLimit[GLOBAL]
+----PhysicalLimit[LOCAL]
+------hashAgg[GLOBAL]
+--------PhysicalDistribute[DistributionSpecGather]
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------PhysicalIntersect
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF1 c_customer_sk->ws_bill_customer_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------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 RF1
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_month_seq <= 1200) 
and (date_dim.d_month_seq >= 1189))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[customer]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF3 c_customer_sk->cs_bill_customer_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF2 d_date_sk->cs_sold_date_sk
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[catalog_sales] apply 
RFs: RF2 RF3
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_month_seq <= 1200) 
and (date_dim.d_month_seq >= 1189))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[customer]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF5 c_customer_sk->ss_customer_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF4 d_date_sk->ss_sold_date_sk
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: 
RF4 RF5
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_month_seq <= 1200) 
and (date_dim.d_month_seq >= 1189))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------PhysicalProject
+----------------------------PhysicalOlapScan[customer]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query42.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query42.out
new file mode 100644
index 00000000000..4cfed0b1822
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query42.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_42 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((dt.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((dt.d_moy = 11) and (dt.d_year = 1998))
+----------------------------------PhysicalOlapScan[date_dim(dt)]
+--------------------PhysicalProject
+----------------------filter((item.i_manager_id = 1))
+------------------------PhysicalOlapScan[item]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query5.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query5.out
new file mode 100644
index 00000000000..55a696a6283
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query5.out
@@ -0,0 +1,85 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_5 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalRepeat
+------------------PhysicalUnion
+--------------------PhysicalProject
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.store_sk = store.s_store_sk)) otherCondition=() 
build RFs:RF2 s_store_sk->ss_store_sk;RF3 s_store_sk->sr_store_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.date_sk = date_dim.d_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk;RF1 d_date_sk->sr_returned_date_sk
+------------------------------------PhysicalUnion
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[store_sales] 
apply RFs: RF0 RF2
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[store_returns] 
apply RFs: RF1 RF3
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_date <= '2000-09-02') 
and (date_dim.d_date >= '2000-08-19'))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[store]
+--------------------PhysicalProject
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.page_sk = catalog_page.cp_catalog_page_sk)) 
otherCondition=() build RFs:RF6 cp_catalog_page_sk->cs_catalog_page_sk;RF7 
cp_catalog_page_sk->cr_catalog_page_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.date_sk = date_dim.d_date_sk)) otherCondition=() 
build RFs:RF4 d_date_sk->cs_sold_date_sk;RF5 d_date_sk->cr_returned_date_sk
+------------------------------------PhysicalUnion
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[catalog_sales] 
apply RFs: RF4 RF6
+--------------------------------------hashAgg[GLOBAL]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------hashAgg[LOCAL]
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[catalog_returns]
 apply RFs: RF5 RF7
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_date <= '2000-09-02') 
and (date_dim.d_date >= '2000-08-19'))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[catalog_page]
+--------------------PhysicalProject
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.wsr_web_site_sk = web_site.web_site_sk)) 
otherCondition=() build RFs:RF12 web_site_sk->ws_web_site_sk;RF13 
web_site_sk->ws_web_site_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((salesreturns.date_sk = date_dim.d_date_sk)) otherCondition=() 
build RFs:RF10 d_date_sk->ws_sold_date_sk;RF11 d_date_sk->wr_returned_date_sk
+------------------------------------PhysicalUnion
+--------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[web_sales] apply 
RFs: RF10 RF12
+--------------------------------------PhysicalDistribute[DistributionSpecExecutionAny]
+----------------------------------------PhysicalProject
+------------------------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_returns.wr_item_sk = web_sales.ws_item_sk) and 
(web_returns.wr_order_number = web_sales.ws_order_number)) otherCondition=() 
build RFs:RF8 wr_item_sk->ws_item_sk;RF9 wr_order_number->ws_order_number
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[web_sales] 
apply RFs: RF8 RF9 RF13
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[web_returns] 
apply RFs: RF11
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_date <= '2000-09-02') 
and (date_dim.d_date >= '2000-08-19'))
+----------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[web_site]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query52.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query52.out
new file mode 100644
index 00000000000..94a16f6ec1e
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query52.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_52 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((dt.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((dt.d_moy = 12) and (dt.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim(dt)]
+--------------------PhysicalProject
+----------------------filter((item.i_manager_id = 1))
+------------------------PhysicalOlapScan[item]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query55.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query55.out
new file mode 100644
index 00000000000..800ff2cc6f6
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query55.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_55 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->ss_item_sk
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((date_dim.d_date_sk = store_sales.ss_sold_date_sk)) 
otherCondition=() build RFs:RF0 d_date_sk->ss_sold_date_sk
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0 
RF1
+------------------------------PhysicalProject
+--------------------------------filter((date_dim.d_moy = 11) and 
(date_dim.d_year = 2000))
+----------------------------------PhysicalOlapScan[date_dim]
+--------------------PhysicalProject
+----------------------filter((item.i_manager_id = 52))
+------------------------PhysicalOlapScan[item]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query70.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query70.out
new file mode 100644
index 00000000000..dbd70ef579a
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query70.out
@@ -0,0 +1,47 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_70 --
+PhysicalResultSink
+--PhysicalProject
+----PhysicalTopN[MERGE_SORT]
+------PhysicalDistribute[DistributionSpecGather]
+--------PhysicalTopN[LOCAL_SORT]
+----------PhysicalProject
+------------PhysicalWindow
+--------------PhysicalQuickSort[LOCAL_SORT]
+----------------PhysicalDistribute[DistributionSpecHash]
+------------------PhysicalProject
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalRepeat
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() 
build RFs:RF4 s_store_sk->ss_store_sk
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((d1.d_date_sk = store_sales.ss_sold_date_sk)) otherCondition=() 
build RFs:RF3 d_date_sk->ss_sold_date_sk
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: 
RF3 RF4
+------------------------------------PhysicalProject
+--------------------------------------filter((d1.d_month_seq <= 1231) and 
(d1.d_month_seq >= 1220))
+----------------------------------------PhysicalOlapScan[date_dim(d1)]
+--------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((store.s_state = tmp1.s_state)) otherCondition=() build RFs:RF2 
s_state->s_state
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[store] apply RFs: RF2
+----------------------------------PhysicalProject
+------------------------------------hashAgg[GLOBAL]
+--------------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------------hashAgg[LOCAL]
+------------------------------------------PhysicalProject
+--------------------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store.s_store_sk = store_sales.ss_store_sk)) otherCondition=() 
build RFs:RF1 s_store_sk->ss_store_sk
+----------------------------------------------PhysicalProject
+------------------------------------------------hashJoin[INNER_JOIN 
bucketShuffle] hashCondition=((date_dim.d_date_sk = 
store_sales.ss_sold_date_sk)) otherCondition=() build RFs:RF0 
d_date_sk->ss_sold_date_sk
+--------------------------------------------------hashAgg[GLOBAL]
+----------------------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------------------hashAgg[LOCAL]
+--------------------------------------------------------PhysicalProject
+----------------------------------------------------------PhysicalOlapScan[store_sales]
 apply RFs: RF0 RF1
+--------------------------------------------------PhysicalProject
+----------------------------------------------------filter((date_dim.d_month_seq
 <= 1231) and (date_dim.d_month_seq >= 1220))
+------------------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------------------PhysicalProject
+------------------------------------------------PhysicalOlapScan[store]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query8.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query8.out
new file mode 100644
index 00000000000..690bd64a419
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query8.out
@@ -0,0 +1,48 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_8 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((expr_substring(s_zip, 1, 2) = expr_substring(ca_zip, 1, 2))) 
otherCondition=()
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN shuffleBucket] 
hashCondition=((store_sales.ss_store_sk = store.s_store_sk)) otherCondition=() 
build RFs:RF2 ss_store_sk->s_store_sk
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[store] apply RFs: RF2
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------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 = 2) and 
(date_dim.d_year = 1998))
+------------------------------------PhysicalOlapScan[date_dim]
+------------------PhysicalProject
+--------------------PhysicalIntersect
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------filter(substring(ca_zip, 1, 5) IN ('10298', 
'10374', '10425', '11340', '11489', '11618', '11652', '11686', '11855', 
'11912', '12197', '12318', '12320', '12350', '13086', '13123', '13261', 
'13338', '13376', '13378', '13443', '13844', '13869', '13918', '14073', 
'14155', '14196', '14242', '14312', '14440', '14530', '14851', '15371', 
'15475', '15543', '15734', '15751', '15782', '15794', '16005', '16226', 
'16364', '16515', '16704', '16791', '16891', '17167', '171 [...]
+--------------------------------PhysicalOlapScan[customer_address]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------PhysicalProject
+--------------------------filter((cnt > 10))
+----------------------------hashAgg[GLOBAL]
+------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------hashAgg[LOCAL]
+----------------------------------PhysicalProject
+------------------------------------hashJoin[INNER_JOIN shuffle] 
hashCondition=((customer_address.ca_address_sk = customer.c_current_addr_sk)) 
otherCondition=() build RFs:RF0 ca_address_sk->c_current_addr_sk
+--------------------------------------PhysicalProject
+----------------------------------------filter((customer.c_preferred_cust_flag 
= 'Y'))
+------------------------------------------PhysicalOlapScan[customer] apply 
RFs: RF0
+--------------------------------------PhysicalProject
+----------------------------------------filter(substring(customer_address.ca_zip,
 1, 5) IN ('10298', '10374', '10425', '11340', '11489', '11618', '11652', 
'11686', '11855', '11912', '12197', '12318', '12320', '12350', '13086', 
'13123', '13261', '13338', '13376', '13378', '13443', '13844', '13869', 
'13918', '14073', '14155', '14196', '14242', '14312', '14440', '14530', 
'14851', '15371', '15475', '15543', '15734', '15751', '15782', '15794', 
'16005', '16226', '16364', '16515', '16704', '167 [...]
+------------------------------------------PhysicalOlapScan[customer_address]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query82.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query82.out
new file mode 100644
index 00000000000..f7b3e0c0efb
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query82.out
@@ -0,0 +1,31 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_82 --
+PhysicalResultSink
+--PhysicalTopN[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalTopN[LOCAL_SORT]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((date_dim.d_date_sk = inventory.inv_date_sk)) otherCondition=() 
build RFs:RF2 d_date_sk->inv_date_sk
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((inventory.inv_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF1 i_item_sk->inv_item_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalProject
+--------------------------filter((inventory.inv_quantity_on_hand <= 500) and 
(inventory.inv_quantity_on_hand >= 100))
+----------------------------PhysicalOlapScan[inventory] apply RFs: RF1 RF2
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF0 i_item_sk->ss_item_sk
+--------------------------hashAgg[GLOBAL]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------hashAgg[LOCAL]
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0
+--------------------------PhysicalProject
+----------------------------filter((item.i_current_price <= 88.00) and 
(item.i_current_price >= 58.00) and item.i_manufact_id IN (259, 485, 559, 580))
+------------------------------PhysicalOlapScan[item]
+------------------PhysicalProject
+--------------------filter((date_dim.d_date <= '2001-03-14') and 
(date_dim.d_date >= '2001-01-13'))
+----------------------PhysicalOlapScan[date_dim]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query83.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query83.out
new file mode 100644
index 00000000000..cde6e5e6ccf
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query83.out
@@ -0,0 +1,90 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_83 --
+PhysicalResultSink
+--PhysicalProject
+----PhysicalTopN[MERGE_SORT]
+------PhysicalDistribute[DistributionSpecGather]
+--------PhysicalTopN[LOCAL_SORT]
+----------PhysicalProject
+------------hashJoin[INNER_JOIN colocated] hashCondition=((sr_items.item_id = 
wr_items.item_id)) otherCondition=() build RFs:RF13 item_id->i_item_id;RF14 
item_id->i_item_id
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN colocated] 
hashCondition=((sr_items.item_id = cr_items.item_id)) otherCondition=() build 
RFs:RF12 item_id->i_item_id
+------------------PhysicalProject
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((store_returns.sr_returned_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF11 d_date_sk->sr_returned_date_sk
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_returns.sr_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF10 i_item_sk->sr_item_sk
+----------------------------------hashAgg[GLOBAL]
+------------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------------hashAgg[LOCAL]
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[store_returns] 
apply RFs: RF10 RF11
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[item] apply RFs: RF12 RF13
+------------------------------PhysicalProject
+--------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_date = date_dim.d_date)) otherCondition=() build 
RFs:RF9 d_date->d_date
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[date_dim] apply RFs: RF9
+----------------------------------PhysicalProject
+------------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_week_seq = date_dim.d_week_seq)) otherCondition=() 
build RFs:RF8 d_week_seq->d_week_seq
+--------------------------------------PhysicalProject
+----------------------------------------PhysicalOlapScan[date_dim] apply RFs: 
RF8
+--------------------------------------PhysicalProject
+----------------------------------------filter(date_dim.d_date IN 
('2001-07-13', '2001-09-10', '2001-11-16'))
+------------------------------------------PhysicalOlapScan[date_dim]
+------------------PhysicalProject
+--------------------hashAgg[GLOBAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------hashAgg[LOCAL]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((catalog_returns.cr_returned_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF7 d_date_sk->cr_returned_date_sk
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_returns.cr_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF6 i_item_sk->cr_item_sk
+----------------------------------hashAgg[GLOBAL]
+------------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------------hashAgg[LOCAL]
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[catalog_returns] 
apply RFs: RF6 RF7
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[item] apply RFs: RF14
+------------------------------PhysicalProject
+--------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_date = date_dim.d_date)) otherCondition=() build 
RFs:RF5 d_date->d_date
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[date_dim] apply RFs: RF5
+----------------------------------PhysicalProject
+------------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_week_seq = date_dim.d_week_seq)) otherCondition=() 
build RFs:RF4 d_week_seq->d_week_seq
+--------------------------------------PhysicalProject
+----------------------------------------PhysicalOlapScan[date_dim] apply RFs: 
RF4
+--------------------------------------PhysicalProject
+----------------------------------------filter(date_dim.d_date IN 
('2001-07-13', '2001-09-10', '2001-11-16'))
+------------------------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((web_returns.wr_returned_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF3 d_date_sk->wr_returned_date_sk
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_returns.wr_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF2 i_item_sk->wr_item_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[web_returns] apply RFs: 
RF2 RF3
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalProject
+----------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_date = date_dim.d_date)) otherCondition=() build 
RFs:RF1 d_date->d_date
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[date_dim] apply RFs: RF1
+------------------------------PhysicalProject
+--------------------------------hashJoin[LEFT_SEMI_JOIN broadcast] 
hashCondition=((date_dim.d_week_seq = date_dim.d_week_seq)) otherCondition=() 
build RFs:RF0 d_week_seq->d_week_seq
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[date_dim] apply RFs: RF0
+----------------------------------PhysicalProject
+------------------------------------filter(date_dim.d_date IN ('2001-07-13', 
'2001-09-10', '2001-11-16'))
+--------------------------------------PhysicalOlapScan[date_dim]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query87.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query87.out
new file mode 100644
index 00000000000..88b7ac29d2e
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query87.out
@@ -0,0 +1,60 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_87 --
+PhysicalResultSink
+--hashAgg[GLOBAL]
+----PhysicalDistribute[DistributionSpecGather]
+------hashAgg[LOCAL]
+--------PhysicalProject
+----------PhysicalExcept
+------------hashAgg[GLOBAL]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF1 c_customer_sk->ss_customer_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------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
+--------------------------------PhysicalProject
+----------------------------------filter((date_dim.d_month_seq <= 1213) and 
(date_dim.d_month_seq >= 1202))
+------------------------------------PhysicalOlapScan[date_dim]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[customer]
+------------hashAgg[GLOBAL]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF3 c_customer_sk->cs_bill_customer_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF2 d_date_sk->cs_sold_date_sk
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[catalog_sales] apply RFs: 
RF2 RF3
+--------------------------------PhysicalProject
+----------------------------------filter((date_dim.d_month_seq <= 1213) and 
(date_dim.d_month_seq >= 1202))
+------------------------------------PhysicalOlapScan[date_dim]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[customer]
+------------hashAgg[GLOBAL]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[LOCAL]
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((web_sales.ws_bill_customer_sk = customer.c_customer_sk)) 
otherCondition=() build RFs:RF5 c_customer_sk->ws_bill_customer_sk
+----------------------hashAgg[GLOBAL]
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------hashAgg[LOCAL]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN broadcast] 
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk)) 
otherCondition=() build RFs:RF4 d_date_sk->ws_sold_date_sk
+--------------------------------PhysicalProject
+----------------------------------PhysicalOlapScan[web_sales] apply RFs: RF4 
RF5
+--------------------------------PhysicalProject
+----------------------------------filter((date_dim.d_month_seq <= 1213) and 
(date_dim.d_month_seq >= 1202))
+------------------------------------PhysicalOlapScan[date_dim]
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[customer]
+
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query98.out 
b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query98.out
new file mode 100644
index 00000000000..2aaa0bf9825
--- /dev/null
+++ b/regression-test/data/shape_check/tpcds_sf1000_nopkfk/shape/query98.out
@@ -0,0 +1,29 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ds_shape_98 --
+PhysicalResultSink
+--PhysicalQuickSort[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalQuickSort[LOCAL_SORT]
+--------PhysicalProject
+----------PhysicalWindow
+------------PhysicalQuickSort[LOCAL_SORT]
+--------------PhysicalDistribute[DistributionSpecHash]
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------hashAgg[LOCAL]
+----------------------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
+----------------------------hashJoin[INNER_JOIN bucketShuffle] 
hashCondition=((store_sales.ss_item_sk = item.i_item_sk)) otherCondition=() 
build RFs:RF0 i_item_sk->ss_item_sk
+------------------------------hashAgg[GLOBAL]
+--------------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------------hashAgg[LOCAL]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[store_sales] apply RFs: 
RF0 RF1
+------------------------------PhysicalProject
+--------------------------------filter(item.i_category IN ('Jewelry', 'Men', 
'Sports'))
+----------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalProject
+----------------------------filter((date_dim.d_date <= '1999-03-07') and 
(date_dim.d_date >= '1999-02-05'))
+------------------------------PhysicalOlapScan[date_dim]
+


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to