== Physical Plan ==
* CometColumnarToRow (22)
+- CometTakeOrderedAndProject (21)
   +- CometHashAggregate (20)
      +- CometExchange (19)
         +- CometHashAggregate (18)
            +- CometProject (17)
               +- CometBroadcastHashJoin (16)
                  :- CometProject (11)
                  :  +- CometSortMergeJoin (10)
                  :     :- CometSort (4)
                  :     :  +- CometExchange (3)
                  :     :     +- CometProject (2)
                  :     :        +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales (1)
                  :     +- CometSort (9)
                  :        +- CometExchange (8)
                  :           +- CometProject (7)
                  :              +- CometFilter (6)
                  :                 +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns (5)
                  +- CometBroadcastExchange (15)
                     +- CometProject (14)
                        +- CometFilter (13)
                           +- CometScan [native_iceberg_compat] parquet spark_catalog.default.reason (12)


(1) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales
Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, ss_sold_date_sk#6]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
ReadSchema: struct<ss_item_sk:int,ss_customer_sk:int,ss_ticket_number:int,ss_quantity:int,ss_sales_price:decimal(7,2)>

(2) CometProject
Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, ss_sold_date_sk#6]
Arguments: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5], [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]

(3) CometExchange
Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]
Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#3, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(4) CometSort
Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]
Arguments: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5], [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#3 ASC NULLS FIRST]

(5) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns
Output [5]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10, sr_returned_date_sk#11]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_returns]
PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number), IsNotNull(sr_reason_sk)]
ReadSchema: struct<sr_item_sk:int,sr_reason_sk:int,sr_ticket_number:int,sr_return_quantity:int>

(6) CometFilter
Input [5]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10, sr_returned_date_sk#11]
Condition : ((isnotnull(sr_item_sk#7) AND isnotnull(sr_ticket_number#9)) AND isnotnull(sr_reason_sk#8))

(7) CometProject
Input [5]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10, sr_returned_date_sk#11]
Arguments: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10], [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10]

(8) CometExchange
Input [4]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10]
Arguments: hashpartitioning(sr_item_sk#7, sr_ticket_number#9, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(9) CometSort
Input [4]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10]
Arguments: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10], [sr_item_sk#7 ASC NULLS FIRST, sr_ticket_number#9 ASC NULLS FIRST]

(10) CometSortMergeJoin
Left output [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]
Right output [4]: [sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10]
Arguments: [ss_item_sk#1, ss_ticket_number#3], [sr_item_sk#7, sr_ticket_number#9], Inner

(11) CometProject
Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, sr_item_sk#7, sr_reason_sk#8, sr_ticket_number#9, sr_return_quantity#10]
Arguments: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#8, sr_return_quantity#10], [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#8, sr_return_quantity#10]

(12) CometScan [native_iceberg_compat] parquet spark_catalog.default.reason
Output [2]: [r_reason_sk#12, r_reason_desc#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/reason]
PushedFilters: [IsNotNull(r_reason_sk)]
ReadSchema: struct<r_reason_sk:int,r_reason_desc:string>

(13) CometFilter
Input [2]: [r_reason_sk#12, r_reason_desc#13]
Condition : ((staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, r_reason_desc#13, 100, true, false, true) = reason 28                                                                                           ) AND isnotnull(r_reason_sk#12))

(14) CometProject
Input [2]: [r_reason_sk#12, r_reason_desc#13]
Arguments: [r_reason_sk#12], [r_reason_sk#12]

(15) CometBroadcastExchange
Input [1]: [r_reason_sk#12]
Arguments: [r_reason_sk#12]

(16) CometBroadcastHashJoin
Left output [5]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#8, sr_return_quantity#10]
Right output [1]: [r_reason_sk#12]
Arguments: [sr_reason_sk#8], [r_reason_sk#12], Inner, BuildRight

(17) CometProject
Input [6]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#8, sr_return_quantity#10, r_reason_sk#12]
Arguments: [ss_customer_sk#2, act_sales#14], [ss_customer_sk#2, CASE WHEN isnotnull(sr_return_quantity#10) THEN (cast((ss_quantity#4 - sr_return_quantity#10) as decimal(10,0)) * ss_sales_price#5) ELSE (cast(ss_quantity#4 as decimal(10,0)) * ss_sales_price#5) END AS act_sales#14]

(18) CometHashAggregate
Input [2]: [ss_customer_sk#2, act_sales#14]
Keys [1]: [ss_customer_sk#2]
Functions [1]: [partial_sum(act_sales#14)]

(19) CometExchange
Input [3]: [ss_customer_sk#2, sum#15, isEmpty#16]
Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=3]

(20) CometHashAggregate
Input [3]: [ss_customer_sk#2, sum#15, isEmpty#16]
Keys [1]: [ss_customer_sk#2]
Functions [1]: [sum(act_sales#14)]

(21) CometTakeOrderedAndProject
Input [2]: [ss_customer_sk#2, sumsales#17]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[sumsales#17 ASC NULLS FIRST,ss_customer_sk#2 ASC NULLS FIRST], output=[ss_customer_sk#2,sumsales#17]), [ss_customer_sk#2, sumsales#17], 100, 0, [sumsales#17 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], [ss_customer_sk#2, sumsales#17]

(22) CometColumnarToRow [codegen id : 1]
Input [2]: [ss_customer_sk#2, sumsales#17]

