== Physical Plan ==
VeloxColumnarToRow (209)
+- TakeOrderedAndProjectExecTransformer (208)
   +- ^ ProjectExecTransformer (206)
      +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (205)
         :- ^ ProjectExecTransformer (173)
         :  +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (172)
         :     :- ^ ProjectExecTransformer (138)
         :     :  +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (137)
         :     :     :- ^ ProjectExecTransformer (105)
         :     :     :  +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (104)
         :     :     :     :- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (70)
         :     :     :     :  :- ^ InputIteratorTransformer (38)
         :     :     :     :  :  +- ColumnarExchange (36)
         :     :     :     :  :     +- VeloxResizeBatches (35)
         :     :     :     :  :        +- ^ ProjectExecTransformer (33)
         :     :     :     :  :           +- ^ FilterExecTransformer (32)
         :     :     :     :  :              +- ^ ProjectExecTransformer (31)
         :     :     :     :  :                 +- ^ RegularHashAggregateExecTransformer (30)
         :     :     :     :  :                    +- ^ InputIteratorTransformer (29)
         :     :     :     :  :                       +- ColumnarExchange (27)
         :     :     :     :  :                          +- VeloxResizeBatches (26)
         :     :     :     :  :                             +- ^ ProjectExecTransformer (24)
         :     :     :     :  :                                +- ^ FlushableHashAggregateExecTransformer (23)
         :     :     :     :  :                                   +- ^ ProjectExecTransformer (22)
         :     :     :     :  :                                      +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (21)
         :     :     :     :  :                                         :- ^ InputIteratorTransformer (12)
         :     :     :     :  :                                         :  +- ColumnarExchange (10)
         :     :     :     :  :                                         :     +- VeloxResizeBatches (9)
         :     :     :     :  :                                         :        +- ^ ProjectExecTransformer (7)
         :     :     :     :  :                                         :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (6)
         :     :     :     :  :                                         :              :- ^ FilterExecTransformer (2)
         :     :     :     :  :                                         :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
         :     :     :     :  :                                         :              +- ^ InputIteratorTransformer (5)
         :     :     :     :  :                                         :                 +- ReusedExchange (3)
         :     :     :     :  :                                         +- ^ InputIteratorTransformer (20)
         :     :     :     :  :                                            +- ColumnarExchange (18)
         :     :     :     :  :                                               +- VeloxResizeBatches (17)
         :     :     :     :  :                                                  +- ^ ProjectExecTransformer (15)
         :     :     :     :  :                                                     +- ^ FilterExecTransformer (14)
         :     :     :     :  :                                                        +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (13)
         :     :     :     :  +- ^ InputIteratorTransformer (69)
         :     :     :     :     +- ColumnarExchange (67)
         :     :     :     :        +- VeloxResizeBatches (66)
         :     :     :     :           +- ^ ProjectExecTransformer (64)
         :     :     :     :              +- ^ RegularHashAggregateExecTransformer (63)
         :     :     :     :                 +- ^ InputIteratorTransformer (62)
         :     :     :     :                    +- ColumnarExchange (60)
         :     :     :     :                       +- VeloxResizeBatches (59)
         :     :     :     :                          +- ^ ProjectExecTransformer (57)
         :     :     :     :                             +- ^ FlushableHashAggregateExecTransformer (56)
         :     :     :     :                                +- ^ ProjectExecTransformer (55)
         :     :     :     :                                   +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (54)
         :     :     :     :                                      :- ^ InputIteratorTransformer (50)
         :     :     :     :                                      :  +- ColumnarExchange (48)
         :     :     :     :                                      :     +- VeloxResizeBatches (47)
         :     :     :     :                                      :        +- ^ ProjectExecTransformer (45)
         :     :     :     :                                      :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (44)
         :     :     :     :                                      :              :- ^ FilterExecTransformer (40)
         :     :     :     :                                      :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (39)
         :     :     :     :                                      :              +- ^ InputIteratorTransformer (43)
         :     :     :     :                                      :                 +- ReusedExchange (41)
         :     :     :     :                                      +- ^ InputIteratorTransformer (53)
         :     :     :     :                                         +- ReusedExchange (51)
         :     :     :     +- ^ InputIteratorTransformer (103)
         :     :     :        +- ColumnarExchange (101)
         :     :     :           +- VeloxResizeBatches (100)
         :     :     :              +- ^ ProjectExecTransformer (98)
         :     :     :                 +- ^ FilterExecTransformer (97)
         :     :     :                    +- ^ ProjectExecTransformer (96)
         :     :     :                       +- ^ RegularHashAggregateExecTransformer (95)
         :     :     :                          +- ^ InputIteratorTransformer (94)
         :     :     :                             +- ColumnarExchange (92)
         :     :     :                                +- VeloxResizeBatches (91)
         :     :     :                                   +- ^ ProjectExecTransformer (89)
         :     :     :                                      +- ^ FlushableHashAggregateExecTransformer (88)
         :     :     :                                         +- ^ ProjectExecTransformer (87)
         :     :     :                                            +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (86)
         :     :     :                                               :- ^ InputIteratorTransformer (82)
         :     :     :                                               :  +- ColumnarExchange (80)
         :     :     :                                               :     +- VeloxResizeBatches (79)
         :     :     :                                               :        +- ^ ProjectExecTransformer (77)
         :     :     :                                               :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (76)
         :     :     :                                               :              :- ^ FilterExecTransformer (72)
         :     :     :                                               :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (71)
         :     :     :                                               :              +- ^ InputIteratorTransformer (75)
         :     :     :                                               :                 +- ReusedExchange (73)
         :     :     :                                               +- ^ InputIteratorTransformer (85)
         :     :     :                                                  +- ReusedExchange (83)
         :     :     +- ^ InputIteratorTransformer (136)
         :     :        +- ColumnarExchange (134)
         :     :           +- VeloxResizeBatches (133)
         :     :              +- ^ ProjectExecTransformer (131)
         :     :                 +- ^ RegularHashAggregateExecTransformer (130)
         :     :                    +- ^ InputIteratorTransformer (129)
         :     :                       +- ColumnarExchange (127)
         :     :                          +- VeloxResizeBatches (126)
         :     :                             +- ^ ProjectExecTransformer (124)
         :     :                                +- ^ FlushableHashAggregateExecTransformer (123)
         :     :                                   +- ^ ProjectExecTransformer (122)
         :     :                                      +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (121)
         :     :                                         :- ^ InputIteratorTransformer (117)
         :     :                                         :  +- ColumnarExchange (115)
         :     :                                         :     +- VeloxResizeBatches (114)
         :     :                                         :        +- ^ ProjectExecTransformer (112)
         :     :                                         :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (111)
         :     :                                         :              :- ^ FilterExecTransformer (107)
         :     :                                         :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (106)
         :     :                                         :              +- ^ InputIteratorTransformer (110)
         :     :                                         :                 +- ReusedExchange (108)
         :     :                                         +- ^ InputIteratorTransformer (120)
         :     :                                            +- ReusedExchange (118)
         :     +- ^ InputIteratorTransformer (171)
         :        +- ColumnarExchange (169)
         :           +- VeloxResizeBatches (168)
         :              +- ^ ProjectExecTransformer (166)
         :                 +- ^ FilterExecTransformer (165)
         :                    +- ^ ProjectExecTransformer (164)
         :                       +- ^ RegularHashAggregateExecTransformer (163)
         :                          +- ^ InputIteratorTransformer (162)
         :                             +- ColumnarExchange (160)
         :                                +- VeloxResizeBatches (159)
         :                                   +- ^ ProjectExecTransformer (157)
         :                                      +- ^ FlushableHashAggregateExecTransformer (156)
         :                                         +- ^ ProjectExecTransformer (155)
         :                                            +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (154)
         :                                               :- ^ InputIteratorTransformer (150)
         :                                               :  +- ColumnarExchange (148)
         :                                               :     +- VeloxResizeBatches (147)
         :                                               :        +- ^ ProjectExecTransformer (145)
         :                                               :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (144)
         :                                               :              :- ^ FilterExecTransformer (140)
         :                                               :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (139)
         :                                               :              +- ^ InputIteratorTransformer (143)
         :                                               :                 +- ReusedExchange (141)
         :                                               +- ^ InputIteratorTransformer (153)
         :                                                  +- ReusedExchange (151)
         +- ^ InputIteratorTransformer (204)
            +- ColumnarExchange (202)
               +- VeloxResizeBatches (201)
                  +- ^ ProjectExecTransformer (199)
                     +- ^ RegularHashAggregateExecTransformer (198)
                        +- ^ InputIteratorTransformer (197)
                           +- ColumnarExchange (195)
                              +- VeloxResizeBatches (194)
                                 +- ^ ProjectExecTransformer (192)
                                    +- ^ FlushableHashAggregateExecTransformer (191)
                                       +- ^ ProjectExecTransformer (190)
                                          +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (189)
                                             :- ^ InputIteratorTransformer (185)
                                             :  +- ColumnarExchange (183)
                                             :     +- VeloxResizeBatches (182)
                                             :        +- ^ ProjectExecTransformer (180)
                                             :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (179)
                                             :              :- ^ FilterExecTransformer (175)
                                             :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (174)
                                             :              +- ^ InputIteratorTransformer (178)
                                             :                 +- ReusedExchange (176)
                                             +- ^ InputIteratorTransformer (188)
                                                +- ReusedExchange (186)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, ss_sold_date_sk#6]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#6), dynamicpruningexpression(ss_sold_date_sk#6 IN dynamicpruning#7)]
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)>

