== 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)
         :     :     :              :  +- CometNativeScan: `spark_catalog`.`default`.`store_sales` (1)
         :     :     :              +- CometBroadcastExchange (5)
         :     :     :                 +- CometFilter (4)
         :     :     :                    +- CometNativeScan: `spark_catalog`.`default`.`date_dim` (3)
         :     :     +- CometBroadcastExchange (13)
         :     :        +- CometFilter (12)
         :     :           +- CometNativeScan: `spark_catalog`.`default`.`store` (11)
         :     +- CometBroadcastExchange (19)
         :        +- CometProject (18)
         :           +- CometFilter (17)
         :              +- CometNativeScan: `spark_catalog`.`default`.`date_dim` (16)
         +- CometBroadcastExchange (35)
            +- CometProject (34)
               +- CometBroadcastHashJoin (33)
                  :- CometProject (28)
                  :  +- CometBroadcastHashJoin (27)
                  :     :- CometHashAggregate (23)
                  :     :  +- ReusedExchange (22)
                  :     +- CometBroadcastExchange (26)
                  :        +- CometFilter (25)
                  :           +- CometNativeScan: `spark_catalog`.`default`.`store` (24)
                  +- CometBroadcastExchange (32)
                     +- CometProject (31)
                        +- CometFilter (30)
                           +- CometNativeScan: `spark_catalog`.`default`.`date_dim` (29)


