== Physical Plan ==
VeloxColumnarToRow (141)
+- TakeOrderedAndProjectExecTransformer (140)
   +- ^ 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.web_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.web_sales (106)
                                             :              +- ^ InputIteratorTransformer (110)
                                             :                 +- ReusedExchange (108)
                                             +- ^ InputIteratorTransformer (120)
                                                +- ReusedExchange (118)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [4]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, ss_sold_date_sk#4]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#4), dynamicpruningexpression(ss_sold_date_sk#4 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(ss_customer_sk)]
ReadSchema: struct<ss_customer_sk:int,ss_ext_discount_amt:decimal(7,2),ss_ext_list_price:decimal(7,2)>

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

(3) ReusedExchange [Reuses operator id: 145]
Output [2]: [d_date_sk#6, d_year#7]

(4) InputAdapter
Input [2]: [d_date_sk#6, d_year#7]

(5) InputIteratorTransformer
Input [2]: [d_date_sk#6, d_year#7]

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

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

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

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

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

(11) InputAdapter
Input [4]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7]

(12) InputIteratorTransformer
Input [4]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7]

(13) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16]
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#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16]
Arguments: (isnotnull(c_customer_sk#9) AND isnotnull(c_customer_id#10))

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

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

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

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

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

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

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

(22) ProjectExecTransformer
Output [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, d_year#7, UnscaledValue((ss_ext_list_price#3 - ss_ext_discount_amt#2)) AS _pre_1#18]
Input [12]: [ss_customer_sk#1, ss_ext_discount_amt#2, ss_ext_list_price#3, d_year#7, c_customer_sk#9, c_customer_id#10, c_first_name#11, c_last_name#12, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16]

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

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

(25) WholeStageCodegenTransformer (5)
Input [10]: [hash_partition_key#21, c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#20]
Arguments: false

(26) VeloxResizeBatches
Input [10]: [hash_partition_key#21, c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#20]
Arguments: 1024, 2147483647, 10485760

(27) ColumnarExchange
Input [10]: [hash_partition_key#21, c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#20]
Arguments: hashpartitioning(c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, 1), ENSURE_REQUIREMENTS, [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#20], [plan_id=3], [shuffle_writer_type=hash]

(28) InputAdapter
Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#20]

(29) InputIteratorTransformer
Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#20]

(30) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum#20]
Keys [8]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16]
Functions [1]: [sum(UnscaledValue((ss_ext_list_price#3 - ss_ext_discount_amt#2)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#3 - ss_ext_discount_amt#2)))#22]
Results [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum(UnscaledValue((ss_ext_list_price#3 - ss_ext_discount_amt#2)))#22]

(31) ProjectExecTransformer
Output [2]: [c_customer_id#10 AS customer_id#23, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#3 - ss_ext_discount_amt#2)))#22,18,2) AS year_total#24]
Input [9]: [c_customer_id#10, c_first_name#11, c_last_name#12, d_year#7, c_preferred_cust_flag#13, c_birth_country#14, c_login#15, c_email_address#16, sum(UnscaledValue((ss_ext_list_price#3 - ss_ext_discount_amt#2)))#22]

(32) FilterExecTransformer
Input [2]: [customer_id#23, year_total#24]
Arguments: (isnotnull(year_total#24) AND (year_total#24 > 0.00))

(33) ProjectExecTransformer
Output [3]: [hash(customer_id#23, 42) AS hash_partition_key#25, customer_id#23, year_total#24]
Input [2]: [customer_id#23, year_total#24]

(34) WholeStageCodegenTransformer (6)
Input [3]: [hash_partition_key#25, customer_id#23, year_total#24]
Arguments: false

(35) VeloxResizeBatches
Input [3]: [hash_partition_key#25, customer_id#23, year_total#24]
Arguments: 1024, 2147483647, 10485760

(36) ColumnarExchange
Input [3]: [hash_partition_key#25, customer_id#23, year_total#24]
Arguments: hashpartitioning(customer_id#23, 1), ENSURE_REQUIREMENTS, [customer_id#23, year_total#24], [plan_id=4], [shuffle_writer_type=hash]

(37) InputAdapter
Input [2]: [customer_id#23, year_total#24]

(38) InputIteratorTransformer
Input [2]: [customer_id#23, year_total#24]

(39) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [4]: [ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, ss_sold_date_sk#29]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#29), dynamicpruningexpression(ss_sold_date_sk#29 IN dynamicpruning#30)]
PushedFilters: [IsNotNull(ss_customer_sk)]
ReadSchema: struct<ss_customer_sk:int,ss_ext_discount_amt:decimal(7,2),ss_ext_list_price:decimal(7,2)>

(40) FilterExecTransformer
Input [4]: [ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, ss_sold_date_sk#29]
Arguments: isnotnull(ss_customer_sk#26)

(41) ReusedExchange [Reuses operator id: 149]
Output [2]: [d_date_sk#31, d_year#32]

(42) InputAdapter
Input [2]: [d_date_sk#31, d_year#32]

(43) InputIteratorTransformer
Input [2]: [d_date_sk#31, d_year#32]

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

(45) ProjectExecTransformer
Output [5]: [hash(ss_customer_sk#26, 42) AS hash_partition_key#33, ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32]
Input [6]: [ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, ss_sold_date_sk#29, d_date_sk#31, d_year#32]

(46) WholeStageCodegenTransformer (9)
Input [5]: [hash_partition_key#33, ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32]
Arguments: false

(47) VeloxResizeBatches
Input [5]: [hash_partition_key#33, ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32]
Arguments: 1024, 2147483647, 10485760

(48) ColumnarExchange
Input [5]: [hash_partition_key#33, ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32]
Arguments: hashpartitioning(ss_customer_sk#26, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32], [plan_id=5], [shuffle_writer_type=hash]

(49) InputAdapter
Input [4]: [ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32]

(50) InputIteratorTransformer
Input [4]: [ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32]

(51) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#34, c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41]

(52) InputAdapter
Input [8]: [c_customer_sk#34, c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41]

(53) InputIteratorTransformer
Input [8]: [c_customer_sk#34, c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41]

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

(55) ProjectExecTransformer
Output [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#32, UnscaledValue((ss_ext_list_price#28 - ss_ext_discount_amt#27)) AS _pre_2#42]
Input [12]: [ss_customer_sk#26, ss_ext_discount_amt#27, ss_ext_list_price#28, d_year#32, c_customer_sk#34, c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41]

(56) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, d_year#32, _pre_2#42]
Keys [8]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41]
Functions [1]: [partial_sum(_pre_2#42)]
Aggregate Attributes [1]: [sum#43]
Results [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]

(57) ProjectExecTransformer
Output [10]: [hash(c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, 42) AS hash_partition_key#45, c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]
Input [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]

(58) WholeStageCodegenTransformer (11)
Input [10]: [hash_partition_key#45, c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]
Arguments: false

(59) VeloxResizeBatches
Input [10]: [hash_partition_key#45, c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]
Arguments: 1024, 2147483647, 10485760

(60) ColumnarExchange
Input [10]: [hash_partition_key#45, c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]
Arguments: hashpartitioning(c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, 1), ENSURE_REQUIREMENTS, [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44], [plan_id=6], [shuffle_writer_type=hash]

(61) InputAdapter
Input [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]

(62) InputIteratorTransformer
Input [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]

(63) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum#44]
Keys [8]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41]
Functions [1]: [sum(UnscaledValue((ss_ext_list_price#28 - ss_ext_discount_amt#27)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#28 - ss_ext_discount_amt#27)))#22]
Results [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum(UnscaledValue((ss_ext_list_price#28 - ss_ext_discount_amt#27)))#22]

(64) ProjectExecTransformer
Output [6]: [hash(c_customer_id#35, 42) AS hash_partition_key#46, c_customer_id#35 AS customer_id#47, c_first_name#36 AS customer_first_name#48, c_last_name#37 AS customer_last_name#49, c_email_address#41 AS customer_email_address#50, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#28 - ss_ext_discount_amt#27)))#22,18,2) AS year_total#51]
Input [9]: [c_customer_id#35, c_first_name#36, c_last_name#37, d_year#32, c_preferred_cust_flag#38, c_birth_country#39, c_login#40, c_email_address#41, sum(UnscaledValue((ss_ext_list_price#28 - ss_ext_discount_amt#27)))#22]

(65) WholeStageCodegenTransformer (12)
Input [6]: [hash_partition_key#46, customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51]
Arguments: false

(66) VeloxResizeBatches
Input [6]: [hash_partition_key#46, customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51]
Arguments: 1024, 2147483647, 10485760

(67) ColumnarExchange
Input [6]: [hash_partition_key#46, customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51]
Arguments: hashpartitioning(customer_id#47, 1), ENSURE_REQUIREMENTS, [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51], [plan_id=7], [shuffle_writer_type=hash]

(68) InputAdapter
Input [5]: [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51]

(69) InputIteratorTransformer
Input [5]: [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51]

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

(71) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, ws_sold_date_sk#55]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#55), dynamicpruningexpression(ws_sold_date_sk#55 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(ws_bill_customer_sk)]
ReadSchema: struct<ws_bill_customer_sk:int,ws_ext_discount_amt:decimal(7,2),ws_ext_list_price:decimal(7,2)>

(72) FilterExecTransformer
Input [4]: [ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, ws_sold_date_sk#55]
Arguments: isnotnull(ws_bill_customer_sk#52)

(73) ReusedExchange [Reuses operator id: 145]
Output [2]: [d_date_sk#56, d_year#57]

(74) InputAdapter
Input [2]: [d_date_sk#56, d_year#57]

(75) InputIteratorTransformer
Input [2]: [d_date_sk#56, d_year#57]

(76) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#55]
Right keys [1]: [d_date_sk#56]
Join type: Inner
Join condition: None

(77) ProjectExecTransformer
Output [5]: [hash(ws_bill_customer_sk#52, 42) AS hash_partition_key#58, ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57]
Input [6]: [ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, ws_sold_date_sk#55, d_date_sk#56, d_year#57]

(78) WholeStageCodegenTransformer (15)
Input [5]: [hash_partition_key#58, ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57]
Arguments: false

(79) VeloxResizeBatches
Input [5]: [hash_partition_key#58, ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57]
Arguments: 1024, 2147483647, 10485760

(80) ColumnarExchange
Input [5]: [hash_partition_key#58, ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57]
Arguments: hashpartitioning(ws_bill_customer_sk#52, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57], [plan_id=8], [shuffle_writer_type=hash]

(81) InputAdapter
Input [4]: [ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57]

(82) InputIteratorTransformer
Input [4]: [ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57]

(83) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66]

(84) InputAdapter
Input [8]: [c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66]

(85) InputIteratorTransformer
Input [8]: [c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66]

(86) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_customer_sk#52]
Right keys [1]: [c_customer_sk#59]
Join type: Inner
Join condition: None

(87) ProjectExecTransformer
Output [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, UnscaledValue((ws_ext_list_price#54 - ws_ext_discount_amt#53)) AS _pre_3#67]
Input [12]: [ws_bill_customer_sk#52, ws_ext_discount_amt#53, ws_ext_list_price#54, d_year#57, c_customer_sk#59, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66]

(88) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, _pre_3#67]
Keys [8]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57]
Functions [1]: [partial_sum(_pre_3#67)]
Aggregate Attributes [1]: [sum#68]
Results [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]

(89) ProjectExecTransformer
Output [10]: [hash(c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, 42) AS hash_partition_key#70, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]
Input [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]

(90) WholeStageCodegenTransformer (17)
Input [10]: [hash_partition_key#70, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]
Arguments: false

(91) VeloxResizeBatches
Input [10]: [hash_partition_key#70, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]
Arguments: 1024, 2147483647, 10485760

(92) ColumnarExchange
Input [10]: [hash_partition_key#70, c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]
Arguments: hashpartitioning(c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, 1), ENSURE_REQUIREMENTS, [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69], [plan_id=9], [shuffle_writer_type=hash]

(93) InputAdapter
Input [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]

(94) InputIteratorTransformer
Input [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]

(95) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum#69]
Keys [8]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57]
Functions [1]: [sum(UnscaledValue((ws_ext_list_price#54 - ws_ext_discount_amt#53)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#54 - ws_ext_discount_amt#53)))#71]
Results [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum(UnscaledValue((ws_ext_list_price#54 - ws_ext_discount_amt#53)))#71]

(96) ProjectExecTransformer
Output [2]: [c_customer_id#60 AS customer_id#72, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#54 - ws_ext_discount_amt#53)))#71,18,2) AS year_total#73]
Input [9]: [c_customer_id#60, c_first_name#61, c_last_name#62, c_preferred_cust_flag#63, c_birth_country#64, c_login#65, c_email_address#66, d_year#57, sum(UnscaledValue((ws_ext_list_price#54 - ws_ext_discount_amt#53)))#71]

(97) FilterExecTransformer
Input [2]: [customer_id#72, year_total#73]
Arguments: (isnotnull(year_total#73) AND (year_total#73 > 0.00))

(98) ProjectExecTransformer
Output [3]: [hash(customer_id#72, 42) AS hash_partition_key#74, customer_id#72, year_total#73]
Input [2]: [customer_id#72, year_total#73]

(99) WholeStageCodegenTransformer (18)
Input [3]: [hash_partition_key#74, customer_id#72, year_total#73]
Arguments: false

(100) VeloxResizeBatches
Input [3]: [hash_partition_key#74, customer_id#72, year_total#73]
Arguments: 1024, 2147483647, 10485760

(101) ColumnarExchange
Input [3]: [hash_partition_key#74, customer_id#72, year_total#73]
Arguments: hashpartitioning(customer_id#72, 1), ENSURE_REQUIREMENTS, [customer_id#72, year_total#73], [plan_id=10], [shuffle_writer_type=hash]

(102) InputAdapter
Input [2]: [customer_id#72, year_total#73]

(103) InputIteratorTransformer
Input [2]: [customer_id#72, year_total#73]

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

(105) ProjectExecTransformer
Output [8]: [customer_id#23, year_total#24, customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51, year_total#73]
Input [9]: [customer_id#23, year_total#24, customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51, customer_id#72, year_total#73]

(106) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, ws_sold_date_sk#78]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#78), dynamicpruningexpression(ws_sold_date_sk#78 IN dynamicpruning#30)]
PushedFilters: [IsNotNull(ws_bill_customer_sk)]
ReadSchema: struct<ws_bill_customer_sk:int,ws_ext_discount_amt:decimal(7,2),ws_ext_list_price:decimal(7,2)>

(107) FilterExecTransformer
Input [4]: [ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, ws_sold_date_sk#78]
Arguments: isnotnull(ws_bill_customer_sk#75)

(108) ReusedExchange [Reuses operator id: 149]
Output [2]: [d_date_sk#79, d_year#80]

(109) InputAdapter
Input [2]: [d_date_sk#79, d_year#80]

(110) InputIteratorTransformer
Input [2]: [d_date_sk#79, d_year#80]

(111) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#78]
Right keys [1]: [d_date_sk#79]
Join type: Inner
Join condition: None

(112) ProjectExecTransformer
Output [5]: [hash(ws_bill_customer_sk#75, 42) AS hash_partition_key#81, ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80]
Input [6]: [ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, ws_sold_date_sk#78, d_date_sk#79, d_year#80]

(113) WholeStageCodegenTransformer (21)
Input [5]: [hash_partition_key#81, ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80]
Arguments: false

(114) VeloxResizeBatches
Input [5]: [hash_partition_key#81, ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80]
Arguments: 1024, 2147483647, 10485760

(115) ColumnarExchange
Input [5]: [hash_partition_key#81, ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80]
Arguments: hashpartitioning(ws_bill_customer_sk#75, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80], [plan_id=11], [shuffle_writer_type=hash]

(116) InputAdapter
Input [4]: [ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80]

(117) InputIteratorTransformer
Input [4]: [ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80]

(118) ReusedExchange [Reuses operator id: 18]
Output [8]: [c_customer_sk#82, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89]

(119) InputAdapter
Input [8]: [c_customer_sk#82, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89]

(120) InputIteratorTransformer
Input [8]: [c_customer_sk#82, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89]

(121) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_customer_sk#75]
Right keys [1]: [c_customer_sk#82]
Join type: Inner
Join condition: None

(122) ProjectExecTransformer
Output [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, UnscaledValue((ws_ext_list_price#77 - ws_ext_discount_amt#76)) AS _pre_4#90]
Input [12]: [ws_bill_customer_sk#75, ws_ext_discount_amt#76, ws_ext_list_price#77, d_year#80, c_customer_sk#82, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89]

(123) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, _pre_4#90]
Keys [8]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80]
Functions [1]: [partial_sum(_pre_4#90)]
Aggregate Attributes [1]: [sum#91]
Results [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]

(124) ProjectExecTransformer
Output [10]: [hash(c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, 42) AS hash_partition_key#93, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]
Input [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]

(125) WholeStageCodegenTransformer (23)
Input [10]: [hash_partition_key#93, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]
Arguments: false

(126) VeloxResizeBatches
Input [10]: [hash_partition_key#93, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]
Arguments: 1024, 2147483647, 10485760

(127) ColumnarExchange
Input [10]: [hash_partition_key#93, c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]
Arguments: hashpartitioning(c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, 1), ENSURE_REQUIREMENTS, [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92], [plan_id=12], [shuffle_writer_type=hash]

(128) InputAdapter
Input [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]

(129) InputIteratorTransformer
Input [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]

(130) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum#92]
Keys [8]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80]
Functions [1]: [sum(UnscaledValue((ws_ext_list_price#77 - ws_ext_discount_amt#76)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#77 - ws_ext_discount_amt#76)))#71]
Results [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum(UnscaledValue((ws_ext_list_price#77 - ws_ext_discount_amt#76)))#71]

(131) ProjectExecTransformer
Output [3]: [hash(c_customer_id#83, 42) AS hash_partition_key#94, c_customer_id#83 AS customer_id#95, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#77 - ws_ext_discount_amt#76)))#71,18,2) AS year_total#96]
Input [9]: [c_customer_id#83, c_first_name#84, c_last_name#85, c_preferred_cust_flag#86, c_birth_country#87, c_login#88, c_email_address#89, d_year#80, sum(UnscaledValue((ws_ext_list_price#77 - ws_ext_discount_amt#76)))#71]

(132) WholeStageCodegenTransformer (24)
Input [3]: [hash_partition_key#94, customer_id#95, year_total#96]
Arguments: false

(133) VeloxResizeBatches
Input [3]: [hash_partition_key#94, customer_id#95, year_total#96]
Arguments: 1024, 2147483647, 10485760

(134) ColumnarExchange
Input [3]: [hash_partition_key#94, customer_id#95, year_total#96]
Arguments: hashpartitioning(customer_id#95, 1), ENSURE_REQUIREMENTS, [customer_id#95, year_total#96], [plan_id=13], [shuffle_writer_type=hash]

(135) InputAdapter
Input [2]: [customer_id#95, year_total#96]

(136) InputIteratorTransformer
Input [2]: [customer_id#95, year_total#96]

(137) ShuffledHashJoinExecTransformer
Left keys [1]: [customer_id#23]
Right keys [1]: [customer_id#95]
Join type: Inner
Join condition: (CASE WHEN (year_total#73 > 0.00) THEN (year_total#96 / year_total#73) ELSE 0E-20 END > CASE WHEN (year_total#24 > 0.00) THEN (year_total#51 / year_total#24) ELSE 0E-20 END)

(138) ProjectExecTransformer
Output [4]: [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50]
Input [10]: [customer_id#23, year_total#24, customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50, year_total#51, year_total#73, customer_id#95, year_total#96]

(139) WholeStageCodegenTransformer (25)
Input [4]: [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50]
Arguments: false

(140) TakeOrderedAndProjectExecTransformer
Input [4]: [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50]
Arguments: 100, [customer_id#47 ASC NULLS FIRST, customer_first_name#48 ASC NULLS FIRST, customer_last_name#49 ASC NULLS FIRST, customer_email_address#50 ASC NULLS FIRST], [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50], 0

(141) VeloxColumnarToRow
Input [4]: [customer_id#47, customer_first_name#48, customer_last_name#49, customer_email_address#50]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
ColumnarBroadcastExchange (145)
+- ^ FilterExecTransformer (143)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (142)


(142) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#6, d_year#7]
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>

(143) FilterExecTransformer
Input [2]: [d_date_sk#6, d_year#7]
Arguments: ((isnotnull(d_year#7) AND (d_year#7 = 2001)) AND isnotnull(d_date_sk#6))

(144) WholeStageCodegenTransformer (1)
Input [2]: [d_date_sk#6, d_year#7]
Arguments: false

(145) ColumnarBroadcastExchange
Input [2]: [d_date_sk#6, d_year#7]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=14]

Subquery:2 Hosting operator id = 39 Hosting Expression = ss_sold_date_sk#29 IN dynamicpruning#30
ColumnarBroadcastExchange (149)
+- ^ FilterExecTransformer (147)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (146)


(146) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#31, d_year#32]
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>

(147) FilterExecTransformer
Input [2]: [d_date_sk#31, d_year#32]
Arguments: ((isnotnull(d_year#32) AND (d_year#32 = 2002)) AND isnotnull(d_date_sk#31))

(148) WholeStageCodegenTransformer (7)
Input [2]: [d_date_sk#31, d_year#32]
Arguments: false

(149) ColumnarBroadcastExchange
Input [2]: [d_date_sk#31, d_year#32]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15]

Subquery:3 Hosting operator id = 71 Hosting Expression = ws_sold_date_sk#55 IN dynamicpruning#5

Subquery:4 Hosting operator id = 106 Hosting Expression = ws_sold_date_sk#78 IN dynamicpruning#30


