You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/06/29 11:52:22 UTC

[doris] branch master updated: [opt](Nereids) forbid gather agg and gather set operation (#21332)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5bb79be932 [opt](Nereids) forbid gather agg and gather set operation (#21332)
5bb79be932 is described below

commit 5bb79be932aae712abe61be49e3f6616a6b2cfb4
Author: morrySnow <10...@users.noreply.github.com>
AuthorDate: Thu Jun 29 19:52:15 2023 +0800

    [opt](Nereids) forbid gather agg and gather set operation (#21332)
    
    gather agg and gather set operation usually not good
    we cannot compute cost on them nicely, so just
    forbid them until we could choose realy best plan
---
 .../properties/ChildrenPropertiesRegulator.java    |   1 +
 .../nereids/properties/RequestPropertyDeriver.java |   5 +-
 .../rules/implementation/AggregateStrategies.java  |   9 +-
 .../nereids_tpcds_shape_sf100_p0/shape/query14.out |  54 ++++---
 .../nereids_tpcds_shape_sf100_p0/shape/query33.out | 176 ++++++++++-----------
 .../nereids_tpcds_shape_sf100_p0/shape/query49.out | 138 ++++++++--------
 .../nereids_tpcds_shape_sf100_p0/shape/query54.out |  26 +--
 .../nereids_tpcds_shape_sf100_p0/shape/query56.out | 148 ++++++++---------
 .../nereids_tpcds_shape_sf100_p0/shape/query6.out  |  13 +-
 .../nereids_tpcds_shape_sf100_p0/shape/query60.out | 156 +++++++++---------
 .../nereids_tpcds_shape_sf100_p0/shape/query66.out | 109 ++++++-------
 .../nereids_tpcds_shape_sf100_p0/shape/query75.out | 112 ++++++-------
 .../nereids_tpcds_shape_sf100_p0/shape/query76.out |  73 +++++----
 13 files changed, 520 insertions(+), 500 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java
index 3f811a2362..862dbb5e2b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java
@@ -254,6 +254,7 @@ public class ChildrenPropertiesRegulator extends PlanVisitor<Boolean, Void> {
             for (int i = 0; i < childrenProperties.size(); i++) {
                 if (childrenProperties.get(i).getDistributionSpec() instanceof DistributionSpecStorageAny
                         || childrenProperties.get(i).getDistributionSpec() instanceof DistributionSpecStorageGather
+                        || childrenProperties.get(i).getDistributionSpec() instanceof DistributionSpecGather
                         || (childrenProperties.get(i).getDistributionSpec() instanceof DistributionSpecHash
                         && ((DistributionSpecHash) childrenProperties.get(i).getDistributionSpec())
                         .getShuffleType() == ShuffleType.NATURAL)) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
index c18fcc7cfb..74324101d3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java
@@ -182,6 +182,7 @@ public class RequestPropertyDeriver extends PlanVisitor<Void, PlanContext> {
 
     @Override
     public Void visitPhysicalUnion(PhysicalUnion union, PlanContext context) {
+        // TODO: we do not generate gather union until we could do better cost computation on set operation
         List<PhysicalProperties> requiredPropertyList =
                 Lists.newArrayListWithCapacity(context.arity());
         if (union.getConstantExprsList().isEmpty()) {
@@ -190,10 +191,6 @@ public class RequestPropertyDeriver extends PlanVisitor<Void, PlanContext> {
             if (distributionRequestFromParent instanceof DistributionSpecHash) {
                 DistributionSpecHash distributionSpecHash = (DistributionSpecHash) distributionRequestFromParent;
                 requiredPropertyList = createHashRequestAccordingToParent(union, distributionSpecHash, context);
-            } else if (distributionRequestFromParent instanceof DistributionSpecGather) {
-                for (int i = context.arity(); i > 0; --i) {
-                    requiredPropertyList.add(PhysicalProperties.GATHER);
-                }
             } else {
                 for (int i = context.arity(); i > 0; --i) {
                     requiredPropertyList.add(PhysicalProperties.ANY);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
index cf133da31f..551e73532c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
@@ -374,7 +374,8 @@ public class AggregateStrategies implements ImplementationRuleFactory {
                     .withRequire(requireHash)
                     .withPartitionExpressions(logicalAgg.getGroupByExpressions());
             return ImmutableList.<PhysicalHashAggregate<Plan>>builder()
-                    .add(gatherLocalAgg)
+                    // TODO: usually bad, disable it until we could do better cost computation.
+                    //.add(gatherLocalAgg)
                     .add(hashLocalAgg)
                     .build();
         }
@@ -736,7 +737,8 @@ public class AggregateStrategies implements ImplementationRuleFactory {
                     .withRequire(requireHash)
                     .withPartitionExpressions(logicalAgg.getGroupByExpressions());
             return ImmutableList.<PhysicalHashAggregate<Plan>>builder()
-                    .add(anyLocalGatherGlobalAgg)
+                    // TODO: usually bad, disable it until we could do better cost computation.
+                    // .add(anyLocalGatherGlobalAgg)
                     .add(anyLocalHashGlobalAgg)
                     .build();
         }
@@ -1074,7 +1076,8 @@ public class AggregateStrategies implements ImplementationRuleFactory {
                     .withRequire(requireHash)
                     .withPartitionExpressions(logicalAgg.getGroupByExpressions());
             return ImmutableList.<PhysicalHashAggregate<? extends Plan>>builder()
-                    .add(gatherLocalAgg)
+                    // TODO: usually bad, disable it until we could do better cost computation.
+                    // .add(gatherLocalAgg)
                     .add(hashLocalAgg)
                     .build();
         }
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query14.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query14.out
index d655442bd0..4877f71f8c 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query14.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query14.out
@@ -49,35 +49,37 @@ CteAnchor[cteId= ( CTEId#8=] )
 ------------PhysicalOlapScan[item]
 --CteAnchor[cteId= ( CTEId#10=] )
 ----CteProducer[cteId= ( CTEId#10=] )
-------hashAgg[LOCAL]
---------PhysicalUnion
-----------PhysicalDistribute
-------------PhysicalProject
---------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalUnion
+--------------PhysicalDistribute
 ----------------PhysicalProject
-------------------PhysicalOlapScan[store_sales]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------filter((date_dim.d_year <= 2002)(date_dim.d_year >= 2000))
-----------------------PhysicalOlapScan[date_dim]
-----------PhysicalDistribute
-------------PhysicalProject
---------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[store_sales]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------filter((date_dim.d_year <= 2002)(date_dim.d_year >= 2000))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalDistribute
 ----------------PhysicalProject
-------------------PhysicalOlapScan[catalog_sales]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------filter((date_dim.d_year <= 2002)(date_dim.d_year >= 2000))
-----------------------PhysicalOlapScan[date_dim]
-----------PhysicalDistribute
-------------PhysicalProject
---------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[catalog_sales]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------filter((date_dim.d_year <= 2002)(date_dim.d_year >= 2000))
+--------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalDistribute
 ----------------PhysicalProject
-------------------PhysicalOlapScan[web_sales]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------filter((date_dim.d_year >= 2000)(date_dim.d_year <= 2002))
-----------------------PhysicalOlapScan[date_dim]
+------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[web_sales]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------filter((date_dim.d_year >= 2000)(date_dim.d_year <= 2002))
+--------------------------PhysicalOlapScan[date_dim]
 ----PhysicalTopN
 ------PhysicalDistribute
 --------PhysicalTopN
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query33.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query33.out
index fe5d9b14c0..731dc27082 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query33.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query33.out
@@ -1,99 +1,99 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
 -- !ds_shape_33 --
 PhysicalTopN
---PhysicalTopN
-----hashAgg[LOCAL]
-------PhysicalUnion
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[GLOBAL]
 --------PhysicalDistribute
-----------PhysicalProject
-------------hashJoin[LEFT_SEMI_JOIN](item.i_manufact_id = item.i_manufact_id)
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute
-------------------hashAgg[LOCAL]
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](store_sales.ss_addr_sk = customer_address.ca_address_sk)
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+----------hashAgg[LOCAL]
+------------PhysicalUnion
+--------------PhysicalProject
+----------------hashJoin[LEFT_SEMI_JOIN](item.i_manufact_id = item.i_manufact_id)
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN](store_sales.ss_addr_sk = customer_address.ca_address_sk)
+----------------------------------PhysicalDistribute
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[store_sales]
-------------------------------------PhysicalDistribute
---------------------------------------PhysicalProject
-----------------------------------------filter((date_dim.d_moy = 1)(date_dim.d_year = 2002))
-------------------------------------------PhysicalOlapScan[date_dim]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((customer_address.ca_gmt_offset = -5.00))
-------------------------------------PhysicalOlapScan[customer_address]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item]
---------------PhysicalDistribute
-----------------PhysicalProject
-------------------filter((item.i_category = 'Home'))
---------------------PhysicalOlapScan[item]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashJoin[LEFT_SEMI_JOIN](item.i_manufact_id = item.i_manufact_id)
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute
-------------------hashAgg[LOCAL]
+--------------------------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[store_sales]
+----------------------------------------PhysicalDistribute
+------------------------------------------PhysicalProject
+--------------------------------------------filter((date_dim.d_moy = 1)(date_dim.d_year = 2002))
+----------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((customer_address.ca_gmt_offset = -5.00))
+----------------------------------------PhysicalOlapScan[customer_address]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[item]
+------------------PhysicalDistribute
 --------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+----------------------filter((item.i_category = 'Home'))
+------------------------PhysicalOlapScan[item]
+--------------PhysicalProject
+----------------hashJoin[LEFT_SEMI_JOIN](item.i_manufact_id = item.i_manufact_id)
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute
+----------------------hashAgg[LOCAL]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN](catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)
+----------------------------------PhysicalDistribute
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[catalog_sales]
-------------------------------------PhysicalDistribute
---------------------------------------PhysicalProject
-----------------------------------------filter((date_dim.d_moy = 1)(date_dim.d_year = 2002))
-------------------------------------------PhysicalOlapScan[date_dim]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((customer_address.ca_gmt_offset = -5.00))
-------------------------------------PhysicalOlapScan[customer_address]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item]
---------------PhysicalDistribute
-----------------PhysicalProject
-------------------filter((item.i_category = 'Home'))
---------------------PhysicalOlapScan[item]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashJoin[LEFT_SEMI_JOIN](item.i_manufact_id = item.i_manufact_id)
---------------hashAgg[GLOBAL]
-----------------PhysicalDistribute
-------------------hashAgg[LOCAL]
+--------------------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[catalog_sales]
+----------------------------------------PhysicalDistribute
+------------------------------------------PhysicalProject
+--------------------------------------------filter((date_dim.d_moy = 1)(date_dim.d_year = 2002))
+----------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((customer_address.ca_gmt_offset = -5.00))
+----------------------------------------PhysicalOlapScan[customer_address]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[item]
+------------------PhysicalDistribute
 --------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
+----------------------filter((item.i_category = 'Home'))
+------------------------PhysicalOlapScan[item]
+--------------PhysicalProject
+----------------hashJoin[LEFT_SEMI_JOIN](item.i_manufact_id = item.i_manufact_id)
+------------------hashAgg[GLOBAL]
+--------------------PhysicalDistribute
+----------------------hashAgg[LOCAL]
 ------------------------PhysicalProject
---------------------------PhysicalOlapScan[item]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+--------------------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN](web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)
+----------------------------------PhysicalDistribute
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[web_sales]
-------------------------------------PhysicalDistribute
---------------------------------------PhysicalProject
-----------------------------------------filter((date_dim.d_moy = 1)(date_dim.d_year = 2002))
-------------------------------------------PhysicalOlapScan[date_dim]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((customer_address.ca_gmt_offset = -5.00))
-------------------------------------PhysicalOlapScan[customer_address]
---------------PhysicalDistribute
-----------------PhysicalProject
-------------------filter((item.i_category = 'Home'))
---------------------PhysicalOlapScan[item]
+--------------------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+----------------------------------------PhysicalProject
+------------------------------------------PhysicalOlapScan[web_sales]
+----------------------------------------PhysicalDistribute
+------------------------------------------PhysicalProject
+--------------------------------------------filter((date_dim.d_moy = 1)(date_dim.d_year = 2002))
+----------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((customer_address.ca_gmt_offset = -5.00))
+----------------------------------------PhysicalOlapScan[customer_address]
+------------------PhysicalDistribute
+--------------------PhysicalProject
+----------------------filter((item.i_category = 'Home'))
+------------------------PhysicalOlapScan[item]
 
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query49.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query49.out
index f8d87cba93..c9f23c7fd0 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query49.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query49.out
@@ -1,82 +1,88 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
 -- !ds_shape_49 --
 PhysicalTopN
---PhysicalTopN
-----hashAgg[LOCAL]
-------PhysicalUnion
---------PhysicalProject
-----------filter(((return_rank <= 10) OR (currency_rank <= 10)))
-------------PhysicalWindow
---------------PhysicalQuickSort
-----------------PhysicalWindow
-------------------PhysicalQuickSort
---------------------PhysicalDistribute
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[GLOBAL]
+--------PhysicalDistribute
+----------hashAgg[LOCAL]
+------------PhysicalUnion
+--------------PhysicalDistribute
+----------------PhysicalProject
+------------------filter(((return_rank <= 10) OR (currency_rank <= 10)))
+--------------------PhysicalWindow
 ----------------------PhysicalQuickSort
-------------------------PhysicalProject
---------------------------hashAgg[GLOBAL]
+------------------------PhysicalWindow
+--------------------------PhysicalQuickSort
 ----------------------------PhysicalDistribute
-------------------------------hashAgg[LOCAL]
+------------------------------PhysicalQuickSort
 --------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN](ws.ws_order_number = wr.wr_order_number)(item = wr.wr_item_sk)
-------------------------------------PhysicalProject
---------------------------------------filter((wr.wr_return_amt > 10000.00))
-----------------------------------------PhysicalOlapScan[web_returns]
-------------------------------------hashJoin[INNER_JOIN](ws.ws_sold_date_sk = date_dim.d_date_sk)
---------------------------------------PhysicalProject
-----------------------------------------filter((ws.ws_net_paid > 0.00)(ws.ws_quantity > 0)(ws.ws_net_profit > 1.00))
-------------------------------------------PhysicalOlapScan[web_sales]
---------------------------------------PhysicalDistribute
+----------------------------------hashAgg[GLOBAL]
+------------------------------------PhysicalDistribute
+--------------------------------------hashAgg[LOCAL]
 ----------------------------------------PhysicalProject
-------------------------------------------filter((date_dim.d_moy = 12)(date_dim.d_year = 1999))
---------------------------------------------PhysicalOlapScan[date_dim]
---------PhysicalProject
-----------filter(((return_rank <= 10) OR (currency_rank <= 10)))
-------------PhysicalWindow
---------------PhysicalQuickSort
-----------------PhysicalWindow
-------------------PhysicalQuickSort
---------------------PhysicalDistribute
+------------------------------------------hashJoin[INNER_JOIN](ws.ws_order_number = wr.wr_order_number)(item = wr.wr_item_sk)
+--------------------------------------------PhysicalProject
+----------------------------------------------filter((wr.wr_return_amt > 10000.00))
+------------------------------------------------PhysicalOlapScan[web_returns]
+--------------------------------------------hashJoin[INNER_JOIN](ws.ws_sold_date_sk = date_dim.d_date_sk)
+----------------------------------------------PhysicalProject
+------------------------------------------------filter((ws.ws_net_paid > 0.00)(ws.ws_quantity > 0)(ws.ws_net_profit > 1.00))
+--------------------------------------------------PhysicalOlapScan[web_sales]
+----------------------------------------------PhysicalDistribute
+------------------------------------------------PhysicalProject
+--------------------------------------------------filter((date_dim.d_moy = 12)(date_dim.d_year = 1999))
+----------------------------------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalDistribute
+----------------PhysicalProject
+------------------filter(((return_rank <= 10) OR (currency_rank <= 10)))
+--------------------PhysicalWindow
 ----------------------PhysicalQuickSort
-------------------------PhysicalProject
---------------------------hashAgg[GLOBAL]
+------------------------PhysicalWindow
+--------------------------PhysicalQuickSort
 ----------------------------PhysicalDistribute
-------------------------------hashAgg[LOCAL]
+------------------------------PhysicalQuickSort
 --------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN](cs.cs_order_number = cr.cr_order_number)(item = cr.cr_item_sk)
-------------------------------------PhysicalProject
---------------------------------------filter((cr.cr_return_amount > 10000.00))
-----------------------------------------PhysicalOlapScan[catalog_returns]
-------------------------------------hashJoin[INNER_JOIN](cs.cs_sold_date_sk = date_dim.d_date_sk)
---------------------------------------PhysicalProject
-----------------------------------------filter((cs.cs_net_paid > 0.00)(cs.cs_quantity > 0)(cs.cs_net_profit > 1.00))
-------------------------------------------PhysicalOlapScan[catalog_sales]
---------------------------------------PhysicalDistribute
+----------------------------------hashAgg[GLOBAL]
+------------------------------------PhysicalDistribute
+--------------------------------------hashAgg[LOCAL]
 ----------------------------------------PhysicalProject
-------------------------------------------filter((date_dim.d_moy = 12)(date_dim.d_year = 1999))
---------------------------------------------PhysicalOlapScan[date_dim]
---------PhysicalProject
-----------filter(((return_rank <= 10) OR (currency_rank <= 10)))
-------------PhysicalWindow
---------------PhysicalQuickSort
-----------------PhysicalWindow
-------------------PhysicalQuickSort
---------------------PhysicalDistribute
+------------------------------------------hashJoin[INNER_JOIN](cs.cs_order_number = cr.cr_order_number)(item = cr.cr_item_sk)
+--------------------------------------------PhysicalProject
+----------------------------------------------filter((cr.cr_return_amount > 10000.00))
+------------------------------------------------PhysicalOlapScan[catalog_returns]
+--------------------------------------------hashJoin[INNER_JOIN](cs.cs_sold_date_sk = date_dim.d_date_sk)
+----------------------------------------------PhysicalProject
+------------------------------------------------filter((cs.cs_net_paid > 0.00)(cs.cs_quantity > 0)(cs.cs_net_profit > 1.00))
+--------------------------------------------------PhysicalOlapScan[catalog_sales]
+----------------------------------------------PhysicalDistribute
+------------------------------------------------PhysicalProject
+--------------------------------------------------filter((date_dim.d_moy = 12)(date_dim.d_year = 1999))
+----------------------------------------------------PhysicalOlapScan[date_dim]
+--------------PhysicalDistribute
+----------------PhysicalProject
+------------------filter(((return_rank <= 10) OR (currency_rank <= 10)))
+--------------------PhysicalWindow
 ----------------------PhysicalQuickSort
-------------------------PhysicalProject
---------------------------hashAgg[GLOBAL]
+------------------------PhysicalWindow
+--------------------------PhysicalQuickSort
 ----------------------------PhysicalDistribute
-------------------------------hashAgg[LOCAL]
+------------------------------PhysicalQuickSort
 --------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN](sts.ss_ticket_number = sr.sr_ticket_number)(item = sr.sr_item_sk)
-------------------------------------PhysicalProject
---------------------------------------filter((sr.sr_return_amt > 10000.00))
-----------------------------------------PhysicalOlapScan[store_returns]
-------------------------------------hashJoin[INNER_JOIN](sts.ss_sold_date_sk = date_dim.d_date_sk)
---------------------------------------PhysicalProject
-----------------------------------------filter((sts.ss_quantity > 0)(sts.ss_net_profit > 1.00)(sts.ss_net_paid > 0.00))
-------------------------------------------PhysicalOlapScan[store_sales]
---------------------------------------PhysicalDistribute
+----------------------------------hashAgg[GLOBAL]
+------------------------------------PhysicalDistribute
+--------------------------------------hashAgg[LOCAL]
 ----------------------------------------PhysicalProject
-------------------------------------------filter((date_dim.d_moy = 12)(date_dim.d_year = 1999))
---------------------------------------------PhysicalOlapScan[date_dim]
+------------------------------------------hashJoin[INNER_JOIN](sts.ss_ticket_number = sr.sr_ticket_number)(item = sr.sr_item_sk)
+--------------------------------------------PhysicalProject
+----------------------------------------------filter((sr.sr_return_amt > 10000.00))
+------------------------------------------------PhysicalOlapScan[store_returns]
+--------------------------------------------hashJoin[INNER_JOIN](sts.ss_sold_date_sk = date_dim.d_date_sk)
+----------------------------------------------PhysicalProject
+------------------------------------------------filter((sts.ss_quantity > 0)(sts.ss_net_profit > 1.00)(sts.ss_net_paid > 0.00))
+--------------------------------------------------PhysicalOlapScan[store_sales]
+----------------------------------------------PhysicalDistribute
+------------------------------------------------PhysicalProject
+--------------------------------------------------filter((date_dim.d_moy = 12)(date_dim.d_year = 1999))
+----------------------------------------------------PhysicalOlapScan[date_dim]
 
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query54.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query54.out
index a8b0c780eb..72a23fe3e8 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query54.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query54.out
@@ -60,20 +60,22 @@ PhysicalTopN
 ----------------------------------------PhysicalOlapScan[date_dim]
 ----------------------------------PhysicalDistribute
 ------------------------------------PhysicalAssertNumRows
---------------------------------------hashAgg[GLOBAL]
-----------------------------------------PhysicalDistribute
-------------------------------------------hashAgg[LOCAL]
---------------------------------------------PhysicalProject
-----------------------------------------------filter((date_dim.d_moy = 5)(date_dim.d_year = 1998))
-------------------------------------------------PhysicalOlapScan[date_dim]
+--------------------------------------PhysicalDistribute
+----------------------------------------hashAgg[GLOBAL]
+------------------------------------------PhysicalDistribute
+--------------------------------------------hashAgg[LOCAL]
+----------------------------------------------PhysicalProject
+------------------------------------------------filter((date_dim.d_moy = 5)(date_dim.d_year = 1998))
+--------------------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------PhysicalDistribute
 --------------------------------PhysicalAssertNumRows
-----------------------------------hashAgg[GLOBAL]
-------------------------------------PhysicalDistribute
---------------------------------------hashAgg[LOCAL]
-----------------------------------------PhysicalProject
-------------------------------------------filter((date_dim.d_year = 1998)(date_dim.d_moy = 5))
---------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------PhysicalDistribute
+------------------------------------hashAgg[GLOBAL]
+--------------------------------------PhysicalDistribute
+----------------------------------------hashAgg[LOCAL]
+------------------------------------------PhysicalProject
+--------------------------------------------filter((date_dim.d_year = 1998)(date_dim.d_moy = 5))
+----------------------------------------------PhysicalOlapScan[date_dim]
 --------------------------PhysicalDistribute
 ----------------------------PhysicalProject
 ------------------------------PhysicalOlapScan[store]
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query56.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query56.out
index 0e6f011f60..a7efe6f1d6 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query56.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query56.out
@@ -1,93 +1,93 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
 -- !ds_shape_56 --
 PhysicalTopN
---PhysicalTopN
-----hashAgg[LOCAL]
-------PhysicalUnion
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[GLOBAL]
 --------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](store_sales.ss_addr_sk = customer_address.ca_address_sk)
-----------------------PhysicalDistribute
-------------------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[store_sales]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 2))
-------------------------------------PhysicalOlapScan[date_dim]
+----------hashAgg[LOCAL]
+------------PhysicalUnion
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](store_sales.ss_addr_sk = customer_address.ca_address_sk)
 --------------------------PhysicalDistribute
-----------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
+----------------------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item]
+--------------------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[store_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 2))
+----------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter(i_color IN ('powder', 'green', 'cyan'))
+--------------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
+----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[item]
-----------------------PhysicalDistribute
-------------------------PhysicalProject
---------------------------filter((customer_address.ca_gmt_offset = -6.00))
-----------------------------PhysicalOlapScan[customer_address]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)
-----------------------PhysicalDistribute
-------------------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[catalog_sales]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 2))
-------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter(i_color IN ('powder', 'green', 'cyan'))
+----------------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalDistribute
+----------------------------PhysicalProject
+------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------PhysicalOlapScan[customer_address]
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)
 --------------------------PhysicalDistribute
