== Physical Plan ==
* CometColumnarToRow (47)
+- CometTakeOrderedAndProject (46)
   +- CometProject (45)
      +- CometBroadcastHashJoin (44)
         :- CometProject (42)
         :  +- CometBroadcastHashJoin (41)
         :     :- CometProject (36)
         :     :  +- CometSortMergeJoin (35)
         :     :     :- CometSort (19)
         :     :     :  +- CometColumnarExchange (18)
         :     :     :     +- * Project (17)
         :     :     :        +- * Filter (16)
         :     :     :           +- Window (15)
         :     :     :              +- WindowGroupLimit (14)
         :     :     :                 +- * CometColumnarToRow (13)
         :     :     :                    +- CometSort (12)
         :     :     :                       +- CometColumnarExchange (11)
         :     :     :                          +- WindowGroupLimit (10)
         :     :     :                             +- * CometColumnarToRow (9)
         :     :     :                                +- CometSort (8)
         :     :     :                                   +- CometFilter (7)
         :     :     :                                      +- CometHashAggregate (6)
         :     :     :                                         +- CometExchange (5)
         :     :     :                                            +- CometHashAggregate (4)
         :     :     :                                               +- CometProject (3)
         :     :     :                                                  +- CometFilter (2)
         :     :     :                                                     +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales (1)
         :     :     +- CometSort (34)
         :     :        +- CometColumnarExchange (33)
         :     :           +- * Project (32)
         :     :              +- * Filter (31)
         :     :                 +- Window (30)
         :     :                    +- WindowGroupLimit (29)
         :     :                       +- * CometColumnarToRow (28)
         :     :                          +- CometSort (27)
         :     :                             +- CometColumnarExchange (26)
         :     :                                +- WindowGroupLimit (25)
         :     :                                   +- * CometColumnarToRow (24)
         :     :                                      +- CometSort (23)
         :     :                                         +- CometFilter (22)
         :     :                                            +- CometHashAggregate (21)
         :     :                                               +- ReusedExchange (20)
         :     +- CometBroadcastExchange (40)
         :        +- CometProject (39)
         :           +- CometFilter (38)
         :              +- CometScan [native_iceberg_compat] parquet spark_catalog.default.item (37)
         +- ReusedExchange (43)


