== Physical Plan ==
* ColumnarToRow (48)
+- CometTakeOrderedAndProject (47)
   +- CometProject (46)
      +- CometBroadcastHashJoin (45)
         :- CometProject (32)
         :  +- CometBroadcastHashJoin (31)
         :     :- CometHashAggregate (18)
         :     :  +- CometExchange (17)
         :     :     +- CometHashAggregate (16)
         :     :        +- CometProject (15)
         :     :           +- CometBroadcastHashJoin (14)
         :     :              :- CometProject (7)
         :     :              :  +- CometBroadcastHashJoin (6)
         :     :              :     :- CometFilter (2)
         :     :              :     :  +- CometScan parquet spark_catalog.default.store_returns (1)
         :     :              :     +- CometBroadcastExchange (5)
         :     :              :        +- CometFilter (4)
         :     :              :           +- CometScan parquet spark_catalog.default.item (3)
         :     :              +- CometBroadcastExchange (13)
         :     :                 +- CometProject (12)
         :     :                    +- CometBroadcastHashJoin (11)
         :     :                       :- CometFilter (9)
         :     :                       :  +- CometScan parquet spark_catalog.default.date_dim (8)
         :     :                       +- ReusedExchange (10)
         :     +- CometBroadcastExchange (30)
         :        +- CometHashAggregate (29)
         :           +- CometExchange (28)
         :              +- CometHashAggregate (27)
         :                 +- CometProject (26)
         :                    +- CometBroadcastHashJoin (25)
         :                       :- CometProject (23)
         :                       :  +- CometBroadcastHashJoin (22)
         :                       :     :- CometFilter (20)
         :                       :     :  +- CometScan parquet spark_catalog.default.catalog_returns (19)
         :                       :     +- ReusedExchange (21)
         :                       +- ReusedExchange (24)
         +- CometBroadcastExchange (44)
            +- CometHashAggregate (43)
               +- CometExchange (42)
                  +- CometHashAggregate (41)
                     +- CometProject (40)
                        +- CometBroadcastHashJoin (39)
                           :- CometProject (37)
                           :  +- CometBroadcastHashJoin (36)
                           :     :- CometFilter (34)
                           :     :  +- CometScan parquet spark_catalog.default.web_returns (33)
                           :     +- ReusedExchange (35)
                           +- ReusedExchange (38)


