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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit eb280d374b95819d5989e96ab61ce99767454c14
Author: LiBinfeng <46676950+libinfeng...@users.noreply.github.com>
AuthorDate: Fri Mar 8 08:26:34 2024 +0800

    [case](Nereids) add leading tpc-h (#30405)
    
    add tpc-h shape cases using leading hint
    except:
    
    single table without join q1 q6
    not support feature include tables after subquery unnested q2 q16 q18 q20 
q21 q22
---
 .../org/apache/doris/nereids/hint/LeadingHint.java |   2 +-
 .../data/nereids_hint_tpcds_p0/shape/query24.out   |   4 +-
 .../data/nereids_hint_tpcds_p0/shape/query72.out   |  11 +-
 .../data/nereids_hint_tpch_p0/shape/q1.out         |   4 +-
 .../data/nereids_hint_tpch_p0/shape/q10.out        |  39 ++--
 .../data/nereids_hint_tpch_p0/shape/q11.out        |  64 +++---
 .../data/nereids_hint_tpch_p0/shape/q12.out        |  11 +-
 .../data/nereids_hint_tpch_p0/shape/q13.out        |  15 +-
 .../data/nereids_hint_tpch_p0/shape/q14.out        |  11 +-
 .../data/nereids_hint_tpch_p0/shape/q15.out        |  41 ++--
 .../data/nereids_hint_tpch_p0/shape/q16.out        |  26 ---
 .../data/nereids_hint_tpch_p0/shape/q17.out        |  17 +-
 .../data/nereids_hint_tpch_p0/shape/q18.out        |  26 ---
 .../data/nereids_hint_tpch_p0/shape/q19.out        |  16 +-
 .../data/nereids_hint_tpch_p0/shape/q2.out         |  39 ----
 .../data/nereids_hint_tpch_p0/shape/q20.out        |  34 ----
 .../data/nereids_hint_tpch_p0/shape/q21.out        |  34 ----
 .../data/nereids_hint_tpch_p0/shape/q22.out        |  28 ---
 .../data/nereids_hint_tpch_p0/shape/q3.out         |  38 ++--
 .../data/nereids_hint_tpch_p0/shape/q4.out         |  11 +-
 .../data/nereids_hint_tpch_p0/shape/q5.out         |  53 +++--
 .../data/nereids_hint_tpch_p0/shape/q6.out         |   2 +-
 .../data/nereids_hint_tpch_p0/shape/q7.out         |  65 +++---
 .../data/nereids_hint_tpch_p0/shape/q8.out         |  65 +++---
 .../data/nereids_hint_tpch_p0/shape/q9.out         |  53 ++---
 .../data/nereids_p0/hint/test_leading.out          |  84 ++++----
 .../suites/nereids_hint_tpch_p0/load.groovy        | 223 +++++++++++++++++++++
 .../suites/nereids_hint_tpch_p0/shape/q10.groovy   |  71 +++++++
 .../suites/nereids_hint_tpch_p0/shape/q11.groovy   |  67 +++++++
 .../suites/nereids_hint_tpch_p0/shape/q12.groovy   |  67 +++++++
 .../suites/nereids_hint_tpch_p0/shape/q13.groovy   |  56 ++++++
 .../suites/nereids_hint_tpch_p0/shape/q14.groovy   |  49 +++++
 .../suites/nereids_hint_tpch_p0/shape/q15.groovy   |  60 ++++++
 .../suites/nereids_hint_tpch_p0/shape/q17.groovy   |  58 ++++++
 .../suites/nereids_hint_tpch_p0/shape/q19.groovy   |  76 +++++++
 .../suites/nereids_hint_tpch_p0/shape/q3.groovy    |  66 ++++++
 .../suites/nereids_hint_tpch_p0/shape/q4.groovy    |  62 ++++++
 .../suites/nereids_hint_tpch_p0/shape/q5.groovy    |  59 ++++++
 .../suites/nereids_hint_tpch_p0/shape/q7.groovy    |  74 +++++++
 .../suites/nereids_hint_tpch_p0/shape/q8.groovy    |  78 +++++++
 .../suites/nereids_hint_tpch_p0/shape/q9.groovy    |  68 +++++++
 41 files changed, 1462 insertions(+), 465 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/hint/LeadingHint.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/hint/LeadingHint.java
index 9087dd83e83..6cefb8c6088 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/hint/LeadingHint.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/hint/LeadingHint.java
@@ -529,7 +529,7 @@ public class LeadingHint extends Hint {
                     return null;
                 }
                 logicalPlan = makeFilterPlanIfExist(getFilters(), logicalPlan);
-                stack.push(Pair.of(currentLevel, Pair.of(logicalPlan, index)));
+                stack.push(Pair.of(currentLevel, Pair.of(logicalPlan, index - 
1)));
                 stackTopLevel = currentLevel;
             }
         }
diff --git a/regression-test/data/nereids_hint_tpcds_p0/shape/query24.out 
b/regression-test/data/nereids_hint_tpcds_p0/shape/query24.out
index 01ffbef3010..92e60cfa818 100644
--- a/regression-test/data/nereids_hint_tpcds_p0/shape/query24.out
+++ b/regression-test/data/nereids_hint_tpcds_p0/shape/query24.out
@@ -59,7 +59,7 @@ PhysicalCteAnchor ( cteId=CTEId#0 )
 --------------------------PhysicalCteConsumer ( cteId=CTEId#0 )
 
 Hint log:
-Used:  leading(store_sales broadcast store { customer shuffle customer_address 
} shuffle item shuffle store_returns )
-UnUsed: [shuffle]_3
+Used:   leading(store_sales broadcast store shuffle { customer shuffle 
customer_address } shuffle item shuffle store_returns )
+UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpcds_p0/shape/query72.out 
b/regression-test/data/nereids_hint_tpcds_p0/shape/query72.out
index 0b68e3e7f8d..bdd5a5d4d17 100644
--- a/regression-test/data/nereids_hint_tpcds_p0/shape/query72.out
+++ b/regression-test/data/nereids_hint_tpcds_p0/shape/query72.out
@@ -34,9 +34,10 @@ PhysicalResultSink
 ----------------------------------------------------hashJoin[INNER_JOIN] 
hashCondition=((catalog_sales.cs_bill_hdemo_sk = 
household_demographics.hd_demo_sk)) otherCondition=() build RFs:RF2 
hd_demo_sk->[cs_bill_hdemo_sk]
 ------------------------------------------------------PhysicalProject
 --------------------------------------------------------hashJoin[INNER_JOIN] 
hashCondition=((catalog_sales.cs_ship_date_sk = d3.d_date_sk) and 
(catalog_sales.cs_sold_date_sk = d1.d_date_sk)) otherCondition=() build RFs:RF0 
d_date_sk->[cs_ship_date_sk];RF1 d_date_sk->[cs_sold_date_sk]
-----------------------------------------------------------PhysicalProject
-------------------------------------------------------------PhysicalOlapScan[catalog_sales]
 apply RFs: RF0 RF1 RF2 RF3 RF4
-----------------------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
+----------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------------------------PhysicalProject
+--------------------------------------------------------------PhysicalOlapScan[catalog_sales]
 apply RFs: RF0 RF1 RF2 RF3 RF4
+----------------------------------------------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------------------------------------------PhysicalProject
 
--------------------------------------------------------------NestedLoopJoin[INNER_JOIN](d3.d_date
 > days_add(d_date, INTERVAL 5 DAY))
 ----------------------------------------------------------------PhysicalProject
@@ -67,7 +68,7 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[warehouse]
 
 Hint log:
-Used:  leading(inventory { catalog_returns shuffle { catalog_sales shuffle { 
d3 broadcast d1 } broadcast household_demographics shuffle 
customer_demographics broadcast promotion shuffle item } broadcast d2 } 
broadcast warehouse )
-UnUsed: [shuffle]_2
+Used:  leading(inventory shuffle { catalog_returns shuffle { catalog_sales 
shuffle { d3 d1 } broadcast household_demographics shuffle 
customer_demographics broadcast promotion shuffle item } broadcast d2 } 
broadcast warehouse )
+UnUsed: 
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q1.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q1.out
index 3eb68a3c453..22f0777694a 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q1.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q1.out
@@ -2,10 +2,10 @@
 -- !select --
 PhysicalResultSink
 --PhysicalQuickSort[MERGE_SORT]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------PhysicalQuickSort[LOCAL_SORT]
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute
+----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
 ----------------filter((lineitem.l_shipdate <= '1998-09-02'))
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q10.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q10.out
index 10f56f2b5c3..b46fa9784e5 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q10.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q10.out
@@ -2,33 +2,34 @@
 -- !select --
 PhysicalResultSink
 --PhysicalTopN[MERGE_SORT]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------PhysicalTopN[LOCAL_SORT]
---------hashAgg[GLOBAL]
-----------PhysicalDistribute
-------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_orderkey = 
orders.o_orderkey)) otherCondition=() build RFs:RF2 o_orderkey->[l_orderkey]
-------------------PhysicalProject
---------------------filter((lineitem.l_returnflag = 'R'))
-----------------------PhysicalOlapScan[lineitem] apply RFs: RF2
-------------------PhysicalDistribute
+--------PhysicalProject
+----------hashAgg[GLOBAL]
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashAgg[LOCAL]
+----------------PhysicalProject
+------------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_orderkey = 
orders.o_orderkey)) otherCondition=()
 --------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN] 
hashCondition=((customer.c_nationkey = nation.n_nationkey)) otherCondition=() 
build RFs:RF1 n_nationkey->[c_nationkey]
-------------------------PhysicalDistribute
+----------------------filter((lineitem.l_returnflag = 'R'))
+------------------------PhysicalOlapScan[lineitem]
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN] 
hashCondition=((customer.c_nationkey = nation.n_nationkey)) otherCondition=()
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN] 
hashCondition=((customer.c_custkey = orders.o_custkey)) otherCondition=() build 
RFs:RF0 o_custkey->[c_custkey]
+----------------------------hashJoin[INNER_JOIN] 
hashCondition=((customer.c_custkey = orders.o_custkey)) otherCondition=()
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[customer] apply RFs: RF0 RF1
-------------------------------PhysicalDistribute
+--------------------------------PhysicalOlapScan[customer]
+------------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------------PhysicalProject
 ----------------------------------filter((orders.o_orderdate < '1994-01-01') 
and (orders.o_orderdate >= '1993-10-01'))
 ------------------------------------PhysicalOlapScan[orders]
