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


(1) CometScan parquet spark_catalog.default.store_sales
Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#3)]
PushedFilters: [IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_store_sk:int,ss_sales_price:decimal(7,2)>

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

(3) CometScan parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date_sk), IsNotNull(d_week_seq)]
ReadSchema: struct<d_date_sk:int,d_week_seq:int,d_day_name:string>

(4) CometFilter
Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
Condition : (isnotnull(d_date_sk#4) AND isnotnull(d_week_seq#5))

(5) CometBroadcastExchange
Input [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
Arguments: [d_date_sk#4, d_week_seq#5, d_day_name#6]

(6) CometBroadcastHashJoin
Left output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
Right output [3]: [d_date_sk#4, d_week_seq#5, d_day_name#6]
Arguments: [ss_sold_date_sk#3], [d_date_sk#4], Inner, BuildRight

(7) CometProject
Input [6]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3, d_date_sk#4, d_week_seq#5, d_day_name#6]
Arguments: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6], [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]

(8) CometHashAggregate
Input [4]: [ss_store_sk#1, ss_sales_price#2, d_week_seq#5, d_day_name#6]
Keys [2]: [d_week_seq#5, ss_store_sk#1]
Functions [7]: [partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday   ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday   ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday  ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday   ) THEN ss_sales_price#2 END)), partial_sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))]

(9) CometExchange
Input [9]: [d_week_seq#5, ss_store_sk#1, sum#7, sum#8, sum#9, sum#10, sum#11, sum#12, sum#13]
Arguments: hashpartitioning(d_week_seq#5, ss_store_sk#1, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(10) CometHashAggregate
Input [9]: [d_week_seq#5, ss_store_sk#1, sum#7, sum#8, sum#9, sum#10, sum#11, sum#12, sum#13]
Keys [2]: [d_week_seq#5, ss_store_sk#1]
Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday   ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday   ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday  ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday   ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))]

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

(12) CometFilter
Input [3]: [s_store_sk#14, s_store_id#15, s_store_name#16]
Condition : (isnotnull(s_store_sk#14) AND isnotnull(s_store_id#15))

(13) CometBroadcastExchange
Input [3]: [s_store_sk#14, s_store_id#15, s_store_name#16]
Arguments: [s_store_sk#14, s_store_id#15, s_store_name#16]

(14) CometBroadcastHashJoin
Left output [9]: [d_week_seq#5, ss_store_sk#1, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23]
Right output [3]: [s_store_sk#14, s_store_id#15, s_store_name#16]
Arguments: [ss_store_sk#1], [s_store_sk#14], Inner, BuildRight

(15) CometProject
Input [12]: [d_week_seq#5, ss_store_sk#1, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_sk#14, s_store_id#15, s_store_name#16]
Arguments: [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#15, s_store_name#16], [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#15, s_store_name#16]

(16) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_month_seq#24, d_week_seq#25]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1212), LessThanOrEqual(d_month_seq,1223), IsNotNull(d_week_seq)]
ReadSchema: struct<d_month_seq:int,d_week_seq:int>

(17) CometFilter
Input [2]: [d_month_seq#24, d_week_seq#25]
Condition : (((isnotnull(d_month_seq#24) AND (d_month_seq#24 >= 1212)) AND (d_month_seq#24 <= 1223)) AND isnotnull(d_week_seq#25))

(18) CometProject
Input [2]: [d_month_seq#24, d_week_seq#25]
Arguments: [d_week_seq#25], [d_week_seq#25]

(19) CometBroadcastExchange
Input [1]: [d_week_seq#25]
Arguments: [d_week_seq#25]

(20) CometBroadcastHashJoin
Left output [10]: [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#15, s_store_name#16]
Right output [1]: [d_week_seq#25]
Arguments: [d_week_seq#5], [d_week_seq#25], Inner, BuildRight

(21) CometProject
Input [11]: [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#15, s_store_name#16, d_week_seq#25]
Arguments: [s_store_name1#26, d_week_seq1#27, s_store_id1#28, sun_sales1#29, mon_sales1#30, tue_sales1#31, wed_sales1#32, thu_sales1#33, fri_sales1#34, sat_sales1#35], [s_store_name#16 AS s_store_name1#26, d_week_seq#5 AS d_week_seq1#27, s_store_id#15 AS s_store_id1#28, sun_sales#17 AS sun_sales1#29, mon_sales#18 AS mon_sales1#30, tue_sales#19 AS tue_sales1#31, wed_sales#20 AS wed_sales1#32, thu_sales#21 AS thu_sales1#33, fri_sales#22 AS fri_sales1#34, sat_sales#23 AS sat_sales1#35]

(22) ReusedExchange [Reuses operator id: 9]
Output [9]: [d_week_seq#5, ss_store_sk#1, sum#36, sum#37, sum#38, sum#39, sum#40, sum#41, sum#42]

(23) CometHashAggregate
Input [9]: [d_week_seq#5, ss_store_sk#1, sum#36, sum#37, sum#38, sum#39, sum#40, sum#41, sum#42]
Keys [2]: [d_week_seq#5, ss_store_sk#1]
Functions [7]: [sum(UnscaledValue(CASE WHEN (d_day_name#6 = Sunday   ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Monday   ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Tuesday  ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Wednesday) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Thursday ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Friday   ) THEN ss_sales_price#2 END)), sum(UnscaledValue(CASE WHEN (d_day_name#6 = Saturday ) THEN ss_sales_price#2 END))]

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

(25) CometFilter
Input [2]: [s_store_sk#43, s_store_id#44]
Condition : (isnotnull(s_store_sk#43) AND isnotnull(s_store_id#44))

(26) CometBroadcastExchange
Input [2]: [s_store_sk#43, s_store_id#44]
Arguments: [s_store_sk#43, s_store_id#44]

(27) CometBroadcastHashJoin
Left output [9]: [d_week_seq#5, ss_store_sk#1, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23]
Right output [2]: [s_store_sk#43, s_store_id#44]
Arguments: [ss_store_sk#1], [s_store_sk#43], Inner, BuildRight

(28) CometProject
Input [11]: [d_week_seq#5, ss_store_sk#1, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_sk#43, s_store_id#44]
Arguments: [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#44], [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#44]

(29) CometScan parquet spark_catalog.default.date_dim
Output [2]: [d_month_seq#45, d_week_seq#46]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1224), LessThanOrEqual(d_month_seq,1235), IsNotNull(d_week_seq)]
ReadSchema: struct<d_month_seq:int,d_week_seq:int>

(30) CometFilter
Input [2]: [d_month_seq#45, d_week_seq#46]
Condition : (((isnotnull(d_month_seq#45) AND (d_month_seq#45 >= 1224)) AND (d_month_seq#45 <= 1235)) AND isnotnull(d_week_seq#46))

(31) CometProject
Input [2]: [d_month_seq#45, d_week_seq#46]
Arguments: [d_week_seq#46], [d_week_seq#46]

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

(33) CometBroadcastHashJoin
Left output [9]: [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#44]
Right output [1]: [d_week_seq#46]
Arguments: [d_week_seq#5], [d_week_seq#46], Inner, BuildRight

(34) CometProject
Input [10]: [d_week_seq#5, sun_sales#17, mon_sales#18, tue_sales#19, wed_sales#20, thu_sales#21, fri_sales#22, sat_sales#23, s_store_id#44, d_week_seq#46]
Arguments: [d_week_seq2#47, s_store_id2#48, sun_sales2#49, mon_sales2#50, tue_sales2#51, wed_sales2#52, thu_sales2#53, fri_sales2#54, sat_sales2#55], [d_week_seq#5 AS d_week_seq2#47, s_store_id#44 AS s_store_id2#48, sun_sales#17 AS sun_sales2#49, mon_sales#18 AS mon_sales2#50, tue_sales#19 AS tue_sales2#51, wed_sales#20 AS wed_sales2#52, thu_sales#21 AS thu_sales2#53, fri_sales#22 AS fri_sales2#54, sat_sales#23 AS sat_sales2#55]

(35) CometBroadcastExchange
Input [9]: [d_week_seq2#47, s_store_id2#48, sun_sales2#49, mon_sales2#50, tue_sales2#51, wed_sales2#52, thu_sales2#53, fri_sales2#54, sat_sales2#55]
Arguments: [d_week_seq2#47, s_store_id2#48, sun_sales2#49, mon_sales2#50, tue_sales2#51, wed_sales2#52, thu_sales2#53, fri_sales2#54, sat_sales2#55]

(36) CometBroadcastHashJoin
Left output [10]: [s_store_name1#26, d_week_seq1#27, s_store_id1#28, sun_sales1#29, mon_sales1#30, tue_sales1#31, wed_sales1#32, thu_sales1#33, fri_sales1#34, sat_sales1#35]
Right output [9]: [d_week_seq2#47, s_store_id2#48, sun_sales2#49, mon_sales2#50, tue_sales2#51, wed_sales2#52, thu_sales2#53, fri_sales2#54, sat_sales2#55]
Arguments: [s_store_id1#28, d_week_seq1#27], [s_store_id2#48, (d_week_seq2#47 - 52)], Inner, BuildRight

(37) CometProject
Input [19]: [s_store_name1#26, d_week_seq1#27, s_store_id1#28, sun_sales1#29, mon_sales1#30, tue_sales1#31, wed_sales1#32, thu_sales1#33, fri_sales1#34, sat_sales1#35, d_week_seq2#47, s_store_id2#48, sun_sales2#49, mon_sales2#50, tue_sales2#51, wed_sales2#52, thu_sales2#53, fri_sales2#54, sat_sales2#55]
Arguments: [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#56, (mon_sales1 / mon_sales2)#57, (tue_sales1 / tue_sales2)#58, (wed_sales1 / wed_sales2)#59, (thu_sales1 / thu_sales2)#60, (fri_sales1 / fri_sales2)#61, (sat_sales1 / sat_sales2)#62], [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1#29 / sun_sales2#49) AS (sun_sales1 / sun_sales2)#56, (mon_sales1#30 / mon_sales2#50) AS (mon_sales1 / mon_sales2)#57, (tue_sales1#31 / tue_sales2#51) AS (tue_sales1 / tue_sales2)#58, (wed_sales1#32 / wed_sales2#52) AS (wed_sales1 / wed_sales2)#59, (thu_sales1#33 / thu_sales2#53) AS (thu_sales1 / thu_sales2)#60, (fri_sales1#34 / fri_sales2#54) AS (fri_sales1 / fri_sales2)#61, (sat_sales1#35 / sat_sales2#55) AS (sat_sales1 / sat_sales2)#62]

(38) CometTakeOrderedAndProject
Input [10]: [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#56, (mon_sales1 / mon_sales2)#57, (tue_sales1 / tue_sales2)#58, (wed_sales1 / wed_sales2)#59, (thu_sales1 / thu_sales2)#60, (fri_sales1 / fri_sales2)#61, (sat_sales1 / sat_sales2)#62]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[s_store_name1#26 ASC NULLS FIRST,s_store_id1#28 ASC NULLS FIRST,d_week_seq1#27 ASC NULLS FIRST], output=[s_store_name1#26,s_store_id1#28,d_week_seq1#27,(sun_sales1 / sun_sales2)#56,(mon_sales1 / mon_sales2)#57,(tue_sales1 / tue_sales2)#58,(wed_sales1 / wed_sales2)#59,(thu_sales1 / thu_sales2)#60,(fri_sales1 / fri_sales2)#61,(sat_sales1 / sat_sales2)#62]), [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#56, (mon_sales1 / mon_sales2)#57, (tue_sales1 / tue_sales2)#58, (wed_sales1 / wed_sales2)#59, (thu_sales1 / thu_sales2)#60, (fri_sales1 / fri_sales2)#61, (sat_sales1 / sat_sales2)#62], 100, [s_store_name1#26 ASC NULLS FIRST, s_store_id1#28 ASC NULLS FIRST, d_week_seq1#27 ASC NULLS FIRST], [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#56, (mon_sales1 / mon_sales2)#57, (tue_sales1 / tue_sales2)#58, (wed_sales1 / wed_sales2)#59, (thu_sales1 / thu_sales2)#60, (fri_sales1 / fri_sales2)#61, (sat_sales1 / sat_sales2)#62]

(39) ColumnarToRow [codegen id : 1]
Input [10]: [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#56, (mon_sales1 / mon_sales2)#57, (tue_sales1 / tue_sales2)#58, (wed_sales1 / wed_sales2)#59, (thu_sales1 / thu_sales2)#60, (fri_sales1 / fri_sales2)#61, (sat_sales1 / sat_sales2)#62]