(1) CometScan parquet spark_catalog.default.store_returns
Output [3]: [sr_item_sk#1, sr_return_quantity#2, sr_returned_date_sk#3]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(sr_returned_date_sk#3), dynamicpruningexpression(sr_returned_date_sk#3 IN dynamicpruning#4)]
PushedFilters: [IsNotNull(sr_item_sk)]
ReadSchema: struct<sr_item_sk:int,sr_return_quantity:int>

(2) CometFilter
Input [3]: [sr_item_sk#1, sr_return_quantity#2, sr_returned_date_sk#3]
Condition : isnotnull(sr_item_sk#1)

(3) CometScan parquet spark_catalog.default.item
Output [2]: [i_item_sk#5, i_item_id#6]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_item_id)]
ReadSchema: struct<i_item_sk:int,i_item_id:string>

(4) CometFilter
Input [2]: [i_item_sk#5, i_item_id#6]
Condition : (isnotnull(i_item_sk#5) AND isnotnull(i_item_id#6))

(5) CometBroadcastExchange
Input [2]: [i_item_sk#5, i_item_id#6]
Arguments: [i_item_sk#5, i_item_id#6]

(6) CometBroadcastHashJoin
Left output [3]: [sr_item_sk#1, sr_return_quantity#2, sr_returned_date_sk#3]
Right output [2]: [i_item_sk#5, i_item_id#6]
Arguments: [sr_item_sk#1], [i_item_sk#5], Inner, BuildRight

(7) CometProject
Input [5]: [sr_item_sk#1, sr_return_quantity#2, sr_returned_date_sk#3, i_item_sk#5, i_item_id#6]
Arguments: [sr_return_quantity#2, sr_returned_date_sk#3, i_item_id#6], [sr_return_quantity#2, sr_returned_date_sk#3, i_item_id#6]

(8) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#7, d_date#8]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(9) CometFilter
Input [2]: [d_date_sk#7, d_date#8]
Condition : isnotnull(d_date_sk#7)

(10) ReusedExchange [Reuses operator id: 58]
Output [1]: [d_date#9]

(11) CometBroadcastHashJoin
Left output [2]: [d_date_sk#7, d_date#8]
Right output [1]: [d_date#9]
Arguments: [d_date#8], [d_date#9], LeftSemi, BuildRight

(12) CometProject
Input [2]: [d_date_sk#7, d_date#8]
Arguments: [d_date_sk#7], [d_date_sk#7]

(13) CometBroadcastExchange
Input [1]: [d_date_sk#7]
Arguments: [d_date_sk#7]

(14) CometBroadcastHashJoin
Left output [3]: [sr_return_quantity#2, sr_returned_date_sk#3, i_item_id#6]
Right output [1]: [d_date_sk#7]
Arguments: [sr_returned_date_sk#3], [d_date_sk#7], Inner, BuildRight

(15) CometProject
Input [4]: [sr_return_quantity#2, sr_returned_date_sk#3, i_item_id#6, d_date_sk#7]
Arguments: [sr_return_quantity#2, i_item_id#6], [sr_return_quantity#2, i_item_id#6]

(16) CometHashAggregate
Input [2]: [sr_return_quantity#2, i_item_id#6]
Keys [1]: [i_item_id#6]
Functions [1]: [partial_sum(sr_return_quantity#2)]

(17) CometExchange
Input [2]: [i_item_id#6, sum#10]
Arguments: hashpartitioning(i_item_id#6, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(18) CometHashAggregate
Input [2]: [i_item_id#6, sum#10]
Keys [1]: [i_item_id#6]
Functions [1]: [sum(sr_return_quantity#2)]

(19) CometScan parquet spark_catalog.default.catalog_returns
Output [3]: [cr_item_sk#11, cr_return_quantity#12, cr_returned_date_sk#13]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cr_returned_date_sk#13), dynamicpruningexpression(cr_returned_date_sk#13 IN dynamicpruning#14)]
PushedFilters: [IsNotNull(cr_item_sk)]
ReadSchema: struct<cr_item_sk:int,cr_return_quantity:int>

(20) CometFilter
Input [3]: [cr_item_sk#11, cr_return_quantity#12, cr_returned_date_sk#13]
Condition : isnotnull(cr_item_sk#11)

(21) ReusedExchange [Reuses operator id: 5]
Output [2]: [i_item_sk#15, i_item_id#16]

(22) CometBroadcastHashJoin
Left output [3]: [cr_item_sk#11, cr_return_quantity#12, cr_returned_date_sk#13]
Right output [2]: [i_item_sk#15, i_item_id#16]
Arguments: [cr_item_sk#11], [i_item_sk#15], Inner, BuildRight

(23) CometProject
Input [5]: [cr_item_sk#11, cr_return_quantity#12, cr_returned_date_sk#13, i_item_sk#15, i_item_id#16]
Arguments: [cr_return_quantity#12, cr_returned_date_sk#13, i_item_id#16], [cr_return_quantity#12, cr_returned_date_sk#13, i_item_id#16]

(24) ReusedExchange [Reuses operator id: 13]
Output [1]: [d_date_sk#17]

(25) CometBroadcastHashJoin
Left output [3]: [cr_return_quantity#12, cr_returned_date_sk#13, i_item_id#16]
Right output [1]: [d_date_sk#17]
Arguments: [cr_returned_date_sk#13], [d_date_sk#17], Inner, BuildRight

(26) CometProject
Input [4]: [cr_return_quantity#12, cr_returned_date_sk#13, i_item_id#16, d_date_sk#17]
Arguments: [cr_return_quantity#12, i_item_id#16], [cr_return_quantity#12, i_item_id#16]

(27) CometHashAggregate
Input [2]: [cr_return_quantity#12, i_item_id#16]
Keys [1]: [i_item_id#16]
Functions [1]: [partial_sum(cr_return_quantity#12)]

(28) CometExchange
Input [2]: [i_item_id#16, sum#18]
Arguments: hashpartitioning(i_item_id#16, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(29) CometHashAggregate
Input [2]: [i_item_id#16, sum#18]
Keys [1]: [i_item_id#16]
Functions [1]: [sum(cr_return_quantity#12)]

(30) CometBroadcastExchange
Input [2]: [item_id#19, cr_item_qty#20]
Arguments: [item_id#19, cr_item_qty#20]

(31) CometBroadcastHashJoin
Left output [2]: [item_id#21, sr_item_qty#22]
Right output [2]: [item_id#19, cr_item_qty#20]
Arguments: [item_id#21], [item_id#19], Inner, BuildRight

(32) CometProject
Input [4]: [item_id#21, sr_item_qty#22, item_id#19, cr_item_qty#20]
Arguments: [item_id#21, sr_item_qty#22, cr_item_qty#20], [item_id#21, sr_item_qty#22, cr_item_qty#20]

(33) CometScan parquet spark_catalog.default.web_returns
Output [3]: [wr_item_sk#23, wr_return_quantity#24, wr_returned_date_sk#25]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(wr_returned_date_sk#25), dynamicpruningexpression(wr_returned_date_sk#25 IN dynamicpruning#26)]
PushedFilters: [IsNotNull(wr_item_sk)]
ReadSchema: struct<wr_item_sk:int,wr_return_quantity:int>

(34) CometFilter
Input [3]: [wr_item_sk#23, wr_return_quantity#24, wr_returned_date_sk#25]
Condition : isnotnull(wr_item_sk#23)

(35) ReusedExchange [Reuses operator id: 5]
Output [2]: [i_item_sk#27, i_item_id#28]

(36) CometBroadcastHashJoin
Left output [3]: [wr_item_sk#23, wr_return_quantity#24, wr_returned_date_sk#25]
Right output [2]: [i_item_sk#27, i_item_id#28]
Arguments: [wr_item_sk#23], [i_item_sk#27], Inner, BuildRight

(37) CometProject
Input [5]: [wr_item_sk#23, wr_return_quantity#24, wr_returned_date_sk#25, i_item_sk#27, i_item_id#28]
Arguments: [wr_return_quantity#24, wr_returned_date_sk#25, i_item_id#28], [wr_return_quantity#24, wr_returned_date_sk#25, i_item_id#28]

(38) ReusedExchange [Reuses operator id: 13]
Output [1]: [d_date_sk#29]

(39) CometBroadcastHashJoin
Left output [3]: [wr_return_quantity#24, wr_returned_date_sk#25, i_item_id#28]
Right output [1]: [d_date_sk#29]
Arguments: [wr_returned_date_sk#25], [d_date_sk#29], Inner, BuildRight

(40) CometProject
Input [4]: [wr_return_quantity#24, wr_returned_date_sk#25, i_item_id#28, d_date_sk#29]
Arguments: [wr_return_quantity#24, i_item_id#28], [wr_return_quantity#24, i_item_id#28]

(41) CometHashAggregate
Input [2]: [wr_return_quantity#24, i_item_id#28]
Keys [1]: [i_item_id#28]
Functions [1]: [partial_sum(wr_return_quantity#24)]

(42) CometExchange
Input [2]: [i_item_id#28, sum#30]
Arguments: hashpartitioning(i_item_id#28, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=3]

(43) CometHashAggregate
Input [2]: [i_item_id#28, sum#30]
Keys [1]: [i_item_id#28]
Functions [1]: [sum(wr_return_quantity#24)]

(44) CometBroadcastExchange
Input [2]: [item_id#31, wr_item_qty#32]
Arguments: [item_id#31, wr_item_qty#32]

(45) CometBroadcastHashJoin
Left output [3]: [item_id#21, sr_item_qty#22, cr_item_qty#20]
Right output [2]: [item_id#31, wr_item_qty#32]
Arguments: [item_id#21], [item_id#31], Inner, BuildRight

(46) CometProject
Input [5]: [item_id#21, sr_item_qty#22, cr_item_qty#20, item_id#31, wr_item_qty#32]
Arguments: [item_id#21, sr_item_qty#22, sr_dev#33, cr_item_qty#20, cr_dev#34, wr_item_qty#32, wr_dev#35, average#36], [item_id#21, sr_item_qty#22, (((cast(sr_item_qty#22 as double) / knownfloatingpointnormalized(normalizenanandzero(cast(((sr_item_qty#22 + cr_item_qty#20) + wr_item_qty#32) as double)))) / 3.0) * 100.0) AS sr_dev#33, cr_item_qty#20, (((cast(cr_item_qty#20 as double) / knownfloatingpointnormalized(normalizenanandzero(cast(((sr_item_qty#22 + cr_item_qty#20) + wr_item_qty#32) as double)))) / 3.0) * 100.0) AS cr_dev#34, wr_item_qty#32, (((cast(wr_item_qty#32 as double) / knownfloatingpointnormalized(normalizenanandzero(cast(((sr_item_qty#22 + cr_item_qty#20) + wr_item_qty#32) as double)))) / 3.0) * 100.0) AS wr_dev#35, (cast(((sr_item_qty#22 + cr_item_qty#20) + wr_item_qty#32) as decimal(20,0)) / 3.0) AS average#36]

(47) CometTakeOrderedAndProject
Input [8]: [item_id#21, sr_item_qty#22, sr_dev#33, cr_item_qty#20, cr_dev#34, wr_item_qty#32, wr_dev#35, average#36]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[item_id#21 ASC NULLS FIRST,sr_item_qty#22 ASC NULLS FIRST], output=[item_id#21,sr_item_qty#22,sr_dev#33,cr_item_qty#20,cr_dev#34,wr_item_qty#32,wr_dev#35,average#36]), [item_id#21, sr_item_qty#22, sr_dev#33, cr_item_qty#20, cr_dev#34, wr_item_qty#32, wr_dev#35, average#36], 100, [item_id#21 ASC NULLS FIRST, sr_item_qty#22 ASC NULLS FIRST], [item_id#21, sr_item_qty#22, sr_dev#33, cr_item_qty#20, cr_dev#34, wr_item_qty#32, wr_dev#35, average#36]

(48) ColumnarToRow [codegen id : 1]
Input [8]: [item_id#21, sr_item_qty#22, sr_dev#33, cr_item_qty#20, cr_dev#34, wr_item_qty#32, wr_dev#35, average#36]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = sr_returned_date_sk#3 IN dynamicpruning#4
BroadcastExchange (62)
+- * ColumnarToRow (61)
   +- CometProject (60)
      +- CometBroadcastHashJoin (59)
         :- CometFilter (50)
         :  +- CometScan parquet spark_catalog.default.date_dim (49)
         +- CometBroadcastExchange (58)
            +- CometProject (57)
               +- CometBroadcastHashJoin (56)
                  :- CometScan parquet spark_catalog.default.date_dim (51)
                  +- CometBroadcastExchange (55)
                     +- CometProject (54)
                        +- CometFilter (53)
                           +- CometScan parquet spark_catalog.default.date_dim (52)


(49) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#7, d_date#8]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(50) CometFilter
Input [2]: [d_date_sk#7, d_date#8]
Condition : isnotnull(d_date_sk#7)

(51) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_date#9, d_week_seq#37]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
ReadSchema: struct<d_date:date,d_week_seq:int>

(52) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_date#38, d_week_seq#39]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
ReadSchema: struct<d_date:date,d_week_seq:int>

(53) CometFilter
Input [2]: [d_date#38, d_week_seq#39]
Condition : cast(d_date#38 as string) IN (2000-06-30,2000-09-27,2000-11-17)

(54) CometProject
Input [2]: [d_date#38, d_week_seq#39]
Arguments: [d_week_seq#39], [d_week_seq#39]

(55) CometBroadcastExchange
Input [1]: [d_week_seq#39]
Arguments: [d_week_seq#39]

(56) CometBroadcastHashJoin
Left output [2]: [d_date#9, d_week_seq#37]
Right output [1]: [d_week_seq#39]
Arguments: [d_week_seq#37], [d_week_seq#39], LeftSemi, BuildRight

(57) CometProject
Input [2]: [d_date#9, d_week_seq#37]
Arguments: [d_date#9], [d_date#9]

(58) CometBroadcastExchange
Input [1]: [d_date#9]
Arguments: [d_date#9]

(59) CometBroadcastHashJoin
Left output [2]: [d_date_sk#7, d_date#8]
Right output [1]: [d_date#9]
Arguments: [d_date#8], [d_date#9], LeftSemi, BuildRight

(60) CometProject
Input [2]: [d_date_sk#7, d_date#8]
Arguments: [d_date_sk#7], [d_date_sk#7]

(61) ColumnarToRow [codegen id : 1]
Input [1]: [d_date_sk#7]

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

Subquery:2 Hosting operator id = 19 Hosting Expression = cr_returned_date_sk#13 IN dynamicpruning#4

Subquery:3 Hosting operator id = 33 Hosting Expression = wr_returned_date_sk#25 IN dynamicpruning#4