(1) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales
Output [4]: [ss_item_sk#1, ss_store_sk#2, ss_net_profit#3, ss_sold_date_sk#4]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_store_sk), EqualTo(ss_store_sk,4)]
ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_net_profit:decimal(7,2)>

(2) CometFilter
Input [4]: [ss_item_sk#1, ss_store_sk#2, ss_net_profit#3, ss_sold_date_sk#4]
Condition : (isnotnull(ss_store_sk#2) AND (ss_store_sk#2 = 4))

(3) CometProject
Input [4]: [ss_item_sk#1, ss_store_sk#2, ss_net_profit#3, ss_sold_date_sk#4]
Arguments: [ss_item_sk#1, ss_net_profit#3], [ss_item_sk#1, ss_net_profit#3]

(4) CometHashAggregate
Input [2]: [ss_item_sk#1, ss_net_profit#3]
Keys [1]: [ss_item_sk#1]
Functions [1]: [partial_avg(UnscaledValue(ss_net_profit#3))]

(5) CometExchange
Input [3]: [ss_item_sk#1, sum#5, count#6]
Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(6) CometHashAggregate
Input [3]: [ss_item_sk#1, sum#5, count#6]
Keys [1]: [ss_item_sk#1]
Functions [1]: [avg(UnscaledValue(ss_net_profit#3))]

(7) CometFilter
Input [2]: [item_sk#7, rank_col#8]
Condition : (isnotnull(rank_col#8) AND (cast(rank_col#8 as decimal(13,7)) > (0.9 * Subquery scalar-subquery#9, [id=#10])))

(8) CometSort
Input [2]: [item_sk#7, rank_col#8]
Arguments: [item_sk#7, rank_col#8], [rank_col#8 ASC NULLS FIRST]

(9) CometColumnarToRow [codegen id : 1]
Input [2]: [item_sk#7, rank_col#8]

(10) WindowGroupLimit
Input [2]: [item_sk#7, rank_col#8]
Arguments: [rank_col#8 ASC NULLS FIRST], rank(rank_col#8), 10, Partial

(11) CometColumnarExchange
Input [2]: [item_sk#7, rank_col#8]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=2]

(12) CometSort
Input [2]: [item_sk#7, rank_col#8]
Arguments: [item_sk#7, rank_col#8], [rank_col#8 ASC NULLS FIRST]

(13) CometColumnarToRow [codegen id : 2]
Input [2]: [item_sk#7, rank_col#8]

(14) WindowGroupLimit
Input [2]: [item_sk#7, rank_col#8]
Arguments: [rank_col#8 ASC NULLS FIRST], rank(rank_col#8), 10, Final

(15) Window
Input [2]: [item_sk#7, rank_col#8]
Arguments: [rank(rank_col#8) windowspecdefinition(rank_col#8 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#11], [rank_col#8 ASC NULLS FIRST]

(16) Filter [codegen id : 3]
Input [3]: [item_sk#7, rank_col#8, rnk#11]
Condition : ((rnk#11 < 11) AND isnotnull(item_sk#7))

(17) Project [codegen id : 3]
Output [2]: [item_sk#7, rnk#11]
Input [3]: [item_sk#7, rank_col#8, rnk#11]

(18) CometColumnarExchange
Input [2]: [item_sk#7, rnk#11]
Arguments: hashpartitioning(rnk#11, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=3]

(19) CometSort
Input [2]: [item_sk#7, rnk#11]
Arguments: [item_sk#7, rnk#11], [rnk#11 ASC NULLS FIRST]

(20) ReusedExchange [Reuses operator id: 5]
Output [3]: [ss_item_sk#12, sum#13, count#14]

(21) CometHashAggregate
Input [3]: [ss_item_sk#12, sum#13, count#14]
Keys [1]: [ss_item_sk#12]
Functions [1]: [avg(UnscaledValue(ss_net_profit#15))]

(22) CometFilter
Input [2]: [item_sk#16, rank_col#17]
Condition : (isnotnull(rank_col#17) AND (cast(rank_col#17 as decimal(13,7)) > (0.9 * ReusedSubquery Subquery scalar-subquery#9, [id=#10])))

(23) CometSort
Input [2]: [item_sk#16, rank_col#17]
Arguments: [item_sk#16, rank_col#17], [rank_col#17 DESC NULLS LAST]

(24) CometColumnarToRow [codegen id : 4]
Input [2]: [item_sk#16, rank_col#17]

(25) WindowGroupLimit
Input [2]: [item_sk#16, rank_col#17]
Arguments: [rank_col#17 DESC NULLS LAST], rank(rank_col#17), 10, Partial

(26) CometColumnarExchange
Input [2]: [item_sk#16, rank_col#17]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=4]

(27) CometSort
Input [2]: [item_sk#16, rank_col#17]
Arguments: [item_sk#16, rank_col#17], [rank_col#17 DESC NULLS LAST]

(28) CometColumnarToRow [codegen id : 5]
Input [2]: [item_sk#16, rank_col#17]

(29) WindowGroupLimit
Input [2]: [item_sk#16, rank_col#17]
Arguments: [rank_col#17 DESC NULLS LAST], rank(rank_col#17), 10, Final

(30) Window
Input [2]: [item_sk#16, rank_col#17]
Arguments: [rank(rank_col#17) windowspecdefinition(rank_col#17 DESC NULLS LAST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rnk#18], [rank_col#17 DESC NULLS LAST]

(31) Filter [codegen id : 6]
Input [3]: [item_sk#16, rank_col#17, rnk#18]
Condition : ((rnk#18 < 11) AND isnotnull(item_sk#16))

(32) Project [codegen id : 6]
Output [2]: [item_sk#16, rnk#18]
Input [3]: [item_sk#16, rank_col#17, rnk#18]

(33) CometColumnarExchange
Input [2]: [item_sk#16, rnk#18]
Arguments: hashpartitioning(rnk#18, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=5]

(34) CometSort
Input [2]: [item_sk#16, rnk#18]
Arguments: [item_sk#16, rnk#18], [rnk#18 ASC NULLS FIRST]

(35) CometSortMergeJoin
Left output [2]: [item_sk#7, rnk#11]
Right output [2]: [item_sk#16, rnk#18]
Arguments: [rnk#11], [rnk#18], Inner

(36) CometProject
Input [4]: [item_sk#7, rnk#11, item_sk#16, rnk#18]
Arguments: [item_sk#7, rnk#11, item_sk#16], [item_sk#7, rnk#11, item_sk#16]

(37) CometScan [native_iceberg_compat] parquet spark_catalog.default.item
Output [2]: [i_item_sk#19, i_product_name#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_product_name:string>

(38) CometFilter
Input [2]: [i_item_sk#19, i_product_name#20]
Condition : isnotnull(i_item_sk#19)

(39) CometProject
Input [2]: [i_item_sk#19, i_product_name#20]
Arguments: [i_item_sk#19, i_product_name#21], [i_item_sk#19, static_invoke(CharVarcharCodegenUtils.readSidePadding(i_product_name#20, 50)) AS i_product_name#21]

(40) CometBroadcastExchange
Input [2]: [i_item_sk#19, i_product_name#21]
Arguments: [i_item_sk#19, i_product_name#21]

(41) CometBroadcastHashJoin
Left output [3]: [item_sk#7, rnk#11, item_sk#16]
Right output [2]: [i_item_sk#19, i_product_name#21]
Arguments: [item_sk#7], [i_item_sk#19], Inner, BuildRight

(42) CometProject
Input [5]: [item_sk#7, rnk#11, item_sk#16, i_item_sk#19, i_product_name#21]
Arguments: [rnk#11, item_sk#16, i_product_name#21], [rnk#11, item_sk#16, i_product_name#21]

(43) ReusedExchange [Reuses operator id: 40]
Output [2]: [i_item_sk#22, i_product_name#23]

(44) CometBroadcastHashJoin
Left output [3]: [rnk#11, item_sk#16, i_product_name#21]
Right output [2]: [i_item_sk#22, i_product_name#23]
Arguments: [item_sk#16], [i_item_sk#22], Inner, BuildRight

(45) CometProject
Input [5]: [rnk#11, item_sk#16, i_product_name#21, i_item_sk#22, i_product_name#23]
Arguments: [rnk#11, best_performing#24, worst_performing#25], [rnk#11, i_product_name#21 AS best_performing#24, i_product_name#23 AS worst_performing#25]

(46) CometTakeOrderedAndProject
Input [3]: [rnk#11, best_performing#24, worst_performing#25]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[rnk#11 ASC NULLS FIRST], output=[rnk#11,best_performing#24,worst_performing#25]), [rnk#11, best_performing#24, worst_performing#25], 100, 0, [rnk#11 ASC NULLS FIRST], [rnk#11, best_performing#24, worst_performing#25]

(47) CometColumnarToRow [codegen id : 7]
Input [3]: [rnk#11, best_performing#24, worst_performing#25]

===== Subqueries =====

Subquery:1 Hosting operator id = 7 Hosting Expression = Subquery scalar-subquery#9, [id=#10]
* CometColumnarToRow (54)
+- CometHashAggregate (53)
   +- CometExchange (52)
      +- CometHashAggregate (51)
         +- CometProject (50)
            +- CometFilter (49)
               +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales (48)


(48) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales
Output [4]: [ss_addr_sk#26, ss_store_sk#27, ss_net_profit#28, ss_sold_date_sk#29]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_store_sk), EqualTo(ss_store_sk,4), IsNull(ss_addr_sk)]
ReadSchema: struct<ss_addr_sk:int,ss_store_sk:int,ss_net_profit:decimal(7,2)>

(49) CometFilter
Input [4]: [ss_addr_sk#26, ss_store_sk#27, ss_net_profit#28, ss_sold_date_sk#29]
Condition : ((isnotnull(ss_store_sk#27) AND (ss_store_sk#27 = 4)) AND isnull(ss_addr_sk#26))

(50) CometProject
Input [4]: [ss_addr_sk#26, ss_store_sk#27, ss_net_profit#28, ss_sold_date_sk#29]
Arguments: [ss_store_sk#27, ss_net_profit#28], [ss_store_sk#27, ss_net_profit#28]

(51) CometHashAggregate
Input [2]: [ss_store_sk#27, ss_net_profit#28]
Keys [1]: [ss_store_sk#27]
Functions [1]: [partial_avg(UnscaledValue(ss_net_profit#28))]

(52) CometExchange
Input [3]: [ss_store_sk#27, sum#30, count#31]
Arguments: hashpartitioning(ss_store_sk#27, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=6]

(53) CometHashAggregate
Input [3]: [ss_store_sk#27, sum#30, count#31]
Keys [1]: [ss_store_sk#27]
Functions [1]: [avg(UnscaledValue(ss_net_profit#28))]

(54) CometColumnarToRow [codegen id : 1]
Input [1]: [rank_col#32]

Subquery:2 Hosting operator id = 22 Hosting Expression = ReusedSubquery Subquery scalar-subquery#9, [id=#10]


