== Physical Plan ==
AdaptiveSparkPlan (378)
+- == Final Plan ==
   NativeTakeOrdered (226)
   +- NativeProject (225)
      +- NativeSortMergeJoin Inner (224)
         :- NativeProject (196)
         :  +- NativeSortMergeJoin Inner (195)
         :     :- NativeProject (151)
         :     :  +- NativeSortMergeJoin 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 (194)
         :        +- InputAdapter (193)
         :           +- AQEShuffleRead (192)
         :              +- ShuffleQueryStage (191), Statistics(X)
         :                 +- NativeShuffleExchange (190)
         :                    +- NativeFilter (189)
         :                       +- NativeProject (188)
         :                          +- NativeHashAggregate (187)
         :                             +- InputAdapter (186)
         :                                +- AQEShuffleRead (185)
         :                                   +- ShuffleQueryStage (184), Statistics(X)
         :                                      +- NativeShuffleExchange (183)
         :                                         +- NativeHashAggregate (182)
         :                                            +- NativeProject (181)
         :                                               +- NativeProject (180)
         :                                                  +- NativeSortMergeJoin Inner (179)
         :                                                     :- NativeSort (172)
         :                                                     :  +- InputAdapter (171)
         :                                                     :     +- AQEShuffleRead (170)
         :                                                     :        +- ShuffleQueryStage (169), Statistics(X)
         :                                                     :           +- NativeShuffleExchange (168)
         :                                                     :              +- NativeProject (167)
         :                                                     :                 +- NativeSortMergeJoin Inner (166)
         :                                                     :                    :- NativeSort (157)
         :                                                     :                    :  +- InputAdapter (156)
         :                                                     :                    :     +- InputAdapter (155)
         :                                                     :                    :        +- AQEShuffleRead (154)
         :                                                     :                    :           +- ShuffleQueryStage (153), Statistics(X)
         :                                                     :                    :              +- ReusedExchange (152)
         :                                                     :                    +- NativeSort (165)
         :                                                     :                       +- InputAdapter (164)
         :                                                     :                          +- AQEShuffleRead (163)
         :                                                     :                             +- ShuffleQueryStage (162), Statistics(X)
         :                                                     :                                +- NativeShuffleExchange (161)
         :                                                     :                                   +- NativeFilter (160)
         :                                                     :                                      +- InputAdapter (159)
         :                                                     :                                         +- NativeParquetScan  (158)
         :                                                     +- NativeSort (178)
         :                                                        +- InputAdapter (177)
         :                                                           +- InputAdapter (176)
         :                                                              +- AQEShuffleRead (175)
         :                                                                 +- ShuffleQueryStage (174), Statistics(X)
         :                                                                    +- ReusedExchange (173)
         +- NativeSort (223)
            +- InputAdapter (222)
               +- AQEShuffleRead (221)
                  +- ShuffleQueryStage (220), Statistics(X)
                     +- NativeShuffleExchange (219)
                        +- NativeProject (218)
                           +- NativeHashAggregate (217)
                              +- InputAdapter (216)
                                 +- AQEShuffleRead (215)
                                    +- ShuffleQueryStage (214), Statistics(X)
                                       +- NativeShuffleExchange (213)
                                          +- NativeHashAggregate (212)
                                             +- NativeProject (211)
                                                +- NativeProject (210)
                                                   +- NativeSortMergeJoin Inner (209)
                                                      :- NativeSort (202)
                                                      :  +- InputAdapter (201)
                                                      :     +- InputAdapter (200)
                                                      :        +- AQEShuffleRead (199)
                                                      :           +- ShuffleQueryStage (198), Statistics(X)
                                                      :              +- ReusedExchange (197)
                                                      +- NativeSort (208)
                                                         +- InputAdapter (207)
                                                            +- InputAdapter (206)
                                                               +- AQEShuffleRead (205)
                                                                  +- ShuffleQueryStage (204), Statistics(X)
                                                                     +- ReusedExchange (203)
