== Physical Plan ==
* Sort (215)
+- Exchange (214)
   +- * Project (213)
      +- * SortMergeJoin Inner (212)
         :- * Sort (131)
         :  +- Exchange (130)
         :     +- * HashAggregate (129)
         :        +- Exchange (128)
         :           +- * HashAggregate (127)
         :              +- * Project (126)
         :                 +- * BroadcastHashJoin Inner BuildRight (125)
         :                    :- * Project (119)
         :                    :  +- * BroadcastHashJoin Inner BuildRight (118)
         :                    :     :- * Project (116)
         :                    :     :  +- * BroadcastHashJoin Inner BuildRight (115)
         :                    :     :     :- * Project (110)
         :                    :     :     :  +- * SortMergeJoin Inner (109)
         :                    :     :     :     :- * Sort (106)
         :                    :     :     :     :  +- Exchange (105)
         :                    :     :     :     :     +- * Project (104)
         :                    :     :     :     :        +- * SortMergeJoin Inner (103)
         :                    :     :     :     :           :- * Sort (97)
         :                    :     :     :     :           :  +- Exchange (96)
         :                    :     :     :     :           :     +- * Project (95)
         :                    :     :     :     :           :        +- * BroadcastHashJoin Inner BuildRight (94)
         :                    :     :     :     :           :           :- * Project (92)
         :                    :     :     :     :           :           :  +- * BroadcastHashJoin Inner BuildRight (91)
         :                    :     :     :     :           :           :     :- * Project (86)
         :                    :     :     :     :           :           :     :  +- * BroadcastHashJoin Inner BuildRight (85)
         :                    :     :     :     :           :           :     :     :- * Project (80)
         :                    :     :     :     :           :           :     :     :  +- * SortMergeJoin Inner (79)
         :                    :     :     :     :           :           :     :     :     :- * Sort (76)
         :                    :     :     :     :           :           :     :     :     :  +- Exchange (75)
         :                    :     :     :     :           :           :     :     :     :     +- * Project (74)
         :                    :     :     :     :           :           :     :     :     :        +- * SortMergeJoin Inner (73)
         :                    :     :     :     :           :           :     :     :     :           :- * Sort (67)
         :                    :     :     :     :           :           :     :     :     :           :  +- Exchange (66)
         :                    :     :     :     :           :           :     :     :     :           :     +- * Project (65)
         :                    :     :     :     :           :           :     :     :     :           :        +- * BroadcastHashJoin Inner BuildRight (64)
         :                    :     :     :     :           :           :     :     :     :           :           :- * Project (62)
         :                    :     :     :     :           :           :     :     :     :           :           :  +- * BroadcastHashJoin Inner BuildRight (61)
         :                    :     :     :     :           :           :     :     :     :           :           :     :- * Project (56)
         :                    :     :     :     :           :           :     :     :     :           :           :     :  +- * SortMergeJoin Inner (55)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :- * Sort (49)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :  +- Exchange (48)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :     +- * Project (47)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :        +- * BroadcastHashJoin Inner BuildRight (46)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :- * Project (41)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :  +- * BroadcastHashJoin Inner BuildRight (40)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :- * Project (35)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :  +- * BroadcastHashJoin Inner BuildRight (34)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :- * Project (13)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :  +- * SortMergeJoin Inner (12)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :- * Sort (5)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :  +- Exchange (4)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :     +- * Filter (3)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :        +- * ColumnarToRow (2)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :           +- Scan parquet default.store_sales (1)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     +- * Sort (11)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :        +- Exchange (10)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :           +- * Project (9)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :              +- * Filter (8)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :                 +- * ColumnarToRow (7)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :                    +- Scan parquet default.store_returns (6)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     +- BroadcastExchange (33)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :        +- * Project (32)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :           +- * Filter (31)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :              +- * HashAggregate (30)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                 +- Exchange (29)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                    +- * HashAggregate (28)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                       +- * Project (27)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                          +- * SortMergeJoin Inner (26)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                             :- * Sort (19)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                             :  +- Exchange (18)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                             :     +- * Project (17)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                             :        +- * Filter (16)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                             :           +- * ColumnarToRow (15)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                             :              +- Scan parquet default.catalog_sales (14)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                             +- * Sort (25)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                                +- Exchange (24)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                                   +- * Project (23)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                                      +- * Filter (22)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                                         +- * ColumnarToRow (21)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     :                                            +- Scan parquet default.catalog_returns (20)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :     +- BroadcastExchange (39)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :        +- * Filter (38)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :           +- * ColumnarToRow (37)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           :              +- Scan parquet default.date_dim (36)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :           +- BroadcastExchange (45)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :              +- * Filter (44)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :                 +- * ColumnarToRow (43)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     :                    +- Scan parquet default.store (42)
         :                    :     :     :     :           :           :     :     :     :           :           :     :     +- * Sort (54)
         :                    :     :     :     :           :           :     :     :     :           :           :     :        +- Exchange (53)
         :                    :     :     :     :           :           :     :     :     :           :           :     :           +- * Filter (52)
         :                    :     :     :     :           :           :     :     :     :           :           :     :              +- * ColumnarToRow (51)
         :                    :     :     :     :           :           :     :     :     :           :           :     :                 +- Scan parquet default.customer (50)
         :                    :     :     :     :           :           :     :     :     :           :           :     +- BroadcastExchange (60)
         :                    :     :     :     :           :           :     :     :     :           :           :        +- * Filter (59)
         :                    :     :     :     :           :           :     :     :     :           :           :           +- * ColumnarToRow (58)
         :                    :     :     :     :           :           :     :     :     :           :           :              +- Scan parquet default.date_dim (57)
         :                    :     :     :     :           :           :     :     :     :           :           +- ReusedExchange (63)
         :                    :     :     :     :           :           :     :     :     :           +- * Sort (72)
         :                    :     :     :     :           :           :     :     :     :              +- Exchange (71)
         :                    :     :     :     :           :           :     :     :     :                 +- * Filter (70)
         :                    :     :     :     :           :           :     :     :     :                    +- * ColumnarToRow (69)
         :                    :     :     :     :           :           :     :     :     :                       +- Scan parquet default.customer_demographics (68)
         :                    :     :     :     :           :           :     :     :     +- * Sort (78)
         :                    :     :     :     :           :           :     :     :        +- ReusedExchange (77)
         :                    :     :     :     :           :           :     :     +- BroadcastExchange (84)
         :                    :     :     :     :           :           :     :        +- * Filter (83)
         :                    :     :     :     :           :           :     :           +- * ColumnarToRow (82)
         :                    :     :     :     :           :           :     :              +- Scan parquet default.promotion (81)
         :                    :     :     :     :           :           :     +- BroadcastExchange (90)
         :                    :     :     :     :           :           :        +- * Filter (89)
         :                    :     :     :     :           :           :           +- * ColumnarToRow (88)
         :                    :     :     :     :           :           :              +- Scan parquet default.household_demographics (87)
         :                    :     :     :     :           :           +- ReusedExchange (93)
         :                    :     :     :     :           +- * Sort (102)
         :                    :     :     :     :              +- Exchange (101)
         :                    :     :     :     :                 +- * Filter (100)
         :                    :     :     :     :                    +- * ColumnarToRow (99)
         :                    :     :     :     :                       +- Scan parquet default.customer_address (98)
         :                    :     :     :     +- * Sort (108)
         :                    :     :     :        +- ReusedExchange (107)
         :                    :     :     +- BroadcastExchange (114)
         :                    :     :        +- * Filter (113)
         :                    :     :           +- * ColumnarToRow (112)
         :                    :     :              +- Scan parquet default.income_band (111)
         :                    :     +- ReusedExchange (117)
         :                    +- BroadcastExchange (124)
         :                       +- * Project (123)
         :                          +- * Filter (122)
         :                             +- * ColumnarToRow (121)
         :                                +- Scan parquet default.item (120)
         +- * Sort (211)
            +- Exchange (210)
               +- * HashAggregate (209)
                  +- Exchange (208)
                     +- * HashAggregate (207)
                        +- * Project (206)
                           +- * BroadcastHashJoin Inner BuildRight (205)
                              :- * Project (203)
                              :  +- * BroadcastHashJoin Inner BuildRight (202)
                              :     :- * Project (200)
                              :     :  +- * BroadcastHashJoin Inner BuildRight (199)
                              :     :     :- * Project (197)
                              :     :     :  +- * SortMergeJoin Inner (196)
                              :     :     :     :- * Sort (193)
                              :     :     :     :  +- Exchange (192)
                              :     :     :     :     +- * Project (191)
                              :     :     :     :        +- * SortMergeJoin Inner (190)
                              :     :     :     :           :- * Sort (187)
                              :     :     :     :           :  +- Exchange (186)
                              :     :     :     :           :     +- * Project (185)
                              :     :     :     :           :        +- * BroadcastHashJoin Inner BuildRight (184)
                              :     :     :     :           :           :- * Project (182)
                              :     :     :     :           :           :  +- * BroadcastHashJoin Inner BuildRight (181)
                              :     :     :     :           :           :     :- * Project (179)
                              :     :     :     :           :           :     :  +- * BroadcastHashJoin Inner BuildRight (178)
                              :     :     :     :           :           :     :     :- * Project (176)
                              :     :     :     :           :           :     :     :  +- * SortMergeJoin Inner (175)
                              :     :     :     :           :           :     :     :     :- * Sort (172)
                              :     :     :     :           :           :     :     :     :  +- Exchange (171)
                              :     :     :     :           :           :     :     :     :     +- * Project (170)
                              :     :     :     :           :           :     :     :     :        +- * SortMergeJoin Inner (169)
                              :     :     :     :           :           :     :     :     :           :- * Sort (166)
                              :     :     :     :           :           :     :     :     :           :  +- Exchange (165)
                              :     :     :     :           :           :     :     :     :           :     +- * Project (164)
                              :     :     :     :           :           :     :     :     :           :        +- * BroadcastHashJoin Inner BuildRight (163)
                              :     :     :     :           :           :     :     :     :           :           :- * Project (161)
                              :     :     :     :           :           :     :     :     :           :           :  +- * BroadcastHashJoin Inner BuildRight (160)
                              :     :     :     :           :           :     :     :     :           :           :     :- * Project (158)
                              :     :     :     :           :           :     :     :     :           :           :     :  +- * SortMergeJoin Inner (157)
                              :     :     :     :           :           :     :     :     :           :           :     :     :- * Sort (154)
                              :     :     :     :           :           :     :     :     :           :           :     :     :  +- Exchange (153)
                              :     :     :     :           :           :     :     :     :           :           :     :     :     +- * Project (152)
                              :     :     :     :           :           :     :     :     :           :           :     :     :        +- * BroadcastHashJoin Inner BuildRight (151)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :- * Project (149)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :  +- * BroadcastHashJoin Inner BuildRight (148)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :- * Project (143)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :  +- * BroadcastHashJoin Inner BuildRight (142)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :- * Project (140)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :  +- * SortMergeJoin Inner (139)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :- * Sort (136)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :  +- Exchange (135)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :     +- * Filter (134)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :        +- * ColumnarToRow (133)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     :           +- Scan parquet default.store_sales (132)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :     +- * Sort (138)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     :        +- ReusedExchange (137)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     :     +- ReusedExchange (141)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :     +- BroadcastExchange (147)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :        +- * Filter (146)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :           +- * ColumnarToRow (145)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           :              +- Scan parquet default.date_dim (144)
                              :     :     :     :           :           :     :     :     :           :           :     :     :           +- ReusedExchange (150)
                              :     :     :     :           :           :     :     :     :           :           :     :     +- * Sort (156)
                              :     :     :     :           :           :     :     :     :           :           :     :        +- ReusedExchange (155)
                              :     :     :     :           :           :     :     :     :           :           :     +- ReusedExchange (159)
                              :     :     :     :           :           :     :     :     :           :           +- ReusedExchange (162)
                              :     :     :     :           :           :     :     :     :           +- * Sort (168)
                              :     :     :     :           :           :     :     :     :              +- ReusedExchange (167)
                              :     :     :     :           :           :     :     :     +- * Sort (174)
                              :     :     :     :           :           :     :     :        +- ReusedExchange (173)
                              :     :     :     :           :           :     :     +- ReusedExchange (177)
                              :     :     :     :           :           :     +- ReusedExchange (180)
                              :     :     :     :           :           +- ReusedExchange (183)
                              :     :     :     :           +- * Sort (189)
                              :     :     :     :              +- ReusedExchange (188)
                              :     :     :     +- * Sort (195)
                              :     :     :        +- ReusedExchange (194)
                              :     :     +- ReusedExchange (198)
                              :     +- ReusedExchange (201)
                              +- ReusedExchange (204)


