sunchao commented on a change in pull request #32875:
URL: https://github.com/apache/spark/pull/32875#discussion_r721537582



##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17.sf100/explain.txt
##########
@@ -1,53 +1,50 @@
 == Physical Plan ==
-TakeOrderedAndProject (49)
-+- * HashAggregate (48)
-   +- Exchange (47)
-      +- * HashAggregate (46)
-         +- * Project (45)
-            +- * SortMergeJoin Inner (44)
-               :- * Sort (35)
-               :  +- Exchange (34)
-               :     +- * Project (33)
-               :        +- * SortMergeJoin Inner (32)
-               :           :- * Sort (23)
-               :           :  +- Exchange (22)
-               :           :     +- * Project (21)
-               :           :        +- * SortMergeJoin Inner (20)
-               :           :           :- * Sort (14)
-               :           :           :  +- Exchange (13)
-               :           :           :     +- * Project (12)
-               :           :           :        +- * BroadcastHashJoin Inner 
BuildRight (11)
-               :           :           :           :- * Project (6)
-               :           :           :           :  +- * BroadcastHashJoin 
Inner BuildRight (5)
-               :           :           :           :     :- * Filter (3)
-               :           :           :           :     :  +- * ColumnarToRow 
(2)
-               :           :           :           :     :     +- Scan parquet 
default.store_sales (1)
-               :           :           :           :     +- ReusedExchange (4)
-               :           :           :           +- BroadcastExchange (10)
-               :           :           :              +- * Filter (9)
-               :           :           :                 +- * ColumnarToRow (8)
-               :           :           :                    +- Scan parquet 
default.store (7)
-               :           :           +- * Sort (19)
-               :           :              +- Exchange (18)
-               :           :                 +- * Filter (17)
-               :           :                    +- * ColumnarToRow (16)
-               :           :                       +- Scan parquet 
default.item (15)
-               :           +- * Sort (31)
-               :              +- Exchange (30)
-               :                 +- * Project (29)
-               :                    +- * BroadcastHashJoin Inner BuildRight 
(28)
-               :                       :- * Filter (26)
-               :                       :  +- * ColumnarToRow (25)
-               :                       :     +- Scan parquet 
default.store_returns (24)
-               :                       +- ReusedExchange (27)
-               +- * Sort (43)
-                  +- Exchange (42)
-                     +- * Project (41)
-                        +- * BroadcastHashJoin Inner BuildRight (40)
-                           :- * Filter (38)
-                           :  +- * ColumnarToRow (37)
-                           :     +- Scan parquet default.catalog_sales (36)
-                           +- ReusedExchange (39)
+TakeOrderedAndProject (46)
++- * HashAggregate (45)
+   +- Exchange (44)
+      +- * HashAggregate (43)
+         +- * Project (42)
+            +- * SortMergeJoin Inner (41)
+               :- * Project (32)
+               :  +- * SortMergeJoin Inner (31)

Review comment:
       comparing to before: `Exchange (22)` is no longer required since join 
