== Physical Plan ==
* CometColumnarToRow (126)
+- CometTakeOrderedAndProject (125)
   +- CometProject (124)
      +- CometSortMergeJoin (123)
         :- CometSort (67)
         :  +- CometColumnarExchange (66)
         :     +- * Filter (65)
         :        +- * HashAggregate (64)
         :           +- * CometColumnarToRow (63)
         :              +- CometExchange (62)
         :                 +- CometHashAggregate (61)
         :                    +- CometHashAggregate (60)
         :                       +- CometExchange (59)
         :                          +- CometHashAggregate (58)
         :                             +- CometUnion (57)
         :                                :- CometProject (22)
         :                                :  +- CometSortMergeJoin (21)
         :                                :     :- CometSort (15)
         :                                :     :  +- CometExchange (14)
         :                                :     :     +- CometProject (13)
         :                                :     :        +- CometBroadcastHashJoin (12)
         :                                :     :           :- CometProject (8)
         :                                :     :           :  +- CometBroadcastHashJoin (7)
         :                                :     :           :     :- CometFilter (2)
         :                                :     :           :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_sales (1)
         :                                :     :           :     +- CometBroadcastExchange (6)
         :                                :     :           :        +- CometProject (5)
         :                                :     :           :           +- CometFilter (4)
         :                                :     :           :              +- CometScan [native_iceberg_compat] parquet spark_catalog.default.item (3)
         :                                :     :           +- CometBroadcastExchange (11)
         :                                :     :              +- CometFilter (10)
         :                                :     :                 +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (9)
         :                                :     +- CometSort (20)
         :                                :        +- CometExchange (19)
         :                                :           +- CometProject (18)
         :                                :              +- CometFilter (17)
         :                                :                 +- CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_returns (16)
         :                                :- CometProject (39)
         :                                :  +- CometSortMergeJoin (38)
         :                                :     :- CometSort (32)
         :                                :     :  +- CometExchange (31)
         :                                :     :     +- CometProject (30)
         :                                :     :        +- CometBroadcastHashJoin (29)
         :                                :     :           :- CometProject (27)
         :                                :     :           :  +- CometBroadcastHashJoin (26)
         :                                :     :           :     :- CometFilter (24)
         :                                :     :           :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales (23)
         :                                :     :           :     +- ReusedExchange (25)
         :                                :     :           +- ReusedExchange (28)
         :                                :     +- CometSort (37)
         :                                :        +- CometExchange (36)
         :                                :           +- CometProject (35)
         :                                :              +- CometFilter (34)
         :                                :                 +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns (33)
         :                                +- CometProject (56)
         :                                   +- CometSortMergeJoin (55)
         :                                      :- CometSort (49)
         :                                      :  +- CometExchange (48)
         :                                      :     +- CometProject (47)
         :                                      :        +- CometBroadcastHashJoin (46)
         :                                      :           :- CometProject (44)
         :                                      :           :  +- CometBroadcastHashJoin (43)
         :                                      :           :     :- CometFilter (41)
         :                                      :           :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales (40)
         :                                      :           :     +- ReusedExchange (42)
         :                                      :           +- ReusedExchange (45)
         :                                      +- CometSort (54)
         :                                         +- CometExchange (53)
         :                                            +- CometProject (52)
         :                                               +- CometFilter (51)
         :                                                  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.web_returns (50)
         +- CometSort (122)
            +- CometColumnarExchange (121)
               +- * Filter (120)
                  +- * HashAggregate (119)
                     +- * CometColumnarToRow (118)
                        +- CometExchange (117)
                           +- CometHashAggregate (116)
                              +- CometHashAggregate (115)
                                 +- CometExchange (114)
                                    +- CometHashAggregate (113)
                                       +- CometUnion (112)
                                          :- CometProject (83)
                                          :  +- CometSortMergeJoin (82)
                                          :     :- CometSort (79)
                                          :     :  +- CometExchange (78)
                                          :     :     +- CometProject (77)
                                          :     :        +- CometBroadcastHashJoin (76)
                                          :     :           :- CometProject (72)
                                          :     :           :  +- CometBroadcastHashJoin (71)
                                          :     :           :     :- CometFilter (69)
                                          :     :           :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_sales (68)
                                          :     :           :     +- ReusedExchange (70)
                                          :     :           +- CometBroadcastExchange (75)
                                          :     :              +- CometFilter (74)
                                          :     :                 +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (73)
                                          :     +- CometSort (81)
                                          :        +- ReusedExchange (80)
                                          :- CometProject (97)
                                          :  +- CometSortMergeJoin (96)
                                          :     :- CometSort (93)
                                          :     :  +- CometExchange (92)
                                          :     :     +- CometProject (91)
                                          :     :        +- CometBroadcastHashJoin (90)
                                          :     :           :- CometProject (88)
                                          :     :           :  +- CometBroadcastHashJoin (87)
                                          :     :           :     :- CometFilter (85)
                                          :     :           :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales (84)
                                          :     :           :     +- ReusedExchange (86)
                                          :     :           +- ReusedExchange (89)
                                          :     +- CometSort (95)
                                          :        +- ReusedExchange (94)
                                          +- CometProject (111)
                                             +- CometSortMergeJoin (110)
                                                :- CometSort (107)
                                                :  +- CometExchange (106)
                                                :     +- CometProject (105)
                                                :        +- CometBroadcastHashJoin (104)
                                                :           :- CometProject (102)
                                                :           :  +- CometBroadcastHashJoin (101)
                                                :           :     :- CometFilter (99)
                                                :           :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales (98)
                                                :           :     +- ReusedExchange (100)
                                                :           +- ReusedExchange (103)
                                                +- CometSort (109)
                                                   +- ReusedExchange (108)


