== Physical Plan ==
* CometColumnarToRow (71)
+- CometTakeOrderedAndProject (70)
   +- CometHashAggregate (69)
      +- CometExchange (68)
         +- CometHashAggregate (67)
            +- CometExpand (66)
               +- CometUnion (65)
                  :- CometHashAggregate (22)
                  :  +- CometExchange (21)
                  :     +- CometHashAggregate (20)
                  :        +- CometProject (19)
                  :           +- CometBroadcastHashJoin (18)
                  :              :- CometProject (13)
                  :              :  +- CometBroadcastHashJoin (12)
                  :              :     :- CometUnion (7)
                  :              :     :  :- CometProject (3)
                  :              :     :  :  +- CometFilter (2)
                  :              :     :  :     +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales (1)
                  :              :     :  +- CometProject (6)
                  :              :     :     +- CometFilter (5)
                  :              :     :        +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns (4)
                  :              :     +- CometBroadcastExchange (11)
                  :              :        +- CometProject (10)
                  :              :           +- CometFilter (9)
                  :              :              +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (8)
                  :              +- CometBroadcastExchange (17)
                  :                 +- CometProject (16)
                  :                    +- CometFilter (15)
                  :                       +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store (14)
                  :- CometHashAggregate (41)
                  :  +- CometExchange (40)
                  :     +- CometHashAggregate (39)
                  :        +- CometProject (38)
                  :           +- CometBroadcastHashJoin (37)
                  :              :- CometProject (32)
                  :              :  +- CometBroadcastHashJoin (31)
                  :              :     :- CometUnion (29)
                  :              :     :  :- CometProject (25)
                  :              :     :  :  +- CometFilter (24)
                  :              :     :  :     +- CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_sales (23)
                  :              :     :  +- CometProject (28)
                  :              :     :     +- CometFilter (27)
                  :              :     :        +- CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_returns (26)
                  :              :     +- ReusedExchange (30)
                  :              +- CometBroadcastExchange (36)
                  :                 +- CometProject (35)
                  :                    +- CometFilter (34)
                  :                       +- CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_page (33)
                  +- CometHashAggregate (64)
                     +- CometExchange (63)
                        +- CometHashAggregate (62)
                           +- CometProject (61)
                              +- CometBroadcastHashJoin (60)
                                 :- CometProject (55)
                                 :  +- CometBroadcastHashJoin (54)
                                 :     :- CometUnion (52)
                                 :     :  :- CometProject (44)
                                 :     :  :  +- CometFilter (43)
                                 :     :  :     +- CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales (42)
                                 :     :  +- CometProject (51)
                                 :     :     +- CometBroadcastHashJoin (50)
                                 :     :        :- CometBroadcastExchange (46)
                                 :     :        :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.web_returns (45)
                                 :     :        +- CometProject (49)
                                 :     :           +- CometFilter (48)
                                 :     :              +- CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales (47)
                                 :     +- ReusedExchange (53)
                                 +- CometBroadcastExchange (59)
                                    +- CometProject (58)
                                       +- CometFilter (57)
                                          +- CometScan [native_iceberg_compat] parquet spark_catalog.default.web_site (56)


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

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