-------------------------PhysicalDistribute
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[nation]
+--------------------------PhysicalDistribute[DistributionSpecReplicated]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[nation]
 
-Used: leading(lineitem { { customer orders } nation })
+Hint log:
+Used:   leading(lineitem shuffle { { customer shuffle orders } broadcast 
nation } )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q11.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q11.out
index eea366f8423..8a357ce7cea 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q11.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q11.out
@@ -1,46 +1,52 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !select --
 PhysicalResultSink
---PhysicalQuickSort
-----PhysicalDistribute
-------PhysicalQuickSort
+--PhysicalQuickSort[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalQuickSort[LOCAL_SORT]
 --------PhysicalProject
-----------NestedLoopJoin[INNER_JOIN](cast(value as DOUBLE) > 
cast((sum((ps_supplycost * ps_availqty)) * 0.000002) as DOUBLE))
+----------NestedLoopJoin[INNER_JOIN](cast(value as DOUBLE) > 
cast((sum((ps_supplycost * cast(ps_availqty as DECIMALV3(10, 0)))) * 0.000002) 
as DOUBLE))
 ------------hashAgg[GLOBAL]
---------------PhysicalDistribute
+--------------PhysicalDistribute[DistributionSpecHash]
 ----------------hashAgg[LOCAL]
 ------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](partsupp.ps_suppkey = 
supplier.s_suppkey)
-----------------------PhysicalDistribute
+--------------------hashJoin[INNER_JOIN] hashCondition=((partsupp.ps_suppkey = 
supplier.s_suppkey)) otherCondition=()
+----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------PhysicalProject
 --------------------------PhysicalOlapScan[partsupp]
-----------------------PhysicalDistribute
-------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
---------------------------PhysicalDistribute
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[supplier]
---------------------------PhysicalDistribute
-----------------------------PhysicalProject
-------------------------------filter((nation.n_name = 'GERMANY'))
---------------------------------PhysicalOlapScan[nation]
-------------PhysicalDistribute
---------------PhysicalAssertNumRows
-----------------PhysicalProject
-------------------hashAgg[GLOBAL]
---------------------PhysicalDistribute
-----------------------hashAgg[LOCAL]
+----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN](partsupp.ps_suppkey = 
supplier.s_suppkey)
-----------------------------PhysicalDistribute
+--------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_nationkey = nation.n_nationkey)) otherCondition=()
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[supplier]
+----------------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[partsupp]
-----------------------------PhysicalDistribute
-------------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
---------------------------------PhysicalDistribute
+--------------------------------filter((nation.n_name = 'GERMANY'))
+----------------------------------PhysicalOlapScan[nation]
+------------PhysicalDistribute[DistributionSpecReplicated]
+--------------PhysicalProject
+----------------hashAgg[GLOBAL]
+------------------PhysicalDistribute[DistributionSpecGather]
+--------------------hashAgg[LOCAL]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN] 
hashCondition=((partsupp.ps_suppkey = supplier.s_suppkey)) otherCondition=()
+--------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[partsupp]
+--------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------PhysicalProject
+------------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_nationkey = nation.n_nationkey)) otherCondition=()
+--------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------PhysicalProject
 ------------------------------------PhysicalOlapScan[supplier]
---------------------------------PhysicalDistribute
+--------------------------------PhysicalDistribute[DistributionSpecHash]
 ----------------------------------PhysicalProject
 ------------------------------------filter((nation.n_name = 'GERMANY'))
 --------------------------------------PhysicalOlapScan[nation]
 
+Hint log:
+Used: leading(partsupp { supplier nation } ) leading(partsupp { supplier 
nation } )
+UnUsed:
+SyntaxError:
+
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q12.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q12.out
index b98f7425954..5d71591ef7e 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q12.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q12.out
@@ -2,20 +2,21 @@
 -- !select --
 PhysicalResultSink
 --PhysicalQuickSort[MERGE_SORT]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------PhysicalQuickSort[LOCAL_SORT]
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute
+----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN] hashCondition=((orders.o_orderkey = 
lineitem.l_orderkey)) otherCondition=() build RFs:RF0 l_orderkey->[o_orderkey]
+----------------hashJoin[INNER_JOIN] hashCondition=((orders.o_orderkey = 
lineitem.l_orderkey)) otherCondition=()
 ------------------PhysicalProject
---------------------PhysicalOlapScan[orders] apply RFs: RF0
+--------------------PhysicalOlapScan[orders]
 ------------------PhysicalProject
 --------------------filter((lineitem.l_commitdate < lineitem.l_receiptdate) 
and (lineitem.l_receiptdate < '1995-01-01') and (lineitem.l_receiptdate >= 
'1994-01-01') and (lineitem.l_shipdate < lineitem.l_commitdate) and l_shipmode 
IN ('MAIL', 'SHIP'))
 ----------------------PhysicalOlapScan[lineitem]
 
-Used: leading(orders lineitem)
+Hint log:
+Used: leading(orders lineitem )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q13.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q13.out
index 9521bbf2e76..0ac0a4bc50e 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q13.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q13.out
@@ -2,24 +2,25 @@
 -- !select --
 PhysicalResultSink
 --PhysicalQuickSort[MERGE_SORT]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------PhysicalQuickSort[LOCAL_SORT]
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute
+----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
 ----------------hashAgg[LOCAL]
 ------------------PhysicalProject
---------------------hashJoin[RIGHT_OUTER_JOIN] 
hashCondition=((customer.c_custkey = orders.o_custkey)) otherCondition=() build 
RFs:RF0 c_custkey->[o_custkey]
-----------------------PhysicalDistribute
+--------------------hashJoin[RIGHT_OUTER_JOIN] 
hashCondition=((customer.c_custkey = orders.o_custkey)) otherCondition=()
+----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------PhysicalProject
 --------------------------filter(( not (o_comment like '%special%requests%')))
-----------------------------PhysicalOlapScan[orders] apply RFs: RF0
-----------------------PhysicalDistribute
+----------------------------PhysicalOlapScan[orders]
+----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------PhysicalProject
 --------------------------PhysicalOlapScan[customer]
 
-Used: leading(orders customer)
+Hint log:
+Used:  leading(orders shuffle customer )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q14.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q14.out
index 34e85bcda66..69e3197354f 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q14.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q14.out
@@ -3,18 +3,19 @@
 PhysicalResultSink
 --PhysicalProject
 ----hashAgg[GLOBAL]
-------PhysicalDistribute
+------PhysicalDistribute[DistributionSpecGather]
 --------hashAgg[LOCAL]
 ----------PhysicalProject
-------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_partkey = 
part.p_partkey)) otherCondition=() build RFs:RF0 l_partkey->[p_partkey]
+------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_partkey = 
part.p_partkey)) otherCondition=()
 --------------PhysicalProject
-----------------PhysicalOlapScan[part] apply RFs: RF0
---------------PhysicalDistribute
+----------------PhysicalOlapScan[part]
+--------------PhysicalDistribute[DistributionSpecHash]
 ----------------PhysicalProject
 ------------------filter((lineitem.l_shipdate < '1995-10-01') and 
(lineitem.l_shipdate >= '1995-09-01'))
 --------------------PhysicalOlapScan[lineitem]
 
-Used: leading(part lineitem)
+Hint log:
+Used: leading(part lineitem )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q15.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q15.out
index 4106594748a..87cf9364346 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q15.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q15.out
@@ -1,31 +1,36 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !select --
 PhysicalResultSink
---PhysicalQuickSort
-----PhysicalDistribute
-------PhysicalQuickSort
+--PhysicalQuickSort[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalQuickSort[LOCAL_SORT]
 --------PhysicalProject
-----------hashJoin[INNER_JOIN](supplier.s_suppkey = revenue0.supplier_no)
+----------hashJoin[INNER_JOIN] hashCondition=((supplier.s_suppkey = 
revenue0.supplier_no)) otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[supplier]
-------------PhysicalDistribute
---------------hashJoin[INNER_JOIN](revenue0.total_revenue = max(total_revenue))
+------------PhysicalDistribute[DistributionSpecHash]
+--------------hashJoin[INNER_JOIN] hashCondition=((revenue0.total_revenue = 
max(total_revenue))) otherCondition=()
 ----------------hashAgg[GLOBAL]
-------------------PhysicalDistribute
+------------------PhysicalDistribute[DistributionSpecGather]
 --------------------hashAgg[LOCAL]
 ----------------------PhysicalProject
-------------------------filter((lineitem.l_shipdate >= 
1996-01-01)(lineitem.l_shipdate < 1996-04-01))
---------------------------PhysicalOlapScan[lineitem]
-----------------PhysicalDistribute
-------------------PhysicalAssertNumRows
+------------------------hashAgg[GLOBAL]
+--------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------------hashAgg[LOCAL]
+------------------------------PhysicalProject
+--------------------------------filter((lineitem.l_shipdate < '1996-04-01') 
and (lineitem.l_shipdate >= '1996-01-01'))
+----------------------------------PhysicalOlapScan[lineitem]
+----------------PhysicalDistribute[DistributionSpecReplicated]
+------------------PhysicalProject
 --------------------hashAgg[GLOBAL]
-----------------------PhysicalDistribute
+----------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------hashAgg[LOCAL]
 --------------------------PhysicalProject
-----------------------------hashAgg[GLOBAL]
-------------------------------PhysicalDistribute
---------------------------------hashAgg[LOCAL]
-----------------------------------PhysicalProject
-------------------------------------filter((lineitem.l_shipdate >= 
1996-01-01)(lineitem.l_shipdate < 1996-04-01))
---------------------------------------PhysicalOlapScan[lineitem]
+----------------------------filter((lineitem.l_shipdate < '1996-04-01') and 
(lineitem.l_shipdate >= '1996-01-01'))
+------------------------------PhysicalOlapScan[lineitem]
+
+Hint log:
+Used: leading(revenue0 supplier )
+UnUsed:
+SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q16.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q16.out
deleted file mode 100644
index c99acb83ba1..00000000000
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q16.out
+++ /dev/null
@@ -1,26 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !select --
-PhysicalResultSink
---PhysicalQuickSort[MERGE_SORT]
-----PhysicalDistribute
-------PhysicalQuickSort[LOCAL_SORT]
---------hashAgg[GLOBAL]
-----------PhysicalDistribute
-------------hashAgg[LOCAL]
---------------hashJoin[LEFT_ANTI_JOIN] hashCondition=((partsupp.ps_suppkey = 
supplier.s_suppkey)) otherCondition=()
-----------------PhysicalProject
-------------------hashJoin[INNER_JOIN] hashCondition=((part.p_partkey = 
partsupp.ps_partkey)) otherCondition=() build RFs:RF0 p_partkey->[ps_partkey]
---------------------PhysicalProject
-----------------------PhysicalOlapScan[partsupp] apply RFs: RF0
---------------------PhysicalProject
-----------------------filter(( not (p_brand = 'Brand#45')) and ( not (p_type 
like 'MEDIUM POLISHED%')) and p_size IN (14, 19, 23, 3, 36, 45, 49, 9))
-------------------------PhysicalOlapScan[part]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------filter((s_comment like '%Customer%Complaints%'))
-----------------------PhysicalOlapScan[supplier]
-
-Used: leading(partsupp part supplier)
-UnUsed:
-SyntaxError:
-
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q17.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q17.out
index 65bad6d5980..406f9fecbf6 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q17.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q17.out
@@ -3,19 +3,24 @@
 PhysicalResultSink
 --PhysicalProject
 ----hashAgg[GLOBAL]
-------PhysicalDistribute
+------PhysicalDistribute[DistributionSpecGather]
 --------hashAgg[LOCAL]
 ----------PhysicalProject
 ------------filter((cast(l_quantity as DECIMALV3(38, 5)) < (0.2 * 
avg(cast(l_quantity as DECIMALV3(17, 4))) OVER(PARTITION BY p_partkey))))
 --------------PhysicalWindow
-----------------PhysicalQuickSort
-------------------PhysicalDistribute
+----------------PhysicalQuickSort[LOCAL_SORT]
+------------------PhysicalDistribute[DistributionSpecHash]
 --------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN](part.p_partkey = lineitem.l_partkey)