+- == Initial Plan ==
   TakeOrderedAndProject (377)
   +- Project (376)
      +- SortMergeJoin Inner (375)
         :- Project (351)
         :  +- SortMergeJoin Inner (350)
         :     :- Project (325)
         :     :  +- SortMergeJoin Inner (324)
         :     :     :- Project (300)
         :     :     :  +- SortMergeJoin Inner (299)
         :     :     :     :- SortMergeJoin Inner (274)
         :     :     :     :  :- Sort (250)
         :     :     :     :  :  +- Exchange (249)
         :     :     :     :  :     +- Filter (248)
         :     :     :     :  :        +- HashAggregate (247)
         :     :     :     :  :           +- Exchange (246)
         :     :     :     :  :              +- HashAggregate (245)
         :     :     :     :  :                 +- Project (244)
         :     :     :     :  :                    +- SortMergeJoin Inner (243)
         :     :     :     :  :                       :- Sort (238)
         :     :     :     :  :                       :  +- Exchange (237)
         :     :     :     :  :                       :     +- Project (236)
         :     :     :     :  :                       :        +- SortMergeJoin Inner (235)
         :     :     :     :  :                       :           :- Sort (230)
         :     :     :     :  :                       :           :  +- Exchange (229)
         :     :     :     :  :                       :           :     +- Filter (228)
         :     :     :     :  :                       :           :        +- Scan parquet (227)
         :     :     :     :  :                       :           +- Sort (234)
         :     :     :     :  :                       :              +- Exchange (233)
         :     :     :     :  :                       :                 +- Filter (232)
         :     :     :     :  :                       :                    +- Scan parquet (231)
         :     :     :     :  :                       +- Sort (242)
         :     :     :     :  :                          +- Exchange (241)
         :     :     :     :  :                             +- Filter (240)
         :     :     :     :  :                                +- Scan parquet (239)
         :     :     :     :  +- Sort (273)
         :     :     :     :     +- Exchange (272)
         :     :     :     :        +- HashAggregate (271)
         :     :     :     :           +- Exchange (270)
         :     :     :     :              +- HashAggregate (269)
         :     :     :     :                 +- Project (268)
         :     :     :     :                    +- SortMergeJoin Inner (267)
         :     :     :     :                       :- Sort (262)
         :     :     :     :                       :  +- Exchange (261)
         :     :     :     :                       :     +- Project (260)
         :     :     :     :                       :        +- SortMergeJoin Inner (259)
         :     :     :     :                       :           :- Sort (254)
         :     :     :     :                       :           :  +- Exchange (253)
         :     :     :     :                       :           :     +- Filter (252)
         :     :     :     :                       :           :        +- Scan parquet (251)
         :     :     :     :                       :           +- Sort (258)
         :     :     :     :                       :              +- Exchange (257)
         :     :     :     :                       :                 +- Filter (256)
         :     :     :     :                       :                    +- Scan parquet (255)
         :     :     :     :                       +- Sort (266)
         :     :     :     :                          +- Exchange (265)
         :     :     :     :                             +- Filter (264)
         :     :     :     :                                +- Scan parquet (263)
         :     :     :     +- Sort (298)
         :     :     :        +- Exchange (297)
         :     :     :           +- Filter (296)
         :     :     :              +- HashAggregate (295)
         :     :     :                 +- Exchange (294)
         :     :     :                    +- HashAggregate (293)
         :     :     :                       +- Project (292)
         :     :     :                          +- SortMergeJoin Inner (291)
         :     :     :                             :- Sort (286)
         :     :     :                             :  +- Exchange (285)
         :     :     :                             :     +- Project (284)
         :     :     :                             :        +- SortMergeJoin Inner (283)
         :     :     :                             :           :- Sort (278)
         :     :     :                             :           :  +- Exchange (277)
         :     :     :                             :           :     +- Filter (276)
         :     :     :                             :           :        +- Scan parquet (275)
         :     :     :                             :           +- Sort (282)
         :     :     :                             :              +- Exchange (281)
         :     :     :                             :                 +- Filter (280)
         :     :     :                             :                    +- Scan parquet (279)
         :     :     :                             +- Sort (290)
         :     :     :                                +- Exchange (289)
         :     :     :                                   +- Filter (288)
         :     :     :                                      +- Scan parquet (287)
         :     :     +- Sort (323)
         :     :        +- Exchange (322)
         :     :           +- HashAggregate (321)
         :     :              +- Exchange (320)
         :     :                 +- HashAggregate (319)
         :     :                    +- Project (318)
         :     :                       +- SortMergeJoin Inner (317)
         :     :                          :- Sort (312)
         :     :                          :  +- Exchange (311)
         :     :                          :     +- Project (310)
         :     :                          :        +- SortMergeJoin Inner (309)
         :     :                          :           :- Sort (304)
         :     :                          :           :  +- Exchange (303)
         :     :                          :           :     +- Filter (302)
         :     :                          :           :        +- Scan parquet (301)
         :     :                          :           +- Sort (308)
         :     :                          :              +- Exchange (307)
         :     :                          :                 +- Filter (306)
         :     :                          :                    +- Scan parquet (305)
         :     :                          +- Sort (316)
         :     :                             +- Exchange (315)
         :     :                                +- Filter (314)
         :     :                                   +- Scan parquet (313)
         :     +- Sort (349)
         :        +- Exchange (348)
         :           +- Filter (347)
         :              +- HashAggregate (346)
         :                 +- Exchange (345)
         :                    +- HashAggregate (344)
         :                       +- Project (343)
         :                          +- SortMergeJoin Inner (342)
         :                             :- Sort (337)
         :                             :  +- Exchange (336)
         :                             :     +- Project (335)
         :                             :        +- SortMergeJoin Inner (334)
         :                             :           :- Sort (329)
         :                             :           :  +- Exchange (328)
         :                             :           :     +- Filter (327)
         :                             :           :        +- Scan parquet (326)
         :                             :           +- Sort (333)
         :                             :              +- Exchange (332)
         :                             :                 +- Filter (331)
         :                             :                    +- Scan parquet (330)
         :                             +- Sort (341)
         :                                +- Exchange (340)
         :                                   +- Filter (339)
         :                                      +- Scan parquet (338)
         +- Sort (374)
            +- Exchange (373)
               +- HashAggregate (372)
                  +- Exchange (371)
                     +- HashAggregate (370)
                        +- Project (369)
                           +- SortMergeJoin Inner (368)
                              :- Sort (363)
                              :  +- Exchange (362)
                              :     +- Project (361)
                              :        +- SortMergeJoin Inner (360)
                              :           :- Sort (355)
                              :           :  +- Exchange (354)
                              :           :     +- Filter (353)
                              :           :        +- Scan parquet (352)
                              :           +- Sort (359)
                              :              +- Exchange (358)
                              :                 +- Filter (357)
                              :                    +- Scan parquet (356)
                              +- Sort (367)
                                 +- Exchange (366)
                                    +- Filter (365)
                                       +- Scan parquet (364)