(3) CometProject
Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, ss_sold_date_sk#4]
Arguments: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11], [ss_store_sk#1 AS store_sk#6, ss_sold_date_sk#4 AS date_sk#7, ss_ext_sales_price#2 AS sales_price#8, ss_net_profit#3 AS profit#9, 0.00 AS return_amt#10, 0.00 AS net_loss#11]

(4) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns
Output [4]: [sr_store_sk#12, sr_return_amt#13, sr_net_loss#14, sr_returned_date_sk#15]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(sr_returned_date_sk#15), dynamicpruningexpression(sr_returned_date_sk#15 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(sr_store_sk)]
ReadSchema: struct<sr_store_sk:int,sr_return_amt:decimal(7,2),sr_net_loss:decimal(7,2)>

(5) CometFilter
Input [4]: [sr_store_sk#12, sr_return_amt#13, sr_net_loss#14, sr_returned_date_sk#15]
Condition : isnotnull(sr_store_sk#12)

(6) CometProject
Input [4]: [sr_store_sk#12, sr_return_amt#13, sr_net_loss#14, sr_returned_date_sk#15]
Arguments: [store_sk#16, date_sk#17, sales_price#18, profit#19, return_amt#20, net_loss#21], [sr_store_sk#12 AS store_sk#16, sr_returned_date_sk#15 AS date_sk#17, 0.00 AS sales_price#18, 0.00 AS profit#19, sr_return_amt#13 AS return_amt#20, sr_net_loss#14 AS net_loss#21]

(7) CometUnion
Child 0 Input [6]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11]
Child 1 Input [6]: [store_sk#16, date_sk#17, sales_price#18, profit#19, return_amt#20, net_loss#21]

(8) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#22, d_date#23]
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-06), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

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

(10) CometProject
Input [2]: [d_date_sk#22, d_date#23]
Arguments: [d_date_sk#22], [d_date_sk#22]

(11) CometBroadcastExchange
Input [1]: [d_date_sk#22]
Arguments: [d_date_sk#22]

(12) CometBroadcastHashJoin
Left output [6]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11]
Right output [1]: [d_date_sk#22]
Arguments: [date_sk#7], [d_date_sk#22], Inner, BuildRight

(13) CometProject
Input [7]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, d_date_sk#22]
Arguments: [store_sk#6, sales_price#8, profit#9, return_amt#10, net_loss#11], [store_sk#6, sales_price#8, profit#9, return_amt#10, net_loss#11]

(14) CometScan [native_iceberg_compat] parquet spark_catalog.default.store
Output [2]: [s_store_sk#24, s_store_id#25]
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>

(15) CometFilter
Input [2]: [s_store_sk#24, s_store_id#25]
Condition : isnotnull(s_store_sk#24)

(16) CometProject
Input [2]: [s_store_sk#24, s_store_id#25]
Arguments: [s_store_sk#24, s_store_id#26], [s_store_sk#24, static_invoke(CharVarcharCodegenUtils.readSidePadding(s_store_id#25, 16)) AS s_store_id#26]

(17) CometBroadcastExchange
Input [2]: [s_store_sk#24, s_store_id#26]
Arguments: [s_store_sk#24, s_store_id#26]

(18) CometBroadcastHashJoin
Left output [5]: [store_sk#6, sales_price#8, profit#9, return_amt#10, net_loss#11]
Right output [2]: [s_store_sk#24, s_store_id#26]
Arguments: [store_sk#6], [s_store_sk#24], Inner, BuildRight

(19) CometProject
Input [7]: [store_sk#6, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_sk#24, s_store_id#26]
Arguments: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#26], [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#26]

(20) CometHashAggregate
Input [5]: [sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#26]
Keys [1]: [s_store_id#26]
Functions [4]: [partial_sum(UnscaledValue(sales_price#8)), partial_sum(UnscaledValue(return_amt#10)), partial_sum(UnscaledValue(profit#9)), partial_sum(UnscaledValue(net_loss#11))]

(21) CometExchange
Input [5]: [s_store_id#26, sum#27, sum#28, sum#29, sum#30]
Arguments: hashpartitioning(s_store_id#26, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(22) CometHashAggregate
Input [5]: [s_store_id#26, sum#27, sum#28, sum#29, sum#30]
Keys [1]: [s_store_id#26]
Functions [4]: [sum(UnscaledValue(sales_price#8)), sum(UnscaledValue(return_amt#10)), sum(UnscaledValue(profit#9)), sum(UnscaledValue(net_loss#11))]

(23) CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_sales
Output [4]: [cs_catalog_page_sk#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#35)]
PushedFilters: [IsNotNull(cs_catalog_page_sk)]
ReadSchema: struct<cs_catalog_page_sk:int,cs_ext_sales_price:decimal(7,2),cs_net_profit:decimal(7,2)>

(24) CometFilter
Input [4]: [cs_catalog_page_sk#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]
Condition : isnotnull(cs_catalog_page_sk#31)

(25) CometProject
Input [4]: [cs_catalog_page_sk#31, cs_ext_sales_price#32, cs_net_profit#33, cs_sold_date_sk#34]
Arguments: [page_sk#36, date_sk#37, sales_price#38, profit#39, return_amt#40, net_loss#41], [cs_catalog_page_sk#31 AS page_sk#36, cs_sold_date_sk#34 AS date_sk#37, cs_ext_sales_price#32 AS sales_price#38, cs_net_profit#33 AS profit#39, 0.00 AS return_amt#40, 0.00 AS net_loss#41]

(26) CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_returns
Output [4]: [cr_catalog_page_sk#42, cr_return_amount#43, cr_net_loss#44, cr_returned_date_sk#45]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cr_returned_date_sk#45), dynamicpruningexpression(cr_returned_date_sk#45 IN dynamicpruning#35)]
PushedFilters: [IsNotNull(cr_catalog_page_sk)]
ReadSchema: struct<cr_catalog_page_sk:int,cr_return_amount:decimal(7,2),cr_net_loss:decimal(7,2)>

(27) CometFilter
Input [4]: [cr_catalog_page_sk#42, cr_return_amount#43, cr_net_loss#44, cr_returned_date_sk#45]
Condition : isnotnull(cr_catalog_page_sk#42)

(28) CometProject
Input [4]: [cr_catalog_page_sk#42, cr_return_amount#43, cr_net_loss#44, cr_returned_date_sk#45]
Arguments: [page_sk#46, date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51], [cr_catalog_page_sk#42 AS page_sk#46, cr_returned_date_sk#45 AS date_sk#47, 0.00 AS sales_price#48, 0.00 AS profit#49, cr_return_amount#43 AS return_amt#50, cr_net_loss#44 AS net_loss#51]

(29) CometUnion
Child 0 Input [6]: [page_sk#36, date_sk#37, sales_price#38, profit#39, return_amt#40, net_loss#41]
Child 1 Input [6]: [page_sk#46, date_sk#47, sales_price#48, profit#49, return_amt#50, net_loss#51]

(30) ReusedExchange [Reuses operator id: 11]
Output [1]: [d_date_sk#52]

(31) CometBroadcastHashJoin
Left output [6]: [page_sk#36, date_sk#37, sales_price#38, profit#39, return_amt#40, net_loss#41]
Right output [1]: [d_date_sk#52]
Arguments: [date_sk#37], [d_date_sk#52], Inner, BuildRight

(32) CometProject
Input [7]: [page_sk#36, date_sk#37, sales_price#38, profit#39, return_amt#40, net_loss#41, d_date_sk#52]
Arguments: [page_sk#36, sales_price#38, profit#39, return_amt#40, net_loss#41], [page_sk#36, sales_price#38, profit#39, return_amt#40, net_loss#41]

(33) CometScan [native_iceberg_compat] parquet spark_catalog.default.catalog_page
Output [2]: [cp_catalog_page_sk#53, cp_catalog_page_id#54]
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>

(34) CometFilter
Input [2]: [cp_catalog_page_sk#53, cp_catalog_page_id#54]
Condition : isnotnull(cp_catalog_page_sk#53)

(35) CometProject
Input [2]: [cp_catalog_page_sk#53, cp_catalog_page_id#54]
Arguments: [cp_catalog_page_sk#53, cp_catalog_page_id#55], [cp_catalog_page_sk#53, static_invoke(CharVarcharCodegenUtils.readSidePadding(cp_catalog_page_id#54, 16)) AS cp_catalog_page_id#55]

(36) CometBroadcastExchange
Input [2]: [cp_catalog_page_sk#53, cp_catalog_page_id#55]
Arguments: [cp_catalog_page_sk#53, cp_catalog_page_id#55]

(37) CometBroadcastHashJoin
Left output [5]: [page_sk#36, sales_price#38, profit#39, return_amt#40, net_loss#41]
Right output [2]: [cp_catalog_page_sk#53, cp_catalog_page_id#55]
Arguments: [page_sk#36], [cp_catalog_page_sk#53], Inner, BuildRight

(38) CometProject
Input [7]: [page_sk#36, sales_price#38, profit#39, return_amt#40, net_loss#41, cp_catalog_page_sk#53, cp_catalog_page_id#55]
Arguments: [sales_price#38, profit#39, return_amt#40, net_loss#41, cp_catalog_page_id#55], [sales_price#38, profit#39, return_amt#40, net_loss#41, cp_catalog_page_id#55]

(39) CometHashAggregate
Input [5]: [sales_price#38, profit#39, return_amt#40, net_loss#41, cp_catalog_page_id#55]
Keys [1]: [cp_catalog_page_id#55]
Functions [4]: [partial_sum(UnscaledValue(sales_price#38)), partial_sum(UnscaledValue(return_amt#40)), partial_sum(UnscaledValue(profit#39)), partial_sum(UnscaledValue(net_loss#41))]

(40) CometExchange
Input [5]: [cp_catalog_page_id#55, sum#56, sum#57, sum#58, sum#59]
Arguments: hashpartitioning(cp_catalog_page_id#55, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(41) CometHashAggregate
Input [5]: [cp_catalog_page_id#55, sum#56, sum#57, sum#58, sum#59]
Keys [1]: [cp_catalog_page_id#55]
Functions [4]: [sum(UnscaledValue(sales_price#38)), sum(UnscaledValue(return_amt#40)), sum(UnscaledValue(profit#39)), sum(UnscaledValue(net_loss#41))]

(42) CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales
Output [4]: [ws_web_site_sk#60, ws_ext_sales_price#61, ws_net_profit#62, ws_sold_date_sk#63]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#63), dynamicpruningexpression(ws_sold_date_sk#63 IN dynamicpruning#64)]
PushedFilters: [IsNotNull(ws_web_site_sk)]
ReadSchema: struct<ws_web_site_sk:int,ws_ext_sales_price:decimal(7,2),ws_net_profit:decimal(7,2)>

(43) CometFilter
Input [4]: [ws_web_site_sk#60, ws_ext_sales_price#61, ws_net_profit#62, ws_sold_date_sk#63]
Condition : isnotnull(ws_web_site_sk#60)

(44) CometProject
Input [4]: [ws_web_site_sk#60, ws_ext_sales_price#61, ws_net_profit#62, ws_sold_date_sk#63]
Arguments: [wsr_web_site_sk#65, date_sk#66, sales_price#67, profit#68, return_amt#69, net_loss#70], [ws_web_site_sk#60 AS wsr_web_site_sk#65, ws_sold_date_sk#63 AS date_sk#66, ws_ext_sales_price#61 AS sales_price#67, ws_net_profit#62 AS profit#68, 0.00 AS return_amt#69, 0.00 AS net_loss#70]

(45) CometScan [native_iceberg_compat] parquet spark_catalog.default.web_returns
Output [5]: [wr_item_sk#71, wr_order_number#72, wr_return_amt#73, wr_net_loss#74, wr_returned_date_sk#75]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(wr_returned_date_sk#75), dynamicpruningexpression(wr_returned_date_sk#75 IN dynamicpruning#64)]
ReadSchema: struct<wr_item_sk:int,wr_order_number:int,wr_return_amt:decimal(7,2),wr_net_loss:decimal(7,2)>

(46) CometBroadcastExchange
Input [5]: [wr_item_sk#71, wr_order_number#72, wr_return_amt#73, wr_net_loss#74, wr_returned_date_sk#75]
Arguments: [wr_item_sk#71, wr_order_number#72, wr_return_amt#73, wr_net_loss#74, wr_returned_date_sk#75]

(47) CometScan [native_iceberg_compat] parquet spark_catalog.default.web_sales
Output [4]: [ws_item_sk#76, ws_web_site_sk#77, ws_order_number#78, ws_sold_date_sk#79]
Batched: true
Location [not included in comparison]/{warehouse_dir}/web_sales]
PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_order_number), IsNotNull(ws_web_site_sk)]
ReadSchema: struct<ws_item_sk:int,ws_web_site_sk:int,ws_order_number:int>

(48) CometFilter
Input [4]: [ws_item_sk#76, ws_web_site_sk#77, ws_order_number#78, ws_sold_date_sk#79]
Condition : ((isnotnull(ws_item_sk#76) AND isnotnull(ws_order_number#78)) AND isnotnull(ws_web_site_sk#77))

(49) CometProject
Input [4]: [ws_item_sk#76, ws_web_site_sk#77, ws_order_number#78, ws_sold_date_sk#79]
Arguments: [ws_item_sk#76, ws_web_site_sk#77, ws_order_number#78], [ws_item_sk#76, ws_web_site_sk#77, ws_order_number#78]

(50) CometBroadcastHashJoin
Left output [5]: [wr_item_sk#71, wr_order_number#72, wr_return_amt#73, wr_net_loss#74, wr_returned_date_sk#75]
Right output [3]: [ws_item_sk#76, ws_web_site_sk#77, ws_order_number#78]
Arguments: [wr_item_sk#71, wr_order_number#72], [ws_item_sk#76, ws_order_number#78], Inner, BuildLeft

(51) CometProject
Input [8]: [wr_item_sk#71, wr_order_number#72, wr_return_amt#73, wr_net_loss#74, wr_returned_date_sk#75, ws_item_sk#76, ws_web_site_sk#77, ws_order_number#78]
Arguments: [wsr_web_site_sk#80, date_sk#81, sales_price#82, profit#83, return_amt#84, net_loss#85], [ws_web_site_sk#77 AS wsr_web_site_sk#80, wr_returned_date_sk#75 AS date_sk#81, 0.00 AS sales_price#82, 0.00 AS profit#83, wr_return_amt#73 AS return_amt#84, wr_net_loss#74 AS net_loss#85]

(52) CometUnion
Child 0 Input [6]: [wsr_web_site_sk#65, date_sk#66, sales_price#67, profit#68, return_amt#69, net_loss#70]
Child 1 Input [6]: [wsr_web_site_sk#80, date_sk#81, sales_price#82, profit#83, return_amt#84, net_loss#85]

(53) ReusedExchange [Reuses operator id: 11]
Output [1]: [d_date_sk#86]

(54) CometBroadcastHashJoin
Left output [6]: [wsr_web_site_sk#65, date_sk#66, sales_price#67, profit#68, return_amt#69, net_loss#70]
Right output [1]: [d_date_sk#86]
Arguments: [date_sk#66], [d_date_sk#86], Inner, BuildRight

(55) CometProject
Input [7]: [wsr_web_site_sk#65, date_sk#66, sales_price#67, profit#68, return_amt#69, net_loss#70, d_date_sk#86]
Arguments: [wsr_web_site_sk#65, sales_price#67, profit#68, return_amt#69, net_loss#70], [wsr_web_site_sk#65, sales_price#67, profit#68, return_amt#69, net_loss#70]

(56) CometScan [native_iceberg_compat] parquet spark_catalog.default.web_site
Output [2]: [web_site_sk#87, web_site_id#88]
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>

(57) CometFilter
Input [2]: [web_site_sk#87, web_site_id#88]
Condition : isnotnull(web_site_sk#87)

(58) CometProject
Input [2]: [web_site_sk#87, web_site_id#88]
Arguments: [web_site_sk#87, web_site_id#89], [web_site_sk#87, static_invoke(CharVarcharCodegenUtils.readSidePadding(web_site_id#88, 16)) AS web_site_id#89]

(59) CometBroadcastExchange
Input [2]: [web_site_sk#87, web_site_id#89]
Arguments: [web_site_sk#87, web_site_id#89]

(60) CometBroadcastHashJoin
Left output [5]: [wsr_web_site_sk#65, sales_price#67, profit#68, return_amt#69, net_loss#70]
Right output [2]: [web_site_sk#87, web_site_id#89]
Arguments: [wsr_web_site_sk#65], [web_site_sk#87], Inner, BuildRight

(61) CometProject
Input [7]: [wsr_web_site_sk#65, sales_price#67, profit#68, return_amt#69, net_loss#70, web_site_sk#87, web_site_id#89]
Arguments: [sales_price#67, profit#68, return_amt#69, net_loss#70, web_site_id#89], [sales_price#67, profit#68, return_amt#69, net_loss#70, web_site_id#89]

(62) CometHashAggregate
Input [5]: [sales_price#67, profit#68, return_amt#69, net_loss#70, web_site_id#89]
Keys [1]: [web_site_id#89]
Functions [4]: [partial_sum(UnscaledValue(sales_price#67)), partial_sum(UnscaledValue(return_amt#69)), partial_sum(UnscaledValue(profit#68)), partial_sum(UnscaledValue(net_loss#70))]

(63) CometExchange
Input [5]: [web_site_id#89, sum#90, sum#91, sum#92, sum#93]
Arguments: hashpartitioning(web_site_id#89, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=3]

(64) CometHashAggregate
Input [5]: [web_site_id#89, sum#90, sum#91, sum#92, sum#93]
Keys [1]: [web_site_id#89]
Functions [4]: [sum(UnscaledValue(sales_price#67)), sum(UnscaledValue(return_amt#69)), sum(UnscaledValue(profit#68)), sum(UnscaledValue(net_loss#70))]

(65) CometUnion
Child 0 Input [5]: [sales#94, returns#95, profit#96, channel#97, id#98]
Child 1 Input [5]: [sales#99, returns#100, profit#101, channel#102, id#103]
Child 2 Input [5]: [sales#104, returns#105, profit#106, channel#107, id#108]

(66) CometExpand
Input [5]: [sales#94, returns#95, profit#96, channel#97, id#98]
Arguments: [[sales#94, returns#95, profit#96, channel#97, id#98, 0], [sales#94, returns#95, profit#96, channel#97, null, 1], [sales#94, returns#95, profit#96, null, null, 3]], [sales#94, returns#95, profit#96, channel#109, id#110, spark_grouping_id#111]

(67) CometHashAggregate
Input [6]: [sales#94, returns#95, profit#96, channel#109, id#110, spark_grouping_id#111]
Keys [3]: [channel#109, id#110, spark_grouping_id#111]
Functions [3]: [partial_sum(sales#94), partial_sum(returns#95), partial_sum(profit#96)]

(68) CometExchange
Input [9]: [channel#109, id#110, spark_grouping_id#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117]
Arguments: hashpartitioning(channel#109, id#110, spark_grouping_id#111, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=4]

(69) CometHashAggregate
Input [9]: [channel#109, id#110, spark_grouping_id#111, sum#112, isEmpty#113, sum#114, isEmpty#115, sum#116, isEmpty#117]
Keys [3]: [channel#109, id#110, spark_grouping_id#111]
Functions [3]: [sum(sales#94), sum(returns#95), sum(profit#96)]

(70) CometTakeOrderedAndProject
Input [5]: [channel#109, id#110, sales#118, returns#119, profit#120]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[channel#109 ASC NULLS FIRST,id#110 ASC NULLS FIRST], output=[channel#109,id#110,sales#118,returns#119,profit#120]), [channel#109, id#110, sales#118, returns#119, profit#120], 100, 0, [channel#109 ASC NULLS FIRST, id#110 ASC NULLS FIRST], [channel#109, id#110, sales#118, returns#119, profit#120]

(71) CometColumnarToRow [codegen id : 1]
Input [5]: [channel#109, id#110, sales#118, returns#119, profit#120]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
BroadcastExchange (76)
+- * CometColumnarToRow (75)
   +- CometProject (74)
      +- CometFilter (73)
         +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (72)


(72) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#22, d_date#23]
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-06), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

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

(74) CometProject
Input [2]: [d_date_sk#22, d_date#23]
Arguments: [d_date_sk#22], [d_date_sk#22]

(75) CometColumnarToRow [codegen id : 1]
Input [1]: [d_date_sk#22]

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

Subquery:2 Hosting operator id = 4 Hosting Expression = sr_returned_date_sk#15 IN dynamicpruning#5

Subquery:3 Hosting operator id = 23 Hosting Expression = cs_sold_date_sk#34 IN dynamicpruning#5

Subquery:4 Hosting operator id = 26 Hosting Expression = cr_returned_date_sk#45 IN dynamicpruning#5

Subquery:5 Hosting operator id = 42 Hosting Expression = ws_sold_date_sk#63 IN dynamicpruning#5

Subquery:6 Hosting operator id = 45 Hosting Expression = wr_returned_date_sk#75 IN dynamicpruning#5


