== Physical Plan ==
TakeOrderedAndProject (54)
+- * Project (53)
   +- * BroadcastHashJoin Inner BuildRight (52)
      :- * Project (37)
      :  +- * BroadcastHashJoin Inner BuildRight (36)
      :     :- * HashAggregate (21)
      :     :  +- * CometColumnarToRow (20)
      :     :     +- CometColumnarExchange (19)
      :     :        +- * HashAggregate (18)
      :     :           +- * CometColumnarToRow (17)
      :     :              +- CometProject (16)
      :     :                 +- CometBroadcastHashJoin (15)
      :     :                    :- CometProject (8)
      :     :                    :  +- CometBroadcastHashJoin (7)
      :     :                    :     :- CometFilter (2)
      :     :                    :     :  +- CometScan parquet spark_catalog.default.store_returns (1)
      :     :                    :     +- CometBroadcastExchange (6)
      :     :                    :        +- CometProject (5)
      :     :                    :           +- CometFilter (4)
      :     :                    :              +- CometScan parquet spark_catalog.default.item (3)
      :     :                    +- CometBroadcastExchange (14)
      :     :                       +- CometProject (13)
      :     :                          +- CometBroadcastHashJoin (12)
      :     :                             :- CometFilter (10)
      :     :                             :  +- CometScan parquet spark_catalog.default.date_dim (9)
      :     :                             +- ReusedExchange (11)
      :     +- BroadcastExchange (35)
      :        +- * HashAggregate (34)
      :           +- * CometColumnarToRow (33)
      :              +- CometColumnarExchange (32)
      :                 +- * HashAggregate (31)
      :                    +- * CometColumnarToRow (30)
      :                       +- CometProject (29)
      :                          +- CometBroadcastHashJoin (28)
      :                             :- CometProject (26)
      :                             :  +- CometBroadcastHashJoin (25)
      :                             :     :- CometFilter (23)
      :                             :     :  +- CometScan parquet spark_catalog.default.catalog_returns (22)
      :                             :     +- ReusedExchange (24)
      :                             +- ReusedExchange (27)
      +- BroadcastExchange (51)
         +- * HashAggregate (50)
            +- * CometColumnarToRow (49)
               +- CometColumnarExchange (48)
                  +- * HashAggregate (47)
                     +- * CometColumnarToRow (46)
                        +- CometProject (45)
                           +- CometBroadcastHashJoin (44)
                              :- CometProject (42)
                              :  +- CometBroadcastHashJoin (41)
                              :     :- CometFilter (39)
                              :     :  +- CometScan parquet spark_catalog.default.web_returns (38)
                              :     +- ReusedExchange (40)
                              +- ReusedExchange (43)


