== Physical Plan ==
AdaptiveSparkPlan (379)
+- == Final Plan ==
   TakeOrderedAndProject (227)
   +- * Project (226)
      +- * SortMergeJoin Inner (225)
         :- NativeProject (197)
         :  +- NativeSortMergeJoin Inner (196)
         :     :- ConvertToNative (152)
         :     :  +- * Project (151)
         :     :     +- * SortMergeJoin Inner (150)
         :     :        :- NativeProject (122)
         :     :        :  +- NativeSortMergeJoin Inner (121)
         :     :        :     :- NativeSortMergeJoin Inner (77)
         :     :        :     :  :- NativeSort (47)
         :     :        :     :  :  +- InputAdapter (46)
         :     :        :     :  :     +- AQEShuffleRead (45)
         :     :        :     :  :        +- ShuffleQueryStage (44), Statistics(X)
         :     :        :     :  :           +- NativeShuffleExchange (43)
         :     :        :     :  :              +- NativeFilter (42)
         :     :        :     :  :                 +- NativeProject (41)
         :     :        :     :  :                    +- NativeHashAggregate (40)
         :     :        :     :  :                       +- InputAdapter (39)
         :     :        :     :  :                          +- AQEShuffleRead (38)
         :     :        :     :  :                             +- ShuffleQueryStage (37), Statistics(X)
         :     :        :     :  :                                +- NativeShuffleExchange (36)
         :     :        :     :  :                                   +- NativeHashAggregate (35)
         :     :        :     :  :                                      +- NativeProject (34)
         :     :        :     :  :                                         +- NativeProject (33)
         :     :        :     :  :                                            +- NativeSortMergeJoin Inner (32)
         :     :        :     :  :                                               :- NativeSort (23)
         :     :        :     :  :                                               :  +- InputAdapter (22)
         :     :        :     :  :                                               :     +- AQEShuffleRead (21)
         :     :        :     :  :                                               :        +- ShuffleQueryStage (20), Statistics(X)
         :     :        :     :  :                                               :           +- NativeShuffleExchange (19)
         :     :        :     :  :                                               :              +- NativeProject (18)
         :     :        :     :  :                                               :                 +- NativeSortMergeJoin Inner (17)
         :     :        :     :  :                                               :                    :- NativeSort (8)
         :     :        :     :  :                                               :                    :  +- InputAdapter (7)
         :     :        :     :  :                                               :                    :     +- AQEShuffleRead (6)
         :     :        :     :  :                                               :                    :        +- ShuffleQueryStage (5), Statistics(X)
         :     :        :     :  :                                               :                    :           +- NativeShuffleExchange (4)
         :     :        :     :  :                                               :                    :              +- NativeFilter (3)
         :     :        :     :  :                                               :                    :                 +- InputAdapter (2)
         :     :        :     :  :                                               :                    :                    +- NativeParquetScan  (1)
         :     :        :     :  :                                               :                    +- NativeSort (16)
         :     :        :     :  :                                               :                       +- InputAdapter (15)
         :     :        :     :  :                                               :                          +- AQEShuffleRead (14)
         :     :        :     :  :                                               :                             +- ShuffleQueryStage (13), Statistics(X)
         :     :        :     :  :                                               :                                +- NativeShuffleExchange (12)
         :     :        :     :  :                                               :                                   +- NativeFilter (11)
         :     :        :     :  :                                               :                                      +- InputAdapter (10)
         :     :        :     :  :                                               :                                         +- NativeParquetScan  (9)
         :     :        :     :  :                                               +- NativeSort (31)
         :     :        :     :  :                                                  +- InputAdapter (30)
         :     :        :     :  :                                                     +- AQEShuffleRead (29)
         :     :        :     :  :                                                        +- ShuffleQueryStage (28), Statistics(X)
         :     :        :     :  :                                                           +- NativeShuffleExchange (27)
         :     :        :     :  :                                                              +- NativeFilter (26)
         :     :        :     :  :                                                                 +- InputAdapter (25)
         :     :        :     :  :                                                                    +- NativeParquetScan  (24)
         :     :        :     :  +- NativeSort (76)
         :     :        :     :     +- InputAdapter (75)
         :     :        :     :        +- AQEShuffleRead (74)
         :     :        :     :           +- ShuffleQueryStage (73), Statistics(X)
         :     :        :     :              +- NativeShuffleExchange (72)
         :     :        :     :                 +- NativeProject (71)
         :     :        :     :                    +- NativeHashAggregate (70)
         :     :        :     :                       +- InputAdapter (69)
         :     :        :     :                          +- AQEShuffleRead (68)
         :     :        :     :                             +- ShuffleQueryStage (67), Statistics(X)
         :     :        :     :                                +- NativeShuffleExchange (66)
         :     :        :     :                                   +- NativeHashAggregate (65)
         :     :        :     :                                      +- NativeProject (64)
         :     :        :     :                                         +- NativeProject (63)
         :     :        :     :                                            +- NativeSortMergeJoin Inner (62)
         :     :        :     :                                               :- NativeSort (53)
         :     :        :     :                                               :  +- InputAdapter (52)
         :     :        :     :                                               :     +- InputAdapter (51)
         :     :        :     :                                               :        +- AQEShuffleRead (50)
         :     :        :     :                                               :           +- ShuffleQueryStage (49), Statistics(X)
         :     :        :     :                                               :              +- ReusedExchange (48)
         :     :        :     :                                               +- NativeSort (61)
         :     :        :     :                                                  +- InputAdapter (60)
         :     :        :     :                                                     +- AQEShuffleRead (59)
         :     :        :     :                                                        +- ShuffleQueryStage (58), Statistics(X)
         :     :        :     :                                                           +- NativeShuffleExchange (57)
         :     :        :     :                                                              +- NativeFilter (56)
         :     :        :     :                                                                 +- InputAdapter (55)
         :     :        :     :                                                                    +- NativeParquetScan  (54)
         :     :        :     +- NativeSort (120)
         :     :        :        +- InputAdapter (119)
         :     :        :           +- AQEShuffleRead (118)
         :     :        :              +- ShuffleQueryStage (117), Statistics(X)
         :     :        :                 +- NativeShuffleExchange (116)
         :     :        :                    +- NativeFilter (115)
         :     :        :                       +- NativeProject (114)
         :     :        :                          +- NativeHashAggregate (113)
         :     :        :                             +- InputAdapter (112)
         :     :        :                                +- AQEShuffleRead (111)
         :     :        :                                   +- ShuffleQueryStage (110), Statistics(X)
         :     :        :                                      +- NativeShuffleExchange (109)
         :     :        :                                         +- NativeHashAggregate (108)
         :     :        :                                            +- NativeProject (107)
         :     :        :                                               +- NativeProject (106)
         :     :        :                                                  +- NativeSortMergeJoin Inner (105)
         :     :        :                                                     :- NativeSort (98)
         :     :        :                                                     :  +- InputAdapter (97)
         :     :        :                                                     :     +- AQEShuffleRead (96)
         :     :        :                                                     :        +- ShuffleQueryStage (95), Statistics(X)
         :     :        :                                                     :           +- NativeShuffleExchange (94)
         :     :        :                                                     :              +- NativeProject (93)
         :     :        :                                                     :                 +- NativeSortMergeJoin Inner (92)
         :     :        :                                                     :                    :- NativeSort (83)
         :     :        :                                                     :                    :  +- InputAdapter (82)
         :     :        :                                                     :                    :     +- InputAdapter (81)
         :     :        :                                                     :                    :        +- AQEShuffleRead (80)
         :     :        :                                                     :                    :           +- ShuffleQueryStage (79), Statistics(X)
         :     :        :                                                     :                    :              +- ReusedExchange (78)
         :     :        :                                                     :                    +- NativeSort (91)
         :     :        :                                                     :                       +- InputAdapter (90)
         :     :        :                                                     :                          +- AQEShuffleRead (89)
         :     :        :                                                     :                             +- ShuffleQueryStage (88), Statistics(X)
         :     :        :                                                     :                                +- NativeShuffleExchange (87)
         :     :        :                                                     :                                   +- NativeFilter (86)
         :     :        :                                                     :                                      +- InputAdapter (85)
         :     :        :                                                     :                                         +- NativeParquetScan  (84)
         :     :        :                                                     +- NativeSort (104)
         :     :        :                                                        +- InputAdapter (103)
         :     :        :                                                           +- InputAdapter (102)
         :     :        :                                                              +- AQEShuffleRead (101)
         :     :        :                                                                 +- ShuffleQueryStage (100), Statistics(X)
         :     :        :                                                                    +- ReusedExchange (99)
         :     :        +- NativeSort (149)
         :     :           +- InputAdapter (148)
         :     :              +- AQEShuffleRead (147)
         :     :                 +- ShuffleQueryStage (146), Statistics(X)
         :     :                    +- NativeShuffleExchange (145)
         :     :                       +- NativeProject (144)
         :     :                          +- NativeHashAggregate (143)
         :     :                             +- InputAdapter (142)
         :     :                                +- AQEShuffleRead (141)
         :     :                                   +- ShuffleQueryStage (140), Statistics(X)
         :     :                                      +- NativeShuffleExchange (139)
         :     :                                         +- NativeHashAggregate (138)
         :     :                                            +- NativeProject (137)
         :     :                                               +- NativeProject (136)
         :     :                                                  +- NativeSortMergeJoin Inner (135)
         :     :                                                     :- NativeSort (128)
         :     :                                                     :  +- InputAdapter (127)
         :     :                                                     :     +- InputAdapter (126)
         :     :                                                     :        +- AQEShuffleRead (125)
         :     :                                                     :           +- ShuffleQueryStage (124), Statistics(X)
         :     :                                                     :              +- ReusedExchange (123)
         :     :                                                     +- NativeSort (134)
         :     :                                                        +- InputAdapter (133)
         :     :                                                           +- InputAdapter (132)
         :     :                                                              +- AQEShuffleRead (131)
         :     :                                                                 +- ShuffleQueryStage (130), Statistics(X)
         :     :                                                                    +- ReusedExchange (129)
         :     +- NativeSort (195)
         :        +- InputAdapter (194)
         :           +- AQEShuffleRead (193)
         :              +- ShuffleQueryStage (192), Statistics(X)
         :                 +- NativeShuffleExchange (191)
         :                    +- NativeFilter (190)
         :                       +- NativeProject (189)
         :                          +- NativeHashAggregate (188)
         :                             +- InputAdapter (187)
         :                                +- AQEShuffleRead (186)
         :                                   +- ShuffleQueryStage (185), Statistics(X)
         :                                      +- NativeShuffleExchange (184)
         :                                         +- NativeHashAggregate (183)
         :                                            +- NativeProject (182)
         :                                               +- NativeProject (181)
         :                                                  +- NativeSortMergeJoin Inner (180)
         :                                                     :- NativeSort (173)
         :                                                     :  +- InputAdapter (172)
         :                                                     :     +- AQEShuffleRead (171)
         :                                                     :        +- ShuffleQueryStage (170), Statistics(X)
         :                                                     :           +- NativeShuffleExchange (169)
         :                                                     :              +- NativeProject (168)
         :                                                     :                 +- NativeSortMergeJoin Inner (167)
         :                                                     :                    :- NativeSort (158)
         :                                                     :                    :  +- InputAdapter (157)
         :                                                     :                    :     +- InputAdapter (156)
         :                                                     :                    :        +- AQEShuffleRead (155)
         :                                                     :                    :           +- ShuffleQueryStage (154), Statistics(X)
         :                                                     :                    :              +- ReusedExchange (153)
         :                                                     :                    +- NativeSort (166)
         :                                                     :                       +- InputAdapter (165)
         :                                                     :                          +- AQEShuffleRead (164)
         :                                                     :                             +- ShuffleQueryStage (163), Statistics(X)
         :                                                     :                                +- NativeShuffleExchange (162)
         :                                                     :                                   +- NativeFilter (161)
         :                                                     :                                      +- InputAdapter (160)
         :                                                     :                                         +- NativeParquetScan  (159)
         :                                                     +- NativeSort (179)
         :                                                        +- InputAdapter (178)
         :                                                           +- InputAdapter (177)
         :                                                              +- AQEShuffleRead (176)
         :                                                                 +- ShuffleQueryStage (175), Statistics(X)
         :                                                                    +- ReusedExchange (174)
         +- NativeSort (224)
            +- InputAdapter (223)
               +- AQEShuffleRead (222)
                  +- ShuffleQueryStage (221), Statistics(X)
                     +- NativeShuffleExchange (220)
                        +- NativeProject (219)
                           +- NativeHashAggregate (218)
                              +- InputAdapter (217)
                                 +- AQEShuffleRead (216)
                                    +- ShuffleQueryStage (215), Statistics(X)
                                       +- NativeShuffleExchange (214)
                                          +- NativeHashAggregate (213)
                                             +- NativeProject (212)
                                                +- NativeProject (211)
                                                   +- NativeSortMergeJoin Inner (210)
                                                      :- NativeSort (203)
                                                      :  +- InputAdapter (202)
                                                      :     +- InputAdapter (201)
                                                      :        +- AQEShuffleRead (200)
                                                      :           +- ShuffleQueryStage (199), Statistics(X)
                                                      :              +- ReusedExchange (198)
                                                      +- NativeSort (209)
                                                         +- InputAdapter (208)
                                                            +- InputAdapter (207)
                                                               +- AQEShuffleRead (206)
                                                                  +- ShuffleQueryStage (205), Statistics(X)
                                                                     +- ReusedExchange (204)
