== Physical Plan ==
* ColumnarToRow (95)
+- CometTakeOrderedAndProject (94)
   +- CometProject (93)
      +- CometBroadcastHashJoin (92)
         :- CometProject (79)
         :  +- CometBroadcastHashJoin (78)
         :     :- CometProject (62)
         :     :  +- CometBroadcastHashJoin (61)
         :     :     :- CometProject (48)
         :     :     :  +- CometBroadcastHashJoin (47)
         :     :     :     :- CometBroadcastHashJoin (31)
         :     :     :     :  :- CometFilter (16)
         :     :     :     :  :  +- CometHashAggregate (15)
         :     :     :     :  :     +- CometExchange (14)
         :     :     :     :  :        +- CometHashAggregate (13)
         :     :     :     :  :           +- CometProject (12)
         :     :     :     :  :              +- CometBroadcastHashJoin (11)
         :     :     :     :  :                 :- CometProject (7)
         :     :     :     :  :                 :  +- CometBroadcastHashJoin (6)
         :     :     :     :  :                 :     :- CometFilter (2)
         :     :     :     :  :                 :     :  +- CometScan parquet spark_catalog.default.customer (1)
         :     :     :     :  :                 :     +- CometBroadcastExchange (5)
         :     :     :     :  :                 :        +- CometFilter (4)
         :     :     :     :  :                 :           +- CometScan parquet spark_catalog.default.store_sales (3)
         :     :     :     :  :                 +- CometBroadcastExchange (10)
         :     :     :     :  :                    +- CometFilter (9)
         :     :     :     :  :                       +- CometScan parquet spark_catalog.default.date_dim (8)
         :     :     :     :  +- CometBroadcastExchange (30)
         :     :     :     :     +- CometHashAggregate (29)
         :     :     :     :        +- CometExchange (28)
         :     :     :     :           +- CometHashAggregate (27)
         :     :     :     :              +- CometProject (26)
         :     :     :     :                 +- CometBroadcastHashJoin (25)
         :     :     :     :                    :- CometProject (21)
         :     :     :     :                    :  +- CometBroadcastHashJoin (20)
         :     :     :     :                    :     :- CometFilter (18)
         :     :     :     :                    :     :  +- CometScan parquet spark_catalog.default.customer (17)
         :     :     :     :                    :     +- ReusedExchange (19)
         :     :     :     :                    +- CometBroadcastExchange (24)
         :     :     :     :                       +- CometFilter (23)
         :     :     :     :                          +- CometScan parquet spark_catalog.default.date_dim (22)
         :     :     :     +- CometBroadcastExchange (46)
         :     :     :        +- CometFilter (45)
         :     :     :           +- CometHashAggregate (44)
         :     :     :              +- CometExchange (43)
         :     :     :                 +- CometHashAggregate (42)
         :     :     :                    +- CometProject (41)
         :     :     :                       +- CometBroadcastHashJoin (40)
         :     :     :                          :- CometProject (38)
         :     :     :                          :  +- CometBroadcastHashJoin (37)
         :     :     :                          :     :- CometFilter (33)
         :     :     :                          :     :  +- CometScan parquet spark_catalog.default.customer (32)
         :     :     :                          :     +- CometBroadcastExchange (36)
         :     :     :                          :        +- CometFilter (35)
         :     :     :                          :           +- CometScan parquet spark_catalog.default.catalog_sales (34)
         :     :     :                          +- ReusedExchange (39)
         :     :     +- CometBroadcastExchange (60)
         :     :        +- CometHashAggregate (59)
         :     :           +- CometExchange (58)
         :     :              +- CometHashAggregate (57)
         :     :                 +- CometProject (56)
         :     :                    +- CometBroadcastHashJoin (55)
         :     :                       :- CometProject (53)
         :     :                       :  +- CometBroadcastHashJoin (52)
         :     :                       :     :- CometFilter (50)
         :     :                       :     :  +- CometScan parquet spark_catalog.default.customer (49)
         :     :                       :     +- ReusedExchange (51)
         :     :                       +- ReusedExchange (54)
         :     +- CometBroadcastExchange (77)
         :        +- CometFilter (76)
         :           +- CometHashAggregate (75)
         :              +- CometExchange (74)
         :                 +- CometHashAggregate (73)
         :                    +- CometProject (72)
         :                       +- CometBroadcastHashJoin (71)
         :                          :- CometProject (69)
         :                          :  +- CometBroadcastHashJoin (68)
         :                          :     :- CometFilter (64)
         :                          :     :  +- CometScan parquet spark_catalog.default.customer (63)
         :                          :     +- CometBroadcastExchange (67)
         :                          :        +- CometFilter (66)
         :                          :           +- CometScan parquet spark_catalog.default.web_sales (65)
         :                          +- ReusedExchange (70)
         +- CometBroadcastExchange (91)
            +- CometHashAggregate (90)
               +- CometExchange (89)
                  +- CometHashAggregate (88)
                     +- CometProject (87)
                        +- CometBroadcastHashJoin (86)
                           :- CometProject (84)
                           :  +- CometBroadcastHashJoin (83)
                           :     :- CometFilter (81)
                           :     :  +- CometScan parquet spark_catalog.default.customer (80)
                           :     +- ReusedExchange (82)
                           +- ReusedExchange (85)


