== Physical Plan ==
VeloxColumnarToRow (118)
+- TakeOrderedAndProjectExecTransformer (117)
   +- ^ ProjectExecTransformer (115)
      +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (114)
         :- ^ ProjectExecTransformer (85)
         :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (84)
         :     :- ^ BroadcastHashJoinExecTransformer Inner BuildRight (54)
         :     :  :- ^ FilterExecTransformer (25)
         :     :  :  +- ^ ProjectExecTransformer (24)
         :     :  :     +- ^ RegularHashAggregateExecTransformer (23)
         :     :  :        +- ^ InputIteratorTransformer (22)
         :     :  :           +- ColumnarExchange (20)
         :     :  :              +- VeloxResizeBatches (19)
         :     :  :                 +- ^ ProjectExecTransformer (17)
         :     :  :                    +- ^ FlushableHashAggregateExecTransformer (16)
         :     :  :                       +- ^ ProjectExecTransformer (15)
         :     :  :                          +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (14)
         :     :  :                             :- ^ ProjectExecTransformer (10)
         :     :  :                             :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (9)
         :     :  :                             :     :- ^ FilterExecTransformer (2)
         :     :  :                             :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1)
         :     :  :                             :     +- ^ InputIteratorTransformer (8)
         :     :  :                             :        +- ColumnarBroadcastExchange (6)
         :     :  :                             :           +- ^ FilterExecTransformer (4)
         :     :  :                             :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (3)
         :     :  :                             +- ^ InputIteratorTransformer (13)
         :     :  :                                +- ReusedExchange (11)
         :     :  +- ^ InputIteratorTransformer (53)
         :     :     +- ColumnarBroadcastExchange (51)
         :     :        +- ^ ProjectExecTransformer (49)
         :     :           +- ^ RegularHashAggregateExecTransformer (48)
         :     :              +- ^ InputIteratorTransformer (47)
         :     :                 +- ColumnarExchange (45)
         :     :                    +- VeloxResizeBatches (44)
         :     :                       +- ^ ProjectExecTransformer (42)
         :     :                          +- ^ FlushableHashAggregateExecTransformer (41)
         :     :                             +- ^ ProjectExecTransformer (40)
         :     :                                +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (39)
         :     :                                   :- ^ ProjectExecTransformer (35)
         :     :                                   :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (34)
         :     :                                   :     :- ^ FilterExecTransformer (27)
         :     :                                   :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (26)
         :     :                                   :     +- ^ InputIteratorTransformer (33)
         :     :                                   :        +- ColumnarBroadcastExchange (31)
         :     :                                   :           +- ^ FilterExecTransformer (29)
         :     :                                   :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (28)
         :     :                                   +- ^ InputIteratorTransformer (38)
         :     :                                      +- ReusedExchange (36)
         :     +- ^ InputIteratorTransformer (83)
         :        +- ColumnarBroadcastExchange (81)
         :           +- ^ FilterExecTransformer (79)
         :              +- ^ ProjectExecTransformer (78)
         :                 +- ^ RegularHashAggregateExecTransformer (77)
         :                    +- ^ InputIteratorTransformer (76)
         :                       +- ColumnarExchange (74)
         :                          +- VeloxResizeBatches (73)
         :                             +- ^ ProjectExecTransformer (71)
         :                                +- ^ FlushableHashAggregateExecTransformer (70)
         :                                   +- ^ ProjectExecTransformer (69)
         :                                      +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (68)
         :                                         :- ^ ProjectExecTransformer (64)
         :                                         :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (63)
         :                                         :     :- ^ FilterExecTransformer (56)
         :                                         :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (55)
         :                                         :     +- ^ InputIteratorTransformer (62)
         :                                         :        +- ColumnarBroadcastExchange (60)
         :                                         :           +- ^ FilterExecTransformer (58)
         :                                         :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (57)
         :                                         +- ^ InputIteratorTransformer (67)
         :                                            +- ReusedExchange (65)
         +- ^ InputIteratorTransformer (113)
            +- ColumnarBroadcastExchange (111)
               +- ^ ProjectExecTransformer (109)
                  +- ^ RegularHashAggregateExecTransformer (108)
                     +- ^ InputIteratorTransformer (107)
                        +- ColumnarExchange (105)
                           +- VeloxResizeBatches (104)
                              +- ^ ProjectExecTransformer (102)
                                 +- ^ FlushableHashAggregateExecTransformer (101)
                                    +- ^ ProjectExecTransformer (100)
                                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (99)
                                          :- ^ ProjectExecTransformer (95)
                                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (94)
                                          :     :- ^ FilterExecTransformer (87)
                                          :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (86)
                                          :     +- ^ InputIteratorTransformer (93)
                                          :        +- ColumnarBroadcastExchange (91)
                                          :           +- ^ FilterExecTransformer (89)
                                          :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (88)
                                          +- ^ InputIteratorTransformer (98)
                                             +- ReusedExchange (96)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#1, c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