-----------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
+----------------------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item]
+--------------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[catalog_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 2))
+----------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter(i_color IN ('powder', 'green', 'cyan'))
+--------------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
+----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[item]
-----------------------PhysicalDistribute
-------------------------PhysicalProject
---------------------------filter((customer_address.ca_gmt_offset = -6.00))
-----------------------------PhysicalOlapScan[customer_address]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter(i_color IN ('powder', 'green', 'cyan'))
+----------------------------------------PhysicalOlapScan[item]
+--------------------------PhysicalDistribute
+----------------------------PhysicalProject
+------------------------------filter((customer_address.ca_gmt_offset = -6.00))
+--------------------------------PhysicalOlapScan[customer_address]
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
 ----------------------PhysicalProject
-------------------------filter((customer_address.ca_gmt_offset = -6.00))
---------------------------PhysicalOlapScan[customer_address]
-----------------------PhysicalDistribute
-------------------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
+------------------------hashJoin[INNER_JOIN](web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[web_sales]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 2))
-------------------------------------PhysicalOlapScan[date_dim]
+----------------------------filter((customer_address.ca_gmt_offset = -6.00))
+------------------------------PhysicalOlapScan[customer_address]
 --------------------------PhysicalDistribute
-----------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
+----------------------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[item]
+--------------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[web_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 2))
+----------------------------------------PhysicalOlapScan[date_dim]
 ------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter(i_color IN ('powder', 'green', 'cyan'))