(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)]
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(staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, i_item_id#6, 16, true, false, true)))

(5) CometProject
Input [2]: [i_item_sk#5, i_item_id#6]
Arguments: [i_item_sk#5, i_item_id#7], [i_item_sk#5, staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, i_item_id#6, 16, true, false, true) AS i_item_id#7]

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

(7) 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#7]
Arguments: [sr_item_sk#1], [i_item_sk#5], Inner, BuildRight

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

(9) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#8, d_date#9]
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>

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

(11) ReusedExchange [Reuses operator id: 64]
Output [1]: [d_date#10]

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

(13) CometProject
Input [2]: [d_date_sk#8, d_date#9]
Arguments: [d_date_sk#8], [d_date_sk#8]

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

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

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

(17) CometColumnarToRow [codegen id : 1]
Input [2]: [sr_return_quantity#2, i_item_id#7]

(18) HashAggregate [codegen id : 1]
Input [2]: [sr_return_quantity#2, i_item_id#7]
Keys [1]: [i_item_id#7]
Functions [1]: [partial_sum(sr_return_quantity#2)]
Aggregate Attributes [1]: [sum#11]
Results [2]: [i_item_id#7, sum#12]

(19) CometColumnarExchange
Input [2]: [i_item_id#7, sum#12]
Arguments: hashpartitioning(i_item_id#7, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=1]

(20) CometColumnarToRow [codegen id : 6]
Input [2]: [i_item_id#7, sum#12]

(21) HashAggregate [codegen id : 6]
Input [2]: [i_item_id#7, sum#12]
Keys [1]: [i_item_id#7]
Functions [1]: [sum(sr_return_quantity#2)]
Aggregate Attributes [1]: [sum(sr_return_quantity#2)#13]
Results [2]: [i_item_id#7 AS item_id#14, sum(sr_return_quantity#2)#13 AS sr_item_qty#15]

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

(23) CometFilter
Input [3]: [cr_item_sk#16, cr_return_quantity#17, cr_returned_date_sk#18]
Condition : isnotnull(cr_item_sk#16)

(24) ReusedExchange [Reuses operator id: 6]
Output [2]: [i_item_sk#20, i_item_id#21]

(25) CometBroadcastHashJoin
Left output [3]: [cr_item_sk#16, cr_return_quantity#17, cr_returned_date_sk#18]
Right output [2]: [i_item_sk#20, i_item_id#21]
Arguments: [cr_item_sk#16], [i_item_sk#20], Inner, BuildRight

(26) CometProject
Input [5]: [cr_item_sk#16, cr_return_quantity#17, cr_returned_date_sk#18, i_item_sk#20, i_item_id#21]
Arguments: [cr_return_quantity#17, cr_returned_date_sk#18, i_item_id#21], [cr_return_quantity#17, cr_returned_date_sk#18, i_item_id#21]

(27) ReusedExchange [Reuses operator id: 14]
Output [1]: [d_date_sk#22]

(28) CometBroadcastHashJoin
Left output [3]: [cr_return_quantity#17, cr_returned_date_sk#18, i_item_id#21]
Right output [1]: [d_date_sk#22]
Arguments: [cr_returned_date_sk#18], [d_date_sk#22], Inner, BuildRight

(29) CometProject
Input [4]: [cr_return_quantity#17, cr_returned_date_sk#18, i_item_id#21, d_date_sk#22]
Arguments: [cr_return_quantity#17, i_item_id#21], [cr_return_quantity#17, i_item_id#21]

(30) CometColumnarToRow [codegen id : 2]
Input [2]: [cr_return_quantity#17, i_item_id#21]

(31) HashAggregate [codegen id : 2]
Input [2]: [cr_return_quantity#17, i_item_id#21]
Keys [1]: [i_item_id#21]
Functions [1]: [partial_sum(cr_return_quantity#17)]
Aggregate Attributes [1]: [sum#23]
Results [2]: [i_item_id#21, sum#24]

(32) CometColumnarExchange
Input [2]: [i_item_id#21, sum#24]
Arguments: hashpartitioning(i_item_id#21, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=2]

(33) CometColumnarToRow [codegen id : 3]
Input [2]: [i_item_id#21, sum#24]

(34) HashAggregate [codegen id : 3]
Input [2]: [i_item_id#21, sum#24]
Keys [1]: [i_item_id#21]
Functions [1]: [sum(cr_return_quantity#17)]
Aggregate Attributes [1]: [sum(cr_return_quantity#17)#25]
Results [2]: [i_item_id#21 AS item_id#26, sum(cr_return_quantity#17)#25 AS cr_item_qty#27]

(35) BroadcastExchange
Input [2]: [item_id#26, cr_item_qty#27]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=3]

(36) BroadcastHashJoin [codegen id : 6]
Left keys [1]: [item_id#14]
Right keys [1]: [item_id#26]
Join type: Inner
Join condition: None

(37) Project [codegen id : 6]
Output [3]: [item_id#14, sr_item_qty#15, cr_item_qty#27]
Input [4]: [item_id#14, sr_item_qty#15, item_id#26, cr_item_qty#27]

(38) CometScan parquet spark_catalog.default.web_returns
Output [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(wr_returned_date_sk#30), dynamicpruningexpression(wr_returned_date_sk#30 IN dynamicpruning#31)]
PushedFilters: [IsNotNull(wr_item_sk)]
ReadSchema: struct<wr_item_sk:int,wr_return_quantity:int>

(39) CometFilter
Input [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30]
Condition : isnotnull(wr_item_sk#28)

(40) ReusedExchange [Reuses operator id: 6]
Output [2]: [i_item_sk#32, i_item_id#33]

(41) CometBroadcastHashJoin
Left output [3]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30]
Right output [2]: [i_item_sk#32, i_item_id#33]
Arguments: [wr_item_sk#28], [i_item_sk#32], Inner, BuildRight

(42) CometProject
Input [5]: [wr_item_sk#28, wr_return_quantity#29, wr_returned_date_sk#30, i_item_sk#32, i_item_id#33]
Arguments: [wr_return_quantity#29, wr_returned_date_sk#30, i_item_id#33], [wr_return_quantity#29, wr_returned_date_sk#30, i_item_id#33]

(43) ReusedExchange [Reuses operator id: 14]
Output [1]: [d_date_sk#34]

(44) CometBroadcastHashJoin
Left output [3]: [wr_return_quantity#29, wr_returned_date_sk#30, i_item_id#33]
Right output [1]: [d_date_sk#34]
Arguments: [wr_returned_date_sk#30], [d_date_sk#34], Inner, BuildRight

(45) CometProject
Input [4]: [wr_return_quantity#29, wr_returned_date_sk#30, i_item_id#33, d_date_sk#34]
Arguments: [wr_return_quantity#29, i_item_id#33], [wr_return_quantity#29, i_item_id#33]

(46) CometColumnarToRow [codegen id : 4]
Input [2]: [wr_return_quantity#29, i_item_id#33]

(47) HashAggregate [codegen id : 4]
Input [2]: [wr_return_quantity#29, i_item_id#33]
Keys [1]: [i_item_id#33]
Functions [1]: [partial_sum(wr_return_quantity#29)]
Aggregate Attributes [1]: [sum#35]
Results [2]: [i_item_id#33, sum#36]

(48) CometColumnarExchange
Input [2]: [i_item_id#33, sum#36]
Arguments: hashpartitioning(i_item_id#33, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=4]

(49) CometColumnarToRow [codegen id : 5]
Input [2]: [i_item_id#33, sum#36]

(50) HashAggregate [codegen id : 5]
Input [2]: [i_item_id#33, sum#36]
Keys [1]: [i_item_id#33]
Functions [1]: [sum(wr_return_quantity#29)]
Aggregate Attributes [1]: [sum(wr_return_quantity#29)#37]
Results [2]: [i_item_id#33 AS item_id#38, sum(wr_return_quantity#29)#37 AS wr_item_qty#39]

(51) BroadcastExchange
Input [2]: [item_id#38, wr_item_qty#39]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=5]

(52) BroadcastHashJoin [codegen id : 6]
Left keys [1]: [item_id#14]
Right keys [1]: [item_id#38]
Join type: Inner
Join condition: None

(53) Project [codegen id : 6]
Output [8]: [item_id#14, sr_item_qty#15, (((cast(sr_item_qty#15 as double) / knownfloatingpointnormalized(normalizenanandzero(cast(((sr_item_qty#15 + cr_item_qty#27) + wr_item_qty#39) as double)))) / 3.0) * 100.0) AS sr_dev#40, cr_item_qty#27, (((cast(cr_item_qty#27 as double) / knownfloatingpointnormalized(normalizenanandzero(cast(((sr_item_qty#15 + cr_item_qty#27) + wr_item_qty#39) as double)))) / 3.0) * 100.0) AS cr_dev#41, wr_item_qty#39, (((cast(wr_item_qty#39 as double) / knownfloatingpointnormalized(normalizenanandzero(cast(((sr_item_qty#15 + cr_item_qty#27) + wr_item_qty#39) as double)))) / 3.0) * 100.0) AS wr_dev#42, (cast(((sr_item_qty#15 + cr_item_qty#27) + wr_item_qty#39) as decimal(20,0)) / 3.0) AS average#43]
Input [5]: [item_id#14, sr_item_qty#15, cr_item_qty#27, item_id#38, wr_item_qty#39]

(54) TakeOrderedAndProject
Input [8]: [item_id#14, sr_item_qty#15, sr_dev#40, cr_item_qty#27, cr_dev#41, wr_item_qty#39, wr_dev#42, average#43]
Arguments: 100, [item_id#14 ASC NULLS FIRST, sr_item_qty#15 ASC NULLS FIRST], [item_id#14, sr_item_qty#15, sr_dev#40, cr_item_qty#27, cr_dev#41, wr_item_qty#39, wr_dev#42, average#43]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = sr_returned_date_sk#3 IN dynamicpruning#4
BroadcastExchange (68)
+- * CometColumnarToRow (67)
   +- CometProject (66)
      +- CometBroadcastHashJoin (65)
         :- CometFilter (56)
         :  +- CometScan parquet spark_catalog.default.date_dim (55)
         +- CometBroadcastExchange (64)
            +- CometProject (63)
               +- CometBroadcastHashJoin (62)
                  :- CometScan parquet spark_catalog.default.date_dim (57)
                  +- CometBroadcastExchange (61)
                     +- CometProject (60)
                        +- CometFilter (59)
                           +- CometScan parquet spark_catalog.default.date_dim (58)


(55) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#8, d_date#9]
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>

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

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

(58) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_date#45, d_week_seq#46]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [In(d_date, [2000-06-30,2000-09-27,2000-11-17])]
ReadSchema: struct<d_date:date,d_week_seq:int>

(59) CometFilter
Input [2]: [d_date#45, d_week_seq#46]
Condition : d_date#45 IN (2000-06-30,2000-09-27,2000-11-17)

(60) CometProject
Input [2]: [d_date#45, d_week_seq#46]
Arguments: [d_week_seq#46], [d_week_seq#46]

(61) CometBroadcastExchange
Input [1]: [d_week_seq#46]
Arguments: [d_week_seq#46]

(62) CometBroadcastHashJoin
Left output [2]: [d_date#10, d_week_seq#44]
Right output [1]: [d_week_seq#46]
Arguments: [d_week_seq#44], [d_week_seq#46], LeftSemi, BuildRight

(63) CometProject
Input [2]: [d_date#10, d_week_seq#44]
Arguments: [d_date#10], [d_date#10]

(64) CometBroadcastExchange
Input [1]: [d_date#10]
Arguments: [d_date#10]

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

(66) CometProject
Input [2]: [d_date_sk#8, d_date#9]
Arguments: [d_date_sk#8], [d_date_sk#8]

(67) CometColumnarToRow [codegen id : 1]
Input [1]: [d_date_sk#8]

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

Subquery:2 Hosting operator id = 22 Hosting Expression = cr_returned_date_sk#18 IN dynamicpruning#4

Subquery:3 Hosting operator id = 38 Hosting Expression = wr_returned_date_sk#30 IN dynamicpruning#4