+----------------------hashJoin[INNER_JOIN] hashCondition=((part.p_partkey = 
lineitem.l_partkey)) otherCondition=()
 ------------------------PhysicalProject
 --------------------------PhysicalOlapScan[lineitem]
-------------------------PhysicalDistribute
+------------------------PhysicalDistribute[DistributionSpecReplicated]
 --------------------------PhysicalProject
-----------------------------filter((part.p_container = 'MED BOX')(part.p_brand 
= 'Brand#23'))
+----------------------------filter((part.p_brand = 'Brand#23') and 
(part.p_container = 'MED BOX'))
 ------------------------------PhysicalOlapScan[part]
 
+Hint log:
+Used:  leading(lineitem broadcast part )
+UnUsed:
+SyntaxError:
+
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q18.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q18.out
deleted file mode 100644
index ae401ef1cd4..00000000000
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q18.out
+++ /dev/null
@@ -1,26 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !select --
-PhysicalResultSink
---PhysicalTopN
-----PhysicalDistribute
-------PhysicalTopN
---------hashAgg[LOCAL]
-----------PhysicalProject
-------------hashJoin[INNER_JOIN](orders.o_orderkey = lineitem.l_orderkey)
---------------PhysicalProject
-----------------PhysicalOlapScan[lineitem]
---------------PhysicalDistribute
-----------------PhysicalProject
-------------------hashJoin[INNER_JOIN](customer.c_custkey = orders.o_custkey)
---------------------PhysicalProject
-----------------------PhysicalOlapScan[customer]
---------------------PhysicalDistribute
-----------------------hashJoin[LEFT_SEMI_JOIN](orders.o_orderkey = 
lineitem.l_orderkey)
-------------------------PhysicalProject
---------------------------PhysicalOlapScan[orders]
-------------------------PhysicalProject
---------------------------filter((sum(l_quantity) > 300.00))
-----------------------------hashAgg[LOCAL]
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[lineitem]
-
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q19.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q19.out
index 06890457532..d69c1002f27 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q19.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q19.out
@@ -2,20 +2,20 @@
 -- !select --
 PhysicalResultSink
 --hashAgg[GLOBAL]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------hashAgg[LOCAL]
 --------PhysicalProject