+- == Initial Plan ==
   TakeOrderedAndProject (378)
   +- Project (377)
      +- SortMergeJoin Inner (376)
         :- Project (352)
         :  +- SortMergeJoin Inner (351)
         :     :- Project (326)
         :     :  +- SortMergeJoin Inner (325)
         :     :     :- Project (301)
         :     :     :  +- SortMergeJoin Inner (300)
         :     :     :     :- SortMergeJoin Inner (275)
         :     :     :     :  :- Sort (251)
         :     :     :     :  :  +- Exchange (250)
         :     :     :     :  :     +- Filter (249)
         :     :     :     :  :        +- HashAggregate (248)
         :     :     :     :  :           +- Exchange (247)
         :     :     :     :  :              +- HashAggregate (246)
         :     :     :     :  :                 +- Project (245)
         :     :     :     :  :                    +- SortMergeJoin Inner (244)
         :     :     :     :  :                       :- Sort (239)
         :     :     :     :  :                       :  +- Exchange (238)
         :     :     :     :  :                       :     +- Project (237)
         :     :     :     :  :                       :        +- SortMergeJoin Inner (236)
         :     :     :     :  :                       :           :- Sort (231)
         :     :     :     :  :                       :           :  +- Exchange (230)
         :     :     :     :  :                       :           :     +- Filter (229)
         :     :     :     :  :                       :           :        +- Scan parquet (228)
         :     :     :     :  :                       :           +- Sort (235)
         :     :     :     :  :                       :              +- Exchange (234)
         :     :     :     :  :                       :                 +- Filter (233)
         :     :     :     :  :                       :                    +- Scan parquet (232)
         :     :     :     :  :                       +- Sort (243)
         :     :     :     :  :                          +- Exchange (242)
         :     :     :     :  :                             +- Filter (241)
         :     :     :     :  :                                +- Scan parquet (240)
         :     :     :     :  +- Sort (274)
         :     :     :     :     +- Exchange (273)
         :     :     :     :        +- HashAggregate (272)
         :     :     :     :           +- Exchange (271)
         :     :     :     :              +- HashAggregate (270)
         :     :     :     :                 +- Project (269)
         :     :     :     :                    +- SortMergeJoin Inner (268)
         :     :     :     :                       :- Sort (263)
         :     :     :     :                       :  +- Exchange (262)
         :     :     :     :                       :     +- Project (261)
         :     :     :     :                       :        +- SortMergeJoin Inner (260)
         :     :     :     :                       :           :- Sort (255)
         :     :     :     :                       :           :  +- Exchange (254)
         :     :     :     :                       :           :     +- Filter (253)
         :     :     :     :                       :           :        +- Scan parquet (252)
         :     :     :     :                       :           +- Sort (259)
         :     :     :     :                       :              +- Exchange (258)
         :     :     :     :                       :                 +- Filter (257)
         :     :     :     :                       :                    +- Scan parquet (256)
         :     :     :     :                       +- Sort (267)
         :     :     :     :                          +- Exchange (266)
         :     :     :     :                             +- Filter (265)
         :     :     :     :                                +- Scan parquet (264)
         :     :     :     +- Sort (299)
         :     :     :        +- Exchange (298)
         :     :     :           +- Filter (297)
         :     :     :              +- HashAggregate (296)
         :     :     :                 +- Exchange (295)
         :     :     :                    +- HashAggregate (294)
         :     :     :                       +- Project (293)
         :     :     :                          +- SortMergeJoin Inner (292)
         :     :     :                             :- Sort (287)
         :     :     :                             :  +- Exchange (286)
         :     :     :                             :     +- Project (285)
         :     :     :                             :        +- SortMergeJoin Inner (284)
         :     :     :                             :           :- Sort (279)
         :     :     :                             :           :  +- Exchange (278)
         :     :     :                             :           :     +- Filter (277)
         :     :     :                             :           :        +- Scan parquet (276)
         :     :     :                             :           +- Sort (283)
         :     :     :                             :              +- Exchange (282)
         :     :     :                             :                 +- Filter (281)
         :     :     :                             :                    +- Scan parquet (280)
         :     :     :                             +- Sort (291)
         :     :     :                                +- Exchange (290)
         :     :     :                                   +- Filter (289)
         :     :     :                                      +- Scan parquet (288)
         :     :     +- Sort (324)
         :     :        +- Exchange (323)
         :     :           +- HashAggregate (322)
         :     :              +- Exchange (321)
         :     :                 +- HashAggregate (320)
         :     :                    +- Project (319)
         :     :                       +- SortMergeJoin Inner (318)
         :     :                          :- Sort (313)
         :     :                          :  +- Exchange (312)
         :     :                          :     +- Project (311)
         :     :                          :        +- SortMergeJoin Inner (310)
         :     :                          :           :- Sort (305)
         :     :                          :           :  +- Exchange (304)
         :     :                          :           :     +- Filter (303)
         :     :                          :           :        +- Scan parquet (302)
         :     :                          :           +- Sort (309)
         :     :                          :              +- Exchange (308)
         :     :                          :                 +- Filter (307)
         :     :                          :                    +- Scan parquet (306)
         :     :                          +- Sort (317)
         :     :                             +- Exchange (316)
         :     :                                +- Filter (315)
         :     :                                   +- Scan parquet (314)
         :     +- Sort (350)
         :        +- Exchange (349)
         :           +- Filter (348)
         :              +- HashAggregate (347)
         :                 +- Exchange (346)
         :                    +- HashAggregate (345)
         :                       +- Project (344)
         :                          +- SortMergeJoin Inner (343)
         :                             :- Sort (338)
         :                             :  +- Exchange (337)
         :                             :     +- Project (336)
         :                             :        +- SortMergeJoin Inner (335)
         :                             :           :- Sort (330)
         :                             :           :  +- Exchange (329)
         :                             :           :     +- Filter (328)
         :                             :           :        +- Scan parquet (327)
         :                             :           +- Sort (334)
         :                             :              +- Exchange (333)
         :                             :                 +- Filter (332)
         :                             :                    +- Scan parquet (331)
         :                             +- Sort (342)
         :                                +- Exchange (341)
         :                                   +- Filter (340)
         :                                      +- Scan parquet (339)
         +- Sort (375)
            +- Exchange (374)
               +- HashAggregate (373)
                  +- Exchange (372)
                     +- HashAggregate (371)
                        +- Project (370)
                           +- SortMergeJoin Inner (369)
                              :- Sort (364)
                              :  +- Exchange (363)
                              :     +- Project (362)
                              :        +- SortMergeJoin Inner (361)
                              :           :- Sort (356)
                              :           :  +- Exchange (355)
                              :           :     +- Filter (354)
                              :           :        +- Scan parquet (353)
                              :           +- Sort (360)
                              :              +- Exchange (359)
                              :                 +- Filter (358)
                              :                    +- Scan parquet (357)
                              +- Sort (368)
                                 +- Exchange (367)
                                    +- Filter (366)
                                       +- Scan parquet (365)


