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


(1) Scan parquet spark_catalog.default.store_sales
Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)]
PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)]
ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_promo_sk:int,ss_ticket_number:int,ss_ext_sales_price:decimal(7,2),ss_net_profit:decimal(7,2)>

(2) ColumnarToRow [codegen id : 1]
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]

(3) Filter [codegen id : 1]
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Condition : ((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3))

(4) CometColumnarExchange
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=1]

(5) CometSort
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Arguments: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7], [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#4 ASC NULLS FIRST]

(6) CometNativeScan parquet spark_catalog.default.store_returns
Output [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_returns]
PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)]
ReadSchema: struct<sr_item_sk:int,sr_ticket_number:int,sr_return_amt:decimal(7,2),sr_net_loss:decimal(7,2)>

(7) CometFilter
Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13]
Condition : (isnotnull(sr_item_sk#9) AND isnotnull(sr_ticket_number#10))

(8) CometProject
Input [5]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12, sr_returned_date_sk#13]
Arguments: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12], [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12]

(9) CometExchange
Input [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12]
Arguments: hashpartitioning(sr_item_sk#9, sr_ticket_number#10, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(10) CometSort
Input [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12]
Arguments: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12], [sr_item_sk#9 ASC NULLS FIRST, sr_ticket_number#10 ASC NULLS FIRST]

(11) CometSortMergeJoin
Left output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Right output [4]: [sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12]
Arguments: [ss_item_sk#1, ss_ticket_number#4], [sr_item_sk#9, sr_ticket_number#10], LeftOuter

(12) CometProject
Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#9, sr_ticket_number#10, sr_return_amt#11, sr_net_loss#12]
Arguments: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12], [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12]

(13) CometNativeScan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#14, d_date#15]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-22), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(14) CometFilter
Input [2]: [d_date_sk#14, d_date#15]
Condition : (((isnotnull(d_date#15) AND (d_date#15 >= 2000-08-23)) AND (d_date#15 <= 2000-09-22)) AND isnotnull(d_date_sk#14))

(15) CometProject
Input [2]: [d_date_sk#14, d_date#15]
Arguments: [d_date_sk#14], [d_date_sk#14]

(16) CometBroadcastExchange
Input [1]: [d_date_sk#14]
Arguments: [d_date_sk#14]

(17) CometBroadcastHashJoin
Left output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12]
Right output [1]: [d_date_sk#14]
Arguments: [ss_sold_date_sk#7], [d_date_sk#14], Inner, BuildRight

(18) CometProject
Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#11, sr_net_loss#12, d_date_sk#14]
Arguments: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12], [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12]

(19) CometNativeScan parquet spark_catalog.default.store
Output [2]: [s_store_sk#16, s_store_id#17]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_store_id:string>

(20) CometFilter
Input [2]: [s_store_sk#16, s_store_id#17]
Condition : isnotnull(s_store_sk#16)

(21) CometProject
Input [2]: [s_store_sk#16, s_store_id#17]
Arguments: [s_store_sk#16, s_store_id#18], [s_store_sk#16, static_invoke(CharVarcharCodegenUtils.readSidePadding(s_store_id#17, 16)) AS s_store_id#18]

(22) CometBroadcastExchange
Input [2]: [s_store_sk#16, s_store_id#18]
Arguments: [s_store_sk#16, s_store_id#18]

(23) CometBroadcastHashJoin
Left output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12]
Right output [2]: [s_store_sk#16, s_store_id#18]
Arguments: [ss_store_sk#2], [s_store_sk#16], Inner, BuildRight

(24) CometProject
Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_sk#16, s_store_id#18]
Arguments: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18], [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18]

(25) CometNativeScan parquet spark_catalog.default.item
Output [2]: [i_item_sk#19, i_current_price#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_current_price:decimal(7,2)>

(26) CometFilter
Input [2]: [i_item_sk#19, i_current_price#20]
Condition : ((isnotnull(i_current_price#20) AND (i_current_price#20 > 50.00)) AND isnotnull(i_item_sk#19))

(27) CometProject
Input [2]: [i_item_sk#19, i_current_price#20]
Arguments: [i_item_sk#19], [i_item_sk#19]

(28) CometBroadcastExchange
Input [1]: [i_item_sk#19]
Arguments: [i_item_sk#19]

(29) CometBroadcastHashJoin
Left output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18]
Right output [1]: [i_item_sk#19]
Arguments: [ss_item_sk#1], [i_item_sk#19], Inner, BuildRight

(30) CometProject
Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18, i_item_sk#19]
Arguments: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18], [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18]

(31) CometNativeScan parquet spark_catalog.default.promotion
Output [2]: [p_promo_sk#21, p_channel_tv#22]
Batched: true
Location [not included in comparison]/{warehouse_dir}/promotion]
PushedFilters: [IsNotNull(p_channel_tv), IsNotNull(p_promo_sk)]
ReadSchema: struct<p_promo_sk:int,p_channel_tv:string>

(32) CometFilter
Input [2]: [p_promo_sk#21, p_channel_tv#22]
Condition : ((isnotnull(p_channel_tv#22) AND (static_invoke(CharVarcharCodegenUtils.readSidePadding(p_channel_tv#22, 1)) = N)) AND isnotnull(p_promo_sk#21))

(33) CometProject
Input [2]: [p_promo_sk#21, p_channel_tv#22]
Arguments: [p_promo_sk#21], [p_promo_sk#21]

(34) CometBroadcastExchange
Input [1]: [p_promo_sk#21]
Arguments: [p_promo_sk#21]

(35) CometBroadcastHashJoin
Left output [6]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18]
Right output [1]: [p_promo_sk#21]
Arguments: [ss_promo_sk#3], [p_promo_sk#21], Inner, BuildRight

(36) CometProject
Input [7]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18, p_promo_sk#21]
Arguments: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18], [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18]

(37) CometHashAggregate
Input [5]: [ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#11, sr_net_loss#12, s_store_id#18]
Keys [1]: [s_store_id#18]
Functions [3]: [partial_sum(UnscaledValue(ss_ext_sales_price#5)), partial_sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00)), partial_sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00)))]

(38) CometExchange
Input [6]: [s_store_id#18, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27]
Arguments: hashpartitioning(s_store_id#18, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=3]

(39) CometHashAggregate
Input [6]: [s_store_id#18, sum#23, sum#24, isEmpty#25, sum#26, isEmpty#27]
Keys [1]: [s_store_id#18]
Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#11 as decimal(12,2)), 0.00)), sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#12 as decimal(12,2)), 0.00)))]

(40) Scan parquet spark_catalog.default.catalog_sales
Output [7]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#34), dynamicpruningexpression(cs_sold_date_sk#34 IN dynamicpruning#8)]
PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)]
ReadSchema: struct<cs_catalog_page_sk:int,cs_item_sk:int,cs_promo_sk:int,cs_order_number:int,cs_ext_sales_price:decimal(7,2),cs_net_profit:decimal(7,2)>

(41) ColumnarToRow [codegen id : 2]
Input [7]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]

(42) Filter [codegen id : 2]
Input [7]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]
Condition : ((isnotnull(cs_catalog_page_sk#28) AND isnotnull(cs_item_sk#29)) AND isnotnull(cs_promo_sk#30))

(43) CometColumnarExchange
Input [7]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]
Arguments: hashpartitioning(cs_item_sk#29, cs_order_number#31, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=4]

(44) CometSort
Input [7]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]
Arguments: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34], [cs_item_sk#29 ASC NULLS FIRST, cs_order_number#31 ASC NULLS FIRST]

(45) CometNativeScan parquet spark_catalog.default.catalog_returns
Output [5]: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38, cr_returned_date_sk#39]
Batched: true
Location [not included in comparison]/{warehouse_dir}/catalog_returns]
PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)]
ReadSchema: struct<cr_item_sk:int,cr_order_number:int,cr_return_amount:decimal(7,2),cr_net_loss:decimal(7,2)>

(46) CometFilter
Input [5]: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38, cr_returned_date_sk#39]
Condition : (isnotnull(cr_item_sk#35) AND isnotnull(cr_order_number#36))

(47) CometProject
Input [5]: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38, cr_returned_date_sk#39]
Arguments: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38], [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38]

(48) CometExchange
Input [4]: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38]
Arguments: hashpartitioning(cr_item_sk#35, cr_order_number#36, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=5]

(49) CometSort
Input [4]: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38]
Arguments: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38], [cr_item_sk#35 ASC NULLS FIRST, cr_order_number#36 ASC NULLS FIRST]

(50) CometSortMergeJoin
Left output [7]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]
Right output [4]: [cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38]
Arguments: [cs_item_sk#29, cs_order_number#31], [cr_item_sk#35, cr_order_number#36], LeftOuter

(51) CometProject
Input [11]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_order_number#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34, cr_item_sk#35, cr_order_number#36, cr_return_amount#37, cr_net_loss#38]
Arguments: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34, cr_return_amount#37, cr_net_loss#38], [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34, cr_return_amount#37, cr_net_loss#38]

(52) ReusedExchange [Reuses operator id: 16]
Output [1]: [d_date_sk#40]

(53) CometBroadcastHashJoin
Left output [8]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34, cr_return_amount#37, cr_net_loss#38]
Right output [1]: [d_date_sk#40]
Arguments: [cs_sold_date_sk#34], [d_date_sk#40], Inner, BuildRight

(54) CometProject
Input [9]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34, cr_return_amount#37, cr_net_loss#38, d_date_sk#40]
Arguments: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38], [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38]

(55) CometNativeScan parquet spark_catalog.default.catalog_page
Output [2]: [cp_catalog_page_sk#41, cp_catalog_page_id#42]
Batched: true
Location [not included in comparison]/{warehouse_dir}/catalog_page]
PushedFilters: [IsNotNull(cp_catalog_page_sk)]
ReadSchema: struct<cp_catalog_page_sk:int,cp_catalog_page_id:string>

(56) CometFilter
Input [2]: [cp_catalog_page_sk#41, cp_catalog_page_id#42]
Condition : isnotnull(cp_catalog_page_sk#41)

(57) CometProject
Input [2]: [cp_catalog_page_sk#41, cp_catalog_page_id#42]
Arguments: [cp_catalog_page_sk#41, cp_catalog_page_id#43], [cp_catalog_page_sk#41, static_invoke(CharVarcharCodegenUtils.readSidePadding(cp_catalog_page_id#42, 16)) AS cp_catalog_page_id#43]

(58) CometBroadcastExchange
Input [2]: [cp_catalog_page_sk#41, cp_catalog_page_id#43]
Arguments: [cp_catalog_page_sk#41, cp_catalog_page_id#43]

(59) CometBroadcastHashJoin
Left output [7]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38]
Right output [2]: [cp_catalog_page_sk#41, cp_catalog_page_id#43]
Arguments: [cs_catalog_page_sk#28], [cp_catalog_page_sk#41], Inner, BuildRight

(60) CometProject
Input [9]: [cs_catalog_page_sk#28, cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_sk#41, cp_catalog_page_id#43]
Arguments: [cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43], [cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43]

(61) ReusedExchange [Reuses operator id: 28]
Output [1]: [i_item_sk#44]

(62) CometBroadcastHashJoin
Left output [7]: [cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43]
Right output [1]: [i_item_sk#44]
Arguments: [cs_item_sk#29], [i_item_sk#44], Inner, BuildRight

(63) CometProject
Input [8]: [cs_item_sk#29, cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43, i_item_sk#44]
Arguments: [cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43], [cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43]

(64) ReusedExchange [Reuses operator id: 34]
Output [1]: [p_promo_sk#45]

(65) CometBroadcastHashJoin
Left output [6]: [cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43]
Right output [1]: [p_promo_sk#45]
Arguments: [cs_promo_sk#30], [p_promo_sk#45], Inner, BuildRight

(66) CometProject
Input [7]: [cs_promo_sk#30, cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43, p_promo_sk#45]
Arguments: [cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43], [cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43]

(67) CometHashAggregate
Input [5]: [cs_ext_sales_price#32, cs_net_profit#33, cr_return_amount#37, cr_net_loss#38, cp_catalog_page_id#43]
Keys [1]: [cp_catalog_page_id#43]
Functions [3]: [partial_sum(UnscaledValue(cs_ext_sales_price#32)), partial_sum(coalesce(cast(cr_return_amount#37 as decimal(12,2)), 0.00)), partial_sum((cs_net_profit#33 - coalesce(cast(cr_net_loss#38 as decimal(12,2)), 0.00)))]

(68) CometExchange
Input [6]: [cp_catalog_page_id#43, sum#46, sum#47, isEmpty#48, sum#49, isEmpty#50]
Arguments: hashpartitioning(cp_catalog_page_id#43, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=6]

(69) CometHashAggregate
Input [6]: [cp_catalog_page_id#43, sum#46, sum#47, isEmpty#48, sum#49, isEmpty#50]
Keys [1]: [cp_catalog_page_id#43]
Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#32)), sum(coalesce(cast(cr_return_amount#37 as decimal(12,2)), 0.00)), sum((cs_net_profit#33 - coalesce(cast(cr_net_loss#38 as decimal(12,2)), 0.00)))]

(70) Scan parquet spark_catalog.default.web_sales
Output [7]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#57), dynamicpruningexpression(ws_sold_date_sk#57 IN dynamicpruning#8)]
PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)]
ReadSchema: struct<ws_item_sk:int,ws_web_site_sk:int,ws_promo_sk:int,ws_order_number:int,ws_ext_sales_price:decimal(7,2),ws_net_profit:decimal(7,2)>

(71) ColumnarToRow [codegen id : 3]
Input [7]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57]

(72) Filter [codegen id : 3]
Input [7]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57]
Condition : ((isnotnull(ws_web_site_sk#52) AND isnotnull(ws_item_sk#51)) AND isnotnull(ws_promo_sk#53))

(73) CometColumnarExchange
Input [7]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57]
Arguments: hashpartitioning(ws_item_sk#51, ws_order_number#54, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=7]

(74) CometSort
Input [7]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57]
Arguments: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57], [ws_item_sk#51 ASC NULLS FIRST, ws_order_number#54 ASC NULLS FIRST]

(75) CometNativeScan parquet spark_catalog.default.web_returns
Output [5]: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61, wr_returned_date_sk#62]
Batched: true
Location [not included in comparison]/{warehouse_dir}/web_returns]
PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)]
ReadSchema: struct<wr_item_sk:int,wr_order_number:int,wr_return_amt:decimal(7,2),wr_net_loss:decimal(7,2)>

(76) CometFilter
Input [5]: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61, wr_returned_date_sk#62]
Condition : (isnotnull(wr_item_sk#58) AND isnotnull(wr_order_number#59))

(77) CometProject
Input [5]: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61, wr_returned_date_sk#62]
Arguments: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61], [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61]

(78) CometExchange
Input [4]: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61]
Arguments: hashpartitioning(wr_item_sk#58, wr_order_number#59, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=8]

(79) CometSort
Input [4]: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61]
Arguments: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61], [wr_item_sk#58 ASC NULLS FIRST, wr_order_number#59 ASC NULLS FIRST]

(80) CometSortMergeJoin
Left output [7]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57]
Right output [4]: [wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61]
Arguments: [ws_item_sk#51, ws_order_number#54], [wr_item_sk#58, wr_order_number#59], LeftOuter

(81) CometProject
Input [11]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_order_number#54, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57, wr_item_sk#58, wr_order_number#59, wr_return_amt#60, wr_net_loss#61]
Arguments: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57, wr_return_amt#60, wr_net_loss#61], [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57, wr_return_amt#60, wr_net_loss#61]

(82) ReusedExchange [Reuses operator id: 16]
Output [1]: [d_date_sk#63]

(83) CometBroadcastHashJoin
Left output [8]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57, wr_return_amt#60, wr_net_loss#61]
Right output [1]: [d_date_sk#63]
Arguments: [ws_sold_date_sk#57], [d_date_sk#63], Inner, BuildRight

(84) CometProject
Input [9]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, ws_sold_date_sk#57, wr_return_amt#60, wr_net_loss#61, d_date_sk#63]
Arguments: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61], [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61]

(85) CometNativeScan parquet spark_catalog.default.web_site
Output [2]: [web_site_sk#64, web_site_id#65]
Batched: true
Location [not included in comparison]/{warehouse_dir}/web_site]
PushedFilters: [IsNotNull(web_site_sk)]
ReadSchema: struct<web_site_sk:int,web_site_id:string>

(86) CometFilter
Input [2]: [web_site_sk#64, web_site_id#65]
Condition : isnotnull(web_site_sk#64)

(87) CometProject
Input [2]: [web_site_sk#64, web_site_id#65]
Arguments: [web_site_sk#64, web_site_id#66], [web_site_sk#64, static_invoke(CharVarcharCodegenUtils.readSidePadding(web_site_id#65, 16)) AS web_site_id#66]

(88) CometBroadcastExchange
Input [2]: [web_site_sk#64, web_site_id#66]
Arguments: [web_site_sk#64, web_site_id#66]

(89) CometBroadcastHashJoin
Left output [7]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61]
Right output [2]: [web_site_sk#64, web_site_id#66]
Arguments: [ws_web_site_sk#52], [web_site_sk#64], Inner, BuildRight

(90) CometProject
Input [9]: [ws_item_sk#51, ws_web_site_sk#52, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_sk#64, web_site_id#66]
Arguments: [ws_item_sk#51, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66], [ws_item_sk#51, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66]

(91) ReusedExchange [Reuses operator id: 28]
Output [1]: [i_item_sk#67]

(92) CometBroadcastHashJoin
Left output [7]: [ws_item_sk#51, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66]
Right output [1]: [i_item_sk#67]
Arguments: [ws_item_sk#51], [i_item_sk#67], Inner, BuildRight

(93) CometProject
Input [8]: [ws_item_sk#51, ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66, i_item_sk#67]
Arguments: [ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66], [ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66]

(94) ReusedExchange [Reuses operator id: 34]
Output [1]: [p_promo_sk#68]

(95) CometBroadcastHashJoin
Left output [6]: [ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66]
Right output [1]: [p_promo_sk#68]
Arguments: [ws_promo_sk#53], [p_promo_sk#68], Inner, BuildRight

(96) CometProject
Input [7]: [ws_promo_sk#53, ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66, p_promo_sk#68]
Arguments: [ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66], [ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66]

(97) CometHashAggregate
Input [5]: [ws_ext_sales_price#55, ws_net_profit#56, wr_return_amt#60, wr_net_loss#61, web_site_id#66]
Keys [1]: [web_site_id#66]
Functions [3]: [partial_sum(UnscaledValue(ws_ext_sales_price#55)), partial_sum(coalesce(cast(wr_return_amt#60 as decimal(12,2)), 0.00)), partial_sum((ws_net_profit#56 - coalesce(cast(wr_net_loss#61 as decimal(12,2)), 0.00)))]

(98) CometExchange
Input [6]: [web_site_id#66, sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73]
Arguments: hashpartitioning(web_site_id#66, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=9]

(99) CometHashAggregate
Input [6]: [web_site_id#66, sum#69, sum#70, isEmpty#71, sum#72, isEmpty#73]
Keys [1]: [web_site_id#66]
Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#55)), sum(coalesce(cast(wr_return_amt#60 as decimal(12,2)), 0.00)), sum((ws_net_profit#56 - coalesce(cast(wr_net_loss#61 as decimal(12,2)), 0.00)))]

(100) CometUnion
Child 0 Input [5]: [sales#74, returns#75, profit#76, channel#77, id#78]
Child 1 Input [5]: [sales#79, returns#80, profit#81, channel#82, id#83]
Child 2 Input [5]: [sales#84, returns#85, profit#86, channel#87, id#88]

(101) CometExpand
Input [5]: [sales#74, returns#75, profit#76, channel#77, id#78]
Arguments: [[sales#74, returns#75, profit#76, channel#77, id#78, 0], [sales#74, returns#75, profit#76, channel#77, null, 1], [sales#74, returns#75, profit#76, null, null, 3]], [sales#74, returns#75, profit#76, channel#89, id#90, spark_grouping_id#91]

(102) CometHashAggregate
Input [6]: [sales#74, returns#75, profit#76, channel#89, id#90, spark_grouping_id#91]
Keys [3]: [channel#89, id#90, spark_grouping_id#91]
Functions [3]: [partial_sum(sales#74), partial_sum(returns#75), partial_sum(profit#76)]

(103) CometExchange
Input [9]: [channel#89, id#90, spark_grouping_id#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97]
Arguments: hashpartitioning(channel#89, id#90, spark_grouping_id#91, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=10]

(104) CometHashAggregate
Input [9]: [channel#89, id#90, spark_grouping_id#91, sum#92, isEmpty#93, sum#94, isEmpty#95, sum#96, isEmpty#97]
Keys [3]: [channel#89, id#90, spark_grouping_id#91]
Functions [3]: [sum(sales#74), sum(returns#75), sum(profit#76)]

(105) CometTakeOrderedAndProject
Input [5]: [channel#89, id#90, sales#98, returns#99, profit#100]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[channel#89 ASC NULLS FIRST,id#90 ASC NULLS FIRST], output=[channel#89,id#90,sales#98,returns#99,profit#100]), [channel#89, id#90, sales#98, returns#99, profit#100], 100, 0, [channel#89 ASC NULLS FIRST, id#90 ASC NULLS FIRST], [channel#89, id#90, sales#98, returns#99, profit#100]

(106) CometColumnarToRow [codegen id : 4]
Input [5]: [channel#89, id#90, sales#98, returns#99, profit#100]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
BroadcastExchange (111)
+- * CometColumnarToRow (110)
   +- CometProject (109)
      +- CometFilter (108)
         +- CometNativeScan parquet spark_catalog.default.date_dim (107)


(107) CometNativeScan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#14, d_date#15]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-22), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(108) CometFilter
Input [2]: [d_date_sk#14, d_date#15]
Condition : (((isnotnull(d_date#15) AND (d_date#15 >= 2000-08-23)) AND (d_date#15 <= 2000-09-22)) AND isnotnull(d_date_sk#14))

(109) CometProject
Input [2]: [d_date_sk#14, d_date#15]
Arguments: [d_date_sk#14], [d_date_sk#14]

(110) CometColumnarToRow [codegen id : 1]
Input [1]: [d_date_sk#14]

(111) BroadcastExchange
Input [1]: [d_date_sk#14]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11]

Subquery:2 Hosting operator id = 40 Hosting Expression = cs_sold_date_sk#34 IN dynamicpruning#8

Subquery:3 Hosting operator id = 70 Hosting Expression = ws_sold_date_sk#57 IN dynamicpruning#8