Batched: true
Location: 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>

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

(3) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_sold_date_sk#12 IN dynamicpruning#13)]
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)>

(4) FilterExecTransformer
Input [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12]
Arguments: isnotnull(ss_customer_sk#9)

(5) WholeStageCodegenTransformer (2)
Input [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12]
Arguments: false

(6) ColumnarBroadcastExchange
Input [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1]

(7) InputAdapter
Input [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12]

(8) InputIteratorTransformer
Input [4]: [ss_customer_sk#9, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12]

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

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

(11) ReusedExchange [Reuses operator id: 122]
Output [2]: [d_date_sk#14, d_year#15]

(12) InputAdapter
Input [2]: [d_date_sk#14, d_year#15]

(13) InputIteratorTransformer
Input [2]: [d_date_sk#14, d_year#15]

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

(15) ProjectExecTransformer
Output [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#15, UnscaledValue((ss_ext_list_price#11 - ss_ext_discount_amt#10)) AS _pre_1#16]
Input [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_ext_discount_amt#10, ss_ext_list_price#11, ss_sold_date_sk#12, d_date_sk#14, d_year#15]

(16) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#15, _pre_1#16]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
Functions [1]: [partial_sum(_pre_1#16)]
Aggregate Attributes [1]: [sum#17]
Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]

(17) ProjectExecTransformer
Output [10]: [hash(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 42) AS hash_partition_key#19, c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]
Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]

(18) WholeStageCodegenTransformer (4)
Input [10]: [hash_partition_key#19, c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]
Arguments: false

(19) VeloxResizeBatches
Input [10]: [hash_partition_key#19, c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]
Arguments: 1024, 2147483647, 10485760

(20) ColumnarExchange
Input [10]: [hash_partition_key#19, c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]
Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, 1), ENSURE_REQUIREMENTS, [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18], [plan_id=2], [shuffle_writer_type=hash]

(21) InputAdapter
Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]

(22) InputIteratorTransformer
Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]

(23) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum#18]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8]
Functions [1]: [sum(UnscaledValue((ss_ext_list_price#11 - ss_ext_discount_amt#10)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#11 - ss_ext_discount_amt#10)))#20]
Results [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum(UnscaledValue((ss_ext_list_price#11 - ss_ext_discount_amt#10)))#20]

(24) ProjectExecTransformer
Output [2]: [c_customer_id#2 AS customer_id#21, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#11 - ss_ext_discount_amt#10)))#20,18,2) AS year_total#22]
Input [9]: [c_customer_id#2, c_first_name#3, c_last_name#4, d_year#15, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, sum(UnscaledValue((ss_ext_list_price#11 - ss_ext_discount_amt#10)))#20]

(25) FilterExecTransformer
Input [2]: [customer_id#21, year_total#22]
Arguments: (isnotnull(year_total#22) AND (year_total#22 > 0.00))

(26) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30]
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>

(27) FilterExecTransformer
Input [8]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30]
Arguments: (isnotnull(c_customer_sk#23) AND isnotnull(c_customer_id#24))

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

(29) FilterExecTransformer
Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34]
Arguments: isnotnull(ss_customer_sk#31)

(30) WholeStageCodegenTransformer (6)
Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34]
Arguments: false

(31) ColumnarBroadcastExchange
Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3]

(32) InputAdapter
Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34]

(33) InputIteratorTransformer
Input [4]: [ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34]

(34) BroadcastHashJoinExecTransformer
Left keys [1]: [c_customer_sk#23]
Right keys [1]: [ss_customer_sk#31]
Join type: Inner
Join condition: None

(35) ProjectExecTransformer
Output [10]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34]
Input [12]: [c_customer_sk#23, c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_customer_sk#31, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34]

(36) ReusedExchange [Reuses operator id: 126]
Output [2]: [d_date_sk#36, d_year#37]

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

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

(39) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#34]
Right keys [1]: [d_date_sk#36]
Join type: Inner
Join condition: None

(40) ProjectExecTransformer
Output [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, d_year#37, UnscaledValue((ss_ext_list_price#33 - ss_ext_discount_amt#32)) AS _pre_2#38]
Input [12]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, ss_ext_discount_amt#32, ss_ext_list_price#33, ss_sold_date_sk#34, d_date_sk#36, d_year#37]

(41) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, d_year#37, _pre_2#38]
Keys [8]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30]
Functions [1]: [partial_sum(_pre_2#38)]
Aggregate Attributes [1]: [sum#39]
Results [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]

(42) ProjectExecTransformer
Output [10]: [hash(c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, 42) AS hash_partition_key#41, c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]
Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]

(43) WholeStageCodegenTransformer (8)
Input [10]: [hash_partition_key#41, c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]
Arguments: false

(44) VeloxResizeBatches
Input [10]: [hash_partition_key#41, c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]
Arguments: 1024, 2147483647, 10485760

(45) ColumnarExchange
Input [10]: [hash_partition_key#41, c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]
Arguments: hashpartitioning(c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, 1), ENSURE_REQUIREMENTS, [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40], [plan_id=4], [shuffle_writer_type=hash]

(46) InputAdapter
Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]

(47) InputIteratorTransformer
Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]

(48) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum#40]
Keys [8]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30]
Functions [1]: [sum(UnscaledValue((ss_ext_list_price#33 - ss_ext_discount_amt#32)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ss_ext_list_price#33 - ss_ext_discount_amt#32)))#20]
Results [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum(UnscaledValue((ss_ext_list_price#33 - ss_ext_discount_amt#32)))#20]

(49) ProjectExecTransformer
Output [5]: [c_customer_id#24 AS customer_id#42, c_first_name#25 AS customer_first_name#43, c_last_name#26 AS customer_last_name#44, c_email_address#30 AS customer_email_address#45, MakeDecimal(sum(UnscaledValue((ss_ext_list_price#33 - ss_ext_discount_amt#32)))#20,18,2) AS year_total#46]
Input [9]: [c_customer_id#24, c_first_name#25, c_last_name#26, d_year#37, c_preferred_cust_flag#27, c_birth_country#28, c_login#29, c_email_address#30, sum(UnscaledValue((ss_ext_list_price#33 - ss_ext_discount_amt#32)))#20]

(50) WholeStageCodegenTransformer (9)
Input [5]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46]
Arguments: false

(51) ColumnarBroadcastExchange
Input [5]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=5]

(52) InputAdapter
Input [5]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46]

(53) InputIteratorTransformer
Input [5]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46]

(54) BroadcastHashJoinExecTransformer
Left keys [1]: [customer_id#21]
Right keys [1]: [customer_id#42]
Join type: Inner
Join condition: None

(55) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54]
Batched: true
Location: 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>

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

(57) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_bill_customer_sk#55, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#58), dynamicpruningexpression(ws_sold_date_sk#58 IN dynamicpruning#13)]
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)>

(58) FilterExecTransformer
Input [4]: [ws_bill_customer_sk#55, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]
Arguments: isnotnull(ws_bill_customer_sk#55)

(59) WholeStageCodegenTransformer (11)
Input [4]: [ws_bill_customer_sk#55, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]
Arguments: false

(60) ColumnarBroadcastExchange
Input [4]: [ws_bill_customer_sk#55, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=6]

(61) InputAdapter
Input [4]: [ws_bill_customer_sk#55, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]

(62) InputIteratorTransformer
Input [4]: [ws_bill_customer_sk#55, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]

(63) BroadcastHashJoinExecTransformer
Left keys [1]: [c_customer_sk#47]
Right keys [1]: [ws_bill_customer_sk#55]
Join type: Inner
Join condition: None

(64) ProjectExecTransformer
Output [10]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]
Input [12]: [c_customer_sk#47, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, ws_bill_customer_sk#55, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58]

(65) ReusedExchange [Reuses operator id: 122]
Output [2]: [d_date_sk#59, d_year#60]

(66) InputAdapter
Input [2]: [d_date_sk#59, d_year#60]

(67) InputIteratorTransformer
Input [2]: [d_date_sk#59, d_year#60]

(68) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#58]
Right keys [1]: [d_date_sk#59]
Join type: Inner
Join condition: None

(69) ProjectExecTransformer
Output [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, UnscaledValue((ws_ext_list_price#57 - ws_ext_discount_amt#56)) AS _pre_3#61]
Input [12]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, ws_ext_discount_amt#56, ws_ext_list_price#57, ws_sold_date_sk#58, d_date_sk#59, d_year#60]

(70) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, _pre_3#61]
Keys [8]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60]
Functions [1]: [partial_sum(_pre_3#61)]
Aggregate Attributes [1]: [sum#62]
Results [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]

(71) ProjectExecTransformer
Output [10]: [hash(c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, 42) AS hash_partition_key#64, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]
Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]

(72) WholeStageCodegenTransformer (13)
Input [10]: [hash_partition_key#64, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]
Arguments: false

(73) VeloxResizeBatches
Input [10]: [hash_partition_key#64, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]
Arguments: 1024, 2147483647, 10485760

(74) ColumnarExchange
Input [10]: [hash_partition_key#64, c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]
Arguments: hashpartitioning(c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, 1), ENSURE_REQUIREMENTS, [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63], [plan_id=7], [shuffle_writer_type=hash]

(75) InputAdapter
Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]

(76) InputIteratorTransformer
Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]

(77) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum#63]
Keys [8]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60]
Functions [1]: [sum(UnscaledValue((ws_ext_list_price#57 - ws_ext_discount_amt#56)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#57 - ws_ext_discount_amt#56)))#65]
Results [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum(UnscaledValue((ws_ext_list_price#57 - ws_ext_discount_amt#56)))#65]

(78) ProjectExecTransformer
Output [2]: [c_customer_id#48 AS customer_id#66, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#57 - ws_ext_discount_amt#56)))#65,18,2) AS year_total#67]
Input [9]: [c_customer_id#48, c_first_name#49, c_last_name#50, c_preferred_cust_flag#51, c_birth_country#52, c_login#53, c_email_address#54, d_year#60, sum(UnscaledValue((ws_ext_list_price#57 - ws_ext_discount_amt#56)))#65]

(79) FilterExecTransformer
Input [2]: [customer_id#66, year_total#67]
Arguments: (isnotnull(year_total#67) AND (year_total#67 > 0.00))

(80) WholeStageCodegenTransformer (14)
Input [2]: [customer_id#66, year_total#67]
Arguments: false

(81) ColumnarBroadcastExchange
Input [2]: [customer_id#66, year_total#67]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=8]

(82) InputAdapter
Input [2]: [customer_id#66, year_total#67]

(83) InputIteratorTransformer
Input [2]: [customer_id#66, year_total#67]

(84) BroadcastHashJoinExecTransformer
Left keys [1]: [customer_id#21]
Right keys [1]: [customer_id#66]
Join type: Inner
Join condition: None

(85) ProjectExecTransformer
Output [8]: [customer_id#21, year_total#22, customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46, year_total#67]
Input [9]: [customer_id#21, year_total#22, customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46, customer_id#66, year_total#67]

(86) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [8]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75]
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>

(87) FilterExecTransformer
Input [8]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75]
Arguments: (isnotnull(c_customer_sk#68) AND isnotnull(c_customer_id#69))

(88) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#79), dynamicpruningexpression(ws_sold_date_sk#79 IN dynamicpruning#35)]
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)>

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

(90) WholeStageCodegenTransformer (16)
Input [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79]
Arguments: false

(91) ColumnarBroadcastExchange
Input [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9]

(92) InputAdapter
Input [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79]

(93) InputIteratorTransformer
Input [4]: [ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79]

(94) BroadcastHashJoinExecTransformer
Left keys [1]: [c_customer_sk#68]
Right keys [1]: [ws_bill_customer_sk#76]
Join type: Inner
Join condition: None

(95) ProjectExecTransformer
Output [10]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79]
Input [12]: [c_customer_sk#68, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_bill_customer_sk#76, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79]

(96) ReusedExchange [Reuses operator id: 126]
Output [2]: [d_date_sk#80, d_year#81]

(97) InputAdapter
Input [2]: [d_date_sk#80, d_year#81]

(98) InputIteratorTransformer
Input [2]: [d_date_sk#80, d_year#81]

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

(100) ProjectExecTransformer
Output [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, UnscaledValue((ws_ext_list_price#78 - ws_ext_discount_amt#77)) AS _pre_4#82]
Input [12]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, ws_ext_discount_amt#77, ws_ext_list_price#78, ws_sold_date_sk#79, d_date_sk#80, d_year#81]

(101) FlushableHashAggregateExecTransformer
Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, _pre_4#82]
Keys [8]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81]
Functions [1]: [partial_sum(_pre_4#82)]
Aggregate Attributes [1]: [sum#83]
Results [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]

(102) ProjectExecTransformer
Output [10]: [hash(c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, 42) AS hash_partition_key#85, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]
Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]

(103) WholeStageCodegenTransformer (18)
Input [10]: [hash_partition_key#85, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]
Arguments: false

(104) VeloxResizeBatches
Input [10]: [hash_partition_key#85, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]
Arguments: 1024, 2147483647, 10485760

(105) ColumnarExchange
Input [10]: [hash_partition_key#85, c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]
Arguments: hashpartitioning(c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, 1), ENSURE_REQUIREMENTS, [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84], [plan_id=10], [shuffle_writer_type=hash]

(106) InputAdapter
Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]

(107) InputIteratorTransformer
Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]

(108) RegularHashAggregateExecTransformer
Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum#84]
Keys [8]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81]
Functions [1]: [sum(UnscaledValue((ws_ext_list_price#78 - ws_ext_discount_amt#77)))]
Aggregate Attributes [1]: [sum(UnscaledValue((ws_ext_list_price#78 - ws_ext_discount_amt#77)))#65]
Results [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum(UnscaledValue((ws_ext_list_price#78 - ws_ext_discount_amt#77)))#65]

(109) ProjectExecTransformer
Output [2]: [c_customer_id#69 AS customer_id#86, MakeDecimal(sum(UnscaledValue((ws_ext_list_price#78 - ws_ext_discount_amt#77)))#65,18,2) AS year_total#87]
Input [9]: [c_customer_id#69, c_first_name#70, c_last_name#71, c_preferred_cust_flag#72, c_birth_country#73, c_login#74, c_email_address#75, d_year#81, sum(UnscaledValue((ws_ext_list_price#78 - ws_ext_discount_amt#77)))#65]

(110) WholeStageCodegenTransformer (19)
Input [2]: [customer_id#86, year_total#87]
Arguments: false

(111) ColumnarBroadcastExchange
Input [2]: [customer_id#86, year_total#87]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=11]

(112) InputAdapter
Input [2]: [customer_id#86, year_total#87]

(113) InputIteratorTransformer
Input [2]: [customer_id#86, year_total#87]

(114) BroadcastHashJoinExecTransformer
Left keys [1]: [customer_id#21]
Right keys [1]: [customer_id#86]
Join type: Inner
Join condition: (CASE WHEN (year_total#67 > 0.00) THEN (year_total#87 / year_total#67) ELSE 0E-20 END > CASE WHEN (year_total#22 > 0.00) THEN (year_total#46 / year_total#22) ELSE 0E-20 END)

(115) ProjectExecTransformer
Output [4]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45]
Input [10]: [customer_id#21, year_total#22, customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45, year_total#46, year_total#67, customer_id#86, year_total#87]

(116) WholeStageCodegenTransformer (20)
Input [4]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45]
Arguments: false

(117) TakeOrderedAndProjectExecTransformer
Input [4]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45]
Arguments: 100, [customer_id#42 ASC NULLS FIRST, customer_first_name#43 ASC NULLS FIRST, customer_last_name#44 ASC NULLS FIRST, customer_email_address#45 ASC NULLS FIRST], [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45], 0

(118) VeloxColumnarToRow
Input [4]: [customer_id#42, customer_first_name#43, customer_last_name#44, customer_email_address#45]

===== Subqueries =====

Subquery:1 Hosting operator id = 3 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13
ColumnarBroadcastExchange (122)
+- ^ FilterExecTransformer (120)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (119)


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

(120) FilterExecTransformer
Input [2]: [d_date_sk#14, d_year#15]
Arguments: ((isnotnull(d_year#15) AND (d_year#15 = 2001)) AND isnotnull(d_date_sk#14))

(121) WholeStageCodegenTransformer (1)
Input [2]: [d_date_sk#14, d_year#15]
Arguments: false

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

Subquery:2 Hosting operator id = 28 Hosting Expression = ss_sold_date_sk#34 IN dynamicpruning#35
ColumnarBroadcastExchange (126)
+- ^ FilterExecTransformer (124)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (123)


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

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

(125) WholeStageCodegenTransformer (5)
Input [2]: [d_date_sk#36, d_year#37]
Arguments: false

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

Subquery:3 Hosting operator id = 57 Hosting Expression = ws_sold_date_sk#58 IN dynamicpruning#13

Subquery:4 Hosting operator id = 88 Hosting Expression = ws_sold_date_sk#79 IN dynamicpruning#35