(2) FilterExecTransformer
Input [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, ss_sold_date_sk#6]
Arguments: isnotnull(ss_customer_sk#1)

(3) ReusedExchange [Reuses operator id: 213]
Output [2]: [d_date_sk#8, d_year#9]

(4) InputAdapter
Input [2]: [d_date_sk#8, d_year#9]

(5) InputIteratorTransformer
Input [2]: [d_date_sk#8, d_year#9]

(6) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#6]
Right keys [1]: [d_date_sk#8]
Join type: Inner
Join condition: None

(7) ProjectExecTransformer
Output [7]: [hash(ss_customer_sk#1, 42) AS hash_partition_key#10, ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9]
Input [8]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, ss_sold_date_sk#6, d_date_sk#8, d_year#9]

(8) WholeStageCodegenTransformer (3)
Input [7]: [hash_partition_key#10, ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9]
Arguments: false

(9) VeloxResizeBatches
Input [7]: [hash_partition_key#10, ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9]
Arguments: 1024, 2147483647, 10485760

(10) ColumnarExchange
Input [7]: [hash_partition_key#10, ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9]
Arguments: hashpartitioning(ss_customer_sk#1, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9], [plan_id=1], [shuffle_writer_type=hash]

(11) InputAdapter
Input [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9]

(12) InputIteratorTransformer
Input [6]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9]

(13) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]
Batched: true
Location: InMemoryFileIndex [{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>

(14) FilterExecTransformer
Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]
Arguments: (isnotnull(c_customer_sk#11) AND isnotnull(c_customer_id#12))

(15) ProjectExecTransformer
Output [9]: [hash(c_customer_sk#11, 42) AS hash_partition_key#19, c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]
Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]

(16) WholeStageCodegenTransformer (4)
Input [9]: [hash_partition_key#19, c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]
Arguments: false

(17) VeloxResizeBatches
Input [9]: [hash_partition_key#19, c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]
Arguments: 1024, 2147483647, 10485760

(18) ColumnarExchange
Input [9]: [hash_partition_key#19, c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]
Arguments: hashpartitioning(c_customer_sk#11, 1), ENSURE_REQUIREMENTS, [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18], [plan_id=2], [shuffle_writer_type=hash]

(19) InputAdapter
Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]

(20) InputIteratorTransformer
Input [8]: [c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]

(21) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#1]
Right keys [1]: [c_customer_sk#11]
Join type: Inner
Join condition: None

(22) ProjectExecTransformer
Output [9]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, ((((ss_ext_list_price#5 - ss_ext_wholesale_cost#4) - ss_ext_discount_amt#2) + ss_ext_sales_price#3) / 2) AS _pre_1#20]
Input [14]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_sales_price#3, ss_ext_wholesale_cost#4, ss_ext_list_price#5, d_year#9, c_customer_sk#11, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18]

(23) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, _pre_1#20]
Keys [8]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9]
Functions [1]: [partial_sum(_pre_1#20)]
Aggregate Attributes [2]: [sum#21, isEmpty#22]
Results [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]

(24) ProjectExecTransformer
Output [11]: [hash(c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, 42) AS hash_partition_key#25, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]
Input [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]

(25) WholeStageCodegenTransformer (5)
Input [11]: [hash_partition_key#25, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]
Arguments: false

(26) VeloxResizeBatches
Input [11]: [hash_partition_key#25, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]
Arguments: 1024, 2147483647, 10485760

(27) ColumnarExchange
Input [11]: [hash_partition_key#25, c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]
Arguments: hashpartitioning(c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, 1), ENSURE_REQUIREMENTS, [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24], [plan_id=3], [shuffle_writer_type=hash]

(28) InputAdapter
Input [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]

(29) InputIteratorTransformer
Input [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]

(30) RegularHashAggregateExecTransformer
Input [10]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum#23, isEmpty#24]
Keys [8]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9]
Functions [1]: [sum(((((ss_ext_list_price#5 - ss_ext_wholesale_cost#4) - ss_ext_discount_amt#2) + ss_ext_sales_price#3) / 2))]
Aggregate Attributes [1]: [sum(((((ss_ext_list_price#5 - ss_ext_wholesale_cost#4) - ss_ext_discount_amt#2) + ss_ext_sales_price#3) / 2))#26]
Results [9]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum(((((ss_ext_list_price#5 - ss_ext_wholesale_cost#4) - ss_ext_discount_amt#2) + ss_ext_sales_price#3) / 2))#26]

(31) ProjectExecTransformer
Output [2]: [c_customer_id#12 AS customer_id#27, sum(((((ss_ext_list_price#5 - ss_ext_wholesale_cost#4) - ss_ext_discount_amt#2) + ss_ext_sales_price#3) / 2))#26 AS year_total#28]
Input [9]: [c_customer_id#12, c_first_name#13, c_last_name#14, c_preferred_cust_flag#15, c_birth_country#16, c_login#17, c_email_address#18, d_year#9, sum(((((ss_ext_list_price#5 - ss_ext_wholesale_cost#4) - ss_ext_discount_amt#2) + ss_ext_sales_price#3) / 2))#26]

(32) FilterExecTransformer
Input [2]: [customer_id#27, year_total#28]
Arguments: (isnotnull(year_total#28) AND (year_total#28 > 0.000000))

(33) ProjectExecTransformer
Output [3]: [hash(customer_id#27, 42) AS hash_partition_key#29, customer_id#27, year_total#28]
Input [2]: [customer_id#27, year_total#28]

(34) WholeStageCodegenTransformer (6)
Input [3]: [hash_partition_key#29, customer_id#27, year_total#28]
Arguments: false

(35) VeloxResizeBatches
Input [3]: [hash_partition_key#29, customer_id#27, year_total#28]
Arguments: 1024, 2147483647, 10485760

(36) ColumnarExchange
Input [3]: [hash_partition_key#29, customer_id#27, year_total#28]
Arguments: hashpartitioning(customer_id#27, 1), ENSURE_REQUIREMENTS, [customer_id#27, year_total#28], [plan_id=4], [shuffle_writer_type=hash]

(37) InputAdapter
Input [2]: [customer_id#27, year_total#28]

(38) InputIteratorTransformer
Input [2]: [customer_id#27, year_total#28]

(39) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [6]: [ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, ss_sold_date_sk#35]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#35), dynamicpruningexpression(ss_sold_date_sk#35 IN dynamicpruning#36)]
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)>

(40) FilterExecTransformer
Input [6]: [ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, ss_sold_date_sk#35]
Arguments: isnotnull(ss_customer_sk#30)

(41) ReusedExchange [Reuses operator id: 217]
Output [2]: [d_date_sk#37, d_year#38]

(42) InputAdapter
Input [2]: [d_date_sk#37, d_year#38]

(43) InputIteratorTransformer
Input [2]: [d_date_sk#37, d_year#38]

(44) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#35]
Right keys [1]: [d_date_sk#37]
Join type: Inner
Join condition: None

(45) ProjectExecTransformer
Output [7]: [hash(ss_customer_sk#30, 42) AS hash_partition_key#39, ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38]
Input [8]: [ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, ss_sold_date_sk#35, d_date_sk#37, d_year#38]

(46) WholeStageCodegenTransformer (9)
Input [7]: [hash_partition_key#39, ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38]
Arguments: false

(47) VeloxResizeBatches
Input [7]: [hash_partition_key#39, ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38]
Arguments: 1024, 2147483647, 10485760

(48) ColumnarExchange
Input [7]: [hash_partition_key#39, ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38]
Arguments: hashpartitioning(ss_customer_sk#30, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38], [plan_id=5], [shuffle_writer_type=hash]

(49) InputAdapter
Input [6]: [ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38]

(50) InputIteratorTransformer
Input [6]: [ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38]

(51) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#40, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47]

(52) InputAdapter
Input [8]: [c_customer_sk#40, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47]

(53) InputIteratorTransformer
Input [8]: [c_customer_sk#40, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47]

(54) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#30]
Right keys [1]: [c_customer_sk#40]
Join type: Inner
Join condition: None

(55) ProjectExecTransformer
Output [9]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, ((((ss_ext_list_price#34 - ss_ext_wholesale_cost#33) - ss_ext_discount_amt#31) + ss_ext_sales_price#32) / 2) AS _pre_2#48]
Input [14]: [ss_customer_sk#30, ss_ext_discount_amt#31, ss_ext_sales_price#32, ss_ext_wholesale_cost#33, ss_ext_list_price#34, d_year#38, c_customer_sk#40, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47]

(56) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, _pre_2#48]
Keys [8]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38]
Functions [1]: [partial_sum(_pre_2#48)]
Aggregate Attributes [2]: [sum#49, isEmpty#50]
Results [10]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]

(57) ProjectExecTransformer
Output [11]: [hash(c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, 42) AS hash_partition_key#53, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]
Input [10]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]

(58) WholeStageCodegenTransformer (11)
Input [11]: [hash_partition_key#53, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]
Arguments: false

(59) VeloxResizeBatches
Input [11]: [hash_partition_key#53, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]
Arguments: 1024, 2147483647, 10485760

(60) ColumnarExchange
Input [11]: [hash_partition_key#53, c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]
Arguments: hashpartitioning(c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, 1), ENSURE_REQUIREMENTS, [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52], [plan_id=6], [shuffle_writer_type=hash]

(61) InputAdapter
Input [10]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]

(62) InputIteratorTransformer
Input [10]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]

(63) RegularHashAggregateExecTransformer
Input [10]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum#51, isEmpty#52]
Keys [8]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38]
Functions [1]: [sum(((((ss_ext_list_price#34 - ss_ext_wholesale_cost#33) - ss_ext_discount_amt#31) + ss_ext_sales_price#32) / 2))]
Aggregate Attributes [1]: [sum(((((ss_ext_list_price#34 - ss_ext_wholesale_cost#33) - ss_ext_discount_amt#31) + ss_ext_sales_price#32) / 2))#26]
Results [9]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum(((((ss_ext_list_price#34 - ss_ext_wholesale_cost#33) - ss_ext_discount_amt#31) + ss_ext_sales_price#32) / 2))#26]

(64) ProjectExecTransformer
Output [9]: [hash(c_customer_id#41, 42) AS hash_partition_key#54, c_customer_id#41 AS customer_id#55, c_first_name#42 AS customer_first_name#56, c_last_name#43 AS customer_last_name#57, c_preferred_cust_flag#44 AS customer_preferred_cust_flag#58, c_birth_country#45 AS customer_birth_country#59, c_login#46 AS customer_login#60, c_email_address#47 AS customer_email_address#61, sum(((((ss_ext_list_price#34 - ss_ext_wholesale_cost#33) - ss_ext_discount_amt#31) + ss_ext_sales_price#32) / 2))#26 AS year_total#62]
Input [9]: [c_customer_id#41, c_first_name#42, c_last_name#43, c_preferred_cust_flag#44, c_birth_country#45, c_login#46, c_email_address#47, d_year#38, sum(((((ss_ext_list_price#34 - ss_ext_wholesale_cost#33) - ss_ext_discount_amt#31) + ss_ext_sales_price#32) / 2))#26]

(65) WholeStageCodegenTransformer (12)
Input [9]: [hash_partition_key#54, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62]
Arguments: false

(66) VeloxResizeBatches
Input [9]: [hash_partition_key#54, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62]
Arguments: 1024, 2147483647, 10485760

(67) ColumnarExchange
Input [9]: [hash_partition_key#54, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62]
Arguments: hashpartitioning(customer_id#55, 1), ENSURE_REQUIREMENTS, [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62], [plan_id=7], [shuffle_writer_type=hash]

(68) InputAdapter
Input [8]: [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62]

(69) InputIteratorTransformer
Input [8]: [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62]

(70) ShuffledHashJoinExecTransformer
Left keys [1]: [customer_id#27]
Right keys [1]: [customer_id#55]
Join type: Inner
Join condition: None

(71) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [6]: [cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, cs_sold_date_sk#68]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#68), dynamicpruningexpression(cs_sold_date_sk#68 IN dynamicpruning#7)]
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)>

(72) FilterExecTransformer
Input [6]: [cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, cs_sold_date_sk#68]
Arguments: isnotnull(cs_bill_customer_sk#63)

(73) ReusedExchange [Reuses operator id: 213]
Output [2]: [d_date_sk#69, d_year#70]

(74) InputAdapter
Input [2]: [d_date_sk#69, d_year#70]

(75) InputIteratorTransformer
Input [2]: [d_date_sk#69, d_year#70]

(76) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#68]
Right keys [1]: [d_date_sk#69]
Join type: Inner
Join condition: None

(77) ProjectExecTransformer
Output [7]: [hash(cs_bill_customer_sk#63, 42) AS hash_partition_key#71, cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70]
Input [8]: [cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, cs_sold_date_sk#68, d_date_sk#69, d_year#70]

(78) WholeStageCodegenTransformer (15)
Input [7]: [hash_partition_key#71, cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70]
Arguments: false

(79) VeloxResizeBatches
Input [7]: [hash_partition_key#71, cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70]
Arguments: 1024, 2147483647, 10485760

(80) ColumnarExchange
Input [7]: [hash_partition_key#71, cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70]
Arguments: hashpartitioning(cs_bill_customer_sk#63, 1), ENSURE_REQUIREMENTS, [cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70], [plan_id=8], [shuffle_writer_type=hash]

(81) InputAdapter
Input [6]: [cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70]

(82) InputIteratorTransformer
Input [6]: [cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70]

(83) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#72, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79]

(84) InputAdapter
Input [8]: [c_customer_sk#72, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79]

(85) InputIteratorTransformer
Input [8]: [c_customer_sk#72, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79]

(86) ShuffledHashJoinExecTransformer
Left keys [1]: [cs_bill_customer_sk#63]
Right keys [1]: [c_customer_sk#72]
Join type: Inner
Join condition: None

(87) ProjectExecTransformer
Output [9]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, ((((cs_ext_list_price#67 - cs_ext_wholesale_cost#66) - cs_ext_discount_amt#64) + cs_ext_sales_price#65) / 2) AS _pre_3#80]
Input [14]: [cs_bill_customer_sk#63, cs_ext_discount_amt#64, cs_ext_sales_price#65, cs_ext_wholesale_cost#66, cs_ext_list_price#67, d_year#70, c_customer_sk#72, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79]

(88) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, _pre_3#80]
Keys [8]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70]
Functions [1]: [partial_sum(_pre_3#80)]
Aggregate Attributes [2]: [sum#81, isEmpty#82]
Results [10]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]

(89) ProjectExecTransformer
Output [11]: [hash(c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, 42) AS hash_partition_key#85, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]
Input [10]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]

(90) WholeStageCodegenTransformer (17)
Input [11]: [hash_partition_key#85, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]
Arguments: false

(91) VeloxResizeBatches
Input [11]: [hash_partition_key#85, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]
Arguments: 1024, 2147483647, 10485760

(92) ColumnarExchange
Input [11]: [hash_partition_key#85, c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]
Arguments: hashpartitioning(c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, 1), ENSURE_REQUIREMENTS, [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84], [plan_id=9], [shuffle_writer_type=hash]

(93) InputAdapter
Input [10]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]

(94) InputIteratorTransformer
Input [10]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]

(95) RegularHashAggregateExecTransformer
Input [10]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum#83, isEmpty#84]
Keys [8]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70]
Functions [1]: [sum(((((cs_ext_list_price#67 - cs_ext_wholesale_cost#66) - cs_ext_discount_amt#64) + cs_ext_sales_price#65) / 2))]
Aggregate Attributes [1]: [sum(((((cs_ext_list_price#67 - cs_ext_wholesale_cost#66) - cs_ext_discount_amt#64) + cs_ext_sales_price#65) / 2))#86]
Results [9]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum(((((cs_ext_list_price#67 - cs_ext_wholesale_cost#66) - cs_ext_discount_amt#64) + cs_ext_sales_price#65) / 2))#86]

(96) ProjectExecTransformer
Output [2]: [c_customer_id#73 AS customer_id#87, sum(((((cs_ext_list_price#67 - cs_ext_wholesale_cost#66) - cs_ext_discount_amt#64) + cs_ext_sales_price#65) / 2))#86 AS year_total#88]
Input [9]: [c_customer_id#73, c_first_name#74, c_last_name#75, c_preferred_cust_flag#76, c_birth_country#77, c_login#78, c_email_address#79, d_year#70, sum(((((cs_ext_list_price#67 - cs_ext_wholesale_cost#66) - cs_ext_discount_amt#64) + cs_ext_sales_price#65) / 2))#86]

(97) FilterExecTransformer
Input [2]: [customer_id#87, year_total#88]
Arguments: (isnotnull(year_total#88) AND (year_total#88 > 0.000000))

(98) ProjectExecTransformer
Output [3]: [hash(customer_id#87, 42) AS hash_partition_key#89, customer_id#87, year_total#88]
Input [2]: [customer_id#87, year_total#88]

(99) WholeStageCodegenTransformer (18)
Input [3]: [hash_partition_key#89, customer_id#87, year_total#88]
Arguments: false

(100) VeloxResizeBatches
Input [3]: [hash_partition_key#89, customer_id#87, year_total#88]
Arguments: 1024, 2147483647, 10485760

(101) ColumnarExchange
Input [3]: [hash_partition_key#89, customer_id#87, year_total#88]
Arguments: hashpartitioning(customer_id#87, 1), ENSURE_REQUIREMENTS, [customer_id#87, year_total#88], [plan_id=10], [shuffle_writer_type=hash]

(102) InputAdapter
Input [2]: [customer_id#87, year_total#88]

(103) InputIteratorTransformer
Input [2]: [customer_id#87, year_total#88]

(104) ShuffledHashJoinExecTransformer
Left keys [1]: [customer_id#27]
Right keys [1]: [customer_id#87]
Join type: Inner
Join condition: None

(105) ProjectExecTransformer
Output [11]: [customer_id#27, year_total#28, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62, year_total#88]
Input [12]: [customer_id#27, year_total#28, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62, customer_id#87, year_total#88]

(106) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [6]: [cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, cs_sold_date_sk#95]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#95), dynamicpruningexpression(cs_sold_date_sk#95 IN dynamicpruning#36)]
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)>

(107) FilterExecTransformer
Input [6]: [cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, cs_sold_date_sk#95]
Arguments: isnotnull(cs_bill_customer_sk#90)

(108) ReusedExchange [Reuses operator id: 217]
Output [2]: [d_date_sk#96, d_year#97]

(109) InputAdapter
Input [2]: [d_date_sk#96, d_year#97]

(110) InputIteratorTransformer
Input [2]: [d_date_sk#96, d_year#97]

(111) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#95]
Right keys [1]: [d_date_sk#96]
Join type: Inner
Join condition: None

(112) ProjectExecTransformer
Output [7]: [hash(cs_bill_customer_sk#90, 42) AS hash_partition_key#98, cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97]
Input [8]: [cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, cs_sold_date_sk#95, d_date_sk#96, d_year#97]

(113) WholeStageCodegenTransformer (21)
Input [7]: [hash_partition_key#98, cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97]
Arguments: false

(114) VeloxResizeBatches
Input [7]: [hash_partition_key#98, cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97]
Arguments: 1024, 2147483647, 10485760

(115) ColumnarExchange
Input [7]: [hash_partition_key#98, cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97]
Arguments: hashpartitioning(cs_bill_customer_sk#90, 1), ENSURE_REQUIREMENTS, [cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97], [plan_id=11], [shuffle_writer_type=hash]

(116) InputAdapter
Input [6]: [cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97]

(117) InputIteratorTransformer
Input [6]: [cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97]

(118) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106]

(119) InputAdapter
Input [8]: [c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106]

(120) InputIteratorTransformer
Input [8]: [c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106]

(121) ShuffledHashJoinExecTransformer
Left keys [1]: [cs_bill_customer_sk#90]
Right keys [1]: [c_customer_sk#99]
Join type: Inner
Join condition: None

(122) ProjectExecTransformer
Output [9]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, ((((cs_ext_list_price#94 - cs_ext_wholesale_cost#93) - cs_ext_discount_amt#91) + cs_ext_sales_price#92) / 2) AS _pre_4#107]
Input [14]: [cs_bill_customer_sk#90, cs_ext_discount_amt#91, cs_ext_sales_price#92, cs_ext_wholesale_cost#93, cs_ext_list_price#94, d_year#97, c_customer_sk#99, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106]

(123) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, _pre_4#107]
Keys [8]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97]
Functions [1]: [partial_sum(_pre_4#107)]
Aggregate Attributes [2]: [sum#108, isEmpty#109]
Results [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]

(124) ProjectExecTransformer
Output [11]: [hash(c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, 42) AS hash_partition_key#112, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]
Input [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]

(125) WholeStageCodegenTransformer (23)
Input [11]: [hash_partition_key#112, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]
Arguments: false

(126) VeloxResizeBatches
Input [11]: [hash_partition_key#112, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]
Arguments: 1024, 2147483647, 10485760

(127) ColumnarExchange
Input [11]: [hash_partition_key#112, c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]
Arguments: hashpartitioning(c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, 1), ENSURE_REQUIREMENTS, [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111], [plan_id=12], [shuffle_writer_type=hash]

(128) InputAdapter
Input [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]

(129) InputIteratorTransformer
Input [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]

(130) RegularHashAggregateExecTransformer
Input [10]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum#110, isEmpty#111]
Keys [8]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97]
Functions [1]: [sum(((((cs_ext_list_price#94 - cs_ext_wholesale_cost#93) - cs_ext_discount_amt#91) + cs_ext_sales_price#92) / 2))]
Aggregate Attributes [1]: [sum(((((cs_ext_list_price#94 - cs_ext_wholesale_cost#93) - cs_ext_discount_amt#91) + cs_ext_sales_price#92) / 2))#86]
Results [9]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum(((((cs_ext_list_price#94 - cs_ext_wholesale_cost#93) - cs_ext_discount_amt#91) + cs_ext_sales_price#92) / 2))#86]

(131) ProjectExecTransformer
Output [3]: [hash(c_customer_id#100, 42) AS hash_partition_key#113, c_customer_id#100 AS customer_id#114, sum(((((cs_ext_list_price#94 - cs_ext_wholesale_cost#93) - cs_ext_discount_amt#91) + cs_ext_sales_price#92) / 2))#86 AS year_total#115]
Input [9]: [c_customer_id#100, c_first_name#101, c_last_name#102, c_preferred_cust_flag#103, c_birth_country#104, c_login#105, c_email_address#106, d_year#97, sum(((((cs_ext_list_price#94 - cs_ext_wholesale_cost#93) - cs_ext_discount_amt#91) + cs_ext_sales_price#92) / 2))#86]

(132) WholeStageCodegenTransformer (24)
Input [3]: [hash_partition_key#113, customer_id#114, year_total#115]
Arguments: false

(133) VeloxResizeBatches
Input [3]: [hash_partition_key#113, customer_id#114, year_total#115]
Arguments: 1024, 2147483647, 10485760

(134) ColumnarExchange
Input [3]: [hash_partition_key#113, customer_id#114, year_total#115]
Arguments: hashpartitioning(customer_id#114, 1), ENSURE_REQUIREMENTS, [customer_id#114, year_total#115], [plan_id=13], [shuffle_writer_type=hash]

(135) InputAdapter
Input [2]: [customer_id#114, year_total#115]

(136) InputIteratorTransformer
Input [2]: [customer_id#114, year_total#115]

(137) ShuffledHashJoinExecTransformer
Left keys [1]: [customer_id#27]
Right keys [1]: [customer_id#114]
Join type: Inner
Join condition: (CASE WHEN (year_total#88 > 0.000000) THEN (year_total#115 / year_total#88) END > CASE WHEN (year_total#28 > 0.000000) THEN (year_total#62 / year_total#28) END)

(138) ProjectExecTransformer
Output [10]: [customer_id#27, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#88, year_total#115]
Input [13]: [customer_id#27, year_total#28, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#62, year_total#88, customer_id#114, year_total#115]

(139) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [6]: [ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, ws_sold_date_sk#121]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#121), dynamicpruningexpression(ws_sold_date_sk#121 IN dynamicpruning#7)]
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)>

(140) FilterExecTransformer
Input [6]: [ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, ws_sold_date_sk#121]
Arguments: isnotnull(ws_bill_customer_sk#116)

(141) ReusedExchange [Reuses operator id: 213]
Output [2]: [d_date_sk#122, d_year#123]

(142) InputAdapter
Input [2]: [d_date_sk#122, d_year#123]

(143) InputIteratorTransformer
Input [2]: [d_date_sk#122, d_year#123]

(144) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#121]
Right keys [1]: [d_date_sk#122]
Join type: Inner
Join condition: None

(145) ProjectExecTransformer
Output [7]: [hash(ws_bill_customer_sk#116, 42) AS hash_partition_key#124, ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123]
Input [8]: [ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, ws_sold_date_sk#121, d_date_sk#122, d_year#123]

(146) WholeStageCodegenTransformer (27)
Input [7]: [hash_partition_key#124, ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123]
Arguments: false

(147) VeloxResizeBatches
Input [7]: [hash_partition_key#124, ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123]
Arguments: 1024, 2147483647, 10485760

(148) ColumnarExchange
Input [7]: [hash_partition_key#124, ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123]
Arguments: hashpartitioning(ws_bill_customer_sk#116, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123], [plan_id=14], [shuffle_writer_type=hash]

(149) InputAdapter
Input [6]: [ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123]

(150) InputIteratorTransformer
Input [6]: [ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123]

(151) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#125, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132]

(152) InputAdapter
Input [8]: [c_customer_sk#125, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132]

(153) InputIteratorTransformer
Input [8]: [c_customer_sk#125, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132]

(154) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_customer_sk#116]
Right keys [1]: [c_customer_sk#125]
Join type: Inner
Join condition: None

(155) ProjectExecTransformer
Output [9]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, ((((ws_ext_list_price#120 - ws_ext_wholesale_cost#119) - ws_ext_discount_amt#117) + ws_ext_sales_price#118) / 2) AS _pre_5#133]
Input [14]: [ws_bill_customer_sk#116, ws_ext_discount_amt#117, ws_ext_sales_price#118, ws_ext_wholesale_cost#119, ws_ext_list_price#120, d_year#123, c_customer_sk#125, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132]

(156) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, _pre_5#133]
Keys [8]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123]
Functions [1]: [partial_sum(_pre_5#133)]
Aggregate Attributes [2]: [sum#134, isEmpty#135]
Results [10]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]

(157) ProjectExecTransformer
Output [11]: [hash(c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, 42) AS hash_partition_key#138, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]
Input [10]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]

(158) WholeStageCodegenTransformer (29)
Input [11]: [hash_partition_key#138, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]
Arguments: false

(159) VeloxResizeBatches
Input [11]: [hash_partition_key#138, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]
Arguments: 1024, 2147483647, 10485760

(160) ColumnarExchange
Input [11]: [hash_partition_key#138, c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]
Arguments: hashpartitioning(c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, 1), ENSURE_REQUIREMENTS, [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137], [plan_id=15], [shuffle_writer_type=hash]

(161) InputAdapter
Input [10]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]

(162) InputIteratorTransformer
Input [10]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]

(163) RegularHashAggregateExecTransformer
Input [10]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum#136, isEmpty#137]
Keys [8]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123]
Functions [1]: [sum(((((ws_ext_list_price#120 - ws_ext_wholesale_cost#119) - ws_ext_discount_amt#117) + ws_ext_sales_price#118) / 2))]
Aggregate Attributes [1]: [sum(((((ws_ext_list_price#120 - ws_ext_wholesale_cost#119) - ws_ext_discount_amt#117) + ws_ext_sales_price#118) / 2))#139]
Results [9]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum(((((ws_ext_list_price#120 - ws_ext_wholesale_cost#119) - ws_ext_discount_amt#117) + ws_ext_sales_price#118) / 2))#139]

(164) ProjectExecTransformer
Output [2]: [c_customer_id#126 AS customer_id#140, sum(((((ws_ext_list_price#120 - ws_ext_wholesale_cost#119) - ws_ext_discount_amt#117) + ws_ext_sales_price#118) / 2))#139 AS year_total#141]
Input [9]: [c_customer_id#126, c_first_name#127, c_last_name#128, c_preferred_cust_flag#129, c_birth_country#130, c_login#131, c_email_address#132, d_year#123, sum(((((ws_ext_list_price#120 - ws_ext_wholesale_cost#119) - ws_ext_discount_amt#117) + ws_ext_sales_price#118) / 2))#139]

(165) FilterExecTransformer
Input [2]: [customer_id#140, year_total#141]
Arguments: (isnotnull(year_total#141) AND (year_total#141 > 0.000000))

(166) ProjectExecTransformer
Output [3]: [hash(customer_id#140, 42) AS hash_partition_key#142, customer_id#140, year_total#141]
Input [2]: [customer_id#140, year_total#141]

(167) WholeStageCodegenTransformer (30)
Input [3]: [hash_partition_key#142, customer_id#140, year_total#141]
Arguments: false

(168) VeloxResizeBatches
Input [3]: [hash_partition_key#142, customer_id#140, year_total#141]
Arguments: 1024, 2147483647, 10485760

(169) ColumnarExchange
Input [3]: [hash_partition_key#142, customer_id#140, year_total#141]
Arguments: hashpartitioning(customer_id#140, 1), ENSURE_REQUIREMENTS, [customer_id#140, year_total#141], [plan_id=16], [shuffle_writer_type=hash]

(170) InputAdapter
Input [2]: [customer_id#140, year_total#141]

(171) InputIteratorTransformer
Input [2]: [customer_id#140, year_total#141]

(172) ShuffledHashJoinExecTransformer
Left keys [1]: [customer_id#27]
Right keys [1]: [customer_id#140]
Join type: Inner
Join condition: None

(173) ProjectExecTransformer
Output [11]: [customer_id#27, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#88, year_total#115, year_total#141]
Input [12]: [customer_id#27, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#88, year_total#115, customer_id#140, year_total#141]

(174) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [6]: [ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, ws_sold_date_sk#148]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#148), dynamicpruningexpression(ws_sold_date_sk#148 IN dynamicpruning#36)]
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)>

(175) FilterExecTransformer
Input [6]: [ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, ws_sold_date_sk#148]
Arguments: isnotnull(ws_bill_customer_sk#143)

(176) ReusedExchange [Reuses operator id: 217]
Output [2]: [d_date_sk#149, d_year#150]

(177) InputAdapter
Input [2]: [d_date_sk#149, d_year#150]

(178) InputIteratorTransformer
Input [2]: [d_date_sk#149, d_year#150]

(179) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#148]
Right keys [1]: [d_date_sk#149]
Join type: Inner
Join condition: None

(180) ProjectExecTransformer
Output [7]: [hash(ws_bill_customer_sk#143, 42) AS hash_partition_key#151, ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150]
Input [8]: [ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, ws_sold_date_sk#148, d_date_sk#149, d_year#150]

(181) WholeStageCodegenTransformer (33)
Input [7]: [hash_partition_key#151, ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150]
Arguments: false

(182) VeloxResizeBatches
Input [7]: [hash_partition_key#151, ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150]
Arguments: 1024, 2147483647, 10485760

(183) ColumnarExchange
Input [7]: [hash_partition_key#151, ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150]
Arguments: hashpartitioning(ws_bill_customer_sk#143, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150], [plan_id=17], [shuffle_writer_type=hash]

(184) InputAdapter
Input [6]: [ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150]

(185) InputIteratorTransformer
Input [6]: [ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150]

(186) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#152, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159]

(187) InputAdapter
Input [8]: [c_customer_sk#152, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159]

(188) InputIteratorTransformer
Input [8]: [c_customer_sk#152, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159]

(189) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_customer_sk#143]
Right keys [1]: [c_customer_sk#152]
Join type: Inner
Join condition: None

(190) ProjectExecTransformer
Output [9]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, ((((ws_ext_list_price#147 - ws_ext_wholesale_cost#146) - ws_ext_discount_amt#144) + ws_ext_sales_price#145) / 2) AS _pre_6#160]
Input [14]: [ws_bill_customer_sk#143, ws_ext_discount_amt#144, ws_ext_sales_price#145, ws_ext_wholesale_cost#146, ws_ext_list_price#147, d_year#150, c_customer_sk#152, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159]

(191) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, _pre_6#160]
Keys [8]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150]
Functions [1]: [partial_sum(_pre_6#160)]
Aggregate Attributes [2]: [sum#161, isEmpty#162]
Results [10]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]

(192) ProjectExecTransformer
Output [11]: [hash(c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, 42) AS hash_partition_key#165, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]
Input [10]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]

(193) WholeStageCodegenTransformer (35)
Input [11]: [hash_partition_key#165, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]
Arguments: false

(194) VeloxResizeBatches
Input [11]: [hash_partition_key#165, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]
Arguments: 1024, 2147483647, 10485760

(195) ColumnarExchange
Input [11]: [hash_partition_key#165, c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]
Arguments: hashpartitioning(c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, 1), ENSURE_REQUIREMENTS, [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164], [plan_id=18], [shuffle_writer_type=hash]

(196) InputAdapter
Input [10]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]

(197) InputIteratorTransformer
Input [10]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]

(198) RegularHashAggregateExecTransformer
Input [10]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum#163, isEmpty#164]
Keys [8]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150]
Functions [1]: [sum(((((ws_ext_list_price#147 - ws_ext_wholesale_cost#146) - ws_ext_discount_amt#144) + ws_ext_sales_price#145) / 2))]
Aggregate Attributes [1]: [sum(((((ws_ext_list_price#147 - ws_ext_wholesale_cost#146) - ws_ext_discount_amt#144) + ws_ext_sales_price#145) / 2))#139]
Results [9]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum(((((ws_ext_list_price#147 - ws_ext_wholesale_cost#146) - ws_ext_discount_amt#144) + ws_ext_sales_price#145) / 2))#139]

(199) ProjectExecTransformer
Output [3]: [hash(c_customer_id#153, 42) AS hash_partition_key#166, c_customer_id#153 AS customer_id#167, sum(((((ws_ext_list_price#147 - ws_ext_wholesale_cost#146) - ws_ext_discount_amt#144) + ws_ext_sales_price#145) / 2))#139 AS year_total#168]
Input [9]: [c_customer_id#153, c_first_name#154, c_last_name#155, c_preferred_cust_flag#156, c_birth_country#157, c_login#158, c_email_address#159, d_year#150, sum(((((ws_ext_list_price#147 - ws_ext_wholesale_cost#146) - ws_ext_discount_amt#144) + ws_ext_sales_price#145) / 2))#139]

(200) WholeStageCodegenTransformer (36)
Input [3]: [hash_partition_key#166, customer_id#167, year_total#168]
Arguments: false

(201) VeloxResizeBatches
Input [3]: [hash_partition_key#166, customer_id#167, year_total#168]
Arguments: 1024, 2147483647, 10485760

(202) ColumnarExchange
Input [3]: [hash_partition_key#166, customer_id#167, year_total#168]
Arguments: hashpartitioning(customer_id#167, 1), ENSURE_REQUIREMENTS, [customer_id#167, year_total#168], [plan_id=19], [shuffle_writer_type=hash]

(203) InputAdapter
Input [2]: [customer_id#167, year_total#168]

(204) InputIteratorTransformer
Input [2]: [customer_id#167, year_total#168]

(205) ShuffledHashJoinExecTransformer
Left keys [1]: [customer_id#27]
Right keys [1]: [customer_id#167]
Join type: Inner
Join condition: (CASE WHEN (year_total#88 > 0.000000) THEN (year_total#115 / year_total#88) END > CASE WHEN (year_total#141 > 0.000000) THEN (year_total#168 / year_total#141) END)

(206) ProjectExecTransformer
Output [7]: [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61]
Input [13]: [customer_id#27, customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61, year_total#88, year_total#115, year_total#141, customer_id#167, year_total#168]

(207) WholeStageCodegenTransformer (37)
Input [7]: [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61]
Arguments: false

(208) TakeOrderedAndProjectExecTransformer
Input [7]: [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61]
Arguments: 100, [customer_id#55 ASC NULLS FIRST, customer_first_name#56 ASC NULLS FIRST, customer_last_name#57 ASC NULLS FIRST, customer_preferred_cust_flag#58 ASC NULLS FIRST, customer_birth_country#59 ASC NULLS FIRST, customer_login#60 ASC NULLS FIRST, customer_email_address#61 ASC NULLS FIRST], [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61], 0

(209) VeloxColumnarToRow
Input [7]: [customer_id#55, customer_first_name#56, customer_last_name#57, customer_preferred_cust_flag#58, customer_birth_country#59, customer_login#60, customer_email_address#61]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#6 IN dynamicpruning#7
ColumnarBroadcastExchange (213)
+- ^ FilterExecTransformer (211)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (210)


(210) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#8, d_year#9]
Batched: true
Location: InMemoryFileIndex [{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>

(211) FilterExecTransformer
Input [2]: [d_date_sk#8, d_year#9]
Arguments: ((isnotnull(d_year#9) AND (d_year#9 = 2001)) AND isnotnull(d_date_sk#8))

(212) WholeStageCodegenTransformer (1)
Input [2]: [d_date_sk#8, d_year#9]
Arguments: false

(213) ColumnarBroadcastExchange
Input [2]: [d_date_sk#8, d_year#9]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20]

Subquery:2 Hosting operator id = 39 Hosting Expression = ss_sold_date_sk#35 IN dynamicpruning#36
ColumnarBroadcastExchange (217)
+- ^ FilterExecTransformer (215)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (214)


(214) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#37, d_year#38]
Batched: true
Location: InMemoryFileIndex [{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>

(215) FilterExecTransformer
Input [2]: [d_date_sk#37, d_year#38]
Arguments: ((isnotnull(d_year#38) AND (d_year#38 = 2002)) AND isnotnull(d_date_sk#37))

(216) WholeStageCodegenTransformer (7)
Input [2]: [d_date_sk#37, d_year#38]
Arguments: false

(217) ColumnarBroadcastExchange
Input [2]: [d_date_sk#37, d_year#38]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=21]

Subquery:3 Hosting operator id = 71 Hosting Expression = cs_sold_date_sk#68 IN dynamicpruning#7

Subquery:4 Hosting operator id = 106 Hosting Expression = cs_sold_date_sk#95 IN dynamicpruning#36

Subquery:5 Hosting operator id = 139 Hosting Expression = ws_sold_date_sk#121 IN dynamicpruning#7

Subquery:6 Hosting operator id = 174 Hosting Expression = ws_sold_date_sk#148 IN dynamicpruning#36