+--------------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
+----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[item]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter(i_color IN ('powder', 'green', 'cyan'))
+----------------------------------------PhysicalOlapScan[item]
 
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query6.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query6.out
index 29b5a1055b..aa6c71623d 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query6.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query6.out
@@ -25,12 +25,13 @@ PhysicalTopN
 ----------------------------------------PhysicalOlapScan[date_dim]
 --------------------------------------PhysicalDistribute
 ----------------------------------------PhysicalAssertNumRows
-------------------------------------------hashAgg[GLOBAL]
---------------------------------------------PhysicalDistribute
-----------------------------------------------hashAgg[LOCAL]
-------------------------------------------------PhysicalProject
---------------------------------------------------filter((date_dim.d_year = 2002)(date_dim.d_moy = 3))
-----------------------------------------------------PhysicalOlapScan[date_dim]
+------------------------------------------PhysicalDistribute
+--------------------------------------------hashAgg[GLOBAL]
+----------------------------------------------PhysicalDistribute
+------------------------------------------------hashAgg[LOCAL]
+--------------------------------------------------PhysicalProject
+----------------------------------------------------filter((date_dim.d_year = 2002)(date_dim.d_moy = 3))
+------------------------------------------------------PhysicalOlapScan[date_dim]
 ----------------------------PhysicalDistribute
 ------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[item]
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query60.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query60.out
index f428a69ea3..8538ed1f7b 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query60.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query60.out
@@ -1,94 +1,94 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
 -- !ds_shape_60 --
 PhysicalTopN