(1) CometScan parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
ReadSchema: struct<c_customer_sk:int,c_customer_id:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string,c_birth_country:string,c_login:string,c_email_address:string>

(2) CometFilter
Input [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
Condition : (isnotnull(c_customer_sk#1) AND isnotnull(c_customer_id#2))

(3) CometScan parquet spark_catalog.default.store_sales
Output [6]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#14)]
PushedFilters: [IsNotNull(ss_customer_sk)]
ReadSchema: struct<ss_customer_sk:int,ss_ext_discount_amt:decimal(7,2),ss_ext_sales_price:decimal(7,2),ss_ext_wholesale_cost:decimal(7,2),ss_ext_list_price:decimal(7,2)>

(4) CometFilter
Input [6]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]
Condition : isnotnull(ss_customer_sk#9)

(5) CometBroadcastExchange
Input [6]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]
Arguments: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]

(6) CometBroadcastHashJoin
Left output [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
Right output [6]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]
Arguments: [c_customer_sk#1], [ss_customer_sk#9], Inner, BuildRight

(7) CometProject
Input [14]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]
Arguments: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14], [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]

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

(9) CometFilter
Input [2]: [d_date_sk#15, d_year#16]
Condition : ((isnotnull(d_year#16) AND (d_year#16 = 2001)) AND isnotnull(d_date_sk#15))

(10) CometBroadcastExchange
Input [2]: [d_date_sk#15, d_year#16]
Arguments: [d_date_sk#15, d_year#16]

(11) CometBroadcastHashJoin
Left output [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14]
Right output [2]: [d_date_sk#15, d_year#16]
Arguments: [ss_sold_date_sk#14], [d_date_sk#15], Inner, BuildRight

(12) CometProject
Input [14]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, ss_sold_date_sk#14, d_date_sk#15, d_year#16]
Arguments: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, d_year#16], [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, d_year#16]

(13) CometHashAggregate
Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_sales_price#11, ss_ext_wholesale_cost#12, ss_ext_list_price#13, d_year#16]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16]
Functions [1]: [partial_sum(((((ss_ext_list_price#13 - ss_ext_wholesale_cost#12) - ss_ext_discount_amt#10) + ss_ext_sales_price#11) / 2))]

(14) CometExchange
Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, sum#17, isEmpty#18]
Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(15) CometHashAggregate
Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, sum#17, isEmpty#18]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16]
Functions [1]: [sum(((((ss_ext_list_price#13 - ss_ext_wholesale_cost#12) - ss_ext_discount_amt#10) + ss_ext_sales_price#11) / 2))]

(16) CometFilter
Input [2]: [customer_id#19, year_total#20]
Condition : (isnotnull(year_total#20) AND (year_total#20 > 0.000000))

(17) CometScan parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
ReadSchema: struct<c_customer_sk:int,c_customer_id:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string,c_birth_country:string,c_login:string,c_email_address:string>

(18) CometFilter
Input [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28]
Condition : (isnotnull(c_customer_sk#21) AND isnotnull(c_customer_id#22))

(19) ReusedExchange [Reuses operator id: 5]
Output [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34]

(20) CometBroadcastHashJoin
Left output [8]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28]
Right output [6]: [ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34]
Arguments: [c_customer_sk#21], [ss_customer_sk#29], Inner, BuildRight

(21) CometProject
Input [14]: [c_customer_sk#21, c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_customer_sk#29, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34]
Arguments: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34], [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34]

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

(23) CometFilter
Input [2]: [d_date_sk#35, d_year#36]
Condition : ((isnotnull(d_year#36) AND (d_year#36 = 2002)) AND isnotnull(d_date_sk#35))

(24) CometBroadcastExchange
Input [2]: [d_date_sk#35, d_year#36]
Arguments: [d_date_sk#35, d_year#36]

(25) CometBroadcastHashJoin
Left output [12]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34]
Right output [2]: [d_date_sk#35, d_year#36]
Arguments: [ss_sold_date_sk#34], [d_date_sk#35], Inner, BuildRight

(26) CometProject
Input [14]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, ss_sold_date_sk#34, d_date_sk#35, d_year#36]
Arguments: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#36], [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#36]

(27) CometHashAggregate
Input [12]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, ss_ext_discount_amt#30, ss_ext_sales_price#31, ss_ext_wholesale_cost#32, ss_ext_list_price#33, d_year#36]
Keys [8]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, d_year#36]
Functions [1]: [partial_sum(((((ss_ext_list_price#33 - ss_ext_wholesale_cost#32) - ss_ext_discount_amt#30) + ss_ext_sales_price#31) / 2))]

(28) CometExchange
Input [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, d_year#36, sum#37, isEmpty#38]
Arguments: hashpartitioning(c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, d_year#36, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(29) CometHashAggregate
Input [10]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, d_year#36, sum#37, isEmpty#38]
Keys [8]: [c_customer_id#22, c_first_name#23, c_last_name#24, c_preferred_cust_flag#25, c_birth_country#26, c_login#27, c_email_address#28, d_year#36]
Functions [1]: [sum(((((ss_ext_list_price#33 - ss_ext_wholesale_cost#32) - ss_ext_discount_amt#30) + ss_ext_sales_price#31) / 2))]

(30) CometBroadcastExchange
Input [8]: [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46]
Arguments: [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46]

(31) CometBroadcastHashJoin
Left output [2]: [customer_id#19, year_total#20]
Right output [8]: [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46]
Arguments: [customer_id#19], [customer_id#39], Inner, BuildRight

(32) CometScan parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
ReadSchema: struct<c_customer_sk:int,c_customer_id:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string,c_birth_country:string,c_login:string,c_email_address:string>

(33) CometFilter
Input [8]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54]
Condition : (isnotnull(c_customer_sk#47) AND isnotnull(c_customer_id#48))

(34) CometScan parquet spark_catalog.default.catalog_sales
Output [6]: [cs_bill_customer_sk#55, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#60)]
PushedFilters: [IsNotNull(cs_bill_customer_sk)]
ReadSchema: struct<cs_bill_customer_sk:int,cs_ext_discount_amt:decimal(7,2),cs_ext_sales_price:decimal(7,2),cs_ext_wholesale_cost:decimal(7,2),cs_ext_list_price:decimal(7,2)>

(35) CometFilter
Input [6]: [cs_bill_customer_sk#55, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]
Condition : isnotnull(cs_bill_customer_sk#55)

(36) CometBroadcastExchange
Input [6]: [cs_bill_customer_sk#55, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]
Arguments: [cs_bill_customer_sk#55, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]

(37) CometBroadcastHashJoin
Left output [8]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54]
Right output [6]: [cs_bill_customer_sk#55, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]
Arguments: [c_customer_sk#47], [cs_bill_customer_sk#55], Inner, BuildRight

(38) CometProject
Input [14]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_bill_customer_sk#55, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]
Arguments: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60], [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]

(39) ReusedExchange [Reuses operator id: 10]
Output [2]: [d_date_sk#61, d_year#62]

(40) CometBroadcastHashJoin
Left output [12]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60]
Right output [2]: [d_date_sk#61, d_year#62]
Arguments: [cs_sold_date_sk#60], [d_date_sk#61], Inner, BuildRight

(41) CometProject
Input [14]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, cs_sold_date_sk#60, d_date_sk#61, d_year#62]
Arguments: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, d_year#62], [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, d_year#62]

(42) CometHashAggregate
Input [12]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, cs_ext_discount_amt#56, cs_ext_sales_price#57, cs_ext_wholesale_cost#58, cs_ext_list_price#59, d_year#62]
Keys [8]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#62]
Functions [1]: [partial_sum(((((cs_ext_list_price#59 - cs_ext_wholesale_cost#58) - cs_ext_discount_amt#56) + cs_ext_sales_price#57) / 2))]

(43) CometExchange
Input [10]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#62, sum#63, isEmpty#64]
Arguments: hashpartitioning(c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#62, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=3]

(44) CometHashAggregate
Input [10]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#62, sum#63, isEmpty#64]
Keys [8]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#62]
Functions [1]: [sum(((((cs_ext_list_price#59 - cs_ext_wholesale_cost#58) - cs_ext_discount_amt#56) + cs_ext_sales_price#57) / 2))]

(45) CometFilter
Input [2]: [customer_id#65, year_total#66]
Condition : (isnotnull(year_total#66) AND (year_total#66 > 0.000000))

(46) CometBroadcastExchange
Input [2]: [customer_id#65, year_total#66]
Arguments: [customer_id#65, year_total#66]

(47) CometBroadcastHashJoin
Left output [10]: [customer_id#19, year_total#20, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46]
Right output [2]: [customer_id#65, year_total#66]
Arguments: [customer_id#19], [customer_id#65], Inner, BuildRight

(48) CometProject
Input [12]: [customer_id#19, year_total#20, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46, customer_id#65, year_total#66]
Arguments: [customer_id#19, year_total#20, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46, year_total#66], [customer_id#19, year_total#20, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46, year_total#66]

(49) CometScan parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#67, c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
ReadSchema: struct<c_customer_sk:int,c_customer_id:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string,c_birth_country:string,c_login:string,c_email_address:string>

(50) CometFilter
Input [8]: [c_customer_sk#67, c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74]
Condition : (isnotnull(c_customer_sk#67) AND isnotnull(c_customer_id#68))

(51) ReusedExchange [Reuses operator id: 36]
Output [6]: [cs_bill_customer_sk#75, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, cs_sold_date_sk#80]

(52) CometBroadcastHashJoin
Left output [8]: [c_customer_sk#67, c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74]
Right output [6]: [cs_bill_customer_sk#75, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, cs_sold_date_sk#80]
Arguments: [c_customer_sk#67], [cs_bill_customer_sk#75], Inner, BuildRight

(53) CometProject
Input [14]: [c_customer_sk#67, c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_bill_customer_sk#75, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, cs_sold_date_sk#80]
Arguments: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, cs_sold_date_sk#80], [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, cs_sold_date_sk#80]

(54) ReusedExchange [Reuses operator id: 24]
Output [2]: [d_date_sk#81, d_year#82]

(55) CometBroadcastHashJoin
Left output [12]: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, cs_sold_date_sk#80]
Right output [2]: [d_date_sk#81, d_year#82]
Arguments: [cs_sold_date_sk#80], [d_date_sk#81], Inner, BuildRight

(56) CometProject
Input [14]: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, cs_sold_date_sk#80, d_date_sk#81, d_year#82]
Arguments: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, d_year#82], [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, d_year#82]

(57) CometHashAggregate
Input [12]: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, cs_ext_discount_amt#76, cs_ext_sales_price#77, cs_ext_wholesale_cost#78, cs_ext_list_price#79, d_year#82]
Keys [8]: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, d_year#82]
Functions [1]: [partial_sum(((((cs_ext_list_price#79 - cs_ext_wholesale_cost#78) - cs_ext_discount_amt#76) + cs_ext_sales_price#77) / 2))]

(58) CometExchange
Input [10]: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, d_year#82, sum#83, isEmpty#84]
Arguments: hashpartitioning(c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, d_year#82, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=4]

(59) CometHashAggregate
Input [10]: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, d_year#82, sum#83, isEmpty#84]
Keys [8]: [c_customer_id#68, c_first_name#69, c_last_name#70, c_preferred_cust_flag#71, c_birth_country#72, c_login#73, c_email_address#74, d_year#82]
Functions [1]: [sum(((((cs_ext_list_price#79 - cs_ext_wholesale_cost#78) - cs_ext_discount_amt#76) + cs_ext_sales_price#77) / 2))]

(60) CometBroadcastExchange
Input [2]: [customer_id#85, year_total#86]
Arguments: [customer_id#85, year_total#86]

(61) CometBroadcastHashJoin
Left output [11]: [customer_id#19, year_total#20, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46, year_total#66]
Right output [2]: [customer_id#85, year_total#86]
Arguments: [customer_id#19], [customer_id#85], Inner, (CASE WHEN (year_total#66 > 0.000000) THEN (year_total#86 / year_total#66) END > CASE WHEN (year_total#20 > 0.000000) THEN (year_total#46 / year_total#20) END), BuildRight

(62) CometProject
Input [13]: [customer_id#19, year_total#20, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#46, year_total#66, customer_id#85, year_total#86]
Arguments: [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86], [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86]

(63) CometScan parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#87, c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
ReadSchema: struct<c_customer_sk:int,c_customer_id:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string,c_birth_country:string,c_login:string,c_email_address:string>

(64) CometFilter
Input [8]: [c_customer_sk#87, c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94]
Condition : (isnotnull(c_customer_sk#87) AND isnotnull(c_customer_id#88))

(65) CometScan parquet spark_catalog.default.web_sales
Output [6]: [ws_bill_customer_sk#95, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#100)]
PushedFilters: [IsNotNull(ws_bill_customer_sk)]
ReadSchema: struct<ws_bill_customer_sk:int,ws_ext_discount_amt:decimal(7,2),ws_ext_sales_price:decimal(7,2),ws_ext_wholesale_cost:decimal(7,2),ws_ext_list_price:decimal(7,2)>

(66) CometFilter
Input [6]: [ws_bill_customer_sk#95, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]
Condition : isnotnull(ws_bill_customer_sk#95)

(67) CometBroadcastExchange
Input [6]: [ws_bill_customer_sk#95, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]
Arguments: [ws_bill_customer_sk#95, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]

(68) CometBroadcastHashJoin
Left output [8]: [c_customer_sk#87, c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94]
Right output [6]: [ws_bill_customer_sk#95, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]
Arguments: [c_customer_sk#87], [ws_bill_customer_sk#95], Inner, BuildRight

(69) CometProject
Input [14]: [c_customer_sk#87, c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_bill_customer_sk#95, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]
Arguments: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100], [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]

(70) ReusedExchange [Reuses operator id: 10]
Output [2]: [d_date_sk#101, d_year#102]

(71) CometBroadcastHashJoin
Left output [12]: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100]
Right output [2]: [d_date_sk#101, d_year#102]
Arguments: [ws_sold_date_sk#100], [d_date_sk#101], Inner, BuildRight

(72) CometProject
Input [14]: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, ws_sold_date_sk#100, d_date_sk#101, d_year#102]
Arguments: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, d_year#102], [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, d_year#102]

(73) CometHashAggregate
Input [12]: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, ws_ext_discount_amt#96, ws_ext_sales_price#97, ws_ext_wholesale_cost#98, ws_ext_list_price#99, d_year#102]
Keys [8]: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, d_year#102]
Functions [1]: [partial_sum(((((ws_ext_list_price#99 - ws_ext_wholesale_cost#98) - ws_ext_discount_amt#96) + ws_ext_sales_price#97) / 2))]

(74) CometExchange
Input [10]: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, d_year#102, sum#103, isEmpty#104]
Arguments: hashpartitioning(c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, d_year#102, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=5]

(75) CometHashAggregate
Input [10]: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, d_year#102, sum#103, isEmpty#104]
Keys [8]: [c_customer_id#88, c_first_name#89, c_last_name#90, c_preferred_cust_flag#91, c_birth_country#92, c_login#93, c_email_address#94, d_year#102]
Functions [1]: [sum(((((ws_ext_list_price#99 - ws_ext_wholesale_cost#98) - ws_ext_discount_amt#96) + ws_ext_sales_price#97) / 2))]

(76) CometFilter
Input [2]: [customer_id#105, year_total#106]
Condition : (isnotnull(year_total#106) AND (year_total#106 > 0.000000))

(77) CometBroadcastExchange
Input [2]: [customer_id#105, year_total#106]
Arguments: [customer_id#105, year_total#106]

(78) CometBroadcastHashJoin
Left output [10]: [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86]
Right output [2]: [customer_id#105, year_total#106]
Arguments: [customer_id#19], [customer_id#105], Inner, BuildRight

(79) CometProject
Input [12]: [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86, customer_id#105, year_total#106]
Arguments: [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86, year_total#106], [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86, year_total#106]

(80) CometScan parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#107, c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_customer_id)]
ReadSchema: struct<c_customer_sk:int,c_customer_id:string,c_first_name:string,c_last_name:string,c_preferred_cust_flag:string,c_birth_country:string,c_login:string,c_email_address:string>

(81) CometFilter
Input [8]: [c_customer_sk#107, c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114]
Condition : (isnotnull(c_customer_sk#107) AND isnotnull(c_customer_id#108))

(82) ReusedExchange [Reuses operator id: 67]
Output [6]: [ws_bill_customer_sk#115, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, ws_sold_date_sk#120]

(83) CometBroadcastHashJoin
Left output [8]: [c_customer_sk#107, c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114]
Right output [6]: [ws_bill_customer_sk#115, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, ws_sold_date_sk#120]
Arguments: [c_customer_sk#107], [ws_bill_customer_sk#115], Inner, BuildRight

(84) CometProject
Input [14]: [c_customer_sk#107, c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_bill_customer_sk#115, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, ws_sold_date_sk#120]
Arguments: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, ws_sold_date_sk#120], [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, ws_sold_date_sk#120]

(85) ReusedExchange [Reuses operator id: 24]
Output [2]: [d_date_sk#121, d_year#122]

(86) CometBroadcastHashJoin
Left output [12]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, ws_sold_date_sk#120]
Right output [2]: [d_date_sk#121, d_year#122]
Arguments: [ws_sold_date_sk#120], [d_date_sk#121], Inner, BuildRight

(87) CometProject
Input [14]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, ws_sold_date_sk#120, d_date_sk#121, d_year#122]
Arguments: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, d_year#122], [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, d_year#122]

(88) CometHashAggregate
Input [12]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, ws_ext_discount_amt#116, ws_ext_sales_price#117, ws_ext_wholesale_cost#118, ws_ext_list_price#119, d_year#122]
Keys [8]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#122]
Functions [1]: [partial_sum(((((ws_ext_list_price#119 - ws_ext_wholesale_cost#118) - ws_ext_discount_amt#116) + ws_ext_sales_price#117) / 2))]

(89) CometExchange
Input [10]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#122, sum#123, isEmpty#124]
Arguments: hashpartitioning(c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#122, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=6]

(90) CometHashAggregate
Input [10]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#122, sum#123, isEmpty#124]
Keys [8]: [c_customer_id#108, c_first_name#109, c_last_name#110, c_preferred_cust_flag#111, c_birth_country#112, c_login#113, c_email_address#114, d_year#122]
Functions [1]: [sum(((((ws_ext_list_price#119 - ws_ext_wholesale_cost#118) - ws_ext_discount_amt#116) + ws_ext_sales_price#117) / 2))]

(91) CometBroadcastExchange
Input [2]: [customer_id#125, year_total#126]
Arguments: [customer_id#125, year_total#126]

(92) CometBroadcastHashJoin
Left output [11]: [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86, year_total#106]
Right output [2]: [customer_id#125, year_total#126]
Arguments: [customer_id#19], [customer_id#125], Inner, (CASE WHEN (year_total#66 > 0.000000) THEN (year_total#86 / year_total#66) END > CASE WHEN (year_total#106 > 0.000000) THEN (year_total#126 / year_total#106) END), BuildRight

(93) CometProject
Input [13]: [customer_id#19, customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45, year_total#66, year_total#86, year_total#106, customer_id#125, year_total#126]
Arguments: [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45], [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45]

(94) CometTakeOrderedAndProject
Input [7]: [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[customer_id#39 ASC NULLS FIRST,customer_first_name#40 ASC NULLS FIRST,customer_last_name#41 ASC NULLS FIRST,customer_preferred_cust_flag#42 ASC NULLS FIRST,customer_birth_country#43 ASC NULLS FIRST,customer_login#44 ASC NULLS FIRST,customer_email_address#45 ASC NULLS FIRST], output=[customer_id#39,customer_first_name#40,customer_last_name#41,customer_preferred_cust_flag#42,customer_birth_country#43,customer_login#44,customer_email_address#45]), [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45], 100, [customer_id#39 ASC NULLS FIRST, customer_first_name#40 ASC NULLS FIRST, customer_last_name#41 ASC NULLS FIRST, customer_preferred_cust_flag#42 ASC NULLS FIRST, customer_birth_country#43 ASC NULLS FIRST, customer_login#44 ASC NULLS FIRST, customer_email_address#45 ASC NULLS FIRST], [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45]

(95) ColumnarToRow [codegen id : 1]
Input [7]: [customer_id#39, customer_first_name#40, customer_last_name#41, customer_preferred_cust_flag#42, customer_birth_country#43, customer_login#44, customer_email_address#45]