(1) CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_sales
Output [5]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#5), dynamicpruningexpression(cs_sold_date_sk#5 IN dynamicpruning#6)]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int,cs_order_number:int,cs_quantity:int,cs_ext_sales_price:decimal(7,2)>

(2) CometFilter
Input [5]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5]
Condition : isnotnull(cs_item_sk#1)

(3) CometScan [native_iceberg_compat] parquet spark_catalog.default.item
Output [6]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_category#11, i_manufact_id#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_category), IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id), IsNotNull(i_manufact_id)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_class_id:int,i_category_id:int,i_category:string,i_manufact_id:int>

(4) CometFilter
Input [6]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_category#11, i_manufact_id#12]
Condition : ((((((isnotnull(i_category#11) AND (static_invoke(CharVarcharCodegenUtils.readSidePadding(i_category#11, 50)) = Books                                             )) AND isnotnull(i_item_sk#7)) AND isnotnull(i_brand_id#8)) AND isnotnull(i_class_id#9)) AND isnotnull(i_category_id#10)) AND isnotnull(i_manufact_id#12))

(5) CometProject
Input [6]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_category#11, i_manufact_id#12]
Arguments: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12], [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]

(6) CometBroadcastExchange
Input [5]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]
Arguments: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]

(7) CometBroadcastHashJoin
Left output [5]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5]
Right output [5]: [i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]
Arguments: [cs_item_sk#1], [i_item_sk#7], Inner, BuildRight

(8) CometProject
Input [10]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_item_sk#7, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]
Arguments: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12], [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]

(9) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#13, d_year#14]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(10) CometFilter
Input [2]: [d_date_sk#13, d_year#14]
Condition : ((isnotnull(d_year#14) AND (d_year#14 = 2002)) AND isnotnull(d_date_sk#13))

(11) CometBroadcastExchange
Input [2]: [d_date_sk#13, d_year#14]
Arguments: [d_date_sk#13, d_year#14]

(12) CometBroadcastHashJoin
Left output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]
Right output [2]: [d_date_sk#13, d_year#14]
Arguments: [cs_sold_date_sk#5], [d_date_sk#13], Inner, BuildRight

(13) CometProject
Input [11]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, cs_sold_date_sk#5, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_date_sk#13, d_year#14]
Arguments: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14], [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14]

(14) CometExchange
Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14]
Arguments: hashpartitioning(cs_order_number#2, cs_item_sk#1, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(15) CometSort
Input [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14]
Arguments: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14], [cs_order_number#2 ASC NULLS FIRST, cs_item_sk#1 ASC NULLS FIRST]

(16) CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_returns
Output [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/catalog_returns]
PushedFilters: [IsNotNull(cr_order_number), IsNotNull(cr_item_sk)]
ReadSchema: struct<cr_item_sk:int,cr_order_number:int,cr_return_quantity:int,cr_return_amount:decimal(7,2)>

(17) CometFilter
Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19]
Condition : (isnotnull(cr_order_number#16) AND isnotnull(cr_item_sk#15))

(18) CometProject
Input [5]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18, cr_returned_date_sk#19]
Arguments: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18], [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18]

(19) CometExchange
Input [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18]
Arguments: hashpartitioning(cr_order_number#16, cr_item_sk#15, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(20) CometSort
Input [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18]
Arguments: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18], [cr_order_number#16 ASC NULLS FIRST, cr_item_sk#15 ASC NULLS FIRST]

(21) CometSortMergeJoin
Left output [9]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14]
Right output [4]: [cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18]
Arguments: [cs_order_number#2, cs_item_sk#1], [cr_order_number#16, cr_item_sk#15], LeftOuter

(22) CometProject
Input [13]: [cs_item_sk#1, cs_order_number#2, cs_quantity#3, cs_ext_sales_price#4, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, d_year#14, cr_item_sk#15, cr_order_number#16, cr_return_quantity#17, cr_return_amount#18]
Arguments: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21], [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, (cs_quantity#3 - coalesce(cr_return_quantity#17, 0)) AS sales_cnt#20, (cs_ext_sales_price#4 - coalesce(cr_return_amount#18, 0.00)) AS sales_amt#21]

(23) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales
Output [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#26), dynamicpruningexpression(ss_sold_date_sk#26 IN dynamicpruning#27)]
PushedFilters: [IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_ticket_number:int,ss_quantity:int,ss_ext_sales_price:decimal(7,2)>

(24) CometFilter
Input [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26]
Condition : isnotnull(ss_item_sk#22)

(25) ReusedExchange [Reuses operator id: 6]
Output [5]: [i_item_sk#28, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32]

(26) CometBroadcastHashJoin
Left output [5]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26]
Right output [5]: [i_item_sk#28, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32]
Arguments: [ss_item_sk#22], [i_item_sk#28], Inner, BuildRight

(27) CometProject
Input [10]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_item_sk#28, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32]
Arguments: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32], [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32]

(28) ReusedExchange [Reuses operator id: 11]
Output [2]: [d_date_sk#33, d_year#34]

(29) CometBroadcastHashJoin
Left output [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32]
Right output [2]: [d_date_sk#33, d_year#34]
Arguments: [ss_sold_date_sk#26], [d_date_sk#33], Inner, BuildRight

(30) CometProject
Input [11]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, ss_sold_date_sk#26, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_date_sk#33, d_year#34]
Arguments: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_year#34], [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_year#34]

(31) CometExchange
Input [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_year#34]
Arguments: hashpartitioning(ss_ticket_number#23, ss_item_sk#22, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=3]

(32) CometSort
Input [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_year#34]
Arguments: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_year#34], [ss_ticket_number#23 ASC NULLS FIRST, ss_item_sk#22 ASC NULLS FIRST]

(33) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns
Output [5]: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38, sr_returned_date_sk#39]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_returns]
PushedFilters: [IsNotNull(sr_ticket_number), IsNotNull(sr_item_sk)]
ReadSchema: struct<sr_item_sk:int,sr_ticket_number:int,sr_return_quantity:int,sr_return_amt:decimal(7,2)>

(34) CometFilter
Input [5]: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38, sr_returned_date_sk#39]
Condition : (isnotnull(sr_ticket_number#36) AND isnotnull(sr_item_sk#35))

(35) CometProject
Input [5]: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38, sr_returned_date_sk#39]
Arguments: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38], [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38]

(36) CometExchange
Input [4]: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38]
Arguments: hashpartitioning(sr_ticket_number#36, sr_item_sk#35, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=4]

(37) CometSort
Input [4]: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38]
Arguments: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38], [sr_ticket_number#36 ASC NULLS FIRST, sr_item_sk#35 ASC NULLS FIRST]

(38) CometSortMergeJoin
Left output [9]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_year#34]
Right output [4]: [sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38]
Arguments: [ss_ticket_number#23, ss_item_sk#22], [sr_ticket_number#36, sr_item_sk#35], LeftOuter

(39) CometProject
Input [13]: [ss_item_sk#22, ss_ticket_number#23, ss_quantity#24, ss_ext_sales_price#25, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, d_year#34, sr_item_sk#35, sr_ticket_number#36, sr_return_quantity#37, sr_return_amt#38]
Arguments: [d_year#34, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, sales_cnt#40, sales_amt#41], [d_year#34, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, (ss_quantity#24 - coalesce(sr_return_quantity#37, 0)) AS sales_cnt#40, (ss_ext_sales_price#25 - coalesce(sr_return_amt#38, 0.00)) AS sales_amt#41]

(40) CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales
Output [5]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#46), dynamicpruningexpression(ws_sold_date_sk#46 IN dynamicpruning#47)]
PushedFilters: [IsNotNull(ws_item_sk)]
ReadSchema: struct<ws_item_sk:int,ws_order_number:int,ws_quantity:int,ws_ext_sales_price:decimal(7,2)>

(41) CometFilter
Input [5]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46]
Condition : isnotnull(ws_item_sk#42)

(42) ReusedExchange [Reuses operator id: 6]
Output [5]: [i_item_sk#48, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52]

(43) CometBroadcastHashJoin
Left output [5]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46]
Right output [5]: [i_item_sk#48, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52]
Arguments: [ws_item_sk#42], [i_item_sk#48], Inner, BuildRight

(44) CometProject
Input [10]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46, i_item_sk#48, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52]
Arguments: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52], [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52]

(45) ReusedExchange [Reuses operator id: 11]
Output [2]: [d_date_sk#53, d_year#54]

(46) CometBroadcastHashJoin
Left output [9]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52]
Right output [2]: [d_date_sk#53, d_year#54]
Arguments: [ws_sold_date_sk#46], [d_date_sk#53], Inner, BuildRight

(47) CometProject
Input [11]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, ws_sold_date_sk#46, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_date_sk#53, d_year#54]
Arguments: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_year#54], [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_year#54]

(48) CometExchange
Input [9]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_year#54]
Arguments: hashpartitioning(ws_order_number#43, ws_item_sk#42, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=5]

(49) CometSort
Input [9]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_year#54]
Arguments: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_year#54], [ws_order_number#43 ASC NULLS FIRST, ws_item_sk#42 ASC NULLS FIRST]

(50) CometScan [native_iceberg_compat] parquet spark_catalog.default.web_returns
Output [5]: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58, wr_returned_date_sk#59]
Batched: true
Location [not included in comparison]/{warehouse_dir}/web_returns]
PushedFilters: [IsNotNull(wr_order_number), IsNotNull(wr_item_sk)]
ReadSchema: struct<wr_item_sk:int,wr_order_number:int,wr_return_quantity:int,wr_return_amt:decimal(7,2)>

(51) CometFilter
Input [5]: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58, wr_returned_date_sk#59]
Condition : (isnotnull(wr_order_number#56) AND isnotnull(wr_item_sk#55))

(52) CometProject
Input [5]: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58, wr_returned_date_sk#59]
Arguments: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58], [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58]

(53) CometExchange
Input [4]: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58]
Arguments: hashpartitioning(wr_order_number#56, wr_item_sk#55, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=6]

(54) CometSort
Input [4]: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58]
Arguments: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58], [wr_order_number#56 ASC NULLS FIRST, wr_item_sk#55 ASC NULLS FIRST]

(55) CometSortMergeJoin
Left output [9]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_year#54]
Right output [4]: [wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58]
Arguments: [ws_order_number#43, ws_item_sk#42], [wr_order_number#56, wr_item_sk#55], LeftOuter

(56) CometProject
Input [13]: [ws_item_sk#42, ws_order_number#43, ws_quantity#44, ws_ext_sales_price#45, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, d_year#54, wr_item_sk#55, wr_order_number#56, wr_return_quantity#57, wr_return_amt#58]
Arguments: [d_year#54, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, sales_cnt#60, sales_amt#61], [d_year#54, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, (ws_quantity#44 - coalesce(wr_return_quantity#57, 0)) AS sales_cnt#60, (ws_ext_sales_price#45 - coalesce(wr_return_amt#58, 0.00)) AS sales_amt#61]

(57) CometUnion
Child 0 Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21]
Child 1 Input [7]: [d_year#34, i_brand_id#29, i_class_id#30, i_category_id#31, i_manufact_id#32, sales_cnt#40, sales_amt#41]
Child 2 Input [7]: [d_year#54, i_brand_id#49, i_class_id#50, i_category_id#51, i_manufact_id#52, sales_cnt#60, sales_amt#61]

(58) CometHashAggregate
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21]
Keys [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21]
Functions: []

(59) CometExchange
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21]
Arguments: hashpartitioning(d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=7]

(60) CometHashAggregate
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21]
Keys [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21]
Functions: []

(61) CometHashAggregate
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#20, sales_amt#21]
Keys [5]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]
Functions [2]: [partial_sum(sales_cnt#20), partial_sum(UnscaledValue(sales_amt#21))]

(62) CometExchange
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63]
Arguments: hashpartitioning(d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=8]

(63) CometColumnarToRow [codegen id : 1]
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63]

(64) HashAggregate [codegen id : 1]
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum#62, sum#63]
Keys [5]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12]
Functions [2]: [sum(sales_cnt#20), sum(UnscaledValue(sales_amt#21))]
Aggregate Attributes [2]: [sum(sales_cnt#20)#64, sum(UnscaledValue(sales_amt#21))#65]
Results [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sum(sales_cnt#20)#64 AS sales_cnt#66, MakeDecimal(sum(UnscaledValue(sales_amt#21))#65,18,2) AS sales_amt#67]

(65) Filter [codegen id : 1]
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67]
Condition : isnotnull(sales_cnt#66)

(66) CometColumnarExchange
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67]
Arguments: hashpartitioning(i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=9]

(67) CometSort
Input [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67]
Arguments: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67], [i_brand_id#8 ASC NULLS FIRST, i_class_id#9 ASC NULLS FIRST, i_category_id#10 ASC NULLS FIRST, i_manufact_id#12 ASC NULLS FIRST]

(68) CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_sales
Output [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#72), dynamicpruningexpression(cs_sold_date_sk#72 IN dynamicpruning#73)]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int,cs_order_number:int,cs_quantity:int,cs_ext_sales_price:decimal(7,2)>

(69) CometFilter
Input [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72]
Condition : isnotnull(cs_item_sk#68)

(70) ReusedExchange [Reuses operator id: 6]
Output [5]: [i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78]

(71) CometBroadcastHashJoin
Left output [5]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72]
Right output [5]: [i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78]
Arguments: [cs_item_sk#68], [i_item_sk#74], Inner, BuildRight

(72) CometProject
Input [10]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_item_sk#74, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78]
Arguments: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78], [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78]

(73) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#79, d_year#80]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(74) CometFilter
Input [2]: [d_date_sk#79, d_year#80]
Condition : ((isnotnull(d_year#80) AND (d_year#80 = 2001)) AND isnotnull(d_date_sk#79))

(75) CometBroadcastExchange
Input [2]: [d_date_sk#79, d_year#80]
Arguments: [d_date_sk#79, d_year#80]

(76) CometBroadcastHashJoin
Left output [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78]
Right output [2]: [d_date_sk#79, d_year#80]
Arguments: [cs_sold_date_sk#72], [d_date_sk#79], Inner, BuildRight

(77) CometProject
Input [11]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, cs_sold_date_sk#72, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_date_sk#79, d_year#80]
Arguments: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80], [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80]

(78) CometExchange
Input [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80]
Arguments: hashpartitioning(cs_order_number#69, cs_item_sk#68, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=10]

(79) CometSort
Input [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80]
Arguments: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80], [cs_order_number#69 ASC NULLS FIRST, cs_item_sk#68 ASC NULLS FIRST]

(80) ReusedExchange [Reuses operator id: 19]
Output [4]: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84]

(81) CometSort
Input [4]: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84]
Arguments: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84], [cr_order_number#82 ASC NULLS FIRST, cr_item_sk#81 ASC NULLS FIRST]

(82) CometSortMergeJoin
Left output [9]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80]
Right output [4]: [cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84]
Arguments: [cs_order_number#69, cs_item_sk#68], [cr_order_number#82, cr_item_sk#81], LeftOuter

(83) CometProject
Input [13]: [cs_item_sk#68, cs_order_number#69, cs_quantity#70, cs_ext_sales_price#71, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, d_year#80, cr_item_sk#81, cr_order_number#82, cr_return_quantity#83, cr_return_amount#84]
Arguments: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86], [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, (cs_quantity#70 - coalesce(cr_return_quantity#83, 0)) AS sales_cnt#85, (cs_ext_sales_price#71 - coalesce(cr_return_amount#84, 0.00)) AS sales_amt#86]

(84) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales
Output [5]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#91), dynamicpruningexpression(ss_sold_date_sk#91 IN dynamicpruning#92)]
PushedFilters: [IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_ticket_number:int,ss_quantity:int,ss_ext_sales_price:decimal(7,2)>

(85) CometFilter
Input [5]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91]
Condition : isnotnull(ss_item_sk#87)

(86) ReusedExchange [Reuses operator id: 6]
Output [5]: [i_item_sk#93, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97]

(87) CometBroadcastHashJoin
Left output [5]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91]
Right output [5]: [i_item_sk#93, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97]
Arguments: [ss_item_sk#87], [i_item_sk#93], Inner, BuildRight

(88) CometProject
Input [10]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91, i_item_sk#93, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97]
Arguments: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97], [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97]

(89) ReusedExchange [Reuses operator id: 75]
Output [2]: [d_date_sk#98, d_year#99]

(90) CometBroadcastHashJoin
Left output [9]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97]
Right output [2]: [d_date_sk#98, d_year#99]
Arguments: [ss_sold_date_sk#91], [d_date_sk#98], Inner, BuildRight

(91) CometProject
Input [11]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, ss_sold_date_sk#91, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_date_sk#98, d_year#99]
Arguments: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_year#99], [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_year#99]

(92) CometExchange
Input [9]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_year#99]
Arguments: hashpartitioning(ss_ticket_number#88, ss_item_sk#87, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=11]

(93) CometSort
Input [9]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_year#99]
Arguments: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_year#99], [ss_ticket_number#88 ASC NULLS FIRST, ss_item_sk#87 ASC NULLS FIRST]

(94) ReusedExchange [Reuses operator id: 36]
Output [4]: [sr_item_sk#100, sr_ticket_number#101, sr_return_quantity#102, sr_return_amt#103]

(95) CometSort
Input [4]: [sr_item_sk#100, sr_ticket_number#101, sr_return_quantity#102, sr_return_amt#103]
Arguments: [sr_item_sk#100, sr_ticket_number#101, sr_return_quantity#102, sr_return_amt#103], [sr_ticket_number#101 ASC NULLS FIRST, sr_item_sk#100 ASC NULLS FIRST]

(96) CometSortMergeJoin
Left output [9]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_year#99]
Right output [4]: [sr_item_sk#100, sr_ticket_number#101, sr_return_quantity#102, sr_return_amt#103]
Arguments: [ss_ticket_number#88, ss_item_sk#87], [sr_ticket_number#101, sr_item_sk#100], LeftOuter

(97) CometProject
Input [13]: [ss_item_sk#87, ss_ticket_number#88, ss_quantity#89, ss_ext_sales_price#90, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, d_year#99, sr_item_sk#100, sr_ticket_number#101, sr_return_quantity#102, sr_return_amt#103]
Arguments: [d_year#99, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, sales_cnt#104, sales_amt#105], [d_year#99, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, (ss_quantity#89 - coalesce(sr_return_quantity#102, 0)) AS sales_cnt#104, (ss_ext_sales_price#90 - coalesce(sr_return_amt#103, 0.00)) AS sales_amt#105]

(98) CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales
Output [5]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#110), dynamicpruningexpression(ws_sold_date_sk#110 IN dynamicpruning#111)]
PushedFilters: [IsNotNull(ws_item_sk)]
ReadSchema: struct<ws_item_sk:int,ws_order_number:int,ws_quantity:int,ws_ext_sales_price:decimal(7,2)>

(99) CometFilter
Input [5]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110]
Condition : isnotnull(ws_item_sk#106)

(100) ReusedExchange [Reuses operator id: 6]
Output [5]: [i_item_sk#112, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116]

(101) CometBroadcastHashJoin
Left output [5]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110]
Right output [5]: [i_item_sk#112, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116]
Arguments: [ws_item_sk#106], [i_item_sk#112], Inner, BuildRight

(102) CometProject
Input [10]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110, i_item_sk#112, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116]
Arguments: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116], [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116]

(103) ReusedExchange [Reuses operator id: 75]
Output [2]: [d_date_sk#117, d_year#118]

(104) CometBroadcastHashJoin
Left output [9]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116]
Right output [2]: [d_date_sk#117, d_year#118]
Arguments: [ws_sold_date_sk#110], [d_date_sk#117], Inner, BuildRight

(105) CometProject
Input [11]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, ws_sold_date_sk#110, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_date_sk#117, d_year#118]
Arguments: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_year#118], [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_year#118]

(106) CometExchange
Input [9]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_year#118]
Arguments: hashpartitioning(ws_order_number#107, ws_item_sk#106, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=12]

(107) CometSort
Input [9]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_year#118]
Arguments: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_year#118], [ws_order_number#107 ASC NULLS FIRST, ws_item_sk#106 ASC NULLS FIRST]

(108) ReusedExchange [Reuses operator id: 53]
Output [4]: [wr_item_sk#119, wr_order_number#120, wr_return_quantity#121, wr_return_amt#122]

(109) CometSort
Input [4]: [wr_item_sk#119, wr_order_number#120, wr_return_quantity#121, wr_return_amt#122]
Arguments: [wr_item_sk#119, wr_order_number#120, wr_return_quantity#121, wr_return_amt#122], [wr_order_number#120 ASC NULLS FIRST, wr_item_sk#119 ASC NULLS FIRST]

(110) CometSortMergeJoin
Left output [9]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_year#118]
Right output [4]: [wr_item_sk#119, wr_order_number#120, wr_return_quantity#121, wr_return_amt#122]
Arguments: [ws_order_number#107, ws_item_sk#106], [wr_order_number#120, wr_item_sk#119], LeftOuter

(111) CometProject
Input [13]: [ws_item_sk#106, ws_order_number#107, ws_quantity#108, ws_ext_sales_price#109, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, d_year#118, wr_item_sk#119, wr_order_number#120, wr_return_quantity#121, wr_return_amt#122]
Arguments: [d_year#118, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, sales_cnt#123, sales_amt#124], [d_year#118, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, (ws_quantity#108 - coalesce(wr_return_quantity#121, 0)) AS sales_cnt#123, (ws_ext_sales_price#109 - coalesce(wr_return_amt#122, 0.00)) AS sales_amt#124]

(112) CometUnion
Child 0 Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86]
Child 1 Input [7]: [d_year#99, i_brand_id#94, i_class_id#95, i_category_id#96, i_manufact_id#97, sales_cnt#104, sales_amt#105]
Child 2 Input [7]: [d_year#118, i_brand_id#113, i_class_id#114, i_category_id#115, i_manufact_id#116, sales_cnt#123, sales_amt#124]

(113) CometHashAggregate
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86]
Keys [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86]
Functions: []

(114) CometExchange
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86]
Arguments: hashpartitioning(d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=13]

(115) CometHashAggregate
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86]
Keys [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86]
Functions: []

(116) CometHashAggregate
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#85, sales_amt#86]
Keys [5]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78]
Functions [2]: [partial_sum(sales_cnt#85), partial_sum(UnscaledValue(sales_amt#86))]

(117) CometExchange
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#125, sum#126]
Arguments: hashpartitioning(d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=14]

(118) CometColumnarToRow [codegen id : 2]
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#125, sum#126]

(119) HashAggregate [codegen id : 2]
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum#125, sum#126]
Keys [5]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78]
Functions [2]: [sum(sales_cnt#85), sum(UnscaledValue(sales_amt#86))]
Aggregate Attributes [2]: [sum(sales_cnt#85)#64, sum(UnscaledValue(sales_amt#86))#65]
Results [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sum(sales_cnt#85)#64 AS sales_cnt#127, MakeDecimal(sum(UnscaledValue(sales_amt#86))#65,18,2) AS sales_amt#128]

(120) Filter [codegen id : 2]
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#127, sales_amt#128]
Condition : isnotnull(sales_cnt#127)

(121) CometColumnarExchange
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#127, sales_amt#128]
Arguments: hashpartitioning(i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=15]

(122) CometSort
Input [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#127, sales_amt#128]
Arguments: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#127, sales_amt#128], [i_brand_id#75 ASC NULLS FIRST, i_class_id#76 ASC NULLS FIRST, i_category_id#77 ASC NULLS FIRST, i_manufact_id#78 ASC NULLS FIRST]

(123) CometSortMergeJoin
Left output [7]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67]
Right output [7]: [d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#127, sales_amt#128]
Arguments: [i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12], [i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78], Inner, ((cast(sales_cnt#66 as decimal(17,2)) / cast(sales_cnt#127 as decimal(17,2))) < 0.90000000000000000000)

(124) CometProject
Input [14]: [d_year#14, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#66, sales_amt#67, d_year#80, i_brand_id#75, i_class_id#76, i_category_id#77, i_manufact_id#78, sales_cnt#127, sales_amt#128]
Arguments: [prev_year#129, year#130, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#131, curr_yr_cnt#132, sales_cnt_diff#133, sales_amt_diff#134], [d_year#80 AS prev_year#129, d_year#14 AS year#130, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, sales_cnt#127 AS prev_yr_cnt#131, sales_cnt#66 AS curr_yr_cnt#132, (sales_cnt#66 - sales_cnt#127) AS sales_cnt_diff#133, (sales_amt#67 - sales_amt#128) AS sales_amt_diff#134]

(125) CometTakeOrderedAndProject
Input [10]: [prev_year#129, year#130, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#131, curr_yr_cnt#132, sales_cnt_diff#133, sales_amt_diff#134]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[sales_cnt_diff#133 ASC NULLS FIRST,sales_amt_diff#134 ASC NULLS FIRST], output=[prev_year#129,year#130,i_brand_id#8,i_class_id#9,i_category_id#10,i_manufact_id#12,prev_yr_cnt#131,curr_yr_cnt#132,sales_cnt_diff#133,sales_amt_diff#134]), [prev_year#129, year#130, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#131, curr_yr_cnt#132, sales_cnt_diff#133, sales_amt_diff#134], 100, 0, [sales_cnt_diff#133 ASC NULLS FIRST, sales_amt_diff#134 ASC NULLS FIRST], [prev_year#129, year#130, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#131, curr_yr_cnt#132, sales_cnt_diff#133, sales_amt_diff#134]

(126) CometColumnarToRow [codegen id : 3]
Input [10]: [prev_year#129, year#130, i_brand_id#8, i_class_id#9, i_category_id#10, i_manufact_id#12, prev_yr_cnt#131, curr_yr_cnt#132, sales_cnt_diff#133, sales_amt_diff#134]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6
BroadcastExchange (130)
+- * CometColumnarToRow (129)
   +- CometFilter (128)
      +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (127)


(127) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#13, d_year#14]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(128) CometFilter
Input [2]: [d_date_sk#13, d_year#14]
Condition : ((isnotnull(d_year#14) AND (d_year#14 = 2002)) AND isnotnull(d_date_sk#13))

(129) CometColumnarToRow [codegen id : 1]
Input [2]: [d_date_sk#13, d_year#14]

(130) BroadcastExchange
Input [2]: [d_date_sk#13, d_year#14]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=16]

Subquery:2 Hosting operator id = 23 Hosting Expression = ss_sold_date_sk#26 IN dynamicpruning#6

Subquery:3 Hosting operator id = 40 Hosting Expression = ws_sold_date_sk#46 IN dynamicpruning#6

Subquery:4 Hosting operator id = 68 Hosting Expression = cs_sold_date_sk#72 IN dynamicpruning#73
BroadcastExchange (134)
+- * CometColumnarToRow (133)
   +- CometFilter (132)
      +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (131)


(131) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#79, d_year#80]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(132) CometFilter
Input [2]: [d_date_sk#79, d_year#80]
Condition : ((isnotnull(d_year#80) AND (d_year#80 = 2001)) AND isnotnull(d_date_sk#79))

(133) CometColumnarToRow [codegen id : 1]
Input [2]: [d_date_sk#79, d_year#80]

(134) BroadcastExchange
Input [2]: [d_date_sk#79, d_year#80]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=17]

Subquery:5 Hosting operator id = 84 Hosting Expression = ss_sold_date_sk#91 IN dynamicpruning#73

Subquery:6 Hosting operator id = 98 Hosting Expression = ws_sold_date_sk#110 IN dynamicpruning#73