---PhysicalTopN
-----hashAgg[LOCAL]
-------PhysicalUnion
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[GLOBAL]
 --------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
-----------------------hashJoin[INNER_JOIN](store_sales.ss_addr_sk = customer_address.ca_address_sk)
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+----------hashAgg[LOCAL]
+------------PhysicalUnion
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
+--------------------------hashJoin[INNER_JOIN](store_sales.ss_addr_sk = customer_address.ca_address_sk)
+----------------------------PhysicalDistribute
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[store_sales]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 8))
-------------------------------------PhysicalOlapScan[date_dim]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------filter((customer_address.ca_gmt_offset = -7.00))
-------------------------------PhysicalOlapScan[customer_address]
-----------------------PhysicalDistribute
-------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item]
+--------------------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[store_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 8))
+----------------------------------------PhysicalOlapScan[date_dim]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter((customer_address.ca_gmt_offset = -7.00))
+----------------------------------PhysicalOlapScan[customer_address]
 --------------------------PhysicalDistribute
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Children'))
---------------------------------PhysicalOlapScan[item]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
-----------------------hashJoin[INNER_JOIN](catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+----------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[catalog_sales]
+--------------------------------PhysicalOlapScan[item]
 ------------------------------PhysicalDistribute
 --------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_moy = 8)(date_dim.d_year = 2000))
