== Physical Plan ==
TakeOrderedAndProject (76)
+- Union (75)
   :- * HashAggregate (31)
   :  +- * CometColumnarToRow (30)
   :     +- CometColumnarExchange (29)
   :        +- * HashAggregate (28)
   :           +- * CometColumnarToRow (27)
   :              +- CometProject (26)
   :                 +- CometBroadcastHashJoin (25)
   :                    :- CometProject (20)
   :                    :  +- CometBroadcastHashJoin (19)
   :                    :     :- CometProject (14)
   :                    :     :  +- CometBroadcastHashJoin (13)
   :                    :     :     :- CometProject (8)
   :                    :     :     :  +- CometBroadcastHashJoin (7)
   :                    :     :     :     :- CometFilter (2)
   :                    :     :     :     :  +- CometScan parquet spark_catalog.default.store_sales (1)
   :                    :     :     :     +- CometBroadcastExchange (6)
   :                    :     :     :        +- CometProject (5)
   :                    :     :     :           +- CometFilter (4)
   :                    :     :     :              +- CometScan parquet spark_catalog.default.customer_demographics (3)
   :                    :     :     +- CometBroadcastExchange (12)
   :                    :     :        +- CometProject (11)
   :                    :     :           +- CometFilter (10)
   :                    :     :              +- CometScan parquet spark_catalog.default.date_dim (9)
   :                    :     +- CometBroadcastExchange (18)
   :                    :        +- CometProject (17)
   :                    :           +- CometFilter (16)
   :                    :              +- CometScan parquet spark_catalog.default.store (15)
   :                    +- CometBroadcastExchange (24)
   :                       +- CometProject (23)
   :                          +- CometFilter (22)
   :                             +- CometScan parquet spark_catalog.default.item (21)
   :- * HashAggregate (53)
   :  +- * CometColumnarToRow (52)
   :     +- CometColumnarExchange (51)
   :        +- * HashAggregate (50)
   :           +- * CometColumnarToRow (49)
   :              +- CometProject (48)
   :                 +- CometBroadcastHashJoin (47)
   :                    :- CometProject (45)
   :                    :  +- CometBroadcastHashJoin (44)
   :                    :     :- CometProject (39)
   :                    :     :  +- CometBroadcastHashJoin (38)
   :                    :     :     :- CometProject (36)
   :                    :     :     :  +- CometBroadcastHashJoin (35)
   :                    :     :     :     :- CometFilter (33)
   :                    :     :     :     :  +- CometScan parquet spark_catalog.default.store_sales (32)
   :                    :     :     :     +- ReusedExchange (34)
   :                    :     :     +- ReusedExchange (37)
   :                    :     +- CometBroadcastExchange (43)
   :                    :        +- CometProject (42)
   :                    :           +- CometFilter (41)
   :                    :              +- CometScan parquet spark_catalog.default.store (40)
   :                    +- ReusedExchange (46)
   +- * HashAggregate (74)
      +- * CometColumnarToRow (73)
         +- CometColumnarExchange (72)
            +- * HashAggregate (71)
               +- * CometColumnarToRow (70)
                  +- CometProject (69)
                     +- CometBroadcastHashJoin (68)
                        :- CometProject (64)
                        :  +- CometBroadcastHashJoin (63)
                        :     :- CometProject (61)
                        :     :  +- CometBroadcastHashJoin (60)
                        :     :     :- CometProject (58)
                        :     :     :  +- CometBroadcastHashJoin (57)
                        :     :     :     :- CometFilter (55)
                        :     :     :     :  +- CometScan parquet spark_catalog.default.store_sales (54)
                        :     :     :     +- ReusedExchange (56)
                        :     :     +- ReusedExchange (59)
                        :     +- ReusedExchange (62)
                        +- CometBroadcastExchange (67)
                           +- CometFilter (66)
                              +- CometScan parquet spark_catalog.default.item (65)


(1) CometScan parquet spark_catalog.default.store_sales
Output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#8), dynamicpruningexpression(ss_sold_date_sk#8 IN dynamicpruning#9)]
PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>