-----------hashJoin[INNER_JOIN] hashCondition=((part.p_partkey = 
lineitem.l_partkey)) otherCondition=(((((((part.p_brand = 'Brand#12') AND 
p_container IN ('SM BOX', 'SM CASE', 'SM PACK', 'SM PKG')) AND 
((lineitem.l_quantity >= 1.00) AND (lineitem.l_quantity <= 11.00))) AND 
(part.p_size <= 5)) OR ((((part.p_brand = 'Brand#23') AND p_container IN ('MED 
BAG', 'MED BOX', 'MED PACK', 'MED PKG')) AND ((lineitem.l_quantity >= 10.00) 
AND (lineitem.l_quantity <= 20.00))) AND (part.p_size <= 10)))  [...]
-------------PhysicalDistribute
---------------PhysicalProject
-----------------filter(((((lineitem.l_quantity >= 1.00) AND 
(lineitem.l_quantity <= 11.00)) OR ((lineitem.l_quantity >= 10.00) AND 
(lineitem.l_quantity <= 20.00))) OR ((lineitem.l_quantity >= 20.00) AND 
(lineitem.l_quantity <= 30.00))) and (lineitem.l_shipinstruct = 'DELIVER IN 
PERSON') and l_shipmode IN ('AIR REG', 'AIR'))
-------------------PhysicalOlapScan[lineitem] apply RFs: RF0
-------------PhysicalDistribute
+----------hashJoin[INNER_JOIN] hashCondition=((part.p_partkey = 
lineitem.l_partkey)) otherCondition=(((((((part.p_brand = 'Brand#12') AND 
p_container IN ('SM BOX', 'SM CASE', 'SM PACK', 'SM PKG')) AND 
((lineitem.l_quantity >= 1.00) AND (lineitem.l_quantity <= 11.00))) AND 
(part.p_size <= 5)) OR ((((part.p_brand = 'Brand#23') AND p_container IN ('MED 
BAG', 'MED BOX', 'MED PACK', 'MED PKG')) AND ((lineitem.l_quantity >= 10.00) 
AND (lineitem.l_quantity <= 20.00))) AND (part.p_size <= 10)))  [...]
+------------PhysicalProject
+--------------filter((lineitem.l_quantity <= 30.00) and (lineitem.l_quantity 
>= 1.00) and (lineitem.l_shipinstruct = 'DELIVER IN PERSON') and l_shipmode IN 
('AIR REG', 'AIR'))
+----------------PhysicalOlapScan[lineitem]
+------------PhysicalDistribute[DistributionSpecReplicated]
 --------------PhysicalProject
 ----------------filter((((((part.p_brand = 'Brand#12') AND p_container IN ('SM 
BOX', 'SM CASE', 'SM PACK', 'SM PKG')) AND (part.p_size <= 5)) OR 
(((part.p_brand = 'Brand#23') AND p_container IN ('MED BAG', 'MED BOX', 'MED 
PACK', 'MED PKG')) AND (part.p_size <= 10))) OR (((part.p_brand = 'Brand#34') 
AND p_container IN ('LG BOX', 'LG CASE', 'LG PACK', 'LG PKG')) AND (part.p_size 
<= 15))) and (part.p_size >= 1))
 ------------------PhysicalOlapScan[part]
 
-Used: leading(lineitem part)
+Hint log:
+Used:  leading(lineitem broadcast part )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q2.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q2.out
deleted file mode 100644
index ad98be8fe33..00000000000
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q2.out
+++ /dev/null
@@ -1,39 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !select --
-PhysicalResultSink
---PhysicalTopN
-----PhysicalDistribute
-------PhysicalTopN
---------PhysicalProject
-----------filter((partsupp.ps_supplycost = min(ps_supplycost) OVER(PARTITION 
BY p_partkey)))
-------------PhysicalWindow
---------------PhysicalQuickSort
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN](nation.n_regionkey = 
region.r_regionkey)
-----------------------PhysicalDistribute
-------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
-----------------------------PhysicalDistribute
-------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN](part.p_partkey = 
partsupp.ps_partkey)(supplier.s_suppkey = partsupp.ps_suppkey)
-----------------------------------NestedLoopJoin[CROSS_JOIN]
-------------------------------------PhysicalProject
---------------------------------------filter((part.p_size = 15)(p_type like 
'%BRASS'))
-----------------------------------------PhysicalOlapScan[part]
-------------------------------------PhysicalDistribute
---------------------------------------PhysicalOlapScan[supplier]
-----------------------------------PhysicalProject
-------------------------------------PhysicalOlapScan[partsupp]
-----------------------------PhysicalDistribute
-------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[nation]
-----------------------PhysicalDistribute
-------------------------PhysicalProject
---------------------------filter((region.r_name = 'EUROPE'))
-----------------------------PhysicalOlapScan[region]
-
-Used: leading({ supplier { nation region } } { partsupp part })
-UnUsed:
-SyntaxError:
-
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q20.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q20.out
deleted file mode 100644
index 6114877bc9d..00000000000
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q20.out
+++ /dev/null
@@ -1,34 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !select --
-PhysicalResultSink
---PhysicalQuickSort
-----PhysicalDistribute
-------PhysicalQuickSort
---------PhysicalProject
-----------hashJoin[RIGHT_SEMI_JOIN](supplier.s_suppkey = partsupp.ps_suppkey)
-------------PhysicalDistribute
---------------PhysicalProject
-----------------hashJoin[INNER_JOIN](lineitem.l_partkey = 
partsupp.ps_partkey)(lineitem.l_suppkey = partsupp.ps_suppkey)(cast(ps_availqty 
as DECIMALV3(38, 3)) > (0.5 * sum(l_quantity)))
-------------------PhysicalProject
---------------------hashAgg[GLOBAL]
-----------------------PhysicalDistribute
-------------------------hashAgg[LOCAL]
---------------------------PhysicalProject
-----------------------------filter((lineitem.l_shipdate < 
1995-01-01)(lineitem.l_shipdate >= 1994-01-01))
-------------------------------PhysicalOlapScan[lineitem]
-------------------PhysicalDistribute
---------------------hashJoin[LEFT_SEMI_JOIN](partsupp.ps_partkey = 
part.p_partkey)
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[partsupp]
-----------------------PhysicalProject
-------------------------filter((p_name like 'forest%'))
---------------------------PhysicalOlapScan[part]
-------------PhysicalDistribute
---------------hashJoin[INNER_JOIN](supplier.s_nationkey = nation.n_nationkey)
-----------------PhysicalProject
-------------------PhysicalOlapScan[supplier]
-----------------PhysicalDistribute
-------------------PhysicalProject
---------------------filter((nation.n_name = 'CANADA'))
-----------------------PhysicalOlapScan[nation]
-
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q21.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q21.out
deleted file mode 100644
index 2f4348619b2..00000000000
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q21.out
+++ /dev/null
@@ -1,34 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !select --
-PhysicalResultSink
---PhysicalTopN
-----PhysicalDistribute
-------PhysicalTopN
---------hashAgg[GLOBAL]
-----------PhysicalDistribute
-------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------hashJoin[INNER_JOIN](orders.o_orderkey = l1.l_orderkey)
-------------------PhysicalProject
---------------------filter((orders.o_orderstatus = 'F'))
-----------------------PhysicalOlapScan[orders]
-------------------hashJoin[RIGHT_SEMI_JOIN](l2.l_orderkey = l1.l_orderkey)( 
not (l_suppkey = l_suppkey))
---------------------PhysicalProject
-----------------------PhysicalOlapScan[lineitem]
---------------------hashJoin[RIGHT_ANTI_JOIN](l3.l_orderkey = l1.l_orderkey)( 
not (l_suppkey = l_suppkey))
-----------------------PhysicalProject
-------------------------filter((l3.l_receiptdate > l3.l_commitdate))
---------------------------PhysicalOlapScan[lineitem]
-----------------------hashJoin[INNER_JOIN](supplier.s_suppkey = l1.l_suppkey)
-------------------------PhysicalProject
---------------------------filter((l1.l_receiptdate > l1.l_commitdate))
-----------------------------PhysicalOlapScan[lineitem]
-------------------------PhysicalDistribute
---------------------------hashJoin[INNER_JOIN](supplier.s_nationkey = 
nation.n_nationkey)
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[supplier]
-----------------------------PhysicalDistribute
-------------------------------PhysicalProject
---------------------------------filter((nation.n_name = 'SAUDI ARABIA'))
-----------------------------------PhysicalOlapScan[nation]
-
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q22.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q22.out
deleted file mode 100644
index 09e3c287f6a..00000000000
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q22.out
+++ /dev/null
@@ -1,28 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !select --
-PhysicalResultSink
---PhysicalQuickSort
-----PhysicalDistribute
-------PhysicalQuickSort
---------hashAgg[GLOBAL]
-----------PhysicalDistribute
-------------hashAgg[LOCAL]
---------------PhysicalProject
-----------------hashJoin[RIGHT_ANTI_JOIN](orders.o_custkey = 
customer.c_custkey)
-------------------PhysicalDistribute
---------------------PhysicalProject
-----------------------PhysicalOlapScan[orders]
-------------------PhysicalDistribute
---------------------NestedLoopJoin[INNER_JOIN](cast(c_acctbal as DECIMALV3(38, 
4)) > avg(c_acctbal))
-----------------------PhysicalProject
-------------------------filter(substring(c_phone, 1, 2) IN ('13', '31', '23', 
'29', '30', '18', '17'))
---------------------------PhysicalOlapScan[customer]
-----------------------PhysicalDistribute
-------------------------PhysicalAssertNumRows
---------------------------hashAgg[GLOBAL]
-----------------------------PhysicalDistribute
-------------------------------hashAgg[LOCAL]
---------------------------------PhysicalProject
-----------------------------------filter((customer.c_acctbal > 
0.00)substring(c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17'))
-------------------------------------PhysicalOlapScan[customer]
-
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q3.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q3.out
index 25edf8184c0..a1c0695e752 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q3.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q3.out
@@ -2,27 +2,29 @@
 -- !select --
 PhysicalResultSink
 --PhysicalTopN[MERGE_SORT]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------PhysicalTopN[LOCAL_SORT]
---------hashAgg[LOCAL]
-----------PhysicalProject
-------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_orderkey = 
orders.o_orderkey)) otherCondition=() build RFs:RF1 o_orderkey->[l_orderkey]
---------------PhysicalProject
-----------------filter((lineitem.l_shipdate > '1995-03-15'))
-------------------PhysicalOlapScan[lineitem] apply RFs: RF1
---------------PhysicalDistribute
+--------PhysicalProject
+----------hashAgg[LOCAL]
+------------PhysicalProject
+--------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_orderkey = 
orders.o_orderkey)) otherCondition=()
 ----------------PhysicalProject
-------------------hashJoin[INNER_JOIN] hashCondition=((customer.c_custkey = 
orders.o_custkey)) otherCondition=() build RFs:RF0 c_custkey->[o_custkey]
---------------------PhysicalDistribute
-----------------------PhysicalProject
-------------------------filter((orders.o_orderdate < '1995-03-15'))
---------------------------PhysicalOlapScan[orders] apply RFs: RF0
---------------------PhysicalDistribute
-----------------------PhysicalProject
-------------------------filter((customer.c_mktsegment = 'BUILDING'))
---------------------------PhysicalOlapScan[customer]
+------------------filter((lineitem.l_shipdate > '1995-03-15'))
+--------------------PhysicalOlapScan[lineitem]
+----------------PhysicalDistribute[DistributionSpecHash]
+------------------PhysicalProject
+--------------------hashJoin[INNER_JOIN] hashCondition=((customer.c_custkey = 
orders.o_custkey)) otherCondition=()
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------PhysicalProject
+--------------------------filter((orders.o_orderdate < '1995-03-15'))
+----------------------------PhysicalOlapScan[orders]
+----------------------PhysicalDistribute[DistributionSpecHash]
+------------------------PhysicalProject
+--------------------------filter((customer.c_mktsegment = 'BUILDING'))
+----------------------------PhysicalOlapScan[customer]
 
-Used: leading(lineitem { orders customer })
+Hint log:
+Used:  leading(lineitem { orders shuffle customer } )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q4.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q4.out
index afdd554649a..1eff5041831 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q4.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q4.out
@@ -2,21 +2,22 @@
 -- !select --
 PhysicalResultSink
 --PhysicalQuickSort[MERGE_SORT]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------PhysicalQuickSort[LOCAL_SORT]
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute
+----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[RIGHT_SEMI_JOIN] hashCondition=((lineitem.l_orderkey 
= orders.o_orderkey)) otherCondition=() build RFs:RF0 o_orderkey->[l_orderkey]
+----------------hashJoin[RIGHT_SEMI_JOIN] hashCondition=((lineitem.l_orderkey 
= orders.o_orderkey)) otherCondition=()
 ------------------PhysicalProject
 --------------------filter((lineitem.l_commitdate < lineitem.l_receiptdate))
-----------------------PhysicalOlapScan[lineitem] apply RFs: RF0
+----------------------PhysicalOlapScan[lineitem]
 ------------------PhysicalProject
 --------------------filter((orders.o_orderdate < '1993-10-01') and 
(orders.o_orderdate >= '1993-07-01'))
 ----------------------PhysicalOlapScan[orders]
 
-Used: leading(lineitem orders)
+Hint log:
+Used: leading(lineitem orders )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q5.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q5.out
index 9113b8d8f10..fe9e8f7afdc 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q5.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q5.out
@@ -2,24 +2,43 @@
 -- !select --
 PhysicalResultSink
 --PhysicalQuickSort[MERGE_SORT]
-----PhysicalQuickSort[LOCAL_SORT]
-------hashAgg[GLOBAL]
---------hashAgg[LOCAL]
-----------hashJoin[INNER_JOIN] hashCondition=((customer.c_custkey = 
orders.o_custkey) and (customer.c_nationkey = supplier.s_nationkey)) 
otherCondition=() build RFs:RF4 c_nationkey->[s_nationkey];RF5 
c_custkey->[o_custkey]
-------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_orderkey = 
orders.o_orderkey)) otherCondition=() build RFs:RF3 o_orderkey->[l_orderkey]
---------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_suppkey = 
supplier.s_suppkey)) otherCondition=() build RFs:RF2 s_suppkey->[l_suppkey]
-----------------PhysicalOlapScan[lineitem] apply RFs: RF2 RF3
-----------------hashJoin[INNER_JOIN] hashCondition=((supplier.s_nationkey = 
nation.n_nationkey)) otherCondition=() build RFs:RF1 n_nationkey->[s_nationkey]
-------------------PhysicalOlapScan[supplier] apply RFs: RF1 RF4
-------------------hashJoin[INNER_JOIN] hashCondition=((nation.n_regionkey = 
region.r_regionkey)) otherCondition=() build RFs:RF0 r_regionkey->[n_regionkey]
---------------------PhysicalOlapScan[nation] apply RFs: RF0
---------------------filter((region.r_name = 'ASIA'))
-----------------------PhysicalOlapScan[region]
---------------filter((orders.o_orderdate < '1995-01-01') and 
(orders.o_orderdate >= '1994-01-01'))
-----------------PhysicalOlapScan[orders] apply RFs: RF5
-------------PhysicalOlapScan[customer]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalQuickSort[LOCAL_SORT]
+--------hashAgg[GLOBAL]
+----------PhysicalDistribute[DistributionSpecHash]
+------------hashAgg[LOCAL]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN] hashCondition=((customer.c_custkey = 
orders.o_custkey) and (customer.c_nationkey = supplier.s_nationkey)) 
otherCondition=()
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------PhysicalProject
+----------------------hashJoin[INNER_JOIN] hashCondition=((lineitem.l_suppkey 
= supplier.s_suppkey)) otherCondition=()
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN] 
hashCondition=((lineitem.l_orderkey = orders.o_orderkey)) otherCondition=()
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[lineitem]
+----------------------------PhysicalProject
+------------------------------filter((orders.o_orderdate < '1995-01-01') and 
(orders.o_orderdate >= '1994-01-01'))
+--------------------------------PhysicalOlapScan[orders]
+------------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_nationkey = nation.n_nationkey)) otherCondition=()
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[supplier]
+------------------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN] 
hashCondition=((nation.n_regionkey = region.r_regionkey)) otherCondition=()
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[nation]
+------------------------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------------------------PhysicalProject
+----------------------------------------filter((region.r_name = 'ASIA'))
+------------------------------------------PhysicalOlapScan[region]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------PhysicalProject
+----------------------PhysicalOlapScan[customer]
 
-Used: leading(lineitem { supplier { nation region } } orders customer)
+Hint log:
+Used:   leading(lineitem orders broadcast { supplier broadcast { nation 
broadcast region } } shuffle customer )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q6.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q6.out
index 7976f47c6b4..f1f764bec09 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q6.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q6.out
@@ -2,7 +2,7 @@
 -- !select --
 PhysicalResultSink
 --hashAgg[GLOBAL]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------hashAgg[LOCAL]
 --------PhysicalProject
 ----------filter((lineitem.l_discount <= 0.07) and (lineitem.l_discount >= 
0.05) and (lineitem.l_quantity < 24.00) and (lineitem.l_shipdate < 
'1995-01-01') and (lineitem.l_shipdate >= '1994-01-01'))
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q7.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q7.out
index 6facc13fb77..3230a65000d 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q7.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q7.out
@@ -1,44 +1,45 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !select --
 PhysicalResultSink