(1) Scan parquet default.store_sales
Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#12), dynamicpruningexpression(ss_sold_date_sk#12 IN dynamicpruning#13)]
PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)]
ReadSchema: struct<ss_item_sk:int,ss_customer_sk:int,ss_cdemo_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_promo_sk:int,ss_ticket_number:int,ss_wholesale_cost:decimal(7,2),ss_list_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>

(2) ColumnarToRow [codegen id : 1]
Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12]

(3) Filter [codegen id : 1]
Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12]
Condition : (((((((isnotnull(ss_item_sk#1) AND isnotnull(ss_ticket_number#8)) AND isnotnull(ss_store_sk#6)) AND isnotnull(ss_customer_sk#2)) AND isnotnull(ss_cdemo_sk#3)) AND isnotnull(ss_promo_sk#7)) AND isnotnull(ss_hdemo_sk#4)) AND isnotnull(ss_addr_sk#5))

(4) Exchange
Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12]
Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#8, 5), ENSURE_REQUIREMENTS, [id=#14]

(5) Sort [codegen id : 2]
Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12]
Arguments: [ss_item_sk#1 ASC NULLS FIRST, ss_ticket_number#8 ASC NULLS FIRST], false, 0

(6) Scan parquet default.store_returns
Output [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_returns]
PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)]
ReadSchema: struct<sr_item_sk:int,sr_ticket_number:int>

(7) ColumnarToRow [codegen id : 3]
Input [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17]

(8) Filter [codegen id : 3]
Input [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17]
Condition : (isnotnull(sr_item_sk#15) AND isnotnull(sr_ticket_number#16))

(9) Project [codegen id : 3]
Output [2]: [sr_item_sk#15, sr_ticket_number#16]
Input [3]: [sr_item_sk#15, sr_ticket_number#16, sr_returned_date_sk#17]

(10) Exchange
Input [2]: [sr_item_sk#15, sr_ticket_number#16]
Arguments: hashpartitioning(sr_item_sk#15, sr_ticket_number#16, 5), ENSURE_REQUIREMENTS, [id=#18]

(11) Sort [codegen id : 4]
Input [2]: [sr_item_sk#15, sr_ticket_number#16]
Arguments: [sr_item_sk#15 ASC NULLS FIRST, sr_ticket_number#16 ASC NULLS FIRST], false, 0

(12) SortMergeJoin [codegen id : 13]
Left keys [2]: [ss_item_sk#1, ss_ticket_number#8]
Right keys [2]: [sr_item_sk#15, sr_ticket_number#16]
Join condition: None

(13) Project [codegen id : 13]
Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12]
Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_ticket_number#8, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, sr_item_sk#15, sr_ticket_number#16]

(14) Scan parquet default.catalog_sales
Output [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22]
Batched: true
Location [not included in comparison]/{warehouse_dir}/catalog_sales]
PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_order_number)]
ReadSchema: struct<cs_item_sk:int,cs_order_number:int,cs_ext_list_price:decimal(7,2)>

(15) ColumnarToRow [codegen id : 5]
Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22]

(16) Filter [codegen id : 5]
Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22]
Condition : (isnotnull(cs_item_sk#19) AND isnotnull(cs_order_number#20))

(17) Project [codegen id : 5]
Output [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21]
Input [4]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cs_sold_date_sk#22]

(18) Exchange
Input [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21]
Arguments: hashpartitioning(cs_item_sk#19, cs_order_number#20, 5), ENSURE_REQUIREMENTS, [id=#23]

(19) Sort [codegen id : 6]
Input [3]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21]
Arguments: [cs_item_sk#19 ASC NULLS FIRST, cs_order_number#20 ASC NULLS FIRST], false, 0

(20) Scan parquet default.catalog_returns
Output [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29]
Batched: true
Location [not included in comparison]/{warehouse_dir}/catalog_returns]
PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)]
ReadSchema: struct<cr_item_sk:int,cr_order_number:int,cr_refunded_cash:decimal(7,2),cr_reversed_charge:decimal(7,2),cr_store_credit:decimal(7,2)>

(21) ColumnarToRow [codegen id : 7]
Input [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29]

(22) Filter [codegen id : 7]
Input [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29]
Condition : (isnotnull(cr_item_sk#24) AND isnotnull(cr_order_number#25))

(23) Project [codegen id : 7]
Output [5]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28]
Input [6]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28, cr_returned_date_sk#29]

(24) Exchange
Input [5]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28]
Arguments: hashpartitioning(cr_item_sk#24, cr_order_number#25, 5), ENSURE_REQUIREMENTS, [id=#30]

(25) Sort [codegen id : 8]
Input [5]: [cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28]
Arguments: [cr_item_sk#24 ASC NULLS FIRST, cr_order_number#25 ASC NULLS FIRST], false, 0

(26) SortMergeJoin [codegen id : 9]
Left keys [2]: [cs_item_sk#19, cs_order_number#20]
Right keys [2]: [cr_item_sk#24, cr_order_number#25]
Join condition: None

(27) Project [codegen id : 9]
Output [5]: [cs_item_sk#19, cs_ext_list_price#21, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28]
Input [8]: [cs_item_sk#19, cs_order_number#20, cs_ext_list_price#21, cr_item_sk#24, cr_order_number#25, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28]

(28) HashAggregate [codegen id : 9]
Input [5]: [cs_item_sk#19, cs_ext_list_price#21, cr_refunded_cash#26, cr_reversed_charge#27, cr_store_credit#28]
Keys [1]: [cs_item_sk#19]
Functions [2]: [partial_sum(UnscaledValue(cs_ext_list_price#21)), partial_sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))]
Aggregate Attributes [3]: [sum#31, sum#32, isEmpty#33]
Results [4]: [cs_item_sk#19, sum#34, sum#35, isEmpty#36]

(29) Exchange
Input [4]: [cs_item_sk#19, sum#34, sum#35, isEmpty#36]
Arguments: hashpartitioning(cs_item_sk#19, 5), ENSURE_REQUIREMENTS, [id=#37]

(30) HashAggregate [codegen id : 10]
Input [4]: [cs_item_sk#19, sum#34, sum#35, isEmpty#36]
Keys [1]: [cs_item_sk#19]
Functions [2]: [sum(UnscaledValue(cs_ext_list_price#21)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))]
Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#21))#38, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))#39]
Results [3]: [cs_item_sk#19, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#21))#38,17,2) AS sum(cs_ext_list_price#21)#40, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))#39 AS sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))#41]

(31) Filter [codegen id : 10]
Input [3]: [cs_item_sk#19, sum(cs_ext_list_price#21)#40, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))#41]
Condition : (isnotnull(sum(cs_ext_list_price#21)#40) AND (cast(sum(cs_ext_list_price#21)#40 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))#41)), DecimalType(21,2), true)))

(32) Project [codegen id : 10]
Output [1]: [cs_item_sk#19]
Input [3]: [cs_item_sk#19, sum(cs_ext_list_price#21)#40, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#26 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#27 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2), true))#41]

(33) BroadcastExchange
Input [1]: [cs_item_sk#19]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#42]

(34) BroadcastHashJoin [codegen id : 13]
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [cs_item_sk#19]
Join condition: None

(35) Project [codegen id : 13]
Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12]
Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, cs_item_sk#19]

(36) Scan parquet default.date_dim
Output [2]: [d_date_sk#43, d_year#44]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,1999), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(37) ColumnarToRow [codegen id : 11]
Input [2]: [d_date_sk#43, d_year#44]

(38) Filter [codegen id : 11]
Input [2]: [d_date_sk#43, d_year#44]
Condition : ((isnotnull(d_year#44) AND (d_year#44 = 1999)) AND isnotnull(d_date_sk#43))

(39) BroadcastExchange
Input [2]: [d_date_sk#43, d_year#44]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#45]

(40) BroadcastHashJoin [codegen id : 13]
Left keys [1]: [ss_sold_date_sk#12]
Right keys [1]: [d_date_sk#43]
Join condition: None

(41) Project [codegen id : 13]
Output [11]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44]
Input [13]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, ss_sold_date_sk#12, d_date_sk#43, d_year#44]

(42) Scan parquet default.store
Output [3]: [s_store_sk#46, s_store_name#47, s_zip#48]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk), IsNotNull(s_store_name), IsNotNull(s_zip)]
ReadSchema: struct<s_store_sk:int,s_store_name:string,s_zip:string>

(43) ColumnarToRow [codegen id : 12]
Input [3]: [s_store_sk#46, s_store_name#47, s_zip#48]

(44) Filter [codegen id : 12]
Input [3]: [s_store_sk#46, s_store_name#47, s_zip#48]
Condition : ((isnotnull(s_store_sk#46) AND isnotnull(s_store_name#47)) AND isnotnull(s_zip#48))

(45) BroadcastExchange
Input [3]: [s_store_sk#46, s_store_name#47, s_zip#48]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#49]

(46) BroadcastHashJoin [codegen id : 13]
Left keys [1]: [ss_store_sk#6]
Right keys [1]: [s_store_sk#46]
Join condition: None

(47) Project [codegen id : 13]
Output [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48]
Input [14]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_store_sk#6, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_sk#46, s_store_name#47, s_zip#48]

(48) Exchange
Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48]
Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [id=#50]

(49) Sort [codegen id : 14]
Input [12]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48]
Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0

(50) Scan parquet default.customer
Output [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk), IsNotNull(c_first_sales_date_sk), IsNotNull(c_first_shipto_date_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk), IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_customer_sk:int,c_current_cdemo_sk:int,c_current_hdemo_sk:int,c_current_addr_sk:int,c_first_shipto_date_sk:int,c_first_sales_date_sk:int>

(51) ColumnarToRow [codegen id : 15]
Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56]

(52) Filter [codegen id : 15]
Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56]
Condition : (((((isnotnull(c_customer_sk#51) AND isnotnull(c_first_sales_date_sk#56)) AND isnotnull(c_first_shipto_date_sk#55)) AND isnotnull(c_current_cdemo_sk#52)) AND isnotnull(c_current_hdemo_sk#53)) AND isnotnull(c_current_addr_sk#54))

(53) Exchange
Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56]
Arguments: hashpartitioning(c_customer_sk#51, 5), ENSURE_REQUIREMENTS, [id=#57]

(54) Sort [codegen id : 16]
Input [6]: [c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56]
Arguments: [c_customer_sk#51 ASC NULLS FIRST], false, 0

(55) SortMergeJoin [codegen id : 19]
Left keys [1]: [ss_customer_sk#2]
Right keys [1]: [c_customer_sk#51]
Join condition: None

(56) Project [codegen id : 19]
Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56]
Input [18]: [ss_item_sk#1, ss_customer_sk#2, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_customer_sk#51, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56]

(57) Scan parquet default.date_dim
Output [2]: [d_date_sk#58, d_year#59]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(58) ColumnarToRow [codegen id : 17]
Input [2]: [d_date_sk#58, d_year#59]

(59) Filter [codegen id : 17]
Input [2]: [d_date_sk#58, d_year#59]
Condition : isnotnull(d_date_sk#58)

(60) BroadcastExchange
Input [2]: [d_date_sk#58, d_year#59]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#60]

(61) BroadcastHashJoin [codegen id : 19]
Left keys [1]: [c_first_sales_date_sk#56]
Right keys [1]: [d_date_sk#58]
Join condition: None

(62) Project [codegen id : 19]
Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59]
Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, c_first_sales_date_sk#56, d_date_sk#58, d_year#59]

(63) ReusedExchange [Reuses operator id: 60]
Output [2]: [d_date_sk#61, d_year#62]

(64) BroadcastHashJoin [codegen id : 19]
Left keys [1]: [c_first_shipto_date_sk#55]
Right keys [1]: [d_date_sk#61]
Join condition: None

(65) Project [codegen id : 19]
Output [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62]
Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, c_first_shipto_date_sk#55, d_year#59, d_date_sk#61, d_year#62]

(66) Exchange
Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62]
Arguments: hashpartitioning(ss_cdemo_sk#3, 5), ENSURE_REQUIREMENTS, [id=#63]

(67) Sort [codegen id : 20]
Input [16]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62]
Arguments: [ss_cdemo_sk#3 ASC NULLS FIRST], false, 0

(68) Scan parquet default.customer_demographics
Output [2]: [cd_demo_sk#64, cd_marital_status#65]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_demographics]
PushedFilters: [IsNotNull(cd_demo_sk), IsNotNull(cd_marital_status)]
ReadSchema: struct<cd_demo_sk:int,cd_marital_status:string>

(69) ColumnarToRow [codegen id : 21]
Input [2]: [cd_demo_sk#64, cd_marital_status#65]

(70) Filter [codegen id : 21]
Input [2]: [cd_demo_sk#64, cd_marital_status#65]
Condition : (isnotnull(cd_demo_sk#64) AND isnotnull(cd_marital_status#65))

(71) Exchange
Input [2]: [cd_demo_sk#64, cd_marital_status#65]
Arguments: hashpartitioning(cd_demo_sk#64, 5), ENSURE_REQUIREMENTS, [id=#66]

(72) Sort [codegen id : 22]
Input [2]: [cd_demo_sk#64, cd_marital_status#65]
Arguments: [cd_demo_sk#64 ASC NULLS FIRST], false, 0

(73) SortMergeJoin [codegen id : 23]
Left keys [1]: [ss_cdemo_sk#3]
Right keys [1]: [cd_demo_sk#64]
Join condition: None

(74) Project [codegen id : 23]
Output [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, cd_marital_status#65]
Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, cd_demo_sk#64, cd_marital_status#65]

(75) Exchange
Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, cd_marital_status#65]
Arguments: hashpartitioning(c_current_cdemo_sk#52, 5), ENSURE_REQUIREMENTS, [id=#67]

(76) Sort [codegen id : 24]
Input [16]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, cd_marital_status#65]
Arguments: [c_current_cdemo_sk#52 ASC NULLS FIRST], false, 0

(77) ReusedExchange [Reuses operator id: 71]
Output [2]: [cd_demo_sk#68, cd_marital_status#69]

(78) Sort [codegen id : 26]
Input [2]: [cd_demo_sk#68, cd_marital_status#69]
Arguments: [cd_demo_sk#68 ASC NULLS FIRST], false, 0

(79) SortMergeJoin [codegen id : 30]
Left keys [1]: [c_current_cdemo_sk#52]
Right keys [1]: [cd_demo_sk#68]
Join condition: NOT (cd_marital_status#65 = cd_marital_status#69)

(80) Project [codegen id : 30]
Output [14]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62]
Input [18]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_cdemo_sk#52, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, cd_marital_status#65, cd_demo_sk#68, cd_marital_status#69]

(81) Scan parquet default.promotion
Output [1]: [p_promo_sk#70]
Batched: true
Location [not included in comparison]/{warehouse_dir}/promotion]
PushedFilters: [IsNotNull(p_promo_sk)]
ReadSchema: struct<p_promo_sk:int>

(82) ColumnarToRow [codegen id : 27]
Input [1]: [p_promo_sk#70]

(83) Filter [codegen id : 27]
Input [1]: [p_promo_sk#70]
Condition : isnotnull(p_promo_sk#70)

(84) BroadcastExchange
Input [1]: [p_promo_sk#70]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#71]

(85) BroadcastHashJoin [codegen id : 30]
Left keys [1]: [ss_promo_sk#7]
Right keys [1]: [p_promo_sk#70]
Join condition: None

(86) Project [codegen id : 30]
Output [13]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62]
Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, p_promo_sk#70]

(87) Scan parquet default.household_demographics
Output [2]: [hd_demo_sk#72, hd_income_band_sk#73]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_income_band_sk:int>

(88) ColumnarToRow [codegen id : 28]
Input [2]: [hd_demo_sk#72, hd_income_band_sk#73]

(89) Filter [codegen id : 28]
Input [2]: [hd_demo_sk#72, hd_income_band_sk#73]
Condition : (isnotnull(hd_demo_sk#72) AND isnotnull(hd_income_band_sk#73))

(90) BroadcastExchange
Input [2]: [hd_demo_sk#72, hd_income_band_sk#73]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#74]

(91) BroadcastHashJoin [codegen id : 30]
Left keys [1]: [ss_hdemo_sk#4]
Right keys [1]: [hd_demo_sk#72]
Join condition: None

(92) Project [codegen id : 30]
Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73]
Input [15]: [ss_item_sk#1, ss_hdemo_sk#4, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, hd_demo_sk#72, hd_income_band_sk#73]

(93) ReusedExchange [Reuses operator id: 90]
Output [2]: [hd_demo_sk#75, hd_income_band_sk#76]

(94) BroadcastHashJoin [codegen id : 30]
Left keys [1]: [c_current_hdemo_sk#53]
Right keys [1]: [hd_demo_sk#75]
Join condition: None

(95) Project [codegen id : 30]
Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76]
Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_hdemo_sk#53, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_demo_sk#75, hd_income_band_sk#76]

(96) Exchange
Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76]
Arguments: hashpartitioning(ss_addr_sk#5, 5), ENSURE_REQUIREMENTS, [id=#77]

(97) Sort [codegen id : 31]
Input [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76]
Arguments: [ss_addr_sk#5 ASC NULLS FIRST], false, 0

(98) Scan parquet default.customer_address
Output [5]: [ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk)]
ReadSchema: struct<ca_address_sk:int,ca_street_number:string,ca_street_name:string,ca_city:string,ca_zip:string>

(99) ColumnarToRow [codegen id : 32]
Input [5]: [ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]

(100) Filter [codegen id : 32]
Input [5]: [ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Condition : isnotnull(ca_address_sk#78)

(101) Exchange
Input [5]: [ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Arguments: hashpartitioning(ca_address_sk#78, 5), ENSURE_REQUIREMENTS, [id=#83]

(102) Sort [codegen id : 33]
Input [5]: [ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Arguments: [ca_address_sk#78 ASC NULLS FIRST], false, 0

(103) SortMergeJoin [codegen id : 34]
Left keys [1]: [ss_addr_sk#5]
Right keys [1]: [ca_address_sk#78]
Join condition: None

(104) Project [codegen id : 34]
Output [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76, ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]

(105) Exchange
Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Arguments: hashpartitioning(c_current_addr_sk#54, 5), ENSURE_REQUIREMENTS, [id=#84]

(106) Sort [codegen id : 35]
Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Arguments: [c_current_addr_sk#54 ASC NULLS FIRST], false, 0

(107) ReusedExchange [Reuses operator id: 101]
Output [5]: [ca_address_sk#85, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89]

(108) Sort [codegen id : 37]
Input [5]: [ca_address_sk#85, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89]
Arguments: [ca_address_sk#85 ASC NULLS FIRST], false, 0

(109) SortMergeJoin [codegen id : 41]
Left keys [1]: [c_current_addr_sk#54]
Right keys [1]: [ca_address_sk#85]
Join condition: None

(110) Project [codegen id : 41]
Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89]
Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, c_current_addr_sk#54, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_address_sk#85, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89]

(111) Scan parquet default.income_band
Output [1]: [ib_income_band_sk#90]
Batched: true
Location [not included in comparison]/{warehouse_dir}/income_band]
PushedFilters: [IsNotNull(ib_income_band_sk)]
ReadSchema: struct<ib_income_band_sk:int>

(112) ColumnarToRow [codegen id : 38]
Input [1]: [ib_income_band_sk#90]

(113) Filter [codegen id : 38]
Input [1]: [ib_income_band_sk#90]
Condition : isnotnull(ib_income_band_sk#90)

(114) BroadcastExchange
Input [1]: [ib_income_band_sk#90]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#91]

(115) BroadcastHashJoin [codegen id : 41]
Left keys [1]: [hd_income_band_sk#73]
Right keys [1]: [ib_income_band_sk#90]
Join condition: None

(116) Project [codegen id : 41]
Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, d_year#59, d_year#62, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89]
Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, d_year#59, d_year#62, hd_income_band_sk#73, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, ib_income_band_sk#90]

(117) ReusedExchange [Reuses operator id: 114]
Output [1]: [ib_income_band_sk#92]

(118) BroadcastHashJoin [codegen id : 41]
Left keys [1]: [hd_income_band_sk#76]
Right keys [1]: [ib_income_band_sk#92]
Join condition: None

(119) Project [codegen id : 41]
Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, d_year#59, d_year#62, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, d_year#59, d_year#62, hd_income_band_sk#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, ib_income_band_sk#92]

(120) Scan parquet default.item
Output [4]: [i_item_sk#93, i_current_price#94, i_color#95, i_product_name#96]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_current_price), In(i_color, [purple              ,burlywood           ,indian              ,spring              ,floral              ,medium              ]), GreaterThanOrEqual(i_current_price,64.00), LessThanOrEqual(i_current_price,74.00), GreaterThanOrEqual(i_current_price,65.00), LessThanOrEqual(i_current_price,79.00), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_current_price:decimal(7,2),i_color:string,i_product_name:string>

(121) ColumnarToRow [codegen id : 40]
Input [4]: [i_item_sk#93, i_current_price#94, i_color#95, i_product_name#96]

(122) Filter [codegen id : 40]
Input [4]: [i_item_sk#93, i_current_price#94, i_color#95, i_product_name#96]
Condition : ((((((isnotnull(i_current_price#94) AND i_color#95 IN (purple              ,burlywood           ,indian              ,spring              ,floral              ,medium              )) AND (i_current_price#94 >= 64.00)) AND (i_current_price#94 <= 74.00)) AND (i_current_price#94 >= 65.00)) AND (i_current_price#94 <= 79.00)) AND isnotnull(i_item_sk#93))

(123) Project [codegen id : 40]
Output [2]: [i_item_sk#93, i_product_name#96]
Input [4]: [i_item_sk#93, i_current_price#94, i_color#95, i_product_name#96]

(124) BroadcastExchange
Input [2]: [i_item_sk#93, i_product_name#96]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#97]

(125) BroadcastHashJoin [codegen id : 41]
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [i_item_sk#93]
Join condition: None

(126) Project [codegen id : 41]
Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, d_year#59, d_year#62, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, i_item_sk#93, i_product_name#96]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, s_store_name#47, s_zip#48, d_year#59, d_year#62, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, i_item_sk#93, i_product_name#96]

(127) HashAggregate [codegen id : 41]
Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#44, d_year#59, d_year#62, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, i_item_sk#93, i_product_name#96]
Keys [15]: [i_product_name#96, i_item_sk#93, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, d_year#44, d_year#59, d_year#62]
Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#9)), partial_sum(UnscaledValue(ss_list_price#10)), partial_sum(UnscaledValue(ss_coupon_amt#11))]
Aggregate Attributes [4]: [count#98, sum#99, sum#100, sum#101]
Results [19]: [i_product_name#96, i_item_sk#93, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, d_year#44, d_year#59, d_year#62, count#102, sum#103, sum#104, sum#105]

(128) Exchange
Input [19]: [i_product_name#96, i_item_sk#93, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, d_year#44, d_year#59, d_year#62, count#102, sum#103, sum#104, sum#105]
Arguments: hashpartitioning(i_product_name#96, i_item_sk#93, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, d_year#44, d_year#59, d_year#62, 5), ENSURE_REQUIREMENTS, [id=#106]

(129) HashAggregate [codegen id : 42]
Input [19]: [i_product_name#96, i_item_sk#93, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, d_year#44, d_year#59, d_year#62, count#102, sum#103, sum#104, sum#105]
Keys [15]: [i_product_name#96, i_item_sk#93, s_store_name#47, s_zip#48, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ca_street_number#86, ca_street_name#87, ca_city#88, ca_zip#89, d_year#44, d_year#59, d_year#62]
Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#9)), sum(UnscaledValue(ss_list_price#10)), sum(UnscaledValue(ss_coupon_amt#11))]
Aggregate Attributes [4]: [count(1)#107, sum(UnscaledValue(ss_wholesale_cost#9))#108, sum(UnscaledValue(ss_list_price#10))#109, sum(UnscaledValue(ss_coupon_amt#11))#110]
Results [17]: [i_product_name#96 AS product_name#111, i_item_sk#93 AS item_sk#112, s_store_name#47 AS store_name#113, s_zip#48 AS store_zip#114, ca_street_number#79 AS b_street_number#115, ca_street_name#80 AS b_streen_name#116, ca_city#81 AS b_city#117, ca_zip#82 AS b_zip#118, ca_street_number#86 AS c_street_number#119, ca_street_name#87 AS c_street_name#120, ca_city#88 AS c_city#121, ca_zip#89 AS c_zip#122, d_year#44 AS syear#123, count(1)#107 AS cnt#124, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#108,17,2) AS s1#125, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#109,17,2) AS s2#126, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#110,17,2) AS s3#127]

(130) Exchange
Input [17]: [product_name#111, item_sk#112, store_name#113, store_zip#114, b_street_number#115, b_streen_name#116, b_city#117, b_zip#118, c_street_number#119, c_street_name#120, c_city#121, c_zip#122, syear#123, cnt#124, s1#125, s2#126, s3#127]
Arguments: hashpartitioning(item_sk#112, store_name#113, store_zip#114, 5), ENSURE_REQUIREMENTS, [id=#128]

(131) Sort [codegen id : 43]
Input [17]: [product_name#111, item_sk#112, store_name#113, store_zip#114, b_street_number#115, b_streen_name#116, b_city#117, b_zip#118, c_street_number#119, c_street_name#120, c_city#121, c_zip#122, syear#123, cnt#124, s1#125, s2#126, s3#127]
Arguments: [item_sk#112 ASC NULLS FIRST, store_name#113 ASC NULLS FIRST, store_zip#114 ASC NULLS FIRST], false, 0

(132) Scan parquet default.store_sales
Output [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_ticket_number#136, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#140), dynamicpruningexpression(ss_sold_date_sk#140 IN dynamicpruning#141)]
PushedFilters: [IsNotNull(ss_item_sk), IsNotNull(ss_ticket_number), IsNotNull(ss_store_sk), IsNotNull(ss_customer_sk), IsNotNull(ss_cdemo_sk), IsNotNull(ss_promo_sk), IsNotNull(ss_hdemo_sk), IsNotNull(ss_addr_sk)]
ReadSchema: struct<ss_item_sk:int,ss_customer_sk:int,ss_cdemo_sk:int,ss_hdemo_sk:int,ss_addr_sk:int,ss_store_sk:int,ss_promo_sk:int,ss_ticket_number:int,ss_wholesale_cost:decimal(7,2),ss_list_price:decimal(7,2),ss_coupon_amt:decimal(7,2)>

(133) ColumnarToRow [codegen id : 44]
Input [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_ticket_number#136, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140]

(134) Filter [codegen id : 44]
Input [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_ticket_number#136, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140]
Condition : (((((((isnotnull(ss_item_sk#129) AND isnotnull(ss_ticket_number#136)) AND isnotnull(ss_store_sk#134)) AND isnotnull(ss_customer_sk#130)) AND isnotnull(ss_cdemo_sk#131)) AND isnotnull(ss_promo_sk#135)) AND isnotnull(ss_hdemo_sk#132)) AND isnotnull(ss_addr_sk#133))

(135) Exchange
Input [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_ticket_number#136, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140]
Arguments: hashpartitioning(ss_item_sk#129, ss_ticket_number#136, 5), ENSURE_REQUIREMENTS, [id=#142]

(136) Sort [codegen id : 45]
Input [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_ticket_number#136, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140]
Arguments: [ss_item_sk#129 ASC NULLS FIRST, ss_ticket_number#136 ASC NULLS FIRST], false, 0

(137) ReusedExchange [Reuses operator id: 10]
Output [2]: [sr_item_sk#143, sr_ticket_number#144]

(138) Sort [codegen id : 47]
Input [2]: [sr_item_sk#143, sr_ticket_number#144]
Arguments: [sr_item_sk#143 ASC NULLS FIRST, sr_ticket_number#144 ASC NULLS FIRST], false, 0

(139) SortMergeJoin [codegen id : 56]
Left keys [2]: [ss_item_sk#129, ss_ticket_number#136]
Right keys [2]: [sr_item_sk#143, sr_ticket_number#144]
Join condition: None

(140) Project [codegen id : 56]
Output [11]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140]
Input [14]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_ticket_number#136, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140, sr_item_sk#143, sr_ticket_number#144]

(141) ReusedExchange [Reuses operator id: 33]
Output [1]: [cs_item_sk#145]

(142) BroadcastHashJoin [codegen id : 56]
Left keys [1]: [ss_item_sk#129]
Right keys [1]: [cs_item_sk#145]
Join condition: None

(143) Project [codegen id : 56]
Output [11]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140]
Input [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140, cs_item_sk#145]

(144) Scan parquet default.date_dim
Output [2]: [d_date_sk#146, d_year#147]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), EqualTo(d_year,2000), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(145) ColumnarToRow [codegen id : 54]
Input [2]: [d_date_sk#146, d_year#147]

(146) Filter [codegen id : 54]
Input [2]: [d_date_sk#146, d_year#147]
Condition : ((isnotnull(d_year#147) AND (d_year#147 = 2000)) AND isnotnull(d_date_sk#146))

(147) BroadcastExchange
Input [2]: [d_date_sk#146, d_year#147]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#148]

(148) BroadcastHashJoin [codegen id : 56]
Left keys [1]: [ss_sold_date_sk#140]
Right keys [1]: [d_date_sk#146]
Join condition: None

(149) Project [codegen id : 56]
Output [11]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147]
Input [13]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, ss_sold_date_sk#140, d_date_sk#146, d_year#147]

(150) ReusedExchange [Reuses operator id: 45]
Output [3]: [s_store_sk#149, s_store_name#150, s_zip#151]

(151) BroadcastHashJoin [codegen id : 56]
Left keys [1]: [ss_store_sk#134]
Right keys [1]: [s_store_sk#149]
Join condition: None

(152) Project [codegen id : 56]
Output [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151]
Input [14]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_store_sk#134, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_sk#149, s_store_name#150, s_zip#151]

(153) Exchange
Input [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151]
Arguments: hashpartitioning(ss_customer_sk#130, 5), ENSURE_REQUIREMENTS, [id=#152]

(154) Sort [codegen id : 57]
Input [12]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151]
Arguments: [ss_customer_sk#130 ASC NULLS FIRST], false, 0

(155) ReusedExchange [Reuses operator id: 53]
Output [6]: [c_customer_sk#153, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158]

(156) Sort [codegen id : 59]
Input [6]: [c_customer_sk#153, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158]
Arguments: [c_customer_sk#153 ASC NULLS FIRST], false, 0

(157) SortMergeJoin [codegen id : 62]
Left keys [1]: [ss_customer_sk#130]
Right keys [1]: [c_customer_sk#153]
Join condition: None

(158) Project [codegen id : 62]
Output [16]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158]
Input [18]: [ss_item_sk#129, ss_customer_sk#130, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_customer_sk#153, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158]

(159) ReusedExchange [Reuses operator id: 60]
Output [2]: [d_date_sk#159, d_year#160]

(160) BroadcastHashJoin [codegen id : 62]
Left keys [1]: [c_first_sales_date_sk#158]
Right keys [1]: [d_date_sk#159]
Join condition: None

(161) Project [codegen id : 62]
Output [16]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, d_year#160]
Input [18]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, c_first_sales_date_sk#158, d_date_sk#159, d_year#160]

(162) ReusedExchange [Reuses operator id: 60]
Output [2]: [d_date_sk#161, d_year#162]

(163) BroadcastHashJoin [codegen id : 62]
Left keys [1]: [c_first_shipto_date_sk#157]
Right keys [1]: [d_date_sk#161]
Join condition: None

(164) Project [codegen id : 62]
Output [16]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162]
Input [18]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, c_first_shipto_date_sk#157, d_year#160, d_date_sk#161, d_year#162]

(165) Exchange
Input [16]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162]
Arguments: hashpartitioning(ss_cdemo_sk#131, 5), ENSURE_REQUIREMENTS, [id=#163]

(166) Sort [codegen id : 63]
Input [16]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162]
Arguments: [ss_cdemo_sk#131 ASC NULLS FIRST], false, 0

(167) ReusedExchange [Reuses operator id: 71]
Output [2]: [cd_demo_sk#164, cd_marital_status#165]

(168) Sort [codegen id : 65]
Input [2]: [cd_demo_sk#164, cd_marital_status#165]
Arguments: [cd_demo_sk#164 ASC NULLS FIRST], false, 0

(169) SortMergeJoin [codegen id : 66]
Left keys [1]: [ss_cdemo_sk#131]
Right keys [1]: [cd_demo_sk#164]
Join condition: None

(170) Project [codegen id : 66]
Output [16]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165]
Input [18]: [ss_item_sk#129, ss_cdemo_sk#131, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_demo_sk#164, cd_marital_status#165]

(171) Exchange
Input [16]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165]
Arguments: hashpartitioning(c_current_cdemo_sk#154, 5), ENSURE_REQUIREMENTS, [id=#166]

(172) Sort [codegen id : 67]
Input [16]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165]
Arguments: [c_current_cdemo_sk#154 ASC NULLS FIRST], false, 0

(173) ReusedExchange [Reuses operator id: 71]
Output [2]: [cd_demo_sk#167, cd_marital_status#168]

(174) Sort [codegen id : 69]
Input [2]: [cd_demo_sk#167, cd_marital_status#168]
Arguments: [cd_demo_sk#167 ASC NULLS FIRST], false, 0

(175) SortMergeJoin [codegen id : 73]
Left keys [1]: [c_current_cdemo_sk#154]
Right keys [1]: [cd_demo_sk#167]
Join condition: NOT (cd_marital_status#165 = cd_marital_status#168)

(176) Project [codegen id : 73]
Output [14]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162]
Input [18]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_cdemo_sk#154, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, cd_marital_status#165, cd_demo_sk#167, cd_marital_status#168]

(177) ReusedExchange [Reuses operator id: 84]
Output [1]: [p_promo_sk#169]

(178) BroadcastHashJoin [codegen id : 73]
Left keys [1]: [ss_promo_sk#135]
Right keys [1]: [p_promo_sk#169]
Join condition: None

(179) Project [codegen id : 73]
Output [13]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162]
Input [15]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_promo_sk#135, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, p_promo_sk#169]

(180) ReusedExchange [Reuses operator id: 90]
Output [2]: [hd_demo_sk#170, hd_income_band_sk#171]

(181) BroadcastHashJoin [codegen id : 73]
Left keys [1]: [ss_hdemo_sk#132]
Right keys [1]: [hd_demo_sk#170]
Join condition: None

(182) Project [codegen id : 73]
Output [13]: [ss_item_sk#129, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171]
Input [15]: [ss_item_sk#129, ss_hdemo_sk#132, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, hd_demo_sk#170, hd_income_band_sk#171]

(183) ReusedExchange [Reuses operator id: 90]
Output [2]: [hd_demo_sk#172, hd_income_band_sk#173]

(184) BroadcastHashJoin [codegen id : 73]
Left keys [1]: [c_current_hdemo_sk#155]
Right keys [1]: [hd_demo_sk#172]
Join condition: None

(185) Project [codegen id : 73]
Output [13]: [ss_item_sk#129, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173]
Input [15]: [ss_item_sk#129, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_hdemo_sk#155, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_demo_sk#172, hd_income_band_sk#173]

(186) Exchange
Input [13]: [ss_item_sk#129, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173]
Arguments: hashpartitioning(ss_addr_sk#133, 5), ENSURE_REQUIREMENTS, [id=#174]

(187) Sort [codegen id : 74]
Input [13]: [ss_item_sk#129, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173]
Arguments: [ss_addr_sk#133 ASC NULLS FIRST], false, 0

(188) ReusedExchange [Reuses operator id: 101]
Output [5]: [ca_address_sk#175, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179]

(189) Sort [codegen id : 76]
Input [5]: [ca_address_sk#175, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179]
Arguments: [ca_address_sk#175 ASC NULLS FIRST], false, 0

(190) SortMergeJoin [codegen id : 77]
Left keys [1]: [ss_addr_sk#133]
Right keys [1]: [ca_address_sk#175]
Join condition: None

(191) Project [codegen id : 77]
Output [16]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179]
Input [18]: [ss_item_sk#129, ss_addr_sk#133, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_address_sk#175, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179]

(192) Exchange
Input [16]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179]
Arguments: hashpartitioning(c_current_addr_sk#156, 5), ENSURE_REQUIREMENTS, [id=#180]

(193) Sort [codegen id : 78]
Input [16]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179]
Arguments: [c_current_addr_sk#156 ASC NULLS FIRST], false, 0

(194) ReusedExchange [Reuses operator id: 101]
Output [5]: [ca_address_sk#181, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185]

(195) Sort [codegen id : 80]
Input [5]: [ca_address_sk#181, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185]
Arguments: [ca_address_sk#181 ASC NULLS FIRST], false, 0

(196) SortMergeJoin [codegen id : 84]
Left keys [1]: [c_current_addr_sk#156]
Right keys [1]: [ca_address_sk#181]
Join condition: None

(197) Project [codegen id : 84]
Output [19]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185]
Input [21]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, c_current_addr_sk#156, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_address_sk#181, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185]

(198) ReusedExchange [Reuses operator id: 114]
Output [1]: [ib_income_band_sk#186]

(199) BroadcastHashJoin [codegen id : 84]
Left keys [1]: [hd_income_band_sk#171]
Right keys [1]: [ib_income_band_sk#186]
Join condition: None

(200) Project [codegen id : 84]
Output [18]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185]
Input [20]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#171, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, ib_income_band_sk#186]

(201) ReusedExchange [Reuses operator id: 114]
Output [1]: [ib_income_band_sk#187]

(202) BroadcastHashJoin [codegen id : 84]
Left keys [1]: [hd_income_band_sk#173]
Right keys [1]: [ib_income_band_sk#187]
Join condition: None

(203) Project [codegen id : 84]
Output [17]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, d_year#160, d_year#162, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185]
Input [19]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, d_year#160, d_year#162, hd_income_band_sk#173, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, ib_income_band_sk#187]

(204) ReusedExchange [Reuses operator id: 124]
Output [2]: [i_item_sk#188, i_product_name#189]

(205) BroadcastHashJoin [codegen id : 84]
Left keys [1]: [ss_item_sk#129]
Right keys [1]: [i_item_sk#188]
Join condition: None

(206) Project [codegen id : 84]
Output [18]: [ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, d_year#160, d_year#162, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, i_item_sk#188, i_product_name#189]
Input [19]: [ss_item_sk#129, ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, s_store_name#150, s_zip#151, d_year#160, d_year#162, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, i_item_sk#188, i_product_name#189]

(207) HashAggregate [codegen id : 84]
Input [18]: [ss_wholesale_cost#137, ss_list_price#138, ss_coupon_amt#139, d_year#147, d_year#160, d_year#162, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, i_item_sk#188, i_product_name#189]
Keys [15]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#147, d_year#160, d_year#162]
Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#137)), partial_sum(UnscaledValue(ss_list_price#138)), partial_sum(UnscaledValue(ss_coupon_amt#139))]
Aggregate Attributes [4]: [count#190, sum#191, sum#192, sum#193]
Results [19]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#147, d_year#160, d_year#162, count#194, sum#195, sum#196, sum#197]

(208) Exchange
Input [19]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#147, d_year#160, d_year#162, count#194, sum#195, sum#196, sum#197]
Arguments: hashpartitioning(i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#147, d_year#160, d_year#162, 5), ENSURE_REQUIREMENTS, [id=#198]

(209) HashAggregate [codegen id : 85]
Input [19]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#147, d_year#160, d_year#162, count#194, sum#195, sum#196, sum#197]
Keys [15]: [i_product_name#189, i_item_sk#188, s_store_name#150, s_zip#151, ca_street_number#176, ca_street_name#177, ca_city#178, ca_zip#179, ca_street_number#182, ca_street_name#183, ca_city#184, ca_zip#185, d_year#147, d_year#160, d_year#162]
Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#137)), sum(UnscaledValue(ss_list_price#138)), sum(UnscaledValue(ss_coupon_amt#139))]
Aggregate Attributes [4]: [count(1)#199, sum(UnscaledValue(ss_wholesale_cost#137))#200, sum(UnscaledValue(ss_list_price#138))#201, sum(UnscaledValue(ss_coupon_amt#139))#202]
Results [8]: [i_item_sk#188 AS item_sk#203, s_store_name#150 AS store_name#204, s_zip#151 AS store_zip#205, d_year#147 AS syear#206, count(1)#199 AS cnt#207, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#137))#200,17,2) AS s1#208, MakeDecimal(sum(UnscaledValue(ss_list_price#138))#201,17,2) AS s2#209, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#139))#202,17,2) AS s3#210]

(210) Exchange
Input [8]: [item_sk#203, store_name#204, store_zip#205, syear#206, cnt#207, s1#208, s2#209, s3#210]
Arguments: hashpartitioning(item_sk#203, store_name#204, store_zip#205, 5), ENSURE_REQUIREMENTS, [id=#211]

(211) Sort [codegen id : 86]
Input [8]: [item_sk#203, store_name#204, store_zip#205, syear#206, cnt#207, s1#208, s2#209, s3#210]
Arguments: [item_sk#203 ASC NULLS FIRST, store_name#204 ASC NULLS FIRST, store_zip#205 ASC NULLS FIRST], false, 0

(212) SortMergeJoin [codegen id : 87]
Left keys [3]: [item_sk#112, store_name#113, store_zip#114]
Right keys [3]: [item_sk#203, store_name#204, store_zip#205]
Join condition: (cnt#207 <= cnt#124)

(213) Project [codegen id : 87]
Output [21]: [product_name#111, store_name#113, store_zip#114, b_street_number#115, b_streen_name#116, b_city#117, b_zip#118, c_street_number#119, c_street_name#120, c_city#121, c_zip#122, syear#123, cnt#124, s1#125, s2#126, s3#127, s1#208, s2#209, s3#210, syear#206, cnt#207]
Input [25]: [product_name#111, item_sk#112, store_name#113, store_zip#114, b_street_number#115, b_streen_name#116, b_city#117, b_zip#118, c_street_number#119, c_street_name#120, c_city#121, c_zip#122, syear#123, cnt#124, s1#125, s2#126, s3#127, item_sk#203, store_name#204, store_zip#205, syear#206, cnt#207, s1#208, s2#209, s3#210]

(214) Exchange
Input [21]: [product_name#111, store_name#113, store_zip#114, b_street_number#115, b_streen_name#116, b_city#117, b_zip#118, c_street_number#119, c_street_name#120, c_city#121, c_zip#122, syear#123, cnt#124, s1#125, s2#126, s3#127, s1#208, s2#209, s3#210, syear#206, cnt#207]
Arguments: rangepartitioning(product_name#111 ASC NULLS FIRST, store_name#113 ASC NULLS FIRST, cnt#207 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#212]

(215) Sort [codegen id : 88]
Input [21]: [product_name#111, store_name#113, store_zip#114, b_street_number#115, b_streen_name#116, b_city#117, b_zip#118, c_street_number#119, c_street_name#120, c_city#121, c_zip#122, syear#123, cnt#124, s1#125, s2#126, s3#127, s1#208, s2#209, s3#210, syear#206, cnt#207]
Arguments: [product_name#111 ASC NULLS FIRST, store_name#113 ASC NULLS FIRST, cnt#207 ASC NULLS FIRST], true, 0

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13
ReusedExchange (216)


(216) ReusedExchange [Reuses operator id: 39]
Output [2]: [d_date_sk#43, d_year#44]

Subquery:2 Hosting operator id = 132 Hosting Expression = ss_sold_date_sk#140 IN dynamicpruning#141
ReusedExchange (217)


(217) ReusedExchange [Reuses operator id: 147]
Output [2]: [d_date_sk#146, d_year#147]