(227) 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

(231) 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

(239) 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

(263) 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

(279) 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) NativeSortMergeJoin
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) NativeProject
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) 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]

(153) 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

(154) 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

(155) 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]

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

(157) 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

(330) 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)>

(159) 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]

(160) 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))

(161) 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]

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

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

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

(165) 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

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

(167) 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]

(168) 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]

(169) 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

(170) 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

(171) 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]

(172) 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

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

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

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

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

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

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

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

(180) 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]

(181) 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]

(182) 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]

(183) 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]

(184) 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

(185) 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

(186) 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]

(187) 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]

(188) 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]

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

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

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

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

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

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

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

(196) 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]

(197) ReusedExchange [Reuses operator id: 168]
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]

(198) 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

(199) 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

(200) 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]

(201) 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]

(202) 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

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

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

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

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

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

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

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

(210) 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]

(211) 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]

(212) 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]

(213) 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]

(214) 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

(215) 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

(216) 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]

(217) 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]

(218) 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]

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

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

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

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

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

(224) NativeSortMergeJoin
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)

(225) NativeProject
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]

(226) NativeTakeOrdered
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, 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]

(227) 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>

(228) 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))

(229) 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]

(230) 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

(231) 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)>

(232) 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))

(233) 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]

(234) 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

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

(236) 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]

(237) 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]

(238) 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

(239) 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>

(240) 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))

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

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

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

(244) 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]

(245) 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]

(246) 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]

(247) 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]

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

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

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

(251) 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>

(252) 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))

(253) 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]

(254) 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

(255) 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)>

(256) 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))

(257) 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]

(258) 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

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

(260) 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]

(261) 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]

(262) 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

(263) 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>

(264) 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))

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

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

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

(268) 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]

(269) 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]

(270) 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]

(271) 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]

(272) 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]

(273) 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

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

(275) 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>

(276) 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))

(277) 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]

(278) 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

(279) 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)>

(280) 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))

(281) 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]

(282) 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

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

(284) 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]

(285) 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]

(286) 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

(287) 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>

(288) 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))

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

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

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

(292) 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]

(293) 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]

(294) 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]

(295) 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]

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

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

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

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

(300) 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]

(301) 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>

(302) 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))

(303) 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]

(304) 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

(305) 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)>

(306) 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))

(307) 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]

(308) 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

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

(310) 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]

(311) 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]

(312) 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

(313) 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>

(314) 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))

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

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

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

(318) 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]

(319) 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]

(320) 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]

(321) 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]

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

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

(324) 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)

(325) 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]

(326) 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>

(327) 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))

(328) 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]

(329) 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

(330) 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)>

(331) 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))

(332) 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]

(333) 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

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

(335) 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]

(336) 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]

(337) 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

(338) 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>

(339) 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))

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

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

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

(343) 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]

(344) 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]

(345) 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]

(346) 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]

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

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

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

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

(351) 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]

(352) 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>

(353) 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))

(354) 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]

(355) 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

(356) 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)>

(357) 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))

(358) 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]

(359) 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

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

(361) 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]

(362) 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]

(363) 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

(364) 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>

(365) 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))

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

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

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

(369) 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]

(370) 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]

(371) 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]

(372) 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]

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

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

(375) 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)

(376) 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]

(377) 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]

(378) 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