---PhysicalQuickSort
-----PhysicalDistribute
-------PhysicalQuickSort
+--PhysicalQuickSort[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalQuickSort[LOCAL_SORT]
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute
+----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN] hashCondition=((customer.c_custkey = 
orders.o_custkey) and (customer.c_nationkey = n2.n_nationkey))otherCondition=()
+----------------hashJoin[INNER_JOIN] hashCondition=((orders.o_orderkey = 
lineitem.l_orderkey) and (supplier.s_suppkey = lineitem.l_suppkey)) 
otherCondition=()
 ------------------PhysicalProject
---------------------PhysicalOlapScan[customer]
-------------------PhysicalDistribute
---------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN] hashCondition=((orders.o_orderkey = 
lineitem.l_orderkey))otherCondition=()
-------------------------PhysicalProject
---------------------------PhysicalOlapScan[orders]
-------------------------PhysicalDistribute
+--------------------filter((lineitem.l_shipdate <= '1996-12-31') and 
(lineitem.l_shipdate >= '1995-01-01'))
+----------------------PhysicalOlapScan[lineitem]
+------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------NestedLoopJoin[INNER_JOIN](((n1.n_name = 'FRANCE') AND 
(n2.n_name = 'GERMANY')) OR ((n1.n_name = 'GERMANY') AND (n2.n_name = 
'FRANCE')))
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_nationkey = n1.n_nationkey)) otherCondition=()
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_suppkey = lineitem.l_suppkey))otherCondition=()
-------------------------------PhysicalDistribute
---------------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_nationkey = n1.n_nationkey))otherCondition=()
-----------------------------------PhysicalDistribute
+----------------------------PhysicalOlapScan[supplier]
+--------------------------PhysicalDistribute[DistributionSpecReplicated]
+----------------------------PhysicalProject
+------------------------------filter(n_name IN ('FRANCE', 'GERMANY'))
+--------------------------------PhysicalOlapScan[nation]
+----------------------PhysicalDistribute[DistributionSpecReplicated]
+------------------------PhysicalProject
+--------------------------hashJoin[INNER_JOIN] 
hashCondition=((customer.c_custkey = orders.o_custkey)) otherCondition=()
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------PhysicalProject
+--------------------------------PhysicalOlapScan[orders]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN] 
hashCondition=((customer.c_nationkey = n2.n_nationkey)) otherCondition=()
+----------------------------------PhysicalProject
+------------------------------------PhysicalOlapScan[customer]
+----------------------------------PhysicalDistribute[DistributionSpecReplicated]
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[supplier]
-----------------------------------PhysicalDistribute
-------------------------------------NestedLoopJoin[INNER_JOIN](((n1.n_name = 
'FRANCE') AND (n2.n_name = 'GERMANY')) OR ((n1.n_name = 'GERMANY') AND 
(n2.n_name = 'FRANCE')))
---------------------------------------PhysicalProject
-----------------------------------------filter(((n2.n_name = 'GERMANY') OR 
(n2.n_name = 'FRANCE')))
-------------------------------------------PhysicalOlapScan[nation]
---------------------------------------PhysicalDistribute
-----------------------------------------PhysicalProject
-------------------------------------------filter(((n1.n_name = 'FRANCE') OR 
(n1.n_name = 'GERMANY')))
---------------------------------------------PhysicalOlapScan[nation]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((lineitem.l_shipdate <= '1996-12-31') 
and (lineitem.l_shipdate >= '1995-01-01'))
-------------------------------------PhysicalOlapScan[lineitem]
+--------------------------------------filter(n_name IN ('FRANCE', 'GERMANY'))
+----------------------------------------PhysicalOlapScan[nation]
 
-Used:
+Hint log:
+Used:   leading(lineitem broadcast { supplier broadcast n1 } { orders shuffle 
{ customer broadcast n2 } } )
 UnUsed:
-SyntaxError: leading(customer { orders { lineitem { supplier { n1 n2 } } } }) 
Msg:tables should be same as join tables
+SyntaxError:
 
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q8.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q8.out
index 07a9cd9ca20..22b5a4dde59 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q8.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q8.out
@@ -1,49 +1,54 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !select --
 PhysicalResultSink
---PhysicalQuickSort
-----PhysicalDistribute
-------PhysicalQuickSort
+--PhysicalQuickSort[MERGE_SORT]
+----PhysicalDistribute[DistributionSpecGather]
+------PhysicalQuickSort[LOCAL_SORT]
 --------PhysicalProject
 ----------hashAgg[GLOBAL]
-------------PhysicalDistribute
+------------PhysicalDistribute[DistributionSpecHash]
 --------------hashAgg[LOCAL]
 ----------------PhysicalProject
-------------------hashJoin[INNER_JOIN](supplier.s_nationkey = n2.n_nationkey)
+------------------hashJoin[INNER_JOIN] hashCondition=((supplier.s_nationkey = 
n2.n_nationkey)) otherCondition=()
 --------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN](supplier.s_suppkey = 
lineitem.l_suppkey)
+----------------------hashJoin[INNER_JOIN] hashCondition=((supplier.s_suppkey 
= lineitem.l_suppkey)) otherCondition=()
 ------------------------PhysicalProject
 --------------------------PhysicalOlapScan[supplier]
-------------------------PhysicalDistribute
+------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN](n1.n_regionkey = 
region.r_regionkey)
+----------------------------hashJoin[INNER_JOIN] 
hashCondition=((lineitem.l_orderkey = orders.o_orderkey) and (orders.o_custkey 
= customer.c_custkey)) otherCondition=()
 ------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN](customer.c_nationkey = 
n1.n_nationkey)
+--------------------------------filter((orders.o_orderdate <= '1996-12-31') 
and (orders.o_orderdate >= '1995-01-01'))
+----------------------------------PhysicalOlapScan[orders]
+------------------------------NestedLoopJoin[CROSS_JOIN]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN] 
hashCondition=((part.p_partkey = lineitem.l_partkey)) otherCondition=()
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[lineitem]
+------------------------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------------------------PhysicalProject
+----------------------------------------filter((part.p_type = 'ECONOMY 
ANODIZED STEEL'))
+------------------------------------------PhysicalOlapScan[part]
+--------------------------------PhysicalDistribute[DistributionSpecReplicated]
 ----------------------------------PhysicalProject
-------------------------------------hashJoin[INNER_JOIN](orders.o_custkey = 
customer.c_custkey)
+------------------------------------hashJoin[INNER_JOIN] 
hashCondition=((customer.c_nationkey = n1.n_nationkey)) otherCondition=()
 --------------------------------------PhysicalProject
 ----------------------------------------PhysicalOlapScan[customer]
---------------------------------------PhysicalDistribute
-----------------------------------------hashJoin[INNER_JOIN](lineitem.l_orderkey
 = orders.o_orderkey)
-------------------------------------------PhysicalProject
---------------------------------------------filter((orders.o_orderdate <= 
1996-12-31)(orders.o_orderdate >= 1995-01-01))
-----------------------------------------------PhysicalOlapScan[orders]
-------------------------------------------PhysicalProject
---------------------------------------------hashJoin[INNER_JOIN](part.p_partkey
 = lineitem.l_partkey)
+--------------------------------------PhysicalDistribute[DistributionSpecReplicated]
+----------------------------------------PhysicalProject
+------------------------------------------hashJoin[INNER_JOIN] 
hashCondition=((n1.n_regionkey = region.r_regionkey)) otherCondition=()
+--------------------------------------------PhysicalProject
+----------------------------------------------PhysicalOlapScan[nation]
+--------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
 ----------------------------------------------PhysicalProject
-------------------------------------------------PhysicalOlapScan[lineitem]
-----------------------------------------------PhysicalDistribute
-------------------------------------------------PhysicalProject
---------------------------------------------------filter((part.p_type = 
'ECONOMY ANODIZED STEEL'))
-----------------------------------------------------PhysicalOlapScan[part]
-----------------------------------PhysicalDistribute
-------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[nation]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------filter((region.r_name = 'AMERICA'))
-------------------------------------PhysicalOlapScan[region]
---------------------PhysicalDistribute
+------------------------------------------------filter((region.r_name = 
'AMERICA'))
+--------------------------------------------------PhysicalOlapScan[region]
+--------------------PhysicalDistribute[DistributionSpecReplicated]
 ----------------------PhysicalProject
 ------------------------PhysicalOlapScan[nation]
 
+Hint log:
+Used:  leading(supplier { orders { lineitem broadcast part } { customer 
broadcast { n1 broadcast region } } } broadcast n2 )
+UnUsed:
+SyntaxError:
+
diff --git a/regression-test/data/nereids_hint_tpch_p0/shape/q9.out 
b/regression-test/data/nereids_hint_tpch_p0/shape/q9.out
index 9026d438674..4aa9900d440 100644
--- a/regression-test/data/nereids_hint_tpch_p0/shape/q9.out
+++ b/regression-test/data/nereids_hint_tpch_p0/shape/q9.out
@@ -2,44 +2,45 @@
 -- !select --
 PhysicalResultSink
 --PhysicalQuickSort[MERGE_SORT]
-----PhysicalDistribute
+----PhysicalDistribute[DistributionSpecGather]
 ------PhysicalQuickSort[LOCAL_SORT]
 --------hashAgg[GLOBAL]
-----------PhysicalDistribute
+----------PhysicalDistribute[DistributionSpecHash]
 ------------hashAgg[LOCAL]
 --------------PhysicalProject
-----------------hashJoin[INNER_JOIN] hashCondition=((partsupp.ps_partkey = 
lineitem.l_partkey) and (partsupp.ps_suppkey = lineitem.l_suppkey)) 
otherCondition=() build RFs:RF4 ps_partkey->[l_partkey];RF5 
ps_suppkey->[l_suppkey]
-------------------PhysicalDistribute
+----------------hashJoin[INNER_JOIN] hashCondition=((partsupp.ps_partkey = 
lineitem.l_partkey) and (partsupp.ps_suppkey = lineitem.l_suppkey)) 
otherCondition=()
+------------------PhysicalDistribute[DistributionSpecHash]
 --------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN] hashCondition=((orders.o_orderkey = 
lineitem.l_orderkey)) otherCondition=() build RFs:RF3 l_orderkey->[o_orderkey]
+----------------------hashJoin[INNER_JOIN] hashCondition=((orders.o_orderkey = 
lineitem.l_orderkey)) otherCondition=()
 ------------------------PhysicalProject
---------------------------PhysicalOlapScan[orders] apply RFs: RF3
-------------------------PhysicalDistribute
+--------------------------PhysicalOlapScan[orders]
+------------------------PhysicalDistribute[DistributionSpecHash]
 --------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_suppkey = lineitem.l_suppkey)) otherCondition=() 