(2) CometFilter
Input [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Condition : ((isnotnull(ss_cdemo_sk#2) AND isnotnull(ss_store_sk#3)) AND isnotnull(ss_item_sk#1))

(3) CometScan parquet spark_catalog.default.customer_demographics
Output [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_demo_sk)]
ReadSchema: struct<cd_demo_sk:int,cd_gender:string,cd_marital_status:string,cd_education_status:string>

(4) CometFilter
Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
Condition : ((((staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, cd_gender#11, 1, true, false, true) = F) AND (staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, cd_marital_status#12, 1, true, false, true) = W)) AND (staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, cd_education_status#13, 20, true, false, true) = Primary             )) AND isnotnull(cd_demo_sk#10))

(5) CometProject
Input [4]: [cd_demo_sk#10, cd_gender#11, cd_marital_status#12, cd_education_status#13]
Arguments: [cd_demo_sk#10], [cd_demo_sk#10]

(6) CometBroadcastExchange
Input [1]: [cd_demo_sk#10]
Arguments: [cd_demo_sk#10]

(7) CometBroadcastHashJoin
Left output [8]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Right output [1]: [cd_demo_sk#10]
Arguments: [ss_cdemo_sk#2], [cd_demo_sk#10], Inner, BuildRight

(8) CometProject
Input [9]: [ss_item_sk#1, ss_cdemo_sk#2, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, cd_demo_sk#10]
Arguments: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8], [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]

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

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

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

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

(13) CometBroadcastHashJoin
Left output [7]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8]
Right output [1]: [d_date_sk#14]
Arguments: [ss_sold_date_sk#8], [d_date_sk#14], Inner, BuildRight

(14) CometProject
Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, ss_sold_date_sk#8, d_date_sk#14]
Arguments: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7], [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]

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

(16) CometFilter
Input [2]: [s_store_sk#16, s_state#17]
Condition : ((staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, s_state#17, 2, true, false, true) = TN) AND isnotnull(s_store_sk#16))

(17) CometProject
Input [2]: [s_store_sk#16, s_state#17]
Arguments: [s_store_sk#16, s_state#18], [s_store_sk#16, staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, s_state#17, 2, true, false, true) AS s_state#18]

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

(19) CometBroadcastHashJoin
Left output [6]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7]
Right output [2]: [s_store_sk#16, s_state#18]
Arguments: [ss_store_sk#3], [s_store_sk#16], Inner, BuildRight

(20) CometProject
Input [8]: [ss_item_sk#1, ss_store_sk#3, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_store_sk#16, s_state#18]
Arguments: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#18], [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#18]

(21) CometScan parquet spark_catalog.default.item
Output [2]: [i_item_sk#19, i_item_id#20]
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>

(22) CometFilter
Input [2]: [i_item_sk#19, i_item_id#20]
Condition : isnotnull(i_item_sk#19)

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

(24) CometBroadcastExchange
Input [2]: [i_item_sk#19, i_item_id#21]
Arguments: [i_item_sk#19, i_item_id#21]

(25) CometBroadcastHashJoin
Left output [6]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#18]
Right output [2]: [i_item_sk#19, i_item_id#21]
Arguments: [ss_item_sk#1], [i_item_sk#19], Inner, BuildRight

(26) CometProject
Input [8]: [ss_item_sk#1, ss_quantity#4, ss_list_price#5, ss_sales_price#6, ss_coupon_amt#7, s_state#18, i_item_sk#19, i_item_id#21]
Arguments: [i_item_id#22, s_state#23, agg1#24, agg2#25, agg3#26, agg4#27], [i_item_id#21 AS i_item_id#22, s_state#18 AS s_state#23, ss_quantity#4 AS agg1#24, ss_list_price#5 AS agg2#25, ss_coupon_amt#7 AS agg3#26, ss_sales_price#6 AS agg4#27]

(27) CometColumnarToRow [codegen id : 1]
Input [6]: [i_item_id#22, s_state#23, agg1#24, agg2#25, agg3#26, agg4#27]

(28) HashAggregate [codegen id : 1]
Input [6]: [i_item_id#22, s_state#23, agg1#24, agg2#25, agg3#26, agg4#27]
Keys [2]: [i_item_id#22, s_state#23]
Functions [4]: [partial_avg(agg1#24), partial_avg(UnscaledValue(agg2#25)), partial_avg(UnscaledValue(agg3#26)), partial_avg(UnscaledValue(agg4#27))]
Aggregate Attributes [8]: [sum#28, count#29, sum#30, count#31, sum#32, count#33, sum#34, count#35]
Results [10]: [i_item_id#22, s_state#23, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]

(29) CometColumnarExchange
Input [10]: [i_item_id#22, s_state#23, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
Arguments: hashpartitioning(i_item_id#22, s_state#23, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=1]

(30) CometColumnarToRow [codegen id : 2]
Input [10]: [i_item_id#22, s_state#23, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]

(31) HashAggregate [codegen id : 2]
Input [10]: [i_item_id#22, s_state#23, sum#36, count#37, sum#38, count#39, sum#40, count#41, sum#42, count#43]
Keys [2]: [i_item_id#22, s_state#23]
Functions [4]: [avg(agg1#24), avg(UnscaledValue(agg2#25)), avg(UnscaledValue(agg3#26)), avg(UnscaledValue(agg4#27))]
Aggregate Attributes [4]: [avg(agg1#24)#44, avg(UnscaledValue(agg2#25))#45, avg(UnscaledValue(agg3#26))#46, avg(UnscaledValue(agg4#27))#47]
Results [7]: [i_item_id#22, s_state#23, 0 AS g_state#48, avg(agg1#24)#44 AS agg1#49, cast((avg(UnscaledValue(agg2#25))#45 / 100.0) as decimal(11,6)) AS agg2#50, cast((avg(UnscaledValue(agg3#26))#46 / 100.0) as decimal(11,6)) AS agg3#51, cast((avg(UnscaledValue(agg4#27))#47 / 100.0) as decimal(11,6)) AS agg4#52]

(32) CometScan parquet spark_catalog.default.store_sales
Output [8]: [ss_item_sk#53, ss_cdemo_sk#54, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#60), dynamicpruningexpression(ss_sold_date_sk#60 IN dynamicpruning#61)]
PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>

(33) CometFilter
Input [8]: [ss_item_sk#53, ss_cdemo_sk#54, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60]
Condition : ((isnotnull(ss_cdemo_sk#54) AND isnotnull(ss_store_sk#55)) AND isnotnull(ss_item_sk#53))

(34) ReusedExchange [Reuses operator id: 6]
Output [1]: [cd_demo_sk#62]

(35) CometBroadcastHashJoin
Left output [8]: [ss_item_sk#53, ss_cdemo_sk#54, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60]
Right output [1]: [cd_demo_sk#62]
Arguments: [ss_cdemo_sk#54], [cd_demo_sk#62], Inner, BuildRight

(36) CometProject
Input [9]: [ss_item_sk#53, ss_cdemo_sk#54, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60, cd_demo_sk#62]
Arguments: [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60], [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60]

(37) ReusedExchange [Reuses operator id: 12]
Output [1]: [d_date_sk#63]

(38) CometBroadcastHashJoin
Left output [7]: [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60]
Right output [1]: [d_date_sk#63]
Arguments: [ss_sold_date_sk#60], [d_date_sk#63], Inner, BuildRight

(39) CometProject
Input [8]: [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, ss_sold_date_sk#60, d_date_sk#63]
Arguments: [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59], [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59]

(40) CometScan parquet spark_catalog.default.store
Output [2]: [s_store_sk#64, s_state#65]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_state:string>

(41) CometFilter
Input [2]: [s_store_sk#64, s_state#65]
Condition : ((staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, s_state#65, 2, true, false, true) = TN) AND isnotnull(s_store_sk#64))

(42) CometProject
Input [2]: [s_store_sk#64, s_state#65]
Arguments: [s_store_sk#64], [s_store_sk#64]

(43) CometBroadcastExchange
Input [1]: [s_store_sk#64]
Arguments: [s_store_sk#64]

(44) CometBroadcastHashJoin
Left output [6]: [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59]
Right output [1]: [s_store_sk#64]
Arguments: [ss_store_sk#55], [s_store_sk#64], Inner, BuildRight

(45) CometProject
Input [7]: [ss_item_sk#53, ss_store_sk#55, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, s_store_sk#64]
Arguments: [ss_item_sk#53, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59], [ss_item_sk#53, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59]

(46) ReusedExchange [Reuses operator id: 24]
Output [2]: [i_item_sk#66, i_item_id#67]

(47) CometBroadcastHashJoin
Left output [5]: [ss_item_sk#53, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59]
Right output [2]: [i_item_sk#66, i_item_id#67]
Arguments: [ss_item_sk#53], [i_item_sk#66], Inner, BuildRight

(48) CometProject
Input [7]: [ss_item_sk#53, ss_quantity#56, ss_list_price#57, ss_sales_price#58, ss_coupon_amt#59, i_item_sk#66, i_item_id#67]
Arguments: [i_item_id#67, agg1#68, agg2#69, agg3#70, agg4#71], [i_item_id#67, ss_quantity#56 AS agg1#68, ss_list_price#57 AS agg2#69, ss_coupon_amt#59 AS agg3#70, ss_sales_price#58 AS agg4#71]

(49) CometColumnarToRow [codegen id : 3]
Input [5]: [i_item_id#67, agg1#68, agg2#69, agg3#70, agg4#71]

(50) HashAggregate [codegen id : 3]
Input [5]: [i_item_id#67, agg1#68, agg2#69, agg3#70, agg4#71]
Keys [1]: [i_item_id#67]
Functions [4]: [partial_avg(agg1#68), partial_avg(UnscaledValue(agg2#69)), partial_avg(UnscaledValue(agg3#70)), partial_avg(UnscaledValue(agg4#71))]
Aggregate Attributes [8]: [sum#72, count#73, sum#74, count#75, sum#76, count#77, sum#78, count#79]
Results [9]: [i_item_id#67, sum#80, count#81, sum#82, count#83, sum#84, count#85, sum#86, count#87]

(51) CometColumnarExchange
Input [9]: [i_item_id#67, sum#80, count#81, sum#82, count#83, sum#84, count#85, sum#86, count#87]
Arguments: hashpartitioning(i_item_id#67, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=2]

(52) CometColumnarToRow [codegen id : 4]
Input [9]: [i_item_id#67, sum#80, count#81, sum#82, count#83, sum#84, count#85, sum#86, count#87]

(53) HashAggregate [codegen id : 4]
Input [9]: [i_item_id#67, sum#80, count#81, sum#82, count#83, sum#84, count#85, sum#86, count#87]
Keys [1]: [i_item_id#67]
Functions [4]: [avg(agg1#68), avg(UnscaledValue(agg2#69)), avg(UnscaledValue(agg3#70)), avg(UnscaledValue(agg4#71))]
Aggregate Attributes [4]: [avg(agg1#68)#88, avg(UnscaledValue(agg2#69))#89, avg(UnscaledValue(agg3#70))#90, avg(UnscaledValue(agg4#71))#91]
Results [7]: [i_item_id#67, null AS s_state#92, 1 AS g_state#93, avg(agg1#68)#88 AS agg1#94, cast((avg(UnscaledValue(agg2#69))#89 / 100.0) as decimal(11,6)) AS agg2#95, cast((avg(UnscaledValue(agg3#70))#90 / 100.0) as decimal(11,6)) AS agg3#96, cast((avg(UnscaledValue(agg4#71))#91 / 100.0) as decimal(11,6)) AS agg4#97]

(54) CometScan parquet spark_catalog.default.store_sales
Output [8]: [ss_item_sk#98, ss_cdemo_sk#99, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#105), dynamicpruningexpression(ss_sold_date_sk#105 IN dynamicpruning#106)]
PushedFilters: [IsNotNull(ss_cdemo_sk), IsNotNull(ss_store_sk), IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_cdemo_sk:int,ss_store_sk:int,ss_quantity:int,ss_list_price:decimal(7,2),ss_sales_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>

(55) CometFilter
Input [8]: [ss_item_sk#98, ss_cdemo_sk#99, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105]
Condition : ((isnotnull(ss_cdemo_sk#99) AND isnotnull(ss_store_sk#100)) AND isnotnull(ss_item_sk#98))

(56) ReusedExchange [Reuses operator id: 6]
Output [1]: [cd_demo_sk#107]

(57) CometBroadcastHashJoin
Left output [8]: [ss_item_sk#98, ss_cdemo_sk#99, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105]
Right output [1]: [cd_demo_sk#107]
Arguments: [ss_cdemo_sk#99], [cd_demo_sk#107], Inner, BuildRight

(58) CometProject
Input [9]: [ss_item_sk#98, ss_cdemo_sk#99, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105, cd_demo_sk#107]
Arguments: [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105], [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105]

(59) ReusedExchange [Reuses operator id: 12]
Output [1]: [d_date_sk#108]

(60) CometBroadcastHashJoin
Left output [7]: [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105]
Right output [1]: [d_date_sk#108]
Arguments: [ss_sold_date_sk#105], [d_date_sk#108], Inner, BuildRight

(61) CometProject
Input [8]: [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, ss_sold_date_sk#105, d_date_sk#108]
Arguments: [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104], [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104]

(62) ReusedExchange [Reuses operator id: 43]
Output [1]: [s_store_sk#109]

(63) CometBroadcastHashJoin
Left output [6]: [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104]
Right output [1]: [s_store_sk#109]
Arguments: [ss_store_sk#100], [s_store_sk#109], Inner, BuildRight

(64) CometProject
Input [7]: [ss_item_sk#98, ss_store_sk#100, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, s_store_sk#109]
Arguments: [ss_item_sk#98, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104], [ss_item_sk#98, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104]

(65) CometScan parquet spark_catalog.default.item
Output [1]: [i_item_sk#110]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int>

(66) CometFilter
Input [1]: [i_item_sk#110]
Condition : isnotnull(i_item_sk#110)

(67) CometBroadcastExchange
Input [1]: [i_item_sk#110]
Arguments: [i_item_sk#110]

(68) CometBroadcastHashJoin
Left output [5]: [ss_item_sk#98, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104]
Right output [1]: [i_item_sk#110]
Arguments: [ss_item_sk#98], [i_item_sk#110], Inner, BuildRight

(69) CometProject
Input [6]: [ss_item_sk#98, ss_quantity#101, ss_list_price#102, ss_sales_price#103, ss_coupon_amt#104, i_item_sk#110]
Arguments: [agg1#111, agg2#112, agg3#113, agg4#114], [ss_quantity#101 AS agg1#111, ss_list_price#102 AS agg2#112, ss_coupon_amt#104 AS agg3#113, ss_sales_price#103 AS agg4#114]

(70) CometColumnarToRow [codegen id : 5]
Input [4]: [agg1#111, agg2#112, agg3#113, agg4#114]

(71) HashAggregate [codegen id : 5]
Input [4]: [agg1#111, agg2#112, agg3#113, agg4#114]
Keys: []
Functions [4]: [partial_avg(agg1#111), partial_avg(UnscaledValue(agg2#112)), partial_avg(UnscaledValue(agg3#113)), partial_avg(UnscaledValue(agg4#114))]
Aggregate Attributes [8]: [sum#115, count#116, sum#117, count#118, sum#119, count#120, sum#121, count#122]
Results [8]: [sum#123, count#124, sum#125, count#126, sum#127, count#128, sum#129, count#130]

(72) CometColumnarExchange
Input [8]: [sum#123, count#124, sum#125, count#126, sum#127, count#128, sum#129, count#130]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=3]

(73) CometColumnarToRow [codegen id : 6]
Input [8]: [sum#123, count#124, sum#125, count#126, sum#127, count#128, sum#129, count#130]

(74) HashAggregate [codegen id : 6]
Input [8]: [sum#123, count#124, sum#125, count#126, sum#127, count#128, sum#129, count#130]
Keys: []
Functions [4]: [avg(agg1#111), avg(UnscaledValue(agg2#112)), avg(UnscaledValue(agg3#113)), avg(UnscaledValue(agg4#114))]
Aggregate Attributes [4]: [avg(agg1#111)#131, avg(UnscaledValue(agg2#112))#132, avg(UnscaledValue(agg3#113))#133, avg(UnscaledValue(agg4#114))#134]
Results [7]: [null AS i_item_id#135, null AS s_state#136, 1 AS g_state#137, avg(agg1#111)#131 AS agg1#138, cast((avg(UnscaledValue(agg2#112))#132 / 100.0) as decimal(11,6)) AS agg2#139, cast((avg(UnscaledValue(agg3#113))#133 / 100.0) as decimal(11,6)) AS agg3#140, cast((avg(UnscaledValue(agg4#114))#134 / 100.0) as decimal(11,6)) AS agg4#141]

(75) Union

(76) TakeOrderedAndProject
Input [7]: [i_item_id#22, s_state#23, g_state#48, agg1#49, agg2#50, agg3#51, agg4#52]
Arguments: 100, [i_item_id#22 ASC NULLS FIRST, s_state#23 ASC NULLS FIRST], [i_item_id#22, s_state#23, g_state#48, agg1#49, agg2#50, agg3#51, agg4#52]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
BroadcastExchange (81)
+- * CometColumnarToRow (80)
   +- CometProject (79)
      +- CometFilter (78)
         +- CometScan parquet spark_catalog.default.date_dim (77)


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

(78) CometFilter
Input [2]: [d_date_sk#14, d_year#15]
Condition : ((isnotnull(d_year#15) AND (d_year#15 = 1998)) AND isnotnull(d_date_sk#14))

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

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

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

Subquery:2 Hosting operator id = 32 Hosting Expression = ss_sold_date_sk#60 IN dynamicpruning#9

Subquery:3 Hosting operator id = 54 Hosting Expression = ss_sold_date_sk#105 IN dynamicpruning#9