-------------------------------------PhysicalOlapScan[date_dim]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------filter((customer_address.ca_gmt_offset = -7.00))
-------------------------------PhysicalOlapScan[customer_address]
-----------------------PhysicalDistribute
-------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item]
+----------------------------------filter((item.i_category = 'Children'))
+------------------------------------PhysicalOlapScan[item]
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
+--------------------------hashJoin[INNER_JOIN](catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk)
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[catalog_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_moy = 8)(date_dim.d_year = 2000))
+----------------------------------------PhysicalOlapScan[date_dim]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter((customer_address.ca_gmt_offset = -7.00))
+----------------------------------PhysicalOlapScan[customer_address]
 --------------------------PhysicalDistribute
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Children'))
---------------------------------PhysicalOlapScan[item]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
-----------------------hashJoin[INNER_JOIN](web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+----------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[web_sales]
+--------------------------------PhysicalOlapScan[item]
 ------------------------------PhysicalDistribute
 --------------------------------PhysicalProject
-----------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 8))
-------------------------------------PhysicalOlapScan[date_dim]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------filter((customer_address.ca_gmt_offset = -7.00))
-------------------------------PhysicalOlapScan[customer_address]
-----------------------PhysicalDistribute
-------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[item]
+----------------------------------filter((item.i_category = 'Children'))
+------------------------------------PhysicalOlapScan[item]
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
+--------------------------hashJoin[INNER_JOIN](web_sales.ws_bill_addr_sk = customer_address.ca_address_sk)
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[web_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter((date_dim.d_year = 2000)(date_dim.d_moy = 8))
+----------------------------------------PhysicalOlapScan[date_dim]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter((customer_address.ca_gmt_offset = -7.00))
+----------------------------------PhysicalOlapScan[customer_address]
 --------------------------PhysicalDistribute
-----------------------------PhysicalProject
-------------------------------filter((item.i_category = 'Children'))
+----------------------------hashJoin[LEFT_SEMI_JOIN](item.i_item_id = item.i_item_id)
+------------------------------PhysicalProject
 --------------------------------PhysicalOlapScan[item]
+------------------------------PhysicalDistribute
+--------------------------------PhysicalProject
+----------------------------------filter((item.i_category = 'Children'))
+------------------------------------PhysicalOlapScan[item]
 
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out
index 96c46db256..e80fc9bdd9 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query66.out
@@ -1,63 +1,64 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
 -- !ds_shape_66 --
 PhysicalTopN
---PhysicalTopN
-----hashAgg[LOCAL]
-------PhysicalUnion
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[GLOBAL]
 --------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk)