build RFs:RF2 s_suppkey->[l_suppkey]
-------------------------------PhysicalDistribute
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN] 
hashCondition=((part.p_partkey = lineitem.l_partkey)) otherCondition=() build 
RFs:RF1 p_partkey->[l_partkey]
+----------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_nationkey = nation.n_nationkey)) otherCondition=()
+------------------------------PhysicalProject
+--------------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_suppkey = lineitem.l_suppkey)) otherCondition=()
+----------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------PhysicalProject
+--------------------------------------hashJoin[INNER_JOIN] 
hashCondition=((part.p_partkey = lineitem.l_partkey)) otherCondition=()
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------PhysicalProject
+--------------------------------------------PhysicalOlapScan[lineitem]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------PhysicalProject
+--------------------------------------------filter((p_name like '%green%'))
+----------------------------------------------PhysicalOlapScan[part]
+----------------------------------PhysicalDistribute[DistributionSpecHash]
 ------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[lineitem] apply RFs: 
RF1 RF2 RF4 RF5
-------------------------------------PhysicalDistribute
---------------------------------------PhysicalProject
-----------------------------------------filter((p_name like '%green%'))
-------------------------------------------PhysicalOlapScan[part]
-------------------------------PhysicalDistribute
+--------------------------------------PhysicalOlapScan[supplier]
+------------------------------PhysicalDistribute[DistributionSpecReplicated]
 --------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN] 
hashCondition=((supplier.s_nationkey = nation.n_nationkey)) otherCondition=() 
build RFs:RF0 n_nationkey->[s_nationkey]
-------------------------------------PhysicalDistribute
---------------------------------------PhysicalProject
-----------------------------------------PhysicalOlapScan[supplier] apply RFs: 
RF0
-------------------------------------PhysicalDistribute
---------------------------------------PhysicalProject
-----------------------------------------PhysicalOlapScan[nation]
-------------------PhysicalDistribute
+----------------------------------PhysicalOlapScan[nation]
+------------------PhysicalDistribute[DistributionSpecHash]
 --------------------PhysicalProject
 ----------------------PhysicalOlapScan[partsupp]
 
-Used: leading(orders { { lineitem part } { supplier nation } } partsupp)
+Hint log:
+Used:   leading(orders shuffle { lineitem shuffle part } shuffle { supplier 
broadcast nation } shuffle partsupp )
 UnUsed:
 SyntaxError:
 
diff --git a/regression-test/data/nereids_p0/hint/test_leading.out 
b/regression-test/data/nereids_p0/hint/test_leading.out
index 7274d409312..53195035880 100644
--- a/regression-test/data/nereids_p0/hint/test_leading.out
+++ b/regression-test/data/nereids_p0/hint/test_leading.out
@@ -2407,7 +2407,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t1]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------------PhysicalProject
@@ -2417,8 +2417,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t3]
 
 Hint log:
-Used:  leading(t1 { t2 broadcast t3 } )
-UnUsed: [shuffle]_2
+Used:   leading(t1 shuffle { t2 broadcast t3 } )
+UnUsed:
 SyntaxError:
 
 -- !select92_3 --
@@ -2430,7 +2430,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t1]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------------PhysicalProject
@@ -2440,8 +2440,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t2]
 
 Hint log:
-Used:  leading(t1 { t3 broadcast t2 } )
-UnUsed: [shuffle]_2
+Used:   leading(t1 shuffle { t3 broadcast t2 } )
+UnUsed:
 SyntaxError:
 
 -- !select92_4 --
@@ -2476,7 +2476,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2) and (t2.c2 = 
t3.c3)) otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t2]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t3.c3)) 
otherCondition=()
 ----------------PhysicalProject
 ------------------PhysicalOlapScan[t1]
@@ -2485,8 +2485,8 @@ PhysicalResultSink
 --------------------PhysicalOlapScan[t3]
 
 Hint log:
-Used:  leading(t2 { t1 broadcast t3 } )
-UnUsed: [shuffle]_2
+Used:   leading(t2 shuffle { t1 broadcast t3 } )
+UnUsed:
 SyntaxError:
 
 -- !select92_6 --
@@ -2498,7 +2498,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2) and (t2.c2 = 
t3.c3)) otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t2]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t3.c3)) 
otherCondition=()
 ----------------PhysicalProject
 ------------------PhysicalOlapScan[t3]
@@ -2507,8 +2507,8 @@ PhysicalResultSink
 --------------------PhysicalOlapScan[t1]
 
 Hint log:
-Used:  leading(t2 { t3 broadcast t1 } )
-UnUsed: [shuffle]_2
+Used:   leading(t2 shuffle { t3 broadcast t1 } )
+UnUsed:
 SyntaxError:
 
 -- !select93_1 --
@@ -2543,7 +2543,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t1]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------------PhysicalProject
@@ -2566,7 +2566,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t1]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------------PhysicalProject
@@ -2612,7 +2612,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2) and (t2.c2 = 
t3.c3)) otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t2]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t3.c3)) 
otherCondition=()
 ----------------PhysicalProject
 ------------------PhysicalOlapScan[t1]
@@ -2634,7 +2634,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2) and (t2.c2 = 
t3.c3)) otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t2]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t3.c3)) 
otherCondition=()
 ----------------PhysicalProject
 ------------------PhysicalOlapScan[t3]
@@ -2689,8 +2689,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t3]
 
 Hint log:
-Used: leading(t1 { t2 t3 } )
-UnUsed: [shuffle]_2
+Used:  leading(t1 shuffle { t2 t3 } )
+UnUsed:
 SyntaxError:
 
 -- !select94_2 --
@@ -2712,8 +2712,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t2]
 
 Hint log:
-Used: leading(t1 { t3 t2 } )
-UnUsed: [shuffle]_2
+Used:  leading(t1 shuffle { t3 t2 } )
+UnUsed:
 SyntaxError:
 
 -- !select94_2 --
@@ -2757,8 +2757,8 @@ PhysicalResultSink
 --------------------PhysicalOlapScan[t3]
 
 Hint log:
-Used: leading(t2 { t1 t3 } )
-UnUsed: [shuffle]_2
+Used:  leading(t2 shuffle { t1 t3 } )
+UnUsed:
 SyntaxError:
 
 -- !select94_2 --
@@ -2779,8 +2779,8 @@ PhysicalResultSink
 --------------------PhysicalOlapScan[t1]
 
 Hint log:
-Used: leading(t2 { t3 t1 } )
-UnUsed: [shuffle]_2
+Used:  leading(t2 shuffle { t3 t1 } )
+UnUsed:
 SyntaxError:
 
 -- !select95_1 --
@@ -2953,7 +2953,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t3]
-------------PhysicalDistribute[DistributionSpecHash]
+------------PhysicalDistribute[DistributionSpecReplicated]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------------PhysicalProject
@@ -2963,8 +2963,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t2]
 
 Hint log:
-Used: leading(t3 { t1 t2 } )
-UnUsed: [broadcast]_2
+Used:  leading(t3 broadcast { t1 t2 } )
+UnUsed:
 SyntaxError:
 
 -- !select95_9 --
@@ -2976,7 +2976,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t3]
-------------PhysicalDistribute[DistributionSpecHash]
+------------PhysicalDistribute[DistributionSpecReplicated]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------------PhysicalProject
@@ -2986,8 +2986,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t1]
 
 Hint log:
-Used: leading(t3 { t2 t1 } )
-UnUsed: [broadcast]_2
+Used:  leading(t3 broadcast { t2 t1 } )
+UnUsed:
 SyntaxError:
 
 -- !select96_1 --
@@ -3160,7 +3160,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t3]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------------PhysicalProject
@@ -3170,8 +3170,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t2]
 
 Hint log:
-Used:  leading(t3 { t1 broadcast t2 } )
-UnUsed: [shuffle]_2
+Used:   leading(t3 shuffle { t1 broadcast t2 } )
+UnUsed:
 SyntaxError:
 
 -- !select96_9 --
@@ -3183,7 +3183,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t3]
-------------PhysicalDistribute[DistributionSpecReplicated]
+------------PhysicalDistribute[DistributionSpecHash]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------------PhysicalProject
@@ -3193,8 +3193,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t1]
 
 Hint log:
-Used:  leading(t3 { t2 broadcast t1 } )
-UnUsed: [shuffle]_2
+Used:   leading(t3 shuffle { t2 broadcast t1 } )
+UnUsed:
 SyntaxError:
 
 -- !select97_1 --
@@ -3368,7 +3368,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t3]
-------------PhysicalDistribute[DistributionSpecHash]
+------------PhysicalDistribute[DistributionSpecReplicated]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------------PhysicalProject
@@ -3378,8 +3378,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t2]
 
 Hint log:
-Used:  leading(t3 { t1 shuffle t2 } )
-UnUsed: [broadcast]_2
+Used:   leading(t3 broadcast { t1 shuffle t2 } )
+UnUsed:
 SyntaxError:
 
 -- !select97_9 --
@@ -3391,7 +3391,7 @@ PhysicalResultSink
 ----------hashJoin[INNER_JOIN] hashCondition=((t2.c2 = t3.c3)) 
otherCondition=()
 ------------PhysicalProject
 --------------PhysicalOlapScan[t3]
-------------PhysicalDistribute[DistributionSpecHash]
+------------PhysicalDistribute[DistributionSpecReplicated]
 --------------PhysicalProject
 ----------------hashJoin[INNER_JOIN] hashCondition=((t1.c1 = t2.c2)) 
otherCondition=()
 ------------------PhysicalProject
@@ -3401,8 +3401,8 @@ PhysicalResultSink
 ----------------------PhysicalOlapScan[t1]
 
 Hint log:
-Used:  leading(t3 { t2 shuffle t1 } )
-UnUsed: [broadcast]_2
+Used:   leading(t3 broadcast { t2 shuffle t1 } )
+UnUsed:
 SyntaxError:
 
 -- !select100_0 --
