== Physical Plan ==
* ColumnarToRow (27)
+- CometHashAggregate (26)
   +- CometExchange (25)
      +- CometHashAggregate (24)
         +- CometProject (23)
            +- CometBroadcastHashJoin (22)
               :- CometBroadcastHashJoin (20)
               :  :- CometHashAggregate (16)
               :  :  +- CometExchange (15)
               :  :     +- CometHashAggregate (14)
               :  :        +- CometProject (13)
               :  :           +- CometBroadcastHashJoin (12)
               :  :              :- CometProject (8)
               :  :              :  +- CometBroadcastHashJoin (7)
               :  :              :     :- CometFilter (2)
               :  :              :     :  +- CometNativeScan: `spark_catalog`.`default`.`store_sales` (1)
               :  :              :     +- CometBroadcastExchange (6)
               :  :              :        +- CometProject (5)
               :  :              :           +- CometFilter (4)
               :  :              :              +- CometNativeScan: `spark_catalog`.`default`.`date_dim` (3)
               :  :              +- CometBroadcastExchange (11)
               :  :                 +- CometFilter (10)
               :  :                    +- CometNativeScan: `spark_catalog`.`default`.`customer` (9)
               :  +- CometBroadcastExchange (19)
               :     +- CometHashAggregate (18)
               :        +- ReusedExchange (17)
               +- ReusedExchange (21)


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

(2) CometFilter
Input [2]: [ss_customer_sk#1, ss_sold_date_sk#2]
Condition : isnotnull(ss_customer_sk#1)

(3) CometNativeScan: `spark_catalog`.`default`.`date_dim`
Output [3]: [d_date_sk#3, d_date#4, d_month_seq#5]
Arguments: [d_date_sk#3, d_date#4, d_month_seq#5]

(4) CometFilter
Input [3]: [d_date_sk#3, d_date#4, d_month_seq#5]
Condition : (((isnotnull(d_month_seq#5) AND (d_month_seq#5 >= 1200)) AND (d_month_seq#5 <= 1211)) AND isnotnull(d_date_sk#3))

(5) CometProject
Input [3]: [d_date_sk#3, d_date#4, d_month_seq#5]
Arguments: [d_date_sk#3, d_date#4], [d_date_sk#3, d_date#4]

(6) CometBroadcastExchange
Input [2]: [d_date_sk#3, d_date#4]
Arguments: [d_date_sk#3, d_date#4]

(7) CometBroadcastHashJoin
Left output [2]: [ss_customer_sk#1, ss_sold_date_sk#2]
Right output [2]: [d_date_sk#3, d_date#4]
Arguments: [ss_sold_date_sk#2], [d_date_sk#3], Inner, BuildRight

(8) CometProject
Input [4]: [ss_customer_sk#1, ss_sold_date_sk#2, d_date_sk#3, d_date#4]
Arguments: [ss_customer_sk#1, d_date#4], [ss_customer_sk#1, d_date#4]

(9) CometNativeScan: `spark_catalog`.`default`.`customer`
Output [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8]
Arguments: [c_customer_sk#6, c_first_name#7, c_last_name#8]

(10) CometFilter
Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8]
Condition : isnotnull(c_customer_sk#6)

(11) CometBroadcastExchange
Input [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8]
Arguments: [c_customer_sk#6, c_first_name#7, c_last_name#8]

(12) CometBroadcastHashJoin
Left output [2]: [ss_customer_sk#1, d_date#4]
Right output [3]: [c_customer_sk#6, c_first_name#7, c_last_name#8]
Arguments: [ss_customer_sk#1], [c_customer_sk#6], Inner, BuildRight

(13) CometProject
Input [5]: [ss_customer_sk#1, d_date#4, c_customer_sk#6, c_first_name#7, c_last_name#8]
Arguments: [c_last_name#8, c_first_name#7, d_date#4], [c_last_name#8, c_first_name#7, d_date#4]

(14) CometHashAggregate
Input [3]: [c_last_name#8, c_first_name#7, d_date#4]
Keys [3]: [c_last_name#8, c_first_name#7, d_date#4]
Functions: []

(15) CometExchange
Input [3]: [c_last_name#8, c_first_name#7, d_date#4]
Arguments: hashpartitioning(c_last_name#8, c_first_name#7, d_date#4, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(16) CometHashAggregate
Input [3]: [c_last_name#8, c_first_name#7, d_date#4]
Keys [3]: [c_last_name#8, c_first_name#7, d_date#4]
Functions: []

(17) ReusedExchange [Reuses operator id: 15]
Output [3]: [c_last_name#9, c_first_name#10, d_date#11]

(18) CometHashAggregate
Input [3]: [c_last_name#9, c_first_name#10, d_date#11]
Keys [3]: [c_last_name#9, c_first_name#10, d_date#11]
Functions: []

(19) CometBroadcastExchange
Input [3]: [c_last_name#9, c_first_name#10, d_date#11]
Arguments: [c_last_name#9, c_first_name#10, d_date#11]

(20) CometBroadcastHashJoin
Left output [3]: [c_last_name#8, c_first_name#7, d_date#4]
Right output [3]: [c_last_name#9, c_first_name#10, d_date#11]
Arguments: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#4, 1970-01-01), isnull(d_date#4)], [coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#10, ), isnull(c_first_name#10), coalesce(d_date#11, 1970-01-01), isnull(d_date#11)], LeftSemi, BuildRight

(21) ReusedExchange [Reuses operator id: 19]
Output [3]: [c_last_name#12, c_first_name#13, d_date#14]

(22) CometBroadcastHashJoin
Left output [3]: [c_last_name#8, c_first_name#7, d_date#4]
Right output [3]: [c_last_name#12, c_first_name#13, d_date#14]
Arguments: [coalesce(c_last_name#8, ), isnull(c_last_name#8), coalesce(c_first_name#7, ), isnull(c_first_name#7), coalesce(d_date#4, 1970-01-01), isnull(d_date#4)], [coalesce(c_last_name#12, ), isnull(c_last_name#12), coalesce(c_first_name#13, ), isnull(c_first_name#13), coalesce(d_date#14, 1970-01-01), isnull(d_date#14)], LeftSemi, BuildRight

(23) CometProject
Input [3]: [c_last_name#8, c_first_name#7, d_date#4]

(24) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(25) CometExchange
Input [1]: [count#15]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(26) CometHashAggregate
Input [1]: [count#15]
Keys: []
Functions [1]: [count(1)]

(27) ColumnarToRow [codegen id : 1]
Input [1]: [count(1)#16]