-----------------------hashJoin[INNER_JOIN](web_sales.ws_sold_time_sk = time_dim.t_time_sk)
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
-----------------------------hashJoin[INNER_JOIN](web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk)
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[web_sales]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter(sm_carrier IN ('GREAT EASTERN', 'LATVIAN'))
-------------------------------------PhysicalOlapScan[ship_mode]
+----------hashAgg[LOCAL]
+------------PhysicalUnion
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk)
+--------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_time_sk = time_dim.t_time_sk)
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+--------------------------------hashJoin[INNER_JOIN](web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[web_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter(sm_carrier IN ('GREAT EASTERN', 'LATVIAN'))
+----------------------------------------PhysicalOlapScan[ship_mode]
+--------------------------------PhysicalDistribute
+----------------------------------PhysicalProject
+------------------------------------filter((date_dim.d_year = 1998))
+--------------------------------------PhysicalOlapScan[date_dim]
 ----------------------------PhysicalDistribute
 ------------------------------PhysicalProject
---------------------------------filter((date_dim.d_year = 1998))
-----------------------------------PhysicalOlapScan[date_dim]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------filter((cast(t_time as BIGINT) <= 77621)(cast(t_time as BIGINT) >= 48821))
-------------------------------PhysicalOlapScan[time_dim]
-----------------------PhysicalDistribute
-------------------------PhysicalProject
---------------------------PhysicalOlapScan[warehouse]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashAgg[GLOBAL]
---------------PhysicalDistribute
-----------------hashAgg[LOCAL]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)
-----------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_time_sk = time_dim.t_time_sk)
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
-----------------------------hashJoin[INNER_JOIN](catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk)
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[catalog_sales]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter(sm_carrier IN ('GREAT EASTERN', 'LATVIAN'))
-------------------------------------PhysicalOlapScan[ship_mode]
+--------------------------------filter((cast(t_time as BIGINT) <= 77621)(cast(t_time as BIGINT) >= 48821))
+----------------------------------PhysicalOlapScan[time_dim]
+--------------------------PhysicalDistribute
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[warehouse]
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN](catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk)
+--------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_time_sk = time_dim.t_time_sk)
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+--------------------------------hashJoin[INNER_JOIN](catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk)
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[catalog_sales]
+----------------------------------PhysicalDistribute
+------------------------------------PhysicalProject
+--------------------------------------filter(sm_carrier IN ('GREAT EASTERN', 'LATVIAN'))
+----------------------------------------PhysicalOlapScan[ship_mode]
+--------------------------------PhysicalDistribute
+----------------------------------PhysicalProject
+------------------------------------filter((date_dim.d_year = 1998))
+--------------------------------------PhysicalOlapScan[date_dim]
 ----------------------------PhysicalDistribute
 ------------------------------PhysicalProject