(228) Scan parquet
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 [file:/<warehouse_dir>]
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) InputAdapter
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: [#1, #2, #3, #4, #5, #6, #7, #8]

(3) NativeFilter
Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
Condition : (isnotnull(c_customer_sk#1) AND isnotnull(c_customer_id#2))

(4) NativeShuffleExchange
Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
Arguments: hashpartitioning(c_customer_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=1]

(5) ShuffleQueryStage
Output [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
Arguments: X

(6) AQEShuffleRead
Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
Arguments: coalesced

(7) InputAdapter
Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]

(8) NativeSort
Input [8]: [#1#1, #2#2, #3#3, #4#4, #5#5, #6#6, #7#7, #8#8]
Arguments: [c_customer_sk#1 ASC NULLS FIRST], false

(232) Scan parquet
Output [6]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(ss_customer_sk), IsNotNull(ss_sold_date_sk)]
ReadSchema: struct<ss_sold_date_sk:int,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)>

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

(11) NativeFilter
Input [6]: [#9#9, #10#10, #11#11, #12#12, #13#13, #14#14]
Condition : (isnotnull(ss_customer_sk#10) AND isnotnull(ss_sold_date_sk#9))

(12) NativeShuffleExchange
Input [6]: [#9#9, #10#10, #11#11, #12#12, #13#13, #14#14]
Arguments: hashpartitioning(ss_customer_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=2]

(13) ShuffleQueryStage
Output [6]: [#9#9, #10#10, #11#11, #12#12, #13#13, #14#14]
Arguments: X

(14) AQEShuffleRead
Input [6]: [#9#9, #10#10, #11#11, #12#12, #13#13, #14#14]
Arguments: coalesced

(15) InputAdapter
Input [6]: [#9#9, #10#10, #11#11, #12#12, #13#13, #14#14]

(16) NativeSort
Input [6]: [#9#9, #10#10, #11#11, #12#12, #13#13, #14#14]
Arguments: [ss_customer_sk#10 ASC NULLS FIRST], false

(17) NativeSortMergeJoin
Left keys [1]: [c_customer_sk#1]
Right keys [1]: [ss_customer_sk#10]
Join type: Inner
Join condition: None

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

(19) NativeShuffleExchange
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_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: hashpartitioning(ss_sold_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=3]

(20) ShuffleQueryStage
Output [12]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, ss_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: X

(21) AQEShuffleRead
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_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: coalesced

(22) InputAdapter
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_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]

(23) NativeSort
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_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: [ss_sold_date_sk#9 ASC NULLS FIRST], false

(240) Scan parquet
Output [2]: [d_date_sk#15, d_year#16]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(25) InputAdapter
Input [2]: [d_date_sk#15, d_year#16]
Arguments: [#15, #16]

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

(27) NativeShuffleExchange
Input [2]: [#15#15, #16#16]
Arguments: hashpartitioning(d_date_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=4]

(28) ShuffleQueryStage
Output [2]: [#15#15, #16#16]
Arguments: X

(29) AQEShuffleRead
Input [2]: [#15#15, #16#16]
Arguments: coalesced

(30) InputAdapter
Input [2]: [#15#15, #16#16]

(31) NativeSort
Input [2]: [#15#15, #16#16]
Arguments: [d_date_sk#15 ASC NULLS FIRST], false

(32) NativeSortMergeJoin
Left keys [1]: [ss_sold_date_sk#9]
Right keys [1]: [d_date_sk#15]
Join type: Inner
Join condition: None

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

(34) NativeProject
Output [9]: [c_customer_id#2 AS c_customer_id#2, c_first_name#3 AS c_first_name#3, c_last_name#4 AS c_last_name#4, c_preferred_cust_flag#5 AS c_preferred_cust_flag#5, c_birth_country#6 AS c_birth_country#6, c_login#7 AS c_login#7, c_email_address#8 AS c_email_address#8, d_year#16 AS d_year#16, ((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2) AS _c8#17]
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#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14, d_year#16]

(35) NativeHashAggregate
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#16, _c8#17]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16]
Functions [1]: [partial_sum(_c8#17)]
Aggregate Attributes [2]: [sum#18, isEmpty#19]
Results [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#16, #20]

(36) NativeShuffleExchange
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#16, #20]
Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, 100), ENSURE_REQUIREMENTS, [plan_id=5]

(37) ShuffleQueryStage
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#16, #20]
Arguments: X

(38) AQEShuffleRead
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#16, #20]
Arguments: coalesced

(39) InputAdapter
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#16, #20]

(40) NativeHashAggregate
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#16, #20]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16]
Functions [1]: [sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))]
Aggregate Attributes [1]: [sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))#21]
Results [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#16, sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))#21]

(41) NativeProject
Output [2]: [c_customer_id#2 AS customer_id#22, sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))#21 AS year_total#23]
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#16, sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))#21]

(42) NativeFilter
Input [2]: [customer_id#22, year_total#23]
Condition : (isnotnull(year_total#23) AND (year_total#23 > 0.000000))

(43) NativeShuffleExchange
Input [2]: [customer_id#22, year_total#23]
Arguments: hashpartitioning(customer_id#22, 100), ENSURE_REQUIREMENTS, [plan_id=6]

(44) ShuffleQueryStage
Output [2]: [customer_id#22, year_total#23]
Arguments: X

(45) AQEShuffleRead
Input [2]: [customer_id#22, year_total#23]
Arguments: coalesced

(46) InputAdapter
Input [2]: [customer_id#22, year_total#23]

(47) NativeSort
Input [2]: [customer_id#22, year_total#23]
Arguments: [customer_id#22 ASC NULLS FIRST], false

(48) ReusedExchange [Reuses operator id: 19]
Output [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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]

(49) ShuffleQueryStage
Output [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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Arguments: X

(50) AQEShuffleRead
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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Arguments: coalesced

(51) InputAdapter
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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Arguments: [#24, #25, #26, #27, #28, #29, #30, #31, #32, #33, #34, #35]

(52) InputAdapter
Input [12]: [#24#24, #25#25, #26#26, #27#27, #28#28, #29#29, #30#30, #31#31, #32#32, #33#33, #34#34, #35#35]

(53) NativeSort
Input [12]: [#24#24, #25#25, #26#26, #27#27, #28#28, #29#29, #30#30, #31#31, #32#32, #33#33, #34#34, #35#35]
Arguments: [ss_sold_date_sk#31 ASC NULLS FIRST], false

(264) Scan parquet
Output [2]: [d_date_sk#36, d_year#37]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

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

(56) NativeFilter
Input [2]: [#36#36, #37#37]
Condition : ((isnotnull(d_year#37) AND (d_year#37 = 2002)) AND isnotnull(d_date_sk#36))

(57) NativeShuffleExchange
Input [2]: [#36#36, #37#37]
Arguments: hashpartitioning(d_date_sk#36, 100), ENSURE_REQUIREMENTS, [plan_id=7]

(58) ShuffleQueryStage
Output [2]: [#36#36, #37#37]
Arguments: X

(59) AQEShuffleRead
Input [2]: [#36#36, #37#37]
Arguments: coalesced

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

(61) NativeSort
Input [2]: [#36#36, #37#37]
Arguments: [d_date_sk#36 ASC NULLS FIRST], false

(62) NativeSortMergeJoin
Left keys [1]: [ss_sold_date_sk#31]
Right keys [1]: [d_date_sk#36]
Join type: Inner
Join condition: None

(63) NativeProject
Output [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_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35, d_year#37]
Input [14]: [#24#24, #25#25, #26#26, #27#27, #28#28, #29#29, #30#30, #31#31, #32#32, #33#33, #34#34, #35#35, #36#36, #37#37]

(64) NativeProject
Output [9]: [c_customer_id#24 AS c_customer_id#24, c_first_name#25 AS c_first_name#25, c_last_name#26 AS c_last_name#26, c_preferred_cust_flag#27 AS c_preferred_cust_flag#27, c_birth_country#28 AS c_birth_country#28, c_login#29 AS c_login#29, c_email_address#30 AS c_email_address#30, d_year#37 AS d_year#37, ((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2) AS _c8#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_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35, d_year#37]

(65) NativeHashAggregate
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, _c8#38]
Keys [8]: [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]
Functions [1]: [partial_sum(_c8#38)]
Aggregate Attributes [2]: [sum#39, isEmpty#40]
Results [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, #20]

(66) NativeShuffleExchange
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, #20]
Arguments: hashpartitioning(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, 100), ENSURE_REQUIREMENTS, [plan_id=8]

(67) ShuffleQueryStage
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, #20]
Arguments: X

(68) AQEShuffleRead
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, #20]
Arguments: coalesced

(69) InputAdapter
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, #20]

(70) NativeHashAggregate
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, #20]
Keys [8]: [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]
Functions [1]: [sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))]
Aggregate Attributes [1]: [sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))#21]
Results [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, sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))#21]

(71) NativeProject
Output [8]: [c_customer_id#24 AS customer_id#41, c_first_name#25 AS customer_first_name#42, c_last_name#26 AS customer_last_name#43, c_preferred_cust_flag#27 AS customer_preferred_cust_flag#44, c_birth_country#28 AS customer_birth_country#45, c_login#29 AS customer_login#46, c_email_address#30 AS customer_email_address#47, sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))#21 AS year_total#48]
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, sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))#21]

(72) NativeShuffleExchange
Input [8]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48]
Arguments: hashpartitioning(customer_id#41, 100), ENSURE_REQUIREMENTS, [plan_id=9]

(73) ShuffleQueryStage
Output [8]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48]
Arguments: X

(74) AQEShuffleRead
Input [8]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48]
Arguments: coalesced

(75) InputAdapter
Input [8]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48]

(76) NativeSort
Input [8]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48]
Arguments: [customer_id#41 ASC NULLS FIRST], false

(77) NativeSortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#41]
Join type: Inner
Join condition: None

(78) ReusedExchange [Reuses operator id: 4]
Output [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]

(79) ShuffleQueryStage
Output [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]
Arguments: X

(80) AQEShuffleRead
Input [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]
Arguments: coalesced

(81) InputAdapter
Input [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]
Arguments: [#49, #50, #51, #52, #53, #54, #55, #56]

(82) InputAdapter
Input [8]: [#49#49, #50#50, #51#51, #52#52, #53#53, #54#54, #55#55, #56#56]

(83) NativeSort
Input [8]: [#49#49, #50#50, #51#51, #52#52, #53#53, #54#54, #55#55, #56#56]
Arguments: [c_customer_sk#49 ASC NULLS FIRST], false

(280) Scan parquet
Output [6]: [cs_sold_date_sk#57, cs_bill_customer_sk#58, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_sold_date_sk)]
ReadSchema: struct<cs_sold_date_sk:int,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)>

(85) InputAdapter
Input [6]: [cs_sold_date_sk#57, cs_bill_customer_sk#58, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: [#57, #58, #59, #60, #61, #62]

(86) NativeFilter
Input [6]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62]
Condition : (isnotnull(cs_bill_customer_sk#58) AND isnotnull(cs_sold_date_sk#57))

(87) NativeShuffleExchange
Input [6]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62]
Arguments: hashpartitioning(cs_bill_customer_sk#58, 100), ENSURE_REQUIREMENTS, [plan_id=10]

(88) ShuffleQueryStage
Output [6]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62]
Arguments: X

(89) AQEShuffleRead
Input [6]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62]
Arguments: coalesced

(90) InputAdapter
Input [6]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62]

(91) NativeSort
Input [6]: [#57#57, #58#58, #59#59, #60#60, #61#61, #62#62]
Arguments: [cs_bill_customer_sk#58 ASC NULLS FIRST], false

(92) NativeSortMergeJoin
Left keys [1]: [c_customer_sk#49]
Right keys [1]: [cs_bill_customer_sk#58]
Join type: Inner
Join condition: None

(93) NativeProject
Output [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Input [14]: [#49#49, #50#50, #51#51, #52#52, #53#53, #54#54, #55#55, #56#56, #57#57, #58#58, #59#59, #60#60, #61#61, #62#62]

(94) NativeShuffleExchange
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: hashpartitioning(cs_sold_date_sk#57, 100), ENSURE_REQUIREMENTS, [plan_id=11]

(95) ShuffleQueryStage
Output [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: X

(96) AQEShuffleRead
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: coalesced

(97) InputAdapter
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]

(98) NativeSort
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: [cs_sold_date_sk#57 ASC NULLS FIRST], false

(99) ReusedExchange [Reuses operator id: 27]
Output [2]: [d_date_sk#63, d_year#64]

(100) ShuffleQueryStage
Output [2]: [d_date_sk#63, d_year#64]
Arguments: X

(101) AQEShuffleRead
Input [2]: [d_date_sk#63, d_year#64]
Arguments: coalesced

(102) InputAdapter
Input [2]: [d_date_sk#63, d_year#64]
Arguments: [#63, #64]

(103) InputAdapter
Input [2]: [#63#63, #64#64]

(104) NativeSort
Input [2]: [#63#63, #64#64]
Arguments: [d_date_sk#63 ASC NULLS FIRST], false

(105) NativeSortMergeJoin
Left keys [1]: [cs_sold_date_sk#57]
Right keys [1]: [d_date_sk#63]
Join type: Inner
Join condition: None

(106) NativeProject
Output [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62, d_year#64]
Input [14]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62, #63#63, #64#64]

(107) NativeProject
Output [9]: [c_customer_id#50 AS c_customer_id#50, c_first_name#51 AS c_first_name#51, c_last_name#52 AS c_last_name#52, c_preferred_cust_flag#53 AS c_preferred_cust_flag#53, c_birth_country#54 AS c_birth_country#54, c_login#55 AS c_login#55, c_email_address#56 AS c_email_address#56, d_year#64 AS d_year#64, ((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2) AS _c8#65]
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62, d_year#64]

(108) NativeHashAggregate
Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, _c8#65]
Keys [8]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64]
Functions [1]: [partial_sum(_c8#65)]
Aggregate Attributes [2]: [sum#66, isEmpty#67]
Results [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, #20]

(109) NativeShuffleExchange
Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, #20]
Arguments: hashpartitioning(c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, 100), ENSURE_REQUIREMENTS, [plan_id=12]

(110) ShuffleQueryStage
Output [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, #20]
Arguments: X

(111) AQEShuffleRead
Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, #20]
Arguments: coalesced

(112) InputAdapter
Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, #20]

(113) NativeHashAggregate
Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, #20]
Keys [8]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64]
Functions [1]: [sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))]
Aggregate Attributes [1]: [sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))#68]
Results [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))#68]

(114) NativeProject
Output [2]: [c_customer_id#50 AS customer_id#69, sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))#68 AS year_total#70]
Input [9]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))#68]

(115) NativeFilter
Input [2]: [customer_id#69, year_total#70]
Condition : (isnotnull(year_total#70) AND (year_total#70 > 0.000000))

(116) NativeShuffleExchange
Input [2]: [customer_id#69, year_total#70]
Arguments: hashpartitioning(customer_id#69, 100), ENSURE_REQUIREMENTS, [plan_id=13]

(117) ShuffleQueryStage
Output [2]: [customer_id#69, year_total#70]
Arguments: X

(118) AQEShuffleRead
Input [2]: [customer_id#69, year_total#70]
Arguments: coalesced

(119) InputAdapter
Input [2]: [customer_id#69, year_total#70]

(120) NativeSort
Input [2]: [customer_id#69, year_total#70]
Arguments: [customer_id#69 ASC NULLS FIRST], false

(121) NativeSortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#69]
Join type: Inner
Join condition: None

(122) NativeProject
Output [11]: [customer_id#22, year_total#23, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48, year_total#70]
Input [12]: [customer_id#22, year_total#23, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48, customer_id#69, year_total#70]

(123) ReusedExchange [Reuses operator id: 94]
Output [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]

(124) ShuffleQueryStage
Output [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Arguments: X

(125) AQEShuffleRead
Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Arguments: coalesced

(126) InputAdapter
Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Arguments: [#71, #72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82]

(127) InputAdapter
Input [12]: [#71#71, #72#72, #73#73, #74#74, #75#75, #76#76, #77#77, #78#78, #79#79, #80#80, #81#81, #82#82]

(128) NativeSort
Input [12]: [#71#71, #72#72, #73#73, #74#74, #75#75, #76#76, #77#77, #78#78, #79#79, #80#80, #81#81, #82#82]
Arguments: [cs_sold_date_sk#78 ASC NULLS FIRST], false

(129) ReusedExchange [Reuses operator id: 57]
Output [2]: [d_date_sk#83, d_year#84]

(130) ShuffleQueryStage
Output [2]: [d_date_sk#83, d_year#84]
Arguments: X

(131) AQEShuffleRead
Input [2]: [d_date_sk#83, d_year#84]
Arguments: coalesced

(132) InputAdapter
Input [2]: [d_date_sk#83, d_year#84]
Arguments: [#83, #84]

(133) InputAdapter
Input [2]: [#83#83, #84#84]

(134) NativeSort
Input [2]: [#83#83, #84#84]
Arguments: [d_date_sk#83 ASC NULLS FIRST], false

(135) NativeSortMergeJoin
Left keys [1]: [cs_sold_date_sk#78]
Right keys [1]: [d_date_sk#83]
Join type: Inner
Join condition: None

(136) NativeProject
Output [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82, d_year#84]
Input [14]: [#71#71, #72#72, #73#73, #74#74, #75#75, #76#76, #77#77, #78#78, #79#79, #80#80, #81#81, #82#82, #83#83, #84#84]

(137) NativeProject
Output [9]: [c_customer_id#71 AS c_customer_id#71, c_first_name#72 AS c_first_name#72, c_last_name#73 AS c_last_name#73, c_preferred_cust_flag#74 AS c_preferred_cust_flag#74, c_birth_country#75 AS c_birth_country#75, c_login#76 AS c_login#76, c_email_address#77 AS c_email_address#77, d_year#84 AS d_year#84, ((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2) AS _c8#85]
Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82, d_year#84]

(138) NativeHashAggregate
Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, _c8#85]
Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84]
Functions [1]: [partial_sum(_c8#85)]
Aggregate Attributes [2]: [sum#86, isEmpty#87]
Results [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, #20]

(139) NativeShuffleExchange
Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, #20]
Arguments: hashpartitioning(c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, 100), ENSURE_REQUIREMENTS, [plan_id=14]

(140) ShuffleQueryStage
Output [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, #20]
Arguments: X

(141) AQEShuffleRead
Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, #20]
Arguments: coalesced

(142) InputAdapter
Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, #20]

(143) NativeHashAggregate
Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, #20]
Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84]
Functions [1]: [sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))]
Aggregate Attributes [1]: [sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))#68]
Results [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))#68]

(144) NativeProject
Output [2]: [c_customer_id#71 AS customer_id#88, sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))#68 AS year_total#89]
Input [9]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))#68]

(145) NativeShuffleExchange
Input [2]: [customer_id#88, year_total#89]
Arguments: hashpartitioning(customer_id#88, 100), ENSURE_REQUIREMENTS, [plan_id=15]

(146) ShuffleQueryStage
Output [2]: [customer_id#88, year_total#89]
Arguments: X

(147) AQEShuffleRead
Input [2]: [customer_id#88, year_total#89]
Arguments: coalesced

(148) InputAdapter
Input [2]: [customer_id#88, year_total#89]

(149) NativeSort
Input [2]: [customer_id#88, year_total#89]
Arguments: [customer_id#88 ASC NULLS FIRST], false

(150) SortMergeJoin [codegen id : X]
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#88]
Join type: Inner
Join condition: (CASE WHEN (year_total#70 > 0.000000) THEN (year_total#89 / year_total#70) END > CASE WHEN (year_total#23 > 0.000000) THEN (year_total#48 / year_total#23) END)

(151) Project [codegen id : X]
Output [10]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89]
Input [13]: [customer_id#22, year_total#23, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48, year_total#70, customer_id#88, year_total#89]

(152) ConvertToNative
Input [10]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89]

(153) ReusedExchange [Reuses operator id: 4]
Output [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]

(154) ShuffleQueryStage
Output [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]
Arguments: X

(155) AQEShuffleRead
Input [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]
Arguments: coalesced

(156) InputAdapter
Input [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]
Arguments: [#90, #91, #92, #93, #94, #95, #96, #97]

(157) InputAdapter
Input [8]: [#90#90, #91#91, #92#92, #93#93, #94#94, #95#95, #96#96, #97#97]

(158) NativeSort
Input [8]: [#90#90, #91#91, #92#92, #93#93, #94#94, #95#95, #96#96, #97#97]
Arguments: [c_customer_sk#90 ASC NULLS FIRST], false

(331) Scan parquet
Output [6]: [ws_sold_date_sk#98, ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)]
ReadSchema: struct<ws_sold_date_sk:int,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)>

(160) InputAdapter
Input [6]: [ws_sold_date_sk#98, ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: [#98, #99, #100, #101, #102, #103]

(161) NativeFilter
Input [6]: [#98#98, #99#99, #100#100, #101#101, #102#102, #103#103]
Condition : (isnotnull(ws_bill_customer_sk#99) AND isnotnull(ws_sold_date_sk#98))

(162) NativeShuffleExchange
Input [6]: [#98#98, #99#99, #100#100, #101#101, #102#102, #103#103]
Arguments: hashpartitioning(ws_bill_customer_sk#99, 100), ENSURE_REQUIREMENTS, [plan_id=16]

(163) ShuffleQueryStage
Output [6]: [#98#98, #99#99, #100#100, #101#101, #102#102, #103#103]
Arguments: X

(164) AQEShuffleRead
Input [6]: [#98#98, #99#99, #100#100, #101#101, #102#102, #103#103]
Arguments: coalesced

(165) InputAdapter
Input [6]: [#98#98, #99#99, #100#100, #101#101, #102#102, #103#103]

(166) NativeSort
Input [6]: [#98#98, #99#99, #100#100, #101#101, #102#102, #103#103]
Arguments: [ws_bill_customer_sk#99 ASC NULLS FIRST], false

(167) NativeSortMergeJoin
Left keys [1]: [c_customer_sk#90]
Right keys [1]: [ws_bill_customer_sk#99]
Join type: Inner
Join condition: None

(168) NativeProject
Output [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Input [14]: [#90#90, #91#91, #92#92, #93#93, #94#94, #95#95, #96#96, #97#97, #98#98, #99#99, #100#100, #101#101, #102#102, #103#103]

(169) NativeShuffleExchange
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: hashpartitioning(ws_sold_date_sk#98, 100), ENSURE_REQUIREMENTS, [plan_id=17]

(170) ShuffleQueryStage
Output [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: X

(171) AQEShuffleRead
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: coalesced

(172) InputAdapter
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]

(173) NativeSort
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: [ws_sold_date_sk#98 ASC NULLS FIRST], false

(174) ReusedExchange [Reuses operator id: 27]
Output [2]: [d_date_sk#104, d_year#105]

(175) ShuffleQueryStage
Output [2]: [d_date_sk#104, d_year#105]
Arguments: X

(176) AQEShuffleRead
Input [2]: [d_date_sk#104, d_year#105]
Arguments: coalesced

(177) InputAdapter
Input [2]: [d_date_sk#104, d_year#105]
Arguments: [#104, #105]

(178) InputAdapter
Input [2]: [#104#104, #105#105]

(179) NativeSort
Input [2]: [#104#104, #105#105]
Arguments: [d_date_sk#104 ASC NULLS FIRST], false

(180) NativeSortMergeJoin
Left keys [1]: [ws_sold_date_sk#98]
Right keys [1]: [d_date_sk#104]
Join type: Inner
Join condition: None

(181) NativeProject
Output [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#105]
Input [14]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, #104#104, #105#105]

(182) NativeProject
Output [9]: [c_customer_id#91 AS c_customer_id#91, c_first_name#92 AS c_first_name#92, c_last_name#93 AS c_last_name#93, c_preferred_cust_flag#94 AS c_preferred_cust_flag#94, c_birth_country#95 AS c_birth_country#95, c_login#96 AS c_login#96, c_email_address#97 AS c_email_address#97, d_year#105 AS d_year#105, ((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2) AS _c8#106]
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#105]

(183) NativeHashAggregate
Input [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, _c8#106]
Keys [8]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105]
Functions [1]: [partial_sum(_c8#106)]
Aggregate Attributes [2]: [sum#107, isEmpty#108]
Results [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, #20]

(184) NativeShuffleExchange
Input [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, #20]
Arguments: hashpartitioning(c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, 100), ENSURE_REQUIREMENTS, [plan_id=18]

(185) ShuffleQueryStage
Output [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, #20]
Arguments: X

(186) AQEShuffleRead
Input [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, #20]
Arguments: coalesced

(187) InputAdapter
Input [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, #20]

(188) NativeHashAggregate
Input [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, #20]
Keys [8]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105]
Functions [1]: [sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))]
Aggregate Attributes [1]: [sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))#109]
Results [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))#109]

(189) NativeProject
Output [2]: [c_customer_id#91 AS customer_id#110, sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))#109 AS year_total#111]
Input [9]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))#109]

(190) NativeFilter
Input [2]: [customer_id#110, year_total#111]
Condition : (isnotnull(year_total#111) AND (year_total#111 > 0.000000))

(191) NativeShuffleExchange
Input [2]: [customer_id#110, year_total#111]
Arguments: hashpartitioning(customer_id#110, 100), ENSURE_REQUIREMENTS, [plan_id=19]

(192) ShuffleQueryStage
Output [2]: [customer_id#110, year_total#111]
Arguments: X

(193) AQEShuffleRead
Input [2]: [customer_id#110, year_total#111]
Arguments: coalesced

(194) InputAdapter
Input [2]: [customer_id#110, year_total#111]

(195) NativeSort
Input [2]: [customer_id#110, year_total#111]
Arguments: [customer_id#110 ASC NULLS FIRST], false

(196) NativeSortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#110]
Join type: Inner
Join condition: None

(197) NativeProject
Output [11]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89, year_total#111]
Input [12]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89, customer_id#110, year_total#111]

(198) ReusedExchange [Reuses operator id: 169]
Output [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]

(199) ShuffleQueryStage
Output [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Arguments: X

(200) AQEShuffleRead
Input [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Arguments: coalesced

(201) InputAdapter
Input [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Arguments: [#112, #113, #114, #115, #116, #117, #118, #119, #120, #121, #122, #123]

(202) InputAdapter
Input [12]: [#112#112, #113#113, #114#114, #115#115, #116#116, #117#117, #118#118, #119#119, #120#120, #121#121, #122#122, #123#123]

(203) NativeSort
Input [12]: [#112#112, #113#113, #114#114, #115#115, #116#116, #117#117, #118#118, #119#119, #120#120, #121#121, #122#122, #123#123]
Arguments: [ws_sold_date_sk#119 ASC NULLS FIRST], false

(204) ReusedExchange [Reuses operator id: 57]
Output [2]: [d_date_sk#124, d_year#125]

(205) ShuffleQueryStage
Output [2]: [d_date_sk#124, d_year#125]
Arguments: X

(206) AQEShuffleRead
Input [2]: [d_date_sk#124, d_year#125]
Arguments: coalesced

(207) InputAdapter
Input [2]: [d_date_sk#124, d_year#125]
Arguments: [#124, #125]

(208) InputAdapter
Input [2]: [#124#124, #125#125]

(209) NativeSort
Input [2]: [#124#124, #125#125]
Arguments: [d_date_sk#124 ASC NULLS FIRST], false

(210) NativeSortMergeJoin
Left keys [1]: [ws_sold_date_sk#119]
Right keys [1]: [d_date_sk#124]
Join type: Inner
Join condition: None

(211) NativeProject
Output [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123, d_year#125]
Input [14]: [#112#112, #113#113, #114#114, #115#115, #116#116, #117#117, #118#118, #119#119, #120#120, #121#121, #122#122, #123#123, #124#124, #125#125]

(212) NativeProject
Output [9]: [c_customer_id#112 AS c_customer_id#112, c_first_name#113 AS c_first_name#113, c_last_name#114 AS c_last_name#114, c_preferred_cust_flag#115 AS c_preferred_cust_flag#115, c_birth_country#116 AS c_birth_country#116, c_login#117 AS c_login#117, c_email_address#118 AS c_email_address#118, d_year#125 AS d_year#125, ((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2) AS _c8#126]
Input [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123, d_year#125]

(213) NativeHashAggregate
Input [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, _c8#126]
Keys [8]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125]
Functions [1]: [partial_sum(_c8#126)]
Aggregate Attributes [2]: [sum#127, isEmpty#128]
Results [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, #20]

(214) NativeShuffleExchange
Input [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, #20]
Arguments: hashpartitioning(c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, 100), ENSURE_REQUIREMENTS, [plan_id=20]

(215) ShuffleQueryStage
Output [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, #20]
Arguments: X

(216) AQEShuffleRead
Input [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, #20]
Arguments: coalesced

(217) InputAdapter
Input [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, #20]

(218) NativeHashAggregate
Input [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, #20]
Keys [8]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125]
Functions [1]: [sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))]
Aggregate Attributes [1]: [sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))#109]
Results [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))#109]

(219) NativeProject
Output [2]: [c_customer_id#112 AS customer_id#129, sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))#109 AS year_total#130]
Input [9]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))#109]

(220) NativeShuffleExchange
Input [2]: [customer_id#129, year_total#130]
Arguments: hashpartitioning(customer_id#129, 100), ENSURE_REQUIREMENTS, [plan_id=21]

(221) ShuffleQueryStage
Output [2]: [customer_id#129, year_total#130]
Arguments: X

(222) AQEShuffleRead
Input [2]: [customer_id#129, year_total#130]
Arguments: coalesced

(223) InputAdapter
Input [2]: [customer_id#129, year_total#130]

(224) NativeSort
Input [2]: [customer_id#129, year_total#130]
Arguments: [customer_id#129 ASC NULLS FIRST], false

(225) SortMergeJoin [codegen id : X]
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#129]
Join type: Inner
Join condition: (CASE WHEN (year_total#70 > 0.000000) THEN (year_total#89 / year_total#70) END > CASE WHEN (year_total#111 > 0.000000) THEN (year_total#130 / year_total#111) END)

(226) Project [codegen id : X]
Output [7]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47]
Input [13]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89, year_total#111, customer_id#129, year_total#130]

(227) TakeOrderedAndProject
Input [7]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47]
Arguments: X, [customer_id#41 ASC NULLS FIRST, customer_first_name#42 ASC NULLS FIRST, customer_last_name#43 ASC NULLS FIRST, customer_preferred_cust_flag#44 ASC NULLS FIRST, customer_birth_country#45 ASC NULLS FIRST, customer_login#46 ASC NULLS FIRST, customer_email_address#47 ASC NULLS FIRST], [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47]

(228) Scan parquet
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 [file:/<warehouse_dir>]
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>

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

(230) Exchange
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: hashpartitioning(c_customer_sk#1, 100), ENSURE_REQUIREMENTS, [plan_id=22]

(231) Sort
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: [c_customer_sk#1 ASC NULLS FIRST], false, 0

(232) Scan parquet
Output [6]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(ss_customer_sk), IsNotNull(ss_sold_date_sk)]
ReadSchema: struct<ss_sold_date_sk:int,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)>

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

(234) Exchange
Input [6]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: hashpartitioning(ss_customer_sk#10, 100), ENSURE_REQUIREMENTS, [plan_id=23]

(235) Sort
Input [6]: [ss_sold_date_sk#9, ss_customer_sk#10, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: [ss_customer_sk#10 ASC NULLS FIRST], false, 0

(236) SortMergeJoin
Left keys [1]: [c_customer_sk#1]
Right keys [1]: [ss_customer_sk#10]
Join type: Inner
Join condition: None

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

(238) Exchange
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_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: hashpartitioning(ss_sold_date_sk#9, 100), ENSURE_REQUIREMENTS, [plan_id=24]

(239) Sort
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_sold_date_sk#9, ss_ext_discount_amt#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14]
Arguments: [ss_sold_date_sk#9 ASC NULLS FIRST], false, 0

(240) Scan parquet
Output [2]: [d_date_sk#15, d_year#16]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

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

(242) Exchange
Input [2]: [d_date_sk#15, d_year#16]
Arguments: hashpartitioning(d_date_sk#15, 100), ENSURE_REQUIREMENTS, [plan_id=25]

(243) Sort
Input [2]: [d_date_sk#15, d_year#16]
Arguments: [d_date_sk#15 ASC NULLS FIRST], false, 0

(244) SortMergeJoin
Left keys [1]: [ss_sold_date_sk#9]
Right keys [1]: [d_date_sk#15]
Join type: Inner
Join condition: None

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

(246) HashAggregate
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#11, ss_ext_sales_price#12, ss_ext_wholesale_cost#13, ss_ext_list_price#14, d_year#16]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16]
Functions [1]: [partial_sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))]
Aggregate Attributes [2]: [sum#18, isEmpty#19]
Results [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, sum#131, isEmpty#132]

(247) Exchange
Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, sum#131, isEmpty#132]
Arguments: hashpartitioning(c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, 100), ENSURE_REQUIREMENTS, [plan_id=26]

(248) HashAggregate
Input [10]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16, sum#131, isEmpty#132]
Keys [8]: [c_customer_id#2, c_first_name#3, c_last_name#4, c_preferred_cust_flag#5, c_birth_country#6, c_login#7, c_email_address#8, d_year#16]
Functions [1]: [sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))]
Aggregate Attributes [1]: [sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))#21]
Results [2]: [c_customer_id#2 AS customer_id#22, sum(((((ss_ext_list_price#14 - ss_ext_wholesale_cost#13) - ss_ext_discount_amt#11) + ss_ext_sales_price#12) / 2))#21 AS year_total#23]

(249) Filter
Input [2]: [customer_id#22, year_total#23]
Condition : (isnotnull(year_total#23) AND (year_total#23 > 0.000000))

(250) Exchange
Input [2]: [customer_id#22, year_total#23]
Arguments: hashpartitioning(customer_id#22, 100), ENSURE_REQUIREMENTS, [plan_id=27]

(251) Sort
Input [2]: [customer_id#22, year_total#23]
Arguments: [customer_id#22 ASC NULLS FIRST], false, 0

(252) Scan parquet
Output [8]: [c_customer_sk#133, 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 [file:/<warehouse_dir>]
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>

(253) Filter
Input [8]: [c_customer_sk#133, 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]
Condition : (isnotnull(c_customer_sk#133) AND isnotnull(c_customer_id#24))

(254) Exchange
Input [8]: [c_customer_sk#133, 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: hashpartitioning(c_customer_sk#133, 100), ENSURE_REQUIREMENTS, [plan_id=28]

(255) Sort
Input [8]: [c_customer_sk#133, 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: [c_customer_sk#133 ASC NULLS FIRST], false, 0

(256) Scan parquet
Output [6]: [ss_sold_date_sk#31, ss_customer_sk#134, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(ss_customer_sk), IsNotNull(ss_sold_date_sk)]
ReadSchema: struct<ss_sold_date_sk:int,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)>

(257) Filter
Input [6]: [ss_sold_date_sk#31, ss_customer_sk#134, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Condition : (isnotnull(ss_customer_sk#134) AND isnotnull(ss_sold_date_sk#31))

(258) Exchange
Input [6]: [ss_sold_date_sk#31, ss_customer_sk#134, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Arguments: hashpartitioning(ss_customer_sk#134, 100), ENSURE_REQUIREMENTS, [plan_id=29]

(259) Sort
Input [6]: [ss_sold_date_sk#31, ss_customer_sk#134, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Arguments: [ss_customer_sk#134 ASC NULLS FIRST], false, 0

(260) SortMergeJoin
Left keys [1]: [c_customer_sk#133]
Right keys [1]: [ss_customer_sk#134]
Join type: Inner
Join condition: None

(261) Project
Output [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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Input [14]: [c_customer_sk#133, 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_sold_date_sk#31, ss_customer_sk#134, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]

(262) Exchange
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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Arguments: hashpartitioning(ss_sold_date_sk#31, 100), ENSURE_REQUIREMENTS, [plan_id=30]

(263) Sort
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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35]
Arguments: [ss_sold_date_sk#31 ASC NULLS FIRST], false, 0

(264) Scan parquet
Output [2]: [d_date_sk#36, d_year#37]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(265) Filter
Input [2]: [d_date_sk#36, d_year#37]
Condition : ((isnotnull(d_year#37) AND (d_year#37 = 2002)) AND isnotnull(d_date_sk#36))

(266) Exchange
Input [2]: [d_date_sk#36, d_year#37]
Arguments: hashpartitioning(d_date_sk#36, 100), ENSURE_REQUIREMENTS, [plan_id=31]

(267) Sort
Input [2]: [d_date_sk#36, d_year#37]
Arguments: [d_date_sk#36 ASC NULLS FIRST], false, 0

(268) SortMergeJoin
Left keys [1]: [ss_sold_date_sk#31]
Right keys [1]: [d_date_sk#36]
Join type: Inner
Join condition: None

(269) Project
Output [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_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35, d_year#37]
Input [14]: [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_sold_date_sk#31, ss_ext_discount_amt#32, ss_ext_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35, d_date_sk#36, d_year#37]

(270) HashAggregate
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_sales_price#33, ss_ext_wholesale_cost#34, ss_ext_list_price#35, d_year#37]
Keys [8]: [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]
Functions [1]: [partial_sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))]
Aggregate Attributes [2]: [sum#39, isEmpty#40]
Results [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, d_year#37, sum#135, isEmpty#136]

(271) Exchange
Input [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, d_year#37, sum#135, isEmpty#136]
Arguments: hashpartitioning(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, 100), ENSURE_REQUIREMENTS, [plan_id=32]

(272) HashAggregate
Input [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, d_year#37, sum#135, isEmpty#136]
Keys [8]: [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]
Functions [1]: [sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))]
Aggregate Attributes [1]: [sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))#21]
Results [8]: [c_customer_id#24 AS customer_id#41, c_first_name#25 AS customer_first_name#42, c_last_name#26 AS customer_last_name#43, c_preferred_cust_flag#27 AS customer_preferred_cust_flag#44, c_birth_country#28 AS customer_birth_country#45, c_login#29 AS customer_login#46, c_email_address#30 AS customer_email_address#47, sum(((((ss_ext_list_price#35 - ss_ext_wholesale_cost#34) - ss_ext_discount_amt#32) + ss_ext_sales_price#33) / 2))#21 AS year_total#48]

(273) Exchange
Input [8]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48]
Arguments: hashpartitioning(customer_id#41, 100), ENSURE_REQUIREMENTS, [plan_id=33]

(274) Sort
Input [8]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48]
Arguments: [customer_id#41 ASC NULLS FIRST], false, 0

(275) SortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#41]
Join type: Inner
Join condition: None

(276) Scan parquet
Output [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
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>

(277) Filter
Input [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]
Condition : (isnotnull(c_customer_sk#49) AND isnotnull(c_customer_id#50))

(278) Exchange
Input [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]
Arguments: hashpartitioning(c_customer_sk#49, 100), ENSURE_REQUIREMENTS, [plan_id=34]

(279) Sort
Input [8]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56]
Arguments: [c_customer_sk#49 ASC NULLS FIRST], false, 0

(280) Scan parquet
Output [6]: [cs_sold_date_sk#57, cs_bill_customer_sk#58, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_sold_date_sk)]
ReadSchema: struct<cs_sold_date_sk:int,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)>

(281) Filter
Input [6]: [cs_sold_date_sk#57, cs_bill_customer_sk#58, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Condition : (isnotnull(cs_bill_customer_sk#58) AND isnotnull(cs_sold_date_sk#57))

(282) Exchange
Input [6]: [cs_sold_date_sk#57, cs_bill_customer_sk#58, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: hashpartitioning(cs_bill_customer_sk#58, 100), ENSURE_REQUIREMENTS, [plan_id=35]

(283) Sort
Input [6]: [cs_sold_date_sk#57, cs_bill_customer_sk#58, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: [cs_bill_customer_sk#58 ASC NULLS FIRST], false, 0

(284) SortMergeJoin
Left keys [1]: [c_customer_sk#49]
Right keys [1]: [cs_bill_customer_sk#58]
Join type: Inner
Join condition: None

(285) Project
Output [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Input [14]: [c_customer_sk#49, c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_bill_customer_sk#58, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]

(286) Exchange
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: hashpartitioning(cs_sold_date_sk#57, 100), ENSURE_REQUIREMENTS, [plan_id=36]

(287) Sort
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62]
Arguments: [cs_sold_date_sk#57 ASC NULLS FIRST], false, 0

(288) Scan parquet
Output [2]: [d_date_sk#63, d_year#64]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(289) Filter
Input [2]: [d_date_sk#63, d_year#64]
Condition : ((isnotnull(d_year#64) AND (d_year#64 = 2001)) AND isnotnull(d_date_sk#63))

(290) Exchange
Input [2]: [d_date_sk#63, d_year#64]
Arguments: hashpartitioning(d_date_sk#63, 100), ENSURE_REQUIREMENTS, [plan_id=37]

(291) Sort
Input [2]: [d_date_sk#63, d_year#64]
Arguments: [d_date_sk#63 ASC NULLS FIRST], false, 0

(292) SortMergeJoin
Left keys [1]: [cs_sold_date_sk#57]
Right keys [1]: [d_date_sk#63]
Join type: Inner
Join condition: None

(293) Project
Output [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62, d_year#64]
Input [14]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_sold_date_sk#57, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62, d_date_sk#63, d_year#64]

(294) HashAggregate
Input [12]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, cs_ext_discount_amt#59, cs_ext_sales_price#60, cs_ext_wholesale_cost#61, cs_ext_list_price#62, d_year#64]
Keys [8]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64]
Functions [1]: [partial_sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))]
Aggregate Attributes [2]: [sum#66, isEmpty#67]
Results [10]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, sum#137, isEmpty#138]

(295) Exchange
Input [10]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, sum#137, isEmpty#138]
Arguments: hashpartitioning(c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, 100), ENSURE_REQUIREMENTS, [plan_id=38]

(296) HashAggregate
Input [10]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64, sum#137, isEmpty#138]
Keys [8]: [c_customer_id#50, c_first_name#51, c_last_name#52, c_preferred_cust_flag#53, c_birth_country#54, c_login#55, c_email_address#56, d_year#64]
Functions [1]: [sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))]
Aggregate Attributes [1]: [sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))#68]
Results [2]: [c_customer_id#50 AS customer_id#69, sum(((((cs_ext_list_price#62 - cs_ext_wholesale_cost#61) - cs_ext_discount_amt#59) + cs_ext_sales_price#60) / 2))#68 AS year_total#70]

(297) Filter
Input [2]: [customer_id#69, year_total#70]
Condition : (isnotnull(year_total#70) AND (year_total#70 > 0.000000))

(298) Exchange
Input [2]: [customer_id#69, year_total#70]
Arguments: hashpartitioning(customer_id#69, 100), ENSURE_REQUIREMENTS, [plan_id=39]

(299) Sort
Input [2]: [customer_id#69, year_total#70]
Arguments: [customer_id#69 ASC NULLS FIRST], false, 0

(300) SortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#69]
Join type: Inner
Join condition: None

(301) Project
Output [11]: [customer_id#22, year_total#23, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48, year_total#70]
Input [12]: [customer_id#22, year_total#23, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48, customer_id#69, year_total#70]

(302) Scan parquet
Output [8]: [c_customer_sk#139, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
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>

(303) Filter
Input [8]: [c_customer_sk#139, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77]
Condition : (isnotnull(c_customer_sk#139) AND isnotnull(c_customer_id#71))

(304) Exchange
Input [8]: [c_customer_sk#139, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77]
Arguments: hashpartitioning(c_customer_sk#139, 100), ENSURE_REQUIREMENTS, [plan_id=40]

(305) Sort
Input [8]: [c_customer_sk#139, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77]
Arguments: [c_customer_sk#139 ASC NULLS FIRST], false, 0

(306) Scan parquet
Output [6]: [cs_sold_date_sk#78, cs_bill_customer_sk#140, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(cs_bill_customer_sk), IsNotNull(cs_sold_date_sk)]
ReadSchema: struct<cs_sold_date_sk:int,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)>

(307) Filter
Input [6]: [cs_sold_date_sk#78, cs_bill_customer_sk#140, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Condition : (isnotnull(cs_bill_customer_sk#140) AND isnotnull(cs_sold_date_sk#78))

(308) Exchange
Input [6]: [cs_sold_date_sk#78, cs_bill_customer_sk#140, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Arguments: hashpartitioning(cs_bill_customer_sk#140, 100), ENSURE_REQUIREMENTS, [plan_id=41]

(309) Sort
Input [6]: [cs_sold_date_sk#78, cs_bill_customer_sk#140, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Arguments: [cs_bill_customer_sk#140 ASC NULLS FIRST], false, 0

(310) SortMergeJoin
Left keys [1]: [c_customer_sk#139]
Right keys [1]: [cs_bill_customer_sk#140]
Join type: Inner
Join condition: None

(311) Project
Output [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Input [14]: [c_customer_sk#139, c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_bill_customer_sk#140, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]

(312) Exchange
Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Arguments: hashpartitioning(cs_sold_date_sk#78, 100), ENSURE_REQUIREMENTS, [plan_id=42]

(313) Sort
Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82]
Arguments: [cs_sold_date_sk#78 ASC NULLS FIRST], false, 0

(314) Scan parquet
Output [2]: [d_date_sk#83, d_year#84]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(315) Filter
Input [2]: [d_date_sk#83, d_year#84]
Condition : ((isnotnull(d_year#84) AND (d_year#84 = 2002)) AND isnotnull(d_date_sk#83))

(316) Exchange
Input [2]: [d_date_sk#83, d_year#84]
Arguments: hashpartitioning(d_date_sk#83, 100), ENSURE_REQUIREMENTS, [plan_id=43]

(317) Sort
Input [2]: [d_date_sk#83, d_year#84]
Arguments: [d_date_sk#83 ASC NULLS FIRST], false, 0

(318) SortMergeJoin
Left keys [1]: [cs_sold_date_sk#78]
Right keys [1]: [d_date_sk#83]
Join type: Inner
Join condition: None

(319) Project
Output [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82, d_year#84]
Input [14]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_sold_date_sk#78, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82, d_date_sk#83, d_year#84]

(320) HashAggregate
Input [12]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, cs_ext_discount_amt#79, cs_ext_sales_price#80, cs_ext_wholesale_cost#81, cs_ext_list_price#82, d_year#84]
Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84]
Functions [1]: [partial_sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))]
Aggregate Attributes [2]: [sum#86, isEmpty#87]
Results [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum#141, isEmpty#142]

(321) Exchange
Input [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum#141, isEmpty#142]
Arguments: hashpartitioning(c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, 100), ENSURE_REQUIREMENTS, [plan_id=44]

(322) HashAggregate
Input [10]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84, sum#141, isEmpty#142]
Keys [8]: [c_customer_id#71, c_first_name#72, c_last_name#73, c_preferred_cust_flag#74, c_birth_country#75, c_login#76, c_email_address#77, d_year#84]
Functions [1]: [sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))]
Aggregate Attributes [1]: [sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))#68]
Results [2]: [c_customer_id#71 AS customer_id#88, sum(((((cs_ext_list_price#82 - cs_ext_wholesale_cost#81) - cs_ext_discount_amt#79) + cs_ext_sales_price#80) / 2))#68 AS year_total#89]

(323) Exchange
Input [2]: [customer_id#88, year_total#89]
Arguments: hashpartitioning(customer_id#88, 100), ENSURE_REQUIREMENTS, [plan_id=45]

(324) Sort
Input [2]: [customer_id#88, year_total#89]
Arguments: [customer_id#88 ASC NULLS FIRST], false, 0

(325) SortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#88]
Join type: Inner
Join condition: (CASE WHEN (year_total#70 > 0.000000) THEN (year_total#89 / year_total#70) END > CASE WHEN (year_total#23 > 0.000000) THEN (year_total#48 / year_total#23) END)

(326) Project
Output [10]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89]
Input [13]: [customer_id#22, year_total#23, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#48, year_total#70, customer_id#88, year_total#89]

(327) Scan parquet
Output [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
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>

(328) Filter
Input [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]
Condition : (isnotnull(c_customer_sk#90) AND isnotnull(c_customer_id#91))

(329) Exchange
Input [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]
Arguments: hashpartitioning(c_customer_sk#90, 100), ENSURE_REQUIREMENTS, [plan_id=46]

(330) Sort
Input [8]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97]
Arguments: [c_customer_sk#90 ASC NULLS FIRST], false, 0

(331) Scan parquet
Output [6]: [ws_sold_date_sk#98, ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)]
ReadSchema: struct<ws_sold_date_sk:int,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)>

(332) Filter
Input [6]: [ws_sold_date_sk#98, ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Condition : (isnotnull(ws_bill_customer_sk#99) AND isnotnull(ws_sold_date_sk#98))

(333) Exchange
Input [6]: [ws_sold_date_sk#98, ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: hashpartitioning(ws_bill_customer_sk#99, 100), ENSURE_REQUIREMENTS, [plan_id=47]

(334) Sort
Input [6]: [ws_sold_date_sk#98, ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: [ws_bill_customer_sk#99 ASC NULLS FIRST], false, 0

(335) SortMergeJoin
Left keys [1]: [c_customer_sk#90]
Right keys [1]: [ws_bill_customer_sk#99]
Join type: Inner
Join condition: None

(336) Project
Output [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Input [14]: [c_customer_sk#90, c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_bill_customer_sk#99, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]

(337) Exchange
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: hashpartitioning(ws_sold_date_sk#98, 100), ENSURE_REQUIREMENTS, [plan_id=48]

(338) Sort
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103]
Arguments: [ws_sold_date_sk#98 ASC NULLS FIRST], false, 0

(339) Scan parquet
Output [2]: [d_date_sk#104, d_year#105]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2001), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(340) Filter
Input [2]: [d_date_sk#104, d_year#105]
Condition : ((isnotnull(d_year#105) AND (d_year#105 = 2001)) AND isnotnull(d_date_sk#104))

(341) Exchange
Input [2]: [d_date_sk#104, d_year#105]
Arguments: hashpartitioning(d_date_sk#104, 100), ENSURE_REQUIREMENTS, [plan_id=49]

(342) Sort
Input [2]: [d_date_sk#104, d_year#105]
Arguments: [d_date_sk#104 ASC NULLS FIRST], false, 0

(343) SortMergeJoin
Left keys [1]: [ws_sold_date_sk#98]
Right keys [1]: [d_date_sk#104]
Join type: Inner
Join condition: None

(344) Project
Output [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#105]
Input [14]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_sold_date_sk#98, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_date_sk#104, d_year#105]

(345) HashAggregate
Input [12]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, ws_ext_discount_amt#100, ws_ext_sales_price#101, ws_ext_wholesale_cost#102, ws_ext_list_price#103, d_year#105]
Keys [8]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105]
Functions [1]: [partial_sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))]
Aggregate Attributes [2]: [sum#107, isEmpty#108]
Results [10]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, sum#143, isEmpty#144]

(346) Exchange
Input [10]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, sum#143, isEmpty#144]
Arguments: hashpartitioning(c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, 100), ENSURE_REQUIREMENTS, [plan_id=50]

(347) HashAggregate
Input [10]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105, sum#143, isEmpty#144]
Keys [8]: [c_customer_id#91, c_first_name#92, c_last_name#93, c_preferred_cust_flag#94, c_birth_country#95, c_login#96, c_email_address#97, d_year#105]
Functions [1]: [sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))]
Aggregate Attributes [1]: [sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))#109]
Results [2]: [c_customer_id#91 AS customer_id#110, sum(((((ws_ext_list_price#103 - ws_ext_wholesale_cost#102) - ws_ext_discount_amt#100) + ws_ext_sales_price#101) / 2))#109 AS year_total#111]

(348) Filter
Input [2]: [customer_id#110, year_total#111]
Condition : (isnotnull(year_total#111) AND (year_total#111 > 0.000000))

(349) Exchange
Input [2]: [customer_id#110, year_total#111]
Arguments: hashpartitioning(customer_id#110, 100), ENSURE_REQUIREMENTS, [plan_id=51]

(350) Sort
Input [2]: [customer_id#110, year_total#111]
Arguments: [customer_id#110 ASC NULLS FIRST], false, 0

(351) SortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#110]
Join type: Inner
Join condition: None

(352) Project
Output [11]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89, year_total#111]
Input [12]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89, customer_id#110, year_total#111]

(353) Scan parquet
Output [8]: [c_customer_sk#145, c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
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>

(354) Filter
Input [8]: [c_customer_sk#145, c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118]
Condition : (isnotnull(c_customer_sk#145) AND isnotnull(c_customer_id#112))

(355) Exchange
Input [8]: [c_customer_sk#145, c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118]
Arguments: hashpartitioning(c_customer_sk#145, 100), ENSURE_REQUIREMENTS, [plan_id=52]

(356) Sort
Input [8]: [c_customer_sk#145, c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118]
Arguments: [c_customer_sk#145 ASC NULLS FIRST], false, 0

(357) Scan parquet
Output [6]: [ws_sold_date_sk#119, ws_bill_customer_sk#146, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(ws_bill_customer_sk), IsNotNull(ws_sold_date_sk)]
ReadSchema: struct<ws_sold_date_sk:int,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)>

(358) Filter
Input [6]: [ws_sold_date_sk#119, ws_bill_customer_sk#146, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Condition : (isnotnull(ws_bill_customer_sk#146) AND isnotnull(ws_sold_date_sk#119))

(359) Exchange
Input [6]: [ws_sold_date_sk#119, ws_bill_customer_sk#146, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Arguments: hashpartitioning(ws_bill_customer_sk#146, 100), ENSURE_REQUIREMENTS, [plan_id=53]

(360) Sort
Input [6]: [ws_sold_date_sk#119, ws_bill_customer_sk#146, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Arguments: [ws_bill_customer_sk#146 ASC NULLS FIRST], false, 0

(361) SortMergeJoin
Left keys [1]: [c_customer_sk#145]
Right keys [1]: [ws_bill_customer_sk#146]
Join type: Inner
Join condition: None

(362) Project
Output [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Input [14]: [c_customer_sk#145, c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_bill_customer_sk#146, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]

(363) Exchange
Input [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Arguments: hashpartitioning(ws_sold_date_sk#119, 100), ENSURE_REQUIREMENTS, [plan_id=54]

(364) Sort
Input [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123]
Arguments: [ws_sold_date_sk#119 ASC NULLS FIRST], false, 0

(365) Scan parquet
Output [2]: [d_date_sk#124, d_year#125]
Batched: true
Location: InMemoryFileIndex [file:/<warehouse_dir>]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2002), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(366) Filter
Input [2]: [d_date_sk#124, d_year#125]
Condition : ((isnotnull(d_year#125) AND (d_year#125 = 2002)) AND isnotnull(d_date_sk#124))

(367) Exchange
Input [2]: [d_date_sk#124, d_year#125]
Arguments: hashpartitioning(d_date_sk#124, 100), ENSURE_REQUIREMENTS, [plan_id=55]

(368) Sort
Input [2]: [d_date_sk#124, d_year#125]
Arguments: [d_date_sk#124 ASC NULLS FIRST], false, 0

(369) SortMergeJoin
Left keys [1]: [ws_sold_date_sk#119]
Right keys [1]: [d_date_sk#124]
Join type: Inner
Join condition: None

(370) Project
Output [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123, d_year#125]
Input [14]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_sold_date_sk#119, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123, d_date_sk#124, d_year#125]

(371) HashAggregate
Input [12]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, ws_ext_discount_amt#120, ws_ext_sales_price#121, ws_ext_wholesale_cost#122, ws_ext_list_price#123, d_year#125]
Keys [8]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125]
Functions [1]: [partial_sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))]
Aggregate Attributes [2]: [sum#127, isEmpty#128]
Results [10]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, sum#147, isEmpty#148]

(372) Exchange
Input [10]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, sum#147, isEmpty#148]
Arguments: hashpartitioning(c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, 100), ENSURE_REQUIREMENTS, [plan_id=56]

(373) HashAggregate
Input [10]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125, sum#147, isEmpty#148]
Keys [8]: [c_customer_id#112, c_first_name#113, c_last_name#114, c_preferred_cust_flag#115, c_birth_country#116, c_login#117, c_email_address#118, d_year#125]
Functions [1]: [sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))]
Aggregate Attributes [1]: [sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))#109]
Results [2]: [c_customer_id#112 AS customer_id#129, sum(((((ws_ext_list_price#123 - ws_ext_wholesale_cost#122) - ws_ext_discount_amt#120) + ws_ext_sales_price#121) / 2))#109 AS year_total#130]

(374) Exchange
Input [2]: [customer_id#129, year_total#130]
Arguments: hashpartitioning(customer_id#129, 100), ENSURE_REQUIREMENTS, [plan_id=57]

(375) Sort
Input [2]: [customer_id#129, year_total#130]
Arguments: [customer_id#129 ASC NULLS FIRST], false, 0

(376) SortMergeJoin
Left keys [1]: [customer_id#22]
Right keys [1]: [customer_id#129]
Join type: Inner
Join condition: (CASE WHEN (year_total#70 > 0.000000) THEN (year_total#89 / year_total#70) END > CASE WHEN (year_total#111 > 0.000000) THEN (year_total#130 / year_total#111) END)

(377) Project
Output [7]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47]
Input [13]: [customer_id#22, customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47, year_total#70, year_total#89, year_total#111, customer_id#129, year_total#130]

(378) TakeOrderedAndProject
Input [7]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47]
Arguments: X, [customer_id#41 ASC NULLS FIRST, customer_first_name#42 ASC NULLS FIRST, customer_last_name#43 ASC NULLS FIRST, customer_preferred_cust_flag#44 ASC NULLS FIRST, customer_birth_country#45 ASC NULLS FIRST, customer_login#46 ASC NULLS FIRST, customer_email_address#47 ASC NULLS FIRST], [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47]

(379) AdaptiveSparkPlan
Output [7]: [customer_id#41, customer_first_name#42, customer_last_name#43, customer_preferred_cust_flag#44, customer_birth_country#45, customer_login#46, customer_email_address#47]
Arguments: isFinalPlan=true