diff --git a/regression-test/suites/nereids_hint_tpch_p0/load.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/load.groovy
new file mode 100644
index 00000000000..0f78a93f5fd
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/load.groovy
@@ -0,0 +1,223 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("load") {
+    String database = context.config.getDbNameByFile(context.file)
+    sql "drop database if exists ${database}"
+    sql "create database ${database}"
+    sql "use ${database}"
+    sql """
+    drop table if exists lineitem;
+    """
+    sql """
+    CREATE TABLE lineitem (
+        l_shipdate    DATEV2 NOT NULL,
+        l_orderkey    bigint NOT NULL,
+        l_linenumber  int not null,
+        l_partkey     int NOT NULL,
+        l_suppkey     int not null,
+        l_quantity    decimal(15, 2) NOT NULL,
+        l_extendedprice  decimal(15, 2) NOT NULL,
+        l_discount    decimal(15, 2) NOT NULL,
+        l_tax         decimal(15, 2) NOT NULL,
+        l_returnflag  VARCHAR(1) NOT NULL,
+        l_linestatus  VARCHAR(1) NOT NULL,
+        l_commitdate  DATEV2 NOT NULL,
+        l_receiptdate DATEV2 NOT NULL,
+        l_shipinstruct VARCHAR(25) NOT NULL,
+        l_shipmode     VARCHAR(10) NOT NULL,
+        l_comment      VARCHAR(44) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`l_shipdate`, `l_orderkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`l_orderkey`) BUCKETS 96
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "lineitem_orders"
+    );
+    """
+
+    sql """
+    drop table if exists orders;
+    """
+
+    sql '''
+    CREATE TABLE orders  (
+        o_orderkey       bigint NOT NULL,
+        o_orderdate      DATEV2 NOT NULL,
+        o_custkey        int NOT NULL,
+        o_orderstatus    VARCHAR(1) NOT NULL,
+        o_totalprice     decimal(15, 2) NOT NULL,
+        o_orderpriority  VARCHAR(15) NOT NULL,
+        o_clerk          VARCHAR(15) NOT NULL,
+        o_shippriority   int NOT NULL,
+        o_comment        VARCHAR(79) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`o_orderkey`, `o_orderdate`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`o_orderkey`) BUCKETS 96
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "lineitem_orders"
+    ); '''
+
+    sql '''
+    drop table if exists partsupp;
+    '''
+
+    sql '''
+    CREATE TABLE partsupp (
+        ps_partkey          int NOT NULL,
+        ps_suppkey     int NOT NULL,
+        ps_availqty    int NOT NULL,
+        ps_supplycost  decimal(15, 2)  NOT NULL,
+        ps_comment     VARCHAR(199) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`ps_partkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`ps_partkey`) BUCKETS 24
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "part_partsupp"
+    );
+    '''
+
+    sql '''
+    drop table if exists part;
+    '''
+
+    sql '''
+    CREATE TABLE part (
+        p_partkey          int NOT NULL,
+        p_name        VARCHAR(55) NOT NULL,
+        p_mfgr        VARCHAR(25) NOT NULL,
+        p_brand       VARCHAR(10) NOT NULL,
+        p_type        VARCHAR(25) NOT NULL,
+        p_size        int NOT NULL,
+        p_container   VARCHAR(10) NOT NULL,
+        p_retailprice decimal(15, 2) NOT NULL,
+        p_comment     VARCHAR(23) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`p_partkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 24
+    PROPERTIES (
+        "replication_num" = "1",
+        "colocate_with" = "part_partsupp"
+    );
+    '''
+
+    sql '''
+    drop table if exists customer;
+    '''
+
+    sql '''
+    CREATE TABLE customer (
+        c_custkey     int NOT NULL,
+        c_name        VARCHAR(25) NOT NULL,
+        c_address     VARCHAR(40) NOT NULL,
+        c_nationkey   int NOT NULL,
+        c_phone       VARCHAR(15) NOT NULL,
+        c_acctbal     decimal(15, 2)   NOT NULL,
+        c_mktsegment  VARCHAR(10) NOT NULL,
+        c_comment     VARCHAR(117) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`c_custkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 24
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+
+    sql '''
+    drop table if exists supplier
+    '''
+    
+    sql '''
+    CREATE TABLE supplier (
+        s_suppkey       int NOT NULL,
+        s_name        VARCHAR(25) NOT NULL,
+        s_address     VARCHAR(40) NOT NULL,
+        s_nationkey   int NOT NULL,
+        s_phone       VARCHAR(15) NOT NULL,
+        s_acctbal     decimal(15, 2) NOT NULL,
+        s_comment     VARCHAR(101) NOT NULL
+    )ENGINE=OLAP
+    DUPLICATE KEY(`s_suppkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 12
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+
+    sql '''
+    drop table if exists nation;
+    '''
+
+    sql '''
+    CREATE TABLE `nation` (
+    `n_nationkey` int(11) NOT NULL,
+    `n_name`      varchar(25) NOT NULL,
+    `n_regionkey` int(11) NOT NULL,
+    `n_comment`   varchar(152) NULL
+    ) ENGINE=OLAP
+    DUPLICATE KEY(`N_NATIONKEY`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`N_NATIONKEY`) BUCKETS 1
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+    
+    sql '''
+    drop table if exists region;
+    '''
+    
+    sql '''
+    CREATE TABLE region  (
+        r_regionkey      int NOT NULL,
+        r_name       VARCHAR(25) NOT NULL,
+        r_comment    VARCHAR(152)
+    )ENGINE=OLAP
+    DUPLICATE KEY(`r_regionkey`)
+    COMMENT "OLAP"
+    DISTRIBUTED BY HASH(`r_regionkey`) BUCKETS 1
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    '''
+    
+    sql '''
+    drop view if exists revenue0;
+    '''
+    
+    sql '''
+    create view revenue0 (supplier_no, total_revenue) as
+    select
+        l_suppkey,
+        sum(l_extendedprice * (1 - l_discount))
+    from
+        lineitem
+    where
+        l_shipdate >= date '1996-01-01'
+        and l_shipdate < date '1996-01-01' + interval '3' month
+    group by
+        l_suppkey;
+    '''
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q10.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q10.groovy
new file mode 100644
index 00000000000..d553139c1c0
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q10.groovy
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q10") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+
+
+
+    
+sql 'set be_number_for_test=3'
+
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading(lineitem shuffle {{customer shuffle orders} broadcast nation}) 
*/
+        c_custkey,
+        c_name,
+        sum(l_extendedprice * (1 - l_discount)) as revenue,
+        c_acctbal,
+        n_name,
+        c_address,
+        c_phone,
+        c_comment
+    from
+        customer,
+        orders,
+        lineitem,
+        nation
+    where
+        c_custkey = o_custkey
+        and l_orderkey = o_orderkey
+        and o_orderdate >= date '1993-10-01'
+        and o_orderdate < date '1993-10-01' + interval '3' month
+        and l_returnflag = 'R'
+        and c_nationkey = n_nationkey
+    group by
+        c_custkey,
+        c_name,
+        c_acctbal,
+        c_phone,
+        n_name,
+        c_address,
+        c_comment
+    order by
+        revenue desc
+    limit 20;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q11.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q11.groovy
new file mode 100644
index 00000000000..feae344ee97
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q11.groovy
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q11") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set exec_mem_limit=21G'
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set be_number_for_test=3'
+    sql "set runtime_filter_type=8"
+    sql 'set enable_runtime_filter_prune=false'
+
+
+
+    qt_select """
+    explain shape plan
+    select  
+    /*+ leading(partsupp {supplier nation}) */
+        ps_partkey,
+        sum(ps_supplycost * ps_availqty) as value
+    from
+        partsupp,
+        supplier,
+        nation
+    where
+        ps_suppkey = s_suppkey
+        and s_nationkey = n_nationkey
+        and n_name = 'GERMANY'
+    group by
+        ps_partkey having
+            sum(ps_supplycost * ps_availqty) > (
+                select
+                /*+ leading(partsupp {supplier nation}) */
+                    sum(ps_supplycost * ps_availqty) * 0.000002
+                from
+                    partsupp,
+                    supplier,
+                    nation
+                where
+                    ps_suppkey = s_suppkey
+                    and s_nationkey = n_nationkey
+                    and n_name = 'GERMANY'
+            )
+    order by
+        value desc;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q12.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q12.groovy
new file mode 100644
index 00000000000..c9d1f3a9096
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q12.groovy
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q12") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+
+
+
+    
+sql 'set be_number_for_test=3'
+    
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading(orders lineitem) */
+        l_shipmode,
+        sum(case
+            when o_orderpriority = '1-URGENT'
+                or o_orderpriority = '2-HIGH'
+                then 1
+            else 0
+        end) as high_line_count,
+        sum(case
+            when o_orderpriority <> '1-URGENT'
+                and o_orderpriority <> '2-HIGH'
+                then 1
+            else 0
+        end) as low_line_count
+    from
+        orders,
+        lineitem
+    where
+        o_orderkey = l_orderkey
+        and l_shipmode in ('MAIL', 'SHIP')
+        and l_commitdate < l_receiptdate
+        and l_shipdate < l_commitdate
+        and l_receiptdate >= date '1994-01-01'
+        and l_receiptdate < date '1994-01-01' + interval '1' year
+    group by
+        l_shipmode
+    order by
+        l_shipmode;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q13.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q13.groovy
new file mode 100644
index 00000000000..d1633cff50d
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q13.groovy
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q13") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+    
+sql 'set be_number_for_test=3'
+   
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading(orders shuffle customer) */
+        c_count,
+        count(*) as custdist
+    from
+        (
+            select
+                c_custkey,
+                count(o_orderkey) as c_count
+            from
+                customer left outer join orders on
+                    c_custkey = o_custkey
+                    and o_comment not like '%special%requests%'
+            group by
+                c_custkey
+        ) as c_orders
+    group by
+        c_count
+    order by
+        custdist desc,
+        c_count desc;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q14.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q14.groovy
new file mode 100644
index 00000000000..fd8c7f12b04
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q14.groovy
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q14") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+    
+sql 'set be_number_for_test=3'
+    
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading(part lineitem) */
+        100.00 * sum(case
+            when p_type like 'PROMO%'
+                then l_extendedprice * (1 - l_discount)
+            else 0
+        end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
+    from
+        lineitem,
+        part
+    where
+        l_partkey = p_partkey
+        and l_shipdate >= date '1995-09-01'
+        and l_shipdate < date '1995-09-01' + interval '1' month;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q15.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q15.groovy
new file mode 100644
index 00000000000..23cf07c71e1
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q15.groovy
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q15") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+
+    sql 'set exec_mem_limit=21G'
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set parallel_pipeline_task_num=8'
+
+
+
+    sql 'set be_number_for_test=3'
+    sql "set runtime_filter_type=8"
+    sql 'set enable_runtime_filter_prune=false'
+
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading(revenue0 supplier) */
+        s_suppkey,
+        s_name,
+        s_address,
+        s_phone,
+        total_revenue
+    from
+        supplier,
+        revenue0
+    where
+        s_suppkey = supplier_no
+        and total_revenue = (
+            select
+                max(total_revenue)
+            from
+                revenue0
+        )
+    order by
+        s_suppkey;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q17.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q17.groovy
new file mode 100644
index 00000000000..849f120910a
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q17.groovy
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q17") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+
+    sql 'set exec_mem_limit=21G'
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set parallel_pipeline_task_num=8'
+
+
+
+    sql 'set be_number_for_test=3'
+    sql "set runtime_filter_type=8"
+    sql 'set enable_runtime_filter_prune=false'
+
+    qt_select """
+    explain shape plan
+    select
+    /*+ leading(lineitem broadcast part) */ 
+        sum(l_extendedprice) / 7.0 as avg_yearly
+    from
+        lineitem,
+        part
+    where
+        p_partkey = l_partkey
+        and p_brand = 'Brand#23'
+        and p_container = 'MED BOX'
+        and l_quantity < (
+            select
+                0.2 * avg(l_quantity)
+            from
+                lineitem
+            where
+                l_partkey = p_partkey
+        );
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q19.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q19.groovy
new file mode 100644
index 00000000000..db30a98aff9
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q19.groovy
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q19") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+
+
+
+    
+sql 'set be_number_for_test=3'
+    
+    qt_select """
+    explain shape plan
+        select
+        /*+ leading(lineitem broadcast part) */
+                sum(l_extendedprice* (1 - l_discount)) as revenue
+        from
+                lineitem,
+                part
+        where
+        (
+                p_partkey = l_partkey
+                and p_brand = 'Brand#12'
+                and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')
+                and l_quantity >= 1 and l_quantity <= 1 + 10
+                and p_size between 1 and 5
+                and l_shipmode in ('AIR', 'AIR REG')
+                and l_shipinstruct = 'DELIVER IN PERSON'
+        )
+        or
+        (
+                p_partkey = l_partkey
+                and p_brand = 'Brand#23'
+                and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED 
PACK')
+                and l_quantity >= 10 and l_quantity <= 10 + 10
+                and p_size between 1 and 10
+                and l_shipmode in ('AIR', 'AIR REG')
+                and l_shipinstruct = 'DELIVER IN PERSON'
+        )
+        or
+        (
+                p_partkey = l_partkey
+                and p_brand = 'Brand#34'
+                and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')
+                and l_quantity >= 20 and l_quantity <= 20 + 10
+                and p_size between 1 and 15
+                and l_shipmode in ('AIR', 'AIR REG')
+                and l_shipinstruct = 'DELIVER IN PERSON'
+        );
+    
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q3.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q3.groovy
new file mode 100644
index 00000000000..d6219050707
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q3.groovy
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q3") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    // db = "tpch"
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set runtime_filter_mode=OFF'
+
+
+    
+
+        
+sql 'set be_number_for_test=3'
+
+
+    qt_select """
+    explain shape plan
+    select  
+    /*+ leading(lineitem {orders shuffle customer}) */
+        l_orderkey,
+        sum(l_extendedprice * (1 - l_discount)) as revenue,
+        o_orderdate,
+        o_shippriority
+    from
+        customer,
+        orders,
+        lineitem
+    where
+        c_mktsegment = 'BUILDING'
+        and c_custkey = o_custkey
+        and l_orderkey = o_orderkey
+        and o_orderdate < date '1995-03-15'
+        and l_shipdate > date '1995-03-15'
+    group by
+        l_orderkey,
+        o_orderdate,
+        o_shippriority
+    order by
+        revenue desc,
+        o_orderdate
+    limit 10;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q4.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q4.groovy
new file mode 100644
index 00000000000..fbe312ef45b
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q4.groovy
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q4") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set runtime_filter_mode=OFF'
+
+
+    
+        
+sql 'set be_number_for_test=3'
+
+
+    qt_select """
+    explain shape plan
+    select  
+    /*+ leading(lineitem orders) */
+        o_orderpriority,
+        count(*) as order_count
+    from
+        orders
+    where
+        o_orderdate >= date '1993-07-01'
+        and o_orderdate < date '1993-07-01' + interval '3' month
+        and exists (
+            select
+                *
+            from
+                lineitem
+            where
+                l_orderkey = o_orderkey
+                and l_commitdate < l_receiptdate
+        )
+    group by
+        o_orderpriority
+    order by
+        o_orderpriority;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q5.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q5.groovy
new file mode 100644
index 00000000000..f70de90b0e1
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q5.groovy
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q5") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set parallel_pipeline_task_num=8'        
+sql 'set be_number_for_test=3'
+
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading(lineitem orders broadcast {supplier broadcast {nation 
broadcast region}} shuffle customer) */
+        n_name,
+        sum(l_extendedprice * (1 - l_discount)) as revenue
+    from
+        customer,
+        orders,
+        lineitem,
+        supplier,
+        nation,
+        region
+    where
+        c_custkey = o_custkey
+        and l_orderkey = o_orderkey
+        and l_suppkey = s_suppkey
+        and c_nationkey = s_nationkey
+        and s_nationkey = n_nationkey
+        and n_regionkey = r_regionkey
+        and r_name = 'ASIA'
+        and o_orderdate >= date '1994-01-01'
+        and o_orderdate < date '1994-01-01' + interval '1' year
+    group by
+        n_name
+    order by
+        revenue desc;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q7.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q7.groovy
new file mode 100644
index 00000000000..502b23873bf
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q7.groovy
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q7") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set parallel_pipeline_task_num=8'  
+sql 'set be_number_for_test=3'
+
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading( lineitem broadcast {supplier broadcast n1} {orders shuffle 
{customer broadcast n2}}) */
+        supp_nation,
+        cust_nation,
+        l_year,
+        sum(volume) as revenue
+    from
+        (
+            select
+                n1.n_name as supp_nation,
+                n2.n_name as cust_nation,
+                extract(year from l_shipdate) as l_year,
+                l_extendedprice * (1 - l_discount) as volume
+            from
+                supplier,
+                lineitem,
+                orders,
+                customer,
+                nation n1,
+                nation n2
+            where
+                s_suppkey = l_suppkey
+                and o_orderkey = l_orderkey
+                and c_custkey = o_custkey
+                and s_nationkey = n1.n_nationkey
+                and c_nationkey = n2.n_nationkey
+                and (
+                    (n1.n_name = 'FRANCE' and n2.n_name = 'GERMANY')
+                    or (n1.n_name = 'GERMANY' and n2.n_name = 'FRANCE')
+                )
+                and l_shipdate between date '1995-01-01' and date '1996-12-31'
+        ) as shipping
+    group by
+        supp_nation,
+        cust_nation,
+        l_year
+    order by
+        supp_nation,
+        cust_nation,
+        l_year;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q8.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q8.groovy
new file mode 100644
index 00000000000..a0a8dc0c35d
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q8.groovy
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q8") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+
+    sql 'set exec_mem_limit=21G'
+    sql 'SET enable_pipeline_engine = true'
+    sql 'set parallel_pipeline_task_num=8'
+
+
+
+    sql 'set be_number_for_test=3'
+    sql "set runtime_filter_type=8"
+    sql 'set enable_runtime_filter_prune=false'
+
+    qt_select """
+    explain shape plan
+    select 
+    /*+ leading( supplier { orders {lineitem broadcast part}  {customer 
broadcast {n1 broadcast region}}} broadcast n2) */ 
+        o_year,
+        sum(case
+            when nation = 'BRAZIL' then volume
+            else 0
+        end) / sum(volume) as mkt_share
+    from
+        (
+            select
+                extract(year from o_orderdate) as o_year,
+                l_extendedprice * (1 - l_discount) as volume,
+                n2.n_name as nation
+            from
+                part,
+                supplier,
+                lineitem,
+                orders,
+                customer,
+                nation n1,
+                nation n2,
+                region
+            where
+                p_partkey = l_partkey
+                and s_suppkey = l_suppkey
+                and l_orderkey = o_orderkey
+                and o_custkey = c_custkey
+                and c_nationkey = n1.n_nationkey
+                and n1.n_regionkey = r_regionkey
+                and r_name = 'AMERICA'
+                and s_nationkey = n2.n_nationkey
+                and o_orderdate between date '1995-01-01' and date '1996-12-31'
+                and p_type = 'ECONOMY ANODIZED STEEL'
+        ) as all_nations
+    group by
+        o_year
+    order by
+        o_year;
+    """
+}
diff --git a/regression-test/suites/nereids_hint_tpch_p0/shape/q9.groovy 
b/regression-test/suites/nereids_hint_tpch_p0/shape/q9.groovy
new file mode 100644
index 00000000000..2cb21f62ced
--- /dev/null
+++ b/regression-test/suites/nereids_hint_tpch_p0/shape/q9.groovy
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+suite("q9") {
+    String db = context.config.getDbNameByFile(new File(context.file.parent))
+    sql "use ${db}"
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+    sql 'set runtime_filter_mode=OFF'
+    sql 'set parallel_pipeline_task_num=8'
+    sql 'set exec_mem_limit=21G' 
+    sql 'SET enable_pipeline_engine = true'
+
+sql 'set be_number_for_test=3'
+
+    qt_select """
+    explain shape plan
+    select 
+        nation,
+        o_year,
+        sum(amount) as sum_profit
+    from
+        (
+            select
+               /*+ leading(orders shuffle {lineitem shuffle part} shuffle 
{supplier broadcast nation} shuffle partsupp) */
+                n_name as nation,
+                extract(year from o_orderdate) as o_year,
+                l_extendedprice * (1 - l_discount) - ps_supplycost * 
l_quantity as amount
+            from
+                part,
+                supplier,
+                lineitem,
+                partsupp,
+                orders,
+                nation
+            where
+                s_suppkey = l_suppkey
+                and ps_suppkey = l_suppkey
+                and ps_partkey = l_partkey
+                and p_partkey = l_partkey
+                and o_orderkey = l_orderkey
+                and s_nationkey = n_nationkey
+                and p_name like '%green%'
+        ) as profit
+    group by
+        nation,
+        o_year
+    order by
+        nation,
+        o_year desc;
+    """
+}


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

Reply via email to