---------------------------------filter((date_dim.d_year = 1998))
-----------------------------------PhysicalOlapScan[date_dim]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------filter((cast(t_time as BIGINT) <= 77621)(cast(t_time as BIGINT) >= 48821))
-------------------------------PhysicalOlapScan[time_dim]
-----------------------PhysicalDistribute
-------------------------PhysicalProject
---------------------------PhysicalOlapScan[warehouse]
+--------------------------------filter((cast(t_time as BIGINT) <= 77621)(cast(t_time as BIGINT) >= 48821))
+----------------------------------PhysicalOlapScan[time_dim]
+--------------------------PhysicalDistribute
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[warehouse]
 
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query75.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query75.out
index 8d41268532..60e083b48a 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query75.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query75.out
@@ -2,63 +2,67 @@
 -- !ds_shape_75 --
 CteAnchor[cteId= ( CTEId#3=] )
 --CteProducer[cteId= ( CTEId#3=] )
-----hashAgg[LOCAL]
-------hashAgg[LOCAL]
---------PhysicalUnion
-----------PhysicalDistribute
-------------PhysicalProject
---------------hashJoin[RIGHT_OUTER_JOIN](catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)(catalog_sales.cs_order_number = catalog_returns.cr_order_number)
-----------------PhysicalProject
-------------------PhysicalOlapScan[catalog_returns]
-----------------PhysicalProject
-------------------hashJoin[INNER_JOIN](date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)
---------------------hashJoin[INNER_JOIN](item.i_item_sk = catalog_sales.cs_item_sk)
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[catalog_sales]
-----------------------PhysicalDistribute
+----hashAgg[GLOBAL]
+------PhysicalDistribute
+--------hashAgg[LOCAL]
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute
+--------------hashAgg[LOCAL]
+----------------PhysicalUnion
+------------------PhysicalDistribute
+--------------------PhysicalProject
+----------------------hashJoin[RIGHT_OUTER_JOIN](catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)(catalog_sales.cs_order_number = catalog_returns.cr_order_number)
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[catalog_returns]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN](date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)
+----------------------------hashJoin[INNER_JOIN](item.i_item_sk = catalog_sales.cs_item_sk)
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[catalog_sales]
+------------------------------PhysicalDistribute
+--------------------------------PhysicalProject
+----------------------------------filter((cast(i_category as VARCHAR(*)) = 'Home'))
+------------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter(((date_dim.d_year = 1998) OR (date_dim.d_year = 1999)))
+----------------------------------PhysicalOlapScan[date_dim]
+------------------PhysicalDistribute
+--------------------PhysicalProject
+----------------------hashJoin[RIGHT_OUTER_JOIN](store_sales.ss_item_sk = store_returns.sr_item_sk)(store_sales.ss_ticket_number = store_returns.sr_ticket_number)
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[store_returns]
 ------------------------PhysicalProject
---------------------------filter((cast(i_category as VARCHAR(*)) = 'Home'))
-----------------------------PhysicalOlapScan[item]
---------------------PhysicalDistribute
-----------------------PhysicalProject
-------------------------filter(((date_dim.d_year = 1998) OR (date_dim.d_year = 1999)))
---------------------------PhysicalOlapScan[date_dim]
-----------PhysicalDistribute
-------------PhysicalProject
---------------hashJoin[RIGHT_OUTER_JOIN](store_sales.ss_item_sk = store_returns.sr_item_sk)(store_sales.ss_ticket_number = store_returns.sr_ticket_number)
-----------------PhysicalProject
-------------------PhysicalOlapScan[store_returns]
-----------------PhysicalProject
-------------------hashJoin[INNER_JOIN](date_dim.d_date_sk = store_sales.ss_sold_date_sk)
---------------------hashJoin[INNER_JOIN](item.i_item_sk = store_sales.ss_item_sk)
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[store_sales]
-----------------------PhysicalDistribute
+--------------------------hashJoin[INNER_JOIN](date_dim.d_date_sk = store_sales.ss_sold_date_sk)
+----------------------------hashJoin[INNER_JOIN](item.i_item_sk = store_sales.ss_item_sk)
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[store_sales]
+------------------------------PhysicalDistribute
+--------------------------------PhysicalProject
+----------------------------------filter((cast(i_category as VARCHAR(*)) = 'Home'))
+------------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter(((date_dim.d_year = 1998) OR (date_dim.d_year = 1999)))
+----------------------------------PhysicalOlapScan[date_dim]
+------------------PhysicalDistribute
+--------------------PhysicalProject
+----------------------hashJoin[RIGHT_OUTER_JOIN](web_sales.ws_item_sk = web_returns.wr_item_sk)(web_sales.ws_order_number = web_returns.wr_order_number)
 ------------------------PhysicalProject
---------------------------filter((cast(i_category as VARCHAR(*)) = 'Home'))
-----------------------------PhysicalOlapScan[item]
---------------------PhysicalDistribute
-----------------------PhysicalProject
-------------------------filter(((date_dim.d_year = 1998) OR (date_dim.d_year = 1999)))
---------------------------PhysicalOlapScan[date_dim]
-----------PhysicalDistribute
-------------PhysicalProject
---------------hashJoin[RIGHT_OUTER_JOIN](web_sales.ws_item_sk = web_returns.wr_item_sk)(web_sales.ws_order_number = web_returns.wr_order_number)
-----------------PhysicalProject
-------------------PhysicalOlapScan[web_returns]
-----------------PhysicalProject
-------------------hashJoin[INNER_JOIN](date_dim.d_date_sk = web_sales.ws_sold_date_sk)
---------------------hashJoin[INNER_JOIN](item.i_item_sk = web_sales.ws_item_sk)
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[web_sales]
-----------------------PhysicalDistribute
+--------------------------PhysicalOlapScan[web_returns]
 ------------------------PhysicalProject
---------------------------filter((cast(i_category as VARCHAR(*)) = 'Home'))
-----------------------------PhysicalOlapScan[item]
---------------------PhysicalDistribute
-----------------------PhysicalProject
-------------------------filter(((date_dim.d_year = 1998) OR (date_dim.d_year = 1999)))
---------------------------PhysicalOlapScan[date_dim]
+--------------------------hashJoin[INNER_JOIN](date_dim.d_date_sk = web_sales.ws_sold_date_sk)
+----------------------------hashJoin[INNER_JOIN](item.i_item_sk = web_sales.ws_item_sk)
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[web_sales]
+------------------------------PhysicalDistribute
+--------------------------------PhysicalProject
+----------------------------------filter((cast(i_category as VARCHAR(*)) = 'Home'))
+------------------------------------PhysicalOlapScan[item]
+----------------------------PhysicalDistribute
+------------------------------PhysicalProject
+--------------------------------filter(((date_dim.d_year = 1998) OR (date_dim.d_year = 1999)))
+----------------------------------PhysicalOlapScan[date_dim]
 --PhysicalTopN
 ----PhysicalDistribute
 ------PhysicalTopN
diff --git a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query76.out b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query76.out
index b52788c8f2..809d43e7b6 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query76.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query76.out
@@ -1,46 +1,49 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
 -- !ds_shape_76 --
 PhysicalTopN
---PhysicalTopN
-----hashAgg[LOCAL]
-------PhysicalUnion
+--PhysicalDistribute
+----PhysicalTopN
+------hashAgg[GLOBAL]
 --------PhysicalDistribute
-----------PhysicalProject
-------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
---------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
-----------------PhysicalProject
-------------------filter(ss_hdemo_sk IS NULL)
---------------------PhysicalOlapScan[store_sales]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------PhysicalOlapScan[item]
+----------hashAgg[LOCAL]
+------------PhysicalUnion
 --------------PhysicalDistribute
 ----------------PhysicalProject
-------------------PhysicalOlapScan[date_dim]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
---------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
-----------------PhysicalProject
-------------------filter(ws_bill_addr_sk IS NULL)
---------------------PhysicalOlapScan[web_sales]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------PhysicalOlapScan[item]
+------------------hashJoin[INNER_JOIN](store_sales.ss_sold_date_sk = date_dim.d_date_sk)
+--------------------hashJoin[INNER_JOIN](store_sales.ss_item_sk = item.i_item_sk)
+----------------------PhysicalProject
+------------------------filter(ss_hdemo_sk IS NULL)
+--------------------------PhysicalOlapScan[store_sales]
+----------------------PhysicalDistribute
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[item]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[date_dim]
 --------------PhysicalDistribute
 ----------------PhysicalProject
-------------------PhysicalOlapScan[date_dim]
---------PhysicalDistribute
-----------PhysicalProject
-------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
---------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
-----------------PhysicalProject
-------------------filter(cs_warehouse_sk IS NULL)
---------------------PhysicalOlapScan[catalog_sales]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------PhysicalOlapScan[item]
+------------------hashJoin[INNER_JOIN](web_sales.ws_sold_date_sk = date_dim.d_date_sk)
+--------------------hashJoin[INNER_JOIN](web_sales.ws_item_sk = item.i_item_sk)
+----------------------PhysicalProject
+------------------------filter(ws_bill_addr_sk IS NULL)
+--------------------------PhysicalOlapScan[web_sales]
+----------------------PhysicalDistribute
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[item]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[date_dim]
 --------------PhysicalDistribute
 ----------------PhysicalProject
-------------------PhysicalOlapScan[date_dim]
+------------------hashJoin[INNER_JOIN](catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)
+--------------------hashJoin[INNER_JOIN](catalog_sales.cs_item_sk = item.i_item_sk)
+----------------------PhysicalProject
+------------------------filter(cs_warehouse_sk IS NULL)
+--------------------------PhysicalOlapScan[catalog_sales]
+----------------------PhysicalDistribute
+------------------------PhysicalProject
+--------------------------PhysicalOlapScan[item]
+--------------------PhysicalDistribute
+----------------------PhysicalProject
+------------------------PhysicalOlapScan[date_dim]
 


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