(1) CometNativeScan: `spark_catalog`.`default`.`store_sales`
Output [3]: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]
Arguments: [ss_store_sk#1, ss_sales_price#2, ss_sold_date_sk#3]

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

(3) CometNativeScan: `spark_catalog`.`default`.`date_dim`
Output [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]

(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) CometNativeScan: `spark_catalog`.`default`.`store`
Output [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]

(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) CometNativeScan: `spark_catalog`.`default`.`date_dim`
Output [2]: [d_month_seq#24, d_week_seq#25]
Arguments: [d_month_seq#24, d_week_seq#25]

(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#36, ss_store_sk#37, sum#38, sum#39, sum#40, sum#41, sum#42, sum#43, sum#44]

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

(24) CometNativeScan: `spark_catalog`.`default`.`store`
Output [2]: [s_store_sk#47, s_store_id#48]
Arguments: [s_store_sk#47, s_store_id#48]

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

(26) CometBroadcastExchange
Input [2]: [s_store_sk#47, s_store_id#48]
Arguments: [s_store_sk#47, s_store_id#48]

(27) CometBroadcastHashJoin
Left output [9]: [d_week_seq#36, ss_store_sk#37, sun_sales#49, mon_sales#50, tue_sales#51, wed_sales#52, thu_sales#53, fri_sales#54, sat_sales#55]
Right output [2]: [s_store_sk#47, s_store_id#48]
Arguments: [ss_store_sk#37], [s_store_sk#47], Inner, BuildRight

(28) CometProject
Input [11]: [d_week_seq#36, ss_store_sk#37, sun_sales#49, mon_sales#50, tue_sales#51, wed_sales#52, thu_sales#53, fri_sales#54, sat_sales#55, s_store_sk#47, s_store_id#48]
Arguments: [d_week_seq#36, sun_sales#49, mon_sales#50, tue_sales#51, wed_sales#52, thu_sales#53, fri_sales#54, sat_sales#55, s_store_id#48], [d_week_seq#36, sun_sales#49, mon_sales#50, tue_sales#51, wed_sales#52, thu_sales#53, fri_sales#54, sat_sales#55, s_store_id#48]

(29) CometNativeScan: `spark_catalog`.`default`.`date_dim`
Output [2]: [d_month_seq#56, d_week_seq#57]
Arguments: [d_month_seq#56, d_week_seq#57]

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

(31) CometProject
Input [2]: [d_month_seq#56, d_week_seq#57]
Arguments: [d_week_seq#57], [d_week_seq#57]

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

(33) CometBroadcastHashJoin
Left output [9]: [d_week_seq#36, sun_sales#49, mon_sales#50, tue_sales#51, wed_sales#52, thu_sales#53, fri_sales#54, sat_sales#55, s_store_id#48]
Right output [1]: [d_week_seq#57]
Arguments: [d_week_seq#36], [d_week_seq#57], Inner, BuildRight

(34) CometProject
Input [10]: [d_week_seq#36, sun_sales#49, mon_sales#50, tue_sales#51, wed_sales#52, thu_sales#53, fri_sales#54, sat_sales#55, s_store_id#48, d_week_seq#57]
Arguments: [d_week_seq2#58, s_store_id2#59, sun_sales2#60, mon_sales2#61, tue_sales2#62, wed_sales2#63, thu_sales2#64, fri_sales2#65, sat_sales2#66], [d_week_seq#36 AS d_week_seq2#58, s_store_id#48 AS s_store_id2#59, sun_sales#49 AS sun_sales2#60, mon_sales#50 AS mon_sales2#61, tue_sales#51 AS tue_sales2#62, wed_sales#52 AS wed_sales2#63, thu_sales#53 AS thu_sales2#64, fri_sales#54 AS fri_sales2#65, sat_sales#55 AS sat_sales2#66]

(35) CometBroadcastExchange
Input [9]: [d_week_seq2#58, s_store_id2#59, sun_sales2#60, mon_sales2#61, tue_sales2#62, wed_sales2#63, thu_sales2#64, fri_sales2#65, sat_sales2#66]
Arguments: [d_week_seq2#58, s_store_id2#59, sun_sales2#60, mon_sales2#61, tue_sales2#62, wed_sales2#63, thu_sales2#64, fri_sales2#65, sat_sales2#66]

(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#58, s_store_id2#59, sun_sales2#60, mon_sales2#61, tue_sales2#62, wed_sales2#63, thu_sales2#64, fri_sales2#65, sat_sales2#66]
Arguments: [s_store_id1#28, d_week_seq1#27], [s_store_id2#59, (d_week_seq2#58 - 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#58, s_store_id2#59, sun_sales2#60, mon_sales2#61, tue_sales2#62, wed_sales2#63, thu_sales2#64, fri_sales2#65, sat_sales2#66]
Arguments: [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#67, (mon_sales1 / mon_sales2)#68, (tue_sales1 / tue_sales2)#69, (wed_sales1 / wed_sales2)#70, (thu_sales1 / thu_sales2)#71, (fri_sales1 / fri_sales2)#72, (sat_sales1 / sat_sales2)#73], [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1#29 / sun_sales2#60) AS (sun_sales1 / sun_sales2)#67, (mon_sales1#30 / mon_sales2#61) AS (mon_sales1 / mon_sales2)#68, (tue_sales1#31 / tue_sales2#62) AS (tue_sales1 / tue_sales2)#69, (wed_sales1#32 / wed_sales2#63) AS (wed_sales1 / wed_sales2)#70, (thu_sales1#33 / thu_sales2#64) AS (thu_sales1 / thu_sales2)#71, (fri_sales1#34 / fri_sales2#65) AS (fri_sales1 / fri_sales2)#72, (sat_sales1#35 / sat_sales2#66) AS (sat_sales1 / sat_sales2)#73]

(38) CometTakeOrderedAndProject
Input [10]: [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#67, (mon_sales1 / mon_sales2)#68, (tue_sales1 / tue_sales2)#69, (wed_sales1 / wed_sales2)#70, (thu_sales1 / thu_sales2)#71, (fri_sales1 / fri_sales2)#72, (sat_sales1 / sat_sales2)#73]
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)#67,(mon_sales1 / mon_sales2)#68,(tue_sales1 / tue_sales2)#69,(wed_sales1 / wed_sales2)#70,(thu_sales1 / thu_sales2)#71,(fri_sales1 / fri_sales2)#72,(sat_sales1 / sat_sales2)#73]), [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#67, (mon_sales1 / mon_sales2)#68, (tue_sales1 / tue_sales2)#69, (wed_sales1 / wed_sales2)#70, (thu_sales1 / thu_sales2)#71, (fri_sales1 / fri_sales2)#72, (sat_sales1 / sat_sales2)#73], 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)#67, (mon_sales1 / mon_sales2)#68, (tue_sales1 / tue_sales2)#69, (wed_sales1 / wed_sales2)#70, (thu_sales1 / thu_sales2)#71, (fri_sales1 / fri_sales2)#72, (sat_sales1 / sat_sales2)#73]

(39) ColumnarToRow [codegen id : 1]
Input [10]: [s_store_name1#26, s_store_id1#28, d_week_seq1#27, (sun_sales1 / sun_sales2)#67, (mon_sales1 / mon_sales2)#68, (tue_sales1 / tue_sales2)#69, (wed_sales1 / wed_sales2)#70, (thu_sales1 / thu_sales2)#71, (fri_sales1 / fri_sales2)#72, (sat_sales1 / sat_sales2)#73]