keys are:
   left: [ss_customer_sk#2, **ss_item_sk#1**, ss_ticket_number#4]
   right: [sr_customer_sk#18, **sr_item_sk#17**, sr_ticket_number#19]
   
   
   and partitioning are:
   left: (**hashpartitioning(ss_item_sk#1, 5)** or 
hashpartitioning(i_item_sk#13, 5))
   right: **hashpartitioning(sr_item_sk#17, 5)**

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29.sf100/explain.txt
##########
@@ -1,53 +1,50 @@
 == Physical Plan ==
-TakeOrderedAndProject (49)
-+- * HashAggregate (48)
-   +- Exchange (47)
-      +- * HashAggregate (46)
-         +- * Project (45)
-            +- * SortMergeJoin Inner (44)
-               :- * Sort (35)
-               :  +- Exchange (34)
-               :     +- * Project (33)
-               :        +- * SortMergeJoin Inner (32)
-               :           :- * Sort (23)
-               :           :  +- Exchange (22)
-               :           :     +- * Project (21)
-               :           :        +- * SortMergeJoin Inner (20)
-               :           :           :- * Sort (14)
-               :           :           :  +- Exchange (13)
-               :           :           :     +- * Project (12)
-               :           :           :        +- * BroadcastHashJoin Inner 
BuildRight (11)
-               :           :           :           :- * Project (6)
-               :           :           :           :  +- * BroadcastHashJoin 
Inner BuildRight (5)
-               :           :           :           :     :- * Filter (3)
-               :           :           :           :     :  +- * ColumnarToRow 
(2)
-               :           :           :           :     :     +- Scan parquet 
default.store_sales (1)
-               :           :           :           :     +- ReusedExchange (4)
-               :           :           :           +- BroadcastExchange (10)
-               :           :           :              +- * Filter (9)
-               :           :           :                 +- * ColumnarToRow (8)
-               :           :           :                    +- Scan parquet 
default.store (7)
-               :           :           +- * Sort (19)
-               :           :              +- Exchange (18)
-               :           :                 +- * Filter (17)
-               :           :                    +- * ColumnarToRow (16)
-               :           :                       +- Scan parquet 
default.item (15)
-               :           +- * Sort (31)
-               :              +- Exchange (30)
-               :                 +- * Project (29)
-               :                    +- * BroadcastHashJoin Inner BuildRight 
(28)
-               :                       :- * Filter (26)
-               :                       :  +- * ColumnarToRow (25)
-               :                       :     +- Scan parquet 
default.store_returns (24)
-               :                       +- ReusedExchange (27)
-               +- * Sort (43)
-                  +- Exchange (42)
-                     +- * Project (41)
-                        +- * BroadcastHashJoin Inner BuildRight (40)
-                           :- * Filter (38)
-                           :  +- * ColumnarToRow (37)
-                           :     +- Scan parquet default.catalog_sales (36)
-                           +- ReusedExchange (39)
+TakeOrderedAndProject (46)
++- * HashAggregate (45)
+   +- Exchange (44)
+      +- * HashAggregate (43)
+         +- * Project (42)
+            +- * SortMergeJoin Inner (41)

Review comment:
       similar to before q17 & q25

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72.sf100/explain.txt
##########
@@ -1,74 +1,72 @@
 == Physical Plan ==
-TakeOrderedAndProject (70)
-+- * HashAggregate (69)
-   +- Exchange (68)
-      +- * HashAggregate (67)
-         +- * Project (66)
-            +- * SortMergeJoin LeftOuter (65)
-               :- * Sort (58)
-               :  +- Exchange (57)
-               :     +- * Project (56)
-               :        +- * BroadcastHashJoin LeftOuter BuildRight (55)
-               :           :- * Project (50)
-               :           :  +- * SortMergeJoin Inner (49)
-               :           :     :- * Sort (37)
-               :           :     :  +- Exchange (36)
-               :           :     :     +- * Project (35)
-               :           :     :        +- * BroadcastHashJoin Inner 
BuildRight (34)
-               :           :     :           :- * Project (32)
-               :           :     :           :  +- * SortMergeJoin Inner (31)
-               :           :     :           :     :- * Sort (25)
-               :           :     :           :     :  +- Exchange (24)
-               :           :     :           :     :     +- * Project (23)
-               :           :     :           :     :        +- * 
BroadcastHashJoin Inner BuildRight (22)
-               :           :     :           :     :           :- * Project 
(17)
-               :           :     :           :     :           :  +- * 
BroadcastHashJoin Inner BuildRight (16)
-               :           :     :           :     :           :     :- * 
Project (10)
-               :           :     :           :     :           :     :  +- * 
BroadcastHashJoin Inner BuildRight (9)
-               :           :     :           :     :           :     :     :- 
* Filter (3)
-               :           :     :           :     :           :     :     :  
+- * ColumnarToRow (2)
-               :           :     :           :     :           :     :     :   
  +- Scan parquet default.catalog_sales (1)
-               :           :     :           :     :           :     :     +- 
BroadcastExchange (8)
-               :           :     :           :     :           :     :        
+- * Project (7)
-               :           :     :           :     :           :     :         
  +- * Filter (6)
-               :           :     :           :     :           :     :         
     +- * ColumnarToRow (5)
-               :           :     :           :     :           :     :         
        +- Scan parquet default.household_demographics (4)
-               :           :     :           :     :           :     +- 
BroadcastExchange (15)
-               :           :     :           :     :           :        +- * 
Project (14)
-               :           :     :           :     :           :           +- 
* Filter (13)
-               :           :     :           :     :           :              
+- * ColumnarToRow (12)
-               :           :     :           :     :           :               
  +- Scan parquet default.customer_demographics (11)
-               :           :     :           :     :           +- 
BroadcastExchange (21)
-               :           :     :           :     :              +- * Filter 
(20)
-               :           :     :           :     :                 +- * 
ColumnarToRow (19)
-               :           :     :           :     :                    +- 
Scan parquet default.date_dim (18)
-               :           :     :           :     +- * Sort (30)
-               :           :     :           :        +- Exchange (29)
-               :           :     :           :           +- * Filter (28)
-               :           :     :           :              +- * ColumnarToRow 
(27)
-               :           :     :           :                 +- Scan parquet 
default.item (26)
-               :           :     :           +- ReusedExchange (33)
-               :           :     +- * Sort (48)
-               :           :        +- Exchange (47)
-               :           :           +- * Project (46)
-               :           :              +- * BroadcastHashJoin Inner 
BuildRight (45)
-               :           :                 :- * Filter (40)
-               :           :                 :  +- * ColumnarToRow (39)
-               :           :                 :     +- Scan parquet 
default.inventory (38)
-               :           :                 +- BroadcastExchange (44)
-               :           :                    +- * Filter (43)
-               :           :                       +- * ColumnarToRow (42)
-               :           :                          +- Scan parquet 
default.warehouse (41)
-               :           +- BroadcastExchange (54)
-               :              +- * Filter (53)
-               :                 +- * ColumnarToRow (52)
-               :                    +- Scan parquet default.promotion (51)
-               +- * Sort (64)
-                  +- Exchange (63)
-                     +- * Project (62)
-                        +- * Filter (61)
-                           +- * ColumnarToRow (60)
-                              +- Scan parquet default.catalog_returns (59)
+TakeOrderedAndProject (68)
++- * HashAggregate (67)
+   +- Exchange (66)
+      +- * HashAggregate (65)
+         +- * Project (64)
+            +- * SortMergeJoin LeftOuter (63)
+               :- * Sort (56)
+               :  +- * Project (55)
+               :     +- * BroadcastHashJoin LeftOuter BuildRight (54)
+               :        :- * Project (49)
+               :        :  +- * SortMergeJoin Inner (48)

Review comment:
       `Exchange (36)` is no longer required.
   
   join keys:
   left: [**cs_item_sk#4**, d_date_sk#26] 
   right: [**inv_item_sk#27**, inv_date_sk#30]
   
   partitioning:
   left: **hashpartitioning(cs_item_sk#4, 5)** or 
hashpartitioning(i_item_sk#20, 5)
   right: **hashpartitioning(inv_item_sk#27, 5)**

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47.sf100/explain.txt
##########
@@ -1,56 +1,53 @@
 == Physical Plan ==
-TakeOrderedAndProject (52)
-+- * Project (51)
-   +- * SortMergeJoin Inner (50)
-      :- * Project (43)
-      :  +- * SortMergeJoin Inner (42)
-      :     :- * Sort (33)
-      :     :  +- Exchange (32)
-      :     :     +- * Project (31)
-      :     :        +- * Filter (30)
-      :     :           +- Window (29)
-      :     :              +- * Filter (28)
-      :     :                 +- Window (27)
-      :     :                    +- * Sort (26)
-      :     :                       +- Exchange (25)
-      :     :                          +- * HashAggregate (24)
-      :     :                             +- Exchange (23)
-      :     :                                +- * HashAggregate (22)
-      :     :                                   +- * Project (21)
-      :     :                                      +- * SortMergeJoin Inner 
(20)
-      :     :                                         :- * Sort (14)
-      :     :                                         :  +- Exchange (13)
-      :     :                                         :     +- * Project (12)
-      :     :                                         :        +- * 
BroadcastHashJoin Inner BuildRight (11)
-      :     :                                         :           :- * Project 
(6)
-      :     :                                         :           :  +- * 
BroadcastHashJoin Inner BuildRight (5)
-      :     :                                         :           :     :- * 
Filter (3)
-      :     :                                         :           :     :  +- 
* ColumnarToRow (2)
-      :     :                                         :           :     :     
+- Scan parquet default.store_sales (1)
-      :     :                                         :           :     +- 
ReusedExchange (4)
-      :     :                                         :           +- 
BroadcastExchange (10)
-      :     :                                         :              +- * 
Filter (9)
-      :     :                                         :                 +- * 
ColumnarToRow (8)
-      :     :                                         :                    +- 
Scan parquet default.store (7)
-      :     :                                         +- * Sort (19)
-      :     :                                            +- Exchange (18)
-      :     :                                               +- * Filter (17)
-      :     :                                                  +- * 
ColumnarToRow (16)
-      :     :                                                     +- Scan 
parquet default.item (15)
-      :     +- * Sort (41)
-      :        +- Exchange (40)
-      :           +- * Project (39)
-      :              +- Window (38)
-      :                 +- * Sort (37)
-      :                    +- Exchange (36)
-      :                       +- * HashAggregate (35)
-      :                          +- ReusedExchange (34)
-      +- * Sort (49)
-         +- Exchange (48)
-            +- * Project (47)
-               +- Window (46)
-                  +- * Sort (45)
-                     +- ReusedExchange (44)
+TakeOrderedAndProject (49)
++- * Project (48)
+   +- * SortMergeJoin Inner (47)

Review comment:
       `Exchange (48)` is no longer required since:
   
   join keys:
   left: [i_category#16, i_brand#15, s_store_name#10, s_company_name#11, rn#25]
   right: [i_category#38, i_brand#39, s_store_name#40, s_company_name#41, 
(rn#44 - 1)]
   
   partitioning:
   left: (hashpartitioning(i_category#16, i_brand#15, s_store_name#10, 
s_company_name#11, 5) or hashpartitioning(i_category#27, i_brand#28, 
s_store_name#29, s_company_name#30, 5))
   right (through `ReusedExchange (42)` and then `Exchange (35)`): 
hashpartitioning(i_category#27, i_brand#28, s_store_name#29, s_company_name#30, 
5)

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57.sf100/explain.txt
##########
@@ -1,56 +1,53 @@
 == Physical Plan ==
-TakeOrderedAndProject (52)
-+- * Project (51)
-   +- * SortMergeJoin Inner (50)
-      :- * Project (43)
-      :  +- * SortMergeJoin Inner (42)
-      :     :- * Sort (33)
-      :     :  +- Exchange (32)
-      :     :     +- * Project (31)
-      :     :        +- * Filter (30)
-      :     :           +- Window (29)
-      :     :              +- * Filter (28)
-      :     :                 +- Window (27)
-      :     :                    +- * Sort (26)
-      :     :                       +- Exchange (25)
-      :     :                          +- * HashAggregate (24)
-      :     :                             +- Exchange (23)
-      :     :                                +- * HashAggregate (22)
-      :     :                                   +- * Project (21)
-      :     :                                      +- * SortMergeJoin Inner 
(20)
-      :     :                                         :- * Sort (14)
-      :     :                                         :  +- Exchange (13)
-      :     :                                         :     +- * Project (12)
-      :     :                                         :        +- * 
BroadcastHashJoin Inner BuildRight (11)
-      :     :                                         :           :- * Project 
(6)
-      :     :                                         :           :  +- * 
BroadcastHashJoin Inner BuildRight (5)
-      :     :                                         :           :     :- * 
Filter (3)
-      :     :                                         :           :     :  +- 
* ColumnarToRow (2)
-      :     :                                         :           :     :     
+- Scan parquet default.catalog_sales (1)
-      :     :                                         :           :     +- 
ReusedExchange (4)
-      :     :                                         :           +- 
BroadcastExchange (10)
-      :     :                                         :              +- * 
Filter (9)
-      :     :                                         :                 +- * 
ColumnarToRow (8)
-      :     :                                         :                    +- 
Scan parquet default.call_center (7)
-      :     :                                         +- * Sort (19)
-      :     :                                            +- Exchange (18)
-      :     :                                               +- * Filter (17)
-      :     :                                                  +- * 
ColumnarToRow (16)
-      :     :                                                     +- Scan 
parquet default.item (15)
-      :     +- * Sort (41)
-      :        +- Exchange (40)
-      :           +- * Project (39)
-      :              +- Window (38)
-      :                 +- * Sort (37)
-      :                    +- Exchange (36)
-      :                       +- * HashAggregate (35)
-      :                          +- ReusedExchange (34)
-      +- * Sort (49)
-         +- Exchange (48)
-            +- * Project (47)
-               +- Window (46)
-                  +- * Sort (45)
-                     +- ReusedExchange (44)
+TakeOrderedAndProject (49)
++- * Project (48)
+   +- * SortMergeJoin Inner (47)

Review comment:
       Similar to Q47

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25.sf100/explain.txt
##########
@@ -1,53 +1,50 @@
 == Physical Plan ==
-TakeOrderedAndProject (49)
-+- * HashAggregate (48)
-   +- Exchange (47)
-      +- * HashAggregate (46)
-         +- * Project (45)
-            +- * SortMergeJoin Inner (44)
-               :- * Sort (35)
-               :  +- Exchange (34)
-               :     +- * Project (33)
-               :        +- * SortMergeJoin Inner (32)
-               :           :- * Sort (23)
-               :           :  +- Exchange (22)
-               :           :     +- * Project (21)
-               :           :        +- * SortMergeJoin Inner (20)
-               :           :           :- * Sort (14)
-               :           :           :  +- Exchange (13)
-               :           :           :     +- * Project (12)
-               :           :           :        +- * BroadcastHashJoin Inner 
BuildRight (11)
-               :           :           :           :- * Project (6)
-               :           :           :           :  +- * BroadcastHashJoin 
Inner BuildRight (5)
-               :           :           :           :     :- * Filter (3)
-               :           :           :           :     :  +- * ColumnarToRow 
(2)
-               :           :           :           :     :     +- Scan parquet 
default.store_sales (1)
-               :           :           :           :     +- ReusedExchange (4)
-               :           :           :           +- BroadcastExchange (10)
-               :           :           :              +- * Filter (9)
-               :           :           :                 +- * ColumnarToRow (8)
-               :           :           :                    +- Scan parquet 
default.store (7)
-               :           :           +- * Sort (19)
-               :           :              +- Exchange (18)
-               :           :                 +- * Filter (17)
-               :           :                    +- * ColumnarToRow (16)
-               :           :                       +- Scan parquet 
default.item (15)
-               :           +- * Sort (31)
-               :              +- Exchange (30)
-               :                 +- * Project (29)
-               :                    +- * BroadcastHashJoin Inner BuildRight 
(28)
-               :                       :- * Filter (26)
-               :                       :  +- * ColumnarToRow (25)
-               :                       :     +- Scan parquet 
default.store_returns (24)
-               :                       +- ReusedExchange (27)
-               +- * Sort (43)
-                  +- Exchange (42)
-                     +- * Project (41)
-                        +- * BroadcastHashJoin Inner BuildRight (40)
-                           :- * Filter (38)
-                           :  +- * ColumnarToRow (37)
-                           :     +- Scan parquet default.catalog_sales (36)
-                           +- ReusedExchange (39)
+TakeOrderedAndProject (46)
++- * HashAggregate (45)
+   +- Exchange (44)
+      +- * HashAggregate (43)
+         +- * Project (42)
+            +- * SortMergeJoin Inner (41)
+               :- * Project (32)
+               :  +- * SortMergeJoin Inner (31)

Review comment:
       comparing to before: `Exchange (22)` is no longer required since join 
keys are:
   left: [ss_customer_sk#2, **ss_item_sk#1**, ss_ticket_number#4]
   right: [sr_customer_sk#19, **sr_item_sk#18**, sr_ticket_number#20]
   
   and partitioning are:
   left: (**hashpartitioning(ss_item_sk#1, 5)** or 
hashpartitioning(i_item_sk#13, 5))
   right: **hashpartitioning(sr_item_sk#17, 5)**
   

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q29.sf100/explain.txt
##########
@@ -1,53 +1,50 @@
 == Physical Plan ==
-TakeOrderedAndProject (49)
-+- * HashAggregate (48)
-   +- Exchange (47)
-      +- * HashAggregate (46)
-         +- * Project (45)
-            +- * SortMergeJoin Inner (44)
-               :- * Sort (35)
-               :  +- Exchange (34)
-               :     +- * Project (33)
-               :        +- * SortMergeJoin Inner (32)
-               :           :- * Sort (23)
-               :           :  +- Exchange (22)
-               :           :     +- * Project (21)
-               :           :        +- * SortMergeJoin Inner (20)
-               :           :           :- * Sort (14)
-               :           :           :  +- Exchange (13)
-               :           :           :     +- * Project (12)
-               :           :           :        +- * BroadcastHashJoin Inner 
BuildRight (11)
-               :           :           :           :- * Project (6)
-               :           :           :           :  +- * BroadcastHashJoin 
Inner BuildRight (5)
-               :           :           :           :     :- * Filter (3)
-               :           :           :           :     :  +- * ColumnarToRow 
(2)
-               :           :           :           :     :     +- Scan parquet 
default.store_sales (1)
-               :           :           :           :     +- ReusedExchange (4)
-               :           :           :           +- BroadcastExchange (10)
-               :           :           :              +- * Filter (9)
-               :           :           :                 +- * ColumnarToRow (8)
-               :           :           :                    +- Scan parquet 
default.store (7)
-               :           :           +- * Sort (19)
-               :           :              +- Exchange (18)
-               :           :                 +- * Filter (17)
-               :           :                    +- * ColumnarToRow (16)
-               :           :                       +- Scan parquet 
default.item (15)
-               :           +- * Sort (31)
-               :              +- Exchange (30)
-               :                 +- * Project (29)
-               :                    +- * BroadcastHashJoin Inner BuildRight 
(28)
-               :                       :- * Filter (26)
-               :                       :  +- * ColumnarToRow (25)
-               :                       :     +- Scan parquet 
default.store_returns (24)
-               :                       +- ReusedExchange (27)
-               +- * Sort (43)
-                  +- Exchange (42)
-                     +- * Project (41)
-                        +- * BroadcastHashJoin Inner BuildRight (40)
-                           :- * Filter (38)
-                           :  +- * ColumnarToRow (37)
-                           :     +- Scan parquet default.catalog_sales (36)
-                           +- ReusedExchange (39)
+TakeOrderedAndProject (46)
++- * HashAggregate (45)
+   +- Exchange (44)
+      +- * HashAggregate (43)
+         +- * Project (42)
+            +- * SortMergeJoin Inner (41)
+               :- * Project (32)
+               :  +- * SortMergeJoin Inner (31)

Review comment:
       similar to before q17 & q25

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q25.sf100/explain.txt
##########
@@ -1,53 +1,50 @@
 == Physical Plan ==
-TakeOrderedAndProject (49)
-+- * HashAggregate (48)
-   +- Exchange (47)
-      +- * HashAggregate (46)
-         +- * Project (45)
-            +- * SortMergeJoin Inner (44)
-               :- * Sort (35)
-               :  +- Exchange (34)
-               :     +- * Project (33)
-               :        +- * SortMergeJoin Inner (32)
-               :           :- * Sort (23)
-               :           :  +- Exchange (22)
-               :           :     +- * Project (21)
-               :           :        +- * SortMergeJoin Inner (20)
-               :           :           :- * Sort (14)
-               :           :           :  +- Exchange (13)
-               :           :           :     +- * Project (12)
-               :           :           :        +- * BroadcastHashJoin Inner 
BuildRight (11)
-               :           :           :           :- * Project (6)
-               :           :           :           :  +- * BroadcastHashJoin 
Inner BuildRight (5)
-               :           :           :           :     :- * Filter (3)
-               :           :           :           :     :  +- * ColumnarToRow 
(2)
-               :           :           :           :     :     +- Scan parquet 
default.store_sales (1)
-               :           :           :           :     +- ReusedExchange (4)
-               :           :           :           +- BroadcastExchange (10)
-               :           :           :              +- * Filter (9)
-               :           :           :                 +- * ColumnarToRow (8)
-               :           :           :                    +- Scan parquet 
default.store (7)
-               :           :           +- * Sort (19)
-               :           :              +- Exchange (18)
-               :           :                 +- * Filter (17)
-               :           :                    +- * ColumnarToRow (16)
-               :           :                       +- Scan parquet 
default.item (15)
-               :           +- * Sort (31)
-               :              +- Exchange (30)
-               :                 +- * Project (29)
-               :                    +- * BroadcastHashJoin Inner BuildRight 
(28)
-               :                       :- * Filter (26)
-               :                       :  +- * ColumnarToRow (25)
-               :                       :     +- Scan parquet 
default.store_returns (24)
-               :                       +- ReusedExchange (27)
-               +- * Sort (43)
-                  +- Exchange (42)
-                     +- * Project (41)
-                        +- * BroadcastHashJoin Inner BuildRight (40)
-                           :- * Filter (38)
-                           :  +- * ColumnarToRow (37)
-                           :     +- Scan parquet default.catalog_sales (36)
-                           +- ReusedExchange (39)
+TakeOrderedAndProject (46)
++- * HashAggregate (45)
+   +- Exchange (44)
+      +- * HashAggregate (43)
+         +- * Project (42)
+            +- * SortMergeJoin Inner (41)

Review comment:
       comparing to before: `Exchange (34)` is no longer required since join 
keys are:
   left: [sr_customer_sk#19, **sr_item_sk#18**] 
   right: [2]: [cs_bill_customer_sk#26, **cs_item_sk#27**]
   
   and partitioning are:
   left: (hashpartitioning(ss_item_sk#1, 5) or hashpartitioning(i_item_sk#14, 
5)) or **hashpartitioning(sr_item_sk#18, 5)**
   right: **hashpartitioning(cs_item_sk#27, 5)**

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q51a.sf100/explain.txt
##########
@@ -1,74 +1,72 @@
 == Physical Plan ==
-TakeOrderedAndProject (70)
-+- * Filter (69)
-   +- * HashAggregate (68)
-      +- * HashAggregate (67)
-         +- * Project (66)
-            +- * SortMergeJoin Inner (65)
-               :- Window (60)
-               :  +- * Sort (59)
-               :     +- Exchange (58)
-               :        +- * Project (57)
-               :           +- * Filter (56)
-               :              +- SortMergeJoin FullOuter (55)
-               :                 :- * Sort (27)
-               :                 :  +- Exchange (26)
-               :                 :     +- * HashAggregate (25)
-               :                 :        +- * HashAggregate (24)
-               :                 :           +- * Project (23)
-               :                 :              +- * SortMergeJoin Inner (22)
-               :                 :                 :- * Sort (15)
-               :                 :                 :  +- Exchange (14)
-               :                 :                 :     +- * Project (13)
-               :                 :                 :        +- Window (12)
-               :                 :                 :           +- * Sort (11)
-               :                 :                 :              +- Exchange 
(10)
-               :                 :                 :                 +- * 
HashAggregate (9)
-               :                 :                 :                    +- 
Exchange (8)
-               :                 :                 :                       +- 
* HashAggregate (7)
-               :                 :                 :                          
+- * Project (6)
-               :                 :                 :                           
  +- * BroadcastHashJoin Inner BuildRight (5)
-               :                 :                 :                           
     :- * Filter (3)
-               :                 :                 :                           
     :  +- * ColumnarToRow (2)
-               :                 :                 :                           
     :     +- Scan parquet default.web_sales (1)
-               :                 :                 :                           
     +- ReusedExchange (4)
-               :                 :                 +- * Sort (21)
-               :                 :                    +- Exchange (20)
-               :                 :                       +- * Project (19)
-               :                 :                          +- Window (18)
-               :                 :                             +- * Sort (17)
-               :                 :                                +- 
ReusedExchange (16)
-               :                 +- * Sort (54)
-               :                    +- Exchange (53)
-               :                       +- * HashAggregate (52)
-               :                          +- * HashAggregate (51)
-               :                             +- * Project (50)
-               :                                +- * SortMergeJoin Inner (49)
-               :                                   :- * Sort (42)
-               :                                   :  +- Exchange (41)
-               :                                   :     +- * Project (40)
-               :                                   :        +- Window (39)
-               :                                   :           +- * Sort (38)
-               :                                   :              +- Exchange 
(37)
-               :                                   :                 +- * 
HashAggregate (36)
-               :                                   :                    +- 
Exchange (35)
-               :                                   :                       +- 
* HashAggregate (34)
-               :                                   :                          
+- * Project (33)
-               :                                   :                           
  +- * BroadcastHashJoin Inner BuildRight (32)
-               :                                   :                           
     :- * Filter (30)
-               :                                   :                           
     :  +- * ColumnarToRow (29)
-               :                                   :                           
     :     +- Scan parquet default.store_sales (28)
-               :                                   :                           
     +- ReusedExchange (31)
-               :                                   +- * Sort (48)
-               :                                      +- Exchange (47)
-               :                                         +- * Project (46)
-               :                                            +- Window (45)
-               :                                               +- * Sort (44)
-               :                                                  +- 
ReusedExchange (43)
-               +- * Project (64)
-                  +- Window (63)
-                     +- * Sort (62)
-                        +- ReusedExchange (61)
+TakeOrderedAndProject (68)
++- * Filter (67)
+   +- * HashAggregate (66)
+      +- * HashAggregate (65)
+         +- * Project (64)
+            +- * SortMergeJoin Inner (63)
+               :- Window (58)
+               :  +- * Sort (57)
+               :     +- Exchange (56)
+               :        +- * Project (55)
+               :           +- * Filter (54)
+               :              +- SortMergeJoin FullOuter (53)

Review comment:
       `Exchange (26)` and `Exchange (53)` are no longer required.
   
   join keys:
   left: [item_sk#11, d_date#6]
   right: [item_sk#37, d_date#32]
   
   partitioning:
   left: hashpartitioning(item_sk#11, 5) or hashpartitioning(item_sk#19, 5)
   right: hashpartitioning(item_sk#37, 5) or hashpartitioning(item_sk#45, 5)

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q57.sf100/explain.txt
##########
@@ -1,56 +1,53 @@
 == Physical Plan ==
-TakeOrderedAndProject (52)
-+- * Project (51)
-   +- * SortMergeJoin Inner (50)
-      :- * Project (43)
-      :  +- * SortMergeJoin Inner (42)
-      :     :- * Sort (33)
-      :     :  +- Exchange (32)
-      :     :     +- * Project (31)
-      :     :        +- * Filter (30)
-      :     :           +- Window (29)
-      :     :              +- * Filter (28)
-      :     :                 +- Window (27)
-      :     :                    +- * Sort (26)
-      :     :                       +- Exchange (25)
-      :     :                          +- * HashAggregate (24)
-      :     :                             +- Exchange (23)
-      :     :                                +- * HashAggregate (22)
-      :     :                                   +- * Project (21)
-      :     :                                      +- * SortMergeJoin Inner 
(20)
-      :     :                                         :- * Sort (14)
-      :     :                                         :  +- Exchange (13)
-      :     :                                         :     +- * Project (12)
-      :     :                                         :        +- * 
BroadcastHashJoin Inner BuildRight (11)
-      :     :                                         :           :- * Project 
(6)
-      :     :                                         :           :  +- * 
BroadcastHashJoin Inner BuildRight (5)
-      :     :                                         :           :     :- * 
Filter (3)
-      :     :                                         :           :     :  +- 
* ColumnarToRow (2)
-      :     :                                         :           :     :     
+- Scan parquet default.catalog_sales (1)
-      :     :                                         :           :     +- 
ReusedExchange (4)
-      :     :                                         :           +- 
BroadcastExchange (10)
-      :     :                                         :              +- * 
Filter (9)
-      :     :                                         :                 +- * 
ColumnarToRow (8)
-      :     :                                         :                    +- 
Scan parquet default.call_center (7)
-      :     :                                         +- * Sort (19)
-      :     :                                            +- Exchange (18)
-      :     :                                               +- * Filter (17)
-      :     :                                                  +- * 
ColumnarToRow (16)
-      :     :                                                     +- Scan 
parquet default.item (15)
-      :     +- * Sort (41)
-      :        +- Exchange (40)
-      :           +- * Project (39)
-      :              +- Window (38)
-      :                 +- * Sort (37)
-      :                    +- Exchange (36)
-      :                       +- * HashAggregate (35)
-      :                          +- ReusedExchange (34)
-      +- * Sort (49)
-         +- Exchange (48)
-            +- * Project (47)
-               +- Window (46)
-                  +- * Sort (45)
-                     +- ReusedExchange (44)
+TakeOrderedAndProject (49)
++- * Project (48)
+   +- * SortMergeJoin Inner (47)
+      :- * Project (41)
+      :  +- * SortMergeJoin Inner (40)

Review comment:
       Similar to Q47

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v2_7/q72.sf100/explain.txt
##########
@@ -1,74 +1,72 @@
 == Physical Plan ==
-TakeOrderedAndProject (70)
-+- * HashAggregate (69)
-   +- Exchange (68)
-      +- * HashAggregate (67)
-         +- * Project (66)
-            +- * SortMergeJoin LeftOuter (65)
-               :- * Sort (58)
-               :  +- Exchange (57)
-               :     +- * Project (56)
-               :        +- * BroadcastHashJoin LeftOuter BuildRight (55)
-               :           :- * Project (50)
-               :           :  +- * SortMergeJoin Inner (49)
-               :           :     :- * Sort (37)
-               :           :     :  +- Exchange (36)
-               :           :     :     +- * Project (35)
-               :           :     :        +- * BroadcastHashJoin Inner 
BuildRight (34)
-               :           :     :           :- * Project (32)
-               :           :     :           :  +- * SortMergeJoin Inner (31)
-               :           :     :           :     :- * Sort (25)
-               :           :     :           :     :  +- Exchange (24)
-               :           :     :           :     :     +- * Project (23)
-               :           :     :           :     :        +- * 
BroadcastHashJoin Inner BuildRight (22)
-               :           :     :           :     :           :- * Project 
(17)
-               :           :     :           :     :           :  +- * 
BroadcastHashJoin Inner BuildRight (16)
-               :           :     :           :     :           :     :- * 
Project (10)
-               :           :     :           :     :           :     :  +- * 
BroadcastHashJoin Inner BuildRight (9)
-               :           :     :           :     :           :     :     :- 
* Filter (3)
-               :           :     :           :     :           :     :     :  
+- * ColumnarToRow (2)
-               :           :     :           :     :           :     :     :   
  +- Scan parquet default.catalog_sales (1)
-               :           :     :           :     :           :     :     +- 
BroadcastExchange (8)
-               :           :     :           :     :           :     :        
+- * Project (7)
-               :           :     :           :     :           :     :         
  +- * Filter (6)
-               :           :     :           :     :           :     :         
     +- * ColumnarToRow (5)
-               :           :     :           :     :           :     :         
        +- Scan parquet default.household_demographics (4)
-               :           :     :           :     :           :     +- 
BroadcastExchange (15)
-               :           :     :           :     :           :        +- * 
Project (14)
-               :           :     :           :     :           :           +- 
* Filter (13)
-               :           :     :           :     :           :              
+- * ColumnarToRow (12)
-               :           :     :           :     :           :               
  +- Scan parquet default.customer_demographics (11)
-               :           :     :           :     :           +- 
BroadcastExchange (21)
-               :           :     :           :     :              +- * Filter 
(20)
-               :           :     :           :     :                 +- * 
ColumnarToRow (19)
-               :           :     :           :     :                    +- 
Scan parquet default.date_dim (18)
-               :           :     :           :     +- * Sort (30)
-               :           :     :           :        +- Exchange (29)
-               :           :     :           :           +- * Filter (28)
-               :           :     :           :              +- * ColumnarToRow 
(27)
-               :           :     :           :                 +- Scan parquet 
default.item (26)
-               :           :     :           +- ReusedExchange (33)
-               :           :     +- * Sort (48)
-               :           :        +- Exchange (47)
-               :           :           +- * Project (46)
-               :           :              +- * BroadcastHashJoin Inner 
BuildRight (45)
-               :           :                 :- * Filter (40)
-               :           :                 :  +- * ColumnarToRow (39)
-               :           :                 :     +- Scan parquet 
default.inventory (38)
-               :           :                 +- BroadcastExchange (44)
-               :           :                    +- * Filter (43)
-               :           :                       +- * ColumnarToRow (42)
-               :           :                          +- Scan parquet 
default.warehouse (41)
-               :           +- BroadcastExchange (54)
-               :              +- * Filter (53)
-               :                 +- * ColumnarToRow (52)
-               :                    +- Scan parquet default.promotion (51)
-               +- * Sort (64)
-                  +- Exchange (63)
-                     +- * Project (62)
-                        +- * Filter (61)
-                           +- * ColumnarToRow (60)
-                              +- Scan parquet default.catalog_returns (59)
+TakeOrderedAndProject (68)
++- * HashAggregate (67)
+   +- Exchange (66)
+      +- * HashAggregate (65)
+         +- * Project (64)
+            +- * SortMergeJoin LeftOuter (63)

Review comment:
       `Exchange (57)` is no longer required
   
   join keys:
   left: [**cs_item_sk#4**, cs_order_number#6] 
   right: [**cr_item_sk#37**, cr_order_number#38]
   
   partitioning:
   left: (**hashpartitioning(cs_item_sk#4, 5)** or 
hashpartitioning(i_item_sk#20, 5)) or hashpartitioning(inv_item_sk#27, 5)
   right: **hashpartitioning(cr_item_sk#37, 5)**
   

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q17.sf100/explain.txt
##########
@@ -1,53 +1,50 @@
 == Physical Plan ==
-TakeOrderedAndProject (49)
-+- * HashAggregate (48)
-   +- Exchange (47)
-      +- * HashAggregate (46)
-         +- * Project (45)
-            +- * SortMergeJoin Inner (44)
-               :- * Sort (35)
-               :  +- Exchange (34)
-               :     +- * Project (33)
-               :        +- * SortMergeJoin Inner (32)
-               :           :- * Sort (23)
-               :           :  +- Exchange (22)
-               :           :     +- * Project (21)
-               :           :        +- * SortMergeJoin Inner (20)
-               :           :           :- * Sort (14)
-               :           :           :  +- Exchange (13)
-               :           :           :     +- * Project (12)
-               :           :           :        +- * BroadcastHashJoin Inner 
BuildRight (11)
-               :           :           :           :- * Project (6)
-               :           :           :           :  +- * BroadcastHashJoin 
Inner BuildRight (5)
-               :           :           :           :     :- * Filter (3)
-               :           :           :           :     :  +- * ColumnarToRow 
(2)
-               :           :           :           :     :     +- Scan parquet 
default.store_sales (1)
-               :           :           :           :     +- ReusedExchange (4)
-               :           :           :           +- BroadcastExchange (10)
-               :           :           :              +- * Filter (9)
-               :           :           :                 +- * ColumnarToRow (8)
-               :           :           :                    +- Scan parquet 
default.store (7)
-               :           :           +- * Sort (19)
-               :           :              +- Exchange (18)
-               :           :                 +- * Filter (17)
-               :           :                    +- * ColumnarToRow (16)
-               :           :                       +- Scan parquet 
default.item (15)
-               :           +- * Sort (31)
-               :              +- Exchange (30)
-               :                 +- * Project (29)
-               :                    +- * BroadcastHashJoin Inner BuildRight 
(28)
-               :                       :- * Filter (26)
-               :                       :  +- * ColumnarToRow (25)
-               :                       :     +- Scan parquet 
default.store_returns (24)
-               :                       +- ReusedExchange (27)
-               +- * Sort (43)
-                  +- Exchange (42)
-                     +- * Project (41)
-                        +- * BroadcastHashJoin Inner BuildRight (40)
-                           :- * Filter (38)
-                           :  +- * ColumnarToRow (37)
-                           :     +- Scan parquet default.catalog_sales (36)
-                           +- ReusedExchange (39)
+TakeOrderedAndProject (46)
++- * HashAggregate (45)
+   +- Exchange (44)
+      +- * HashAggregate (43)
+         +- * Project (42)
+            +- * SortMergeJoin Inner (41)

Review comment:
       comparing to before: `Exchange (34)` is no longer required since join 
keys are:
   left: [sr_customer_sk#18, **sr_item_sk#17**]
   right: [2]: [cs_bill_customer_sk#25, **cs_item_sk#26**]
   
   and partitioning are:
   left: ((hashpartitioning(ss_item_sk#1, 5) OR hashpartitioning(i_item_sk#13, 
5)) or **hashpartitioning(sr_item_sk#17, 5)**
   right: **hashpartitioning(cs_item_sk#26, 5)**

##########
File path: 
sql/core/src/test/resources/tpcds-plan-stability/approved-plans-v1_4/q47.sf100/explain.txt
##########
@@ -1,56 +1,53 @@
 == Physical Plan ==
-TakeOrderedAndProject (52)
-+- * Project (51)
-   +- * SortMergeJoin Inner (50)
-      :- * Project (43)
-      :  +- * SortMergeJoin Inner (42)
-      :     :- * Sort (33)
-      :     :  +- Exchange (32)
-      :     :     +- * Project (31)
-      :     :        +- * Filter (30)
-      :     :           +- Window (29)
-      :     :              +- * Filter (28)
-      :     :                 +- Window (27)
-      :     :                    +- * Sort (26)
-      :     :                       +- Exchange (25)
-      :     :                          +- * HashAggregate (24)
-      :     :                             +- Exchange (23)
-      :     :                                +- * HashAggregate (22)
-      :     :                                   +- * Project (21)
-      :     :                                      +- * SortMergeJoin Inner 
(20)
-      :     :                                         :- * Sort (14)
-      :     :                                         :  +- Exchange (13)
-      :     :                                         :     +- * Project (12)
-      :     :                                         :        +- * 
BroadcastHashJoin Inner BuildRight (11)
-      :     :                                         :           :- * Project 
(6)
-      :     :                                         :           :  +- * 
BroadcastHashJoin Inner BuildRight (5)
-      :     :                                         :           :     :- * 
Filter (3)
-      :     :                                         :           :     :  +- 
* ColumnarToRow (2)
-      :     :                                         :           :     :     
+- Scan parquet default.store_sales (1)
-      :     :                                         :           :     +- 
ReusedExchange (4)
-      :     :                                         :           +- 
BroadcastExchange (10)
-      :     :                                         :              +- * 
Filter (9)
-      :     :                                         :                 +- * 
ColumnarToRow (8)
-      :     :                                         :                    +- 
Scan parquet default.store (7)
-      :     :                                         +- * Sort (19)
-      :     :                                            +- Exchange (18)
-      :     :                                               +- * Filter (17)
-      :     :                                                  +- * 
ColumnarToRow (16)
-      :     :                                                     +- Scan 
parquet default.item (15)
-      :     +- * Sort (41)
-      :        +- Exchange (40)
-      :           +- * Project (39)
-      :              +- Window (38)
-      :                 +- * Sort (37)
-      :                    +- Exchange (36)
-      :                       +- * HashAggregate (35)
-      :                          +- ReusedExchange (34)
-      +- * Sort (49)
-         +- Exchange (48)
-            +- * Project (47)
-               +- Window (46)
-                  +- * Sort (45)
-                     +- ReusedExchange (44)
+TakeOrderedAndProject (49)
++- * Project (48)
+   +- * SortMergeJoin Inner (47)
+      :- * Project (41)
+      :  +- * SortMergeJoin Inner (40)

Review comment:
       `Exchange (32)` and `Exchange(40)` are no longer required since:
   
   join keys:
   left: [**i_category#16, i_brand#15, s_store_name#10, s_company_name#11**, 
rn#25]
   right: [**i_category#27, i_brand#28, s_store_name#29, s_company_name#30**, 
(rn#36 + 1)]
   
   partitioning:
   left (through `Exchange (25)`): **hashpartitioning(i_category#16, 
i_brand#15, s_store_name#10, s_company_name#11, 5)**
   right (through `Exchange (35)`): **hashpartitioning(i_category#27, 
i_brand#28, s_store_name#29, s_company_name#30, 5)**




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



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

Reply via email to