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


(1) Scan parquet spark_catalog.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)) AND might_contain(Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#1, 42)))

(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, [plan_id=2]

(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 spark_catalog.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, [plan_id=3]

(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 type: Inner
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 spark_catalog.default.catalog_sales
Output [4]: [cs_item_sk#18, cs_order_number#19, cs_ext_list_price#20, cs_sold_date_sk#21]
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#18, cs_order_number#19, cs_ext_list_price#20, cs_sold_date_sk#21]

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

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

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

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

(20) Scan parquet spark_catalog.default.catalog_returns
Output [6]: [cr_item_sk#22, cr_order_number#23, cr_refunded_cash#24, cr_reversed_charge#25, cr_store_credit#26, cr_returned_date_sk#27]
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#22, cr_order_number#23, cr_refunded_cash#24, cr_reversed_charge#25, cr_store_credit#26, cr_returned_date_sk#27]

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

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

(24) Exchange
Input [5]: [cr_item_sk#22, cr_order_number#23, cr_refunded_cash#24, cr_reversed_charge#25, cr_store_credit#26]
Arguments: hashpartitioning(cr_item_sk#22, cr_order_number#23, 5), ENSURE_REQUIREMENTS, [plan_id=5]

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

(26) SortMergeJoin [codegen id : 9]
Left keys [2]: [cs_item_sk#18, cs_order_number#19]
Right keys [2]: [cr_item_sk#22, cr_order_number#23]
Join type: Inner
Join condition: None

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

(28) HashAggregate [codegen id : 9]
Input [5]: [cs_item_sk#18, cs_ext_list_price#20, cr_refunded_cash#24, cr_reversed_charge#25, cr_store_credit#26]
Keys [1]: [cs_item_sk#18]
Functions [2]: [partial_sum(UnscaledValue(cs_ext_list_price#20)), partial_sum(((cr_refunded_cash#24 + cr_reversed_charge#25) + cr_store_credit#26))]
Aggregate Attributes [3]: [sum#28, sum#29, isEmpty#30]
Results [4]: [cs_item_sk#18, sum#31, sum#32, isEmpty#33]

(29) Exchange
Input [4]: [cs_item_sk#18, sum#31, sum#32, isEmpty#33]
Arguments: hashpartitioning(cs_item_sk#18, 5), ENSURE_REQUIREMENTS, [plan_id=6]

(30) HashAggregate [codegen id : 10]
Input [4]: [cs_item_sk#18, sum#31, sum#32, isEmpty#33]
Keys [1]: [cs_item_sk#18]
Functions [2]: [sum(UnscaledValue(cs_ext_list_price#20)), sum(((cr_refunded_cash#24 + cr_reversed_charge#25) + cr_store_credit#26))]
Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#20))#34, sum(((cr_refunded_cash#24 + cr_reversed_charge#25) + cr_store_credit#26))#35]
Results [3]: [cs_item_sk#18, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#20))#34,17,2) AS sale#36, sum(((cr_refunded_cash#24 + cr_reversed_charge#25) + cr_store_credit#26))#35 AS refund#37]

(31) Filter [codegen id : 10]
Input [3]: [cs_item_sk#18, sale#36, refund#37]
Condition : ((isnotnull(sale#36) AND isnotnull(refund#37)) AND (cast(sale#36 as decimal(21,2)) > (2 * refund#37)))

(32) Project [codegen id : 10]
Output [1]: [cs_item_sk#18]
Input [3]: [cs_item_sk#18, sale#36, refund#37]

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

(34) BroadcastHashJoin [codegen id : 13]
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [cs_item_sk#18]
Join type: Inner
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#18]

(36) ReusedExchange [Reuses operator id: 220]
Output [2]: [d_date_sk#38, d_year#39]

(37) BroadcastHashJoin [codegen id : 13]
Left keys [1]: [ss_sold_date_sk#12]
Right keys [1]: [d_date_sk#38]
Join type: Inner
Join condition: None

(38) 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#39]
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#38, d_year#39]

(39) Scan parquet spark_catalog.default.store
Output [3]: [s_store_sk#40, s_store_name#41, s_zip#42]
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>

(40) ColumnarToRow [codegen id : 12]
Input [3]: [s_store_sk#40, s_store_name#41, s_zip#42]

(41) Filter [codegen id : 12]
Input [3]: [s_store_sk#40, s_store_name#41, s_zip#42]
Condition : ((isnotnull(s_store_sk#40) AND isnotnull(s_store_name#41)) AND isnotnull(s_zip#42))

(42) BroadcastExchange
Input [3]: [s_store_sk#40, s_store_name#41, s_zip#42]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8]

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

(44) 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#39, s_store_name#41, s_zip#42]
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#39, s_store_sk#40, s_store_name#41, s_zip#42]

(45) 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#39, s_store_name#41, s_zip#42]
Arguments: hashpartitioning(ss_customer_sk#2, 5), ENSURE_REQUIREMENTS, [plan_id=9]

(46) 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#39, s_store_name#41, s_zip#42]
Arguments: [ss_customer_sk#2 ASC NULLS FIRST], false, 0

(47) Scan parquet spark_catalog.default.customer
Output [6]: [c_customer_sk#43, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48]
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>

(48) ColumnarToRow [codegen id : 15]
Input [6]: [c_customer_sk#43, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48]

(49) Filter [codegen id : 15]
Input [6]: [c_customer_sk#43, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48]
Condition : (((((isnotnull(c_customer_sk#43) AND isnotnull(c_first_sales_date_sk#48)) AND isnotnull(c_first_shipto_date_sk#47)) AND isnotnull(c_current_cdemo_sk#44)) AND isnotnull(c_current_hdemo_sk#45)) AND isnotnull(c_current_addr_sk#46))

(50) Exchange
Input [6]: [c_customer_sk#43, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48]
Arguments: hashpartitioning(c_customer_sk#43, 5), ENSURE_REQUIREMENTS, [plan_id=10]

(51) Sort [codegen id : 16]
Input [6]: [c_customer_sk#43, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48]
Arguments: [c_customer_sk#43 ASC NULLS FIRST], false, 0

(52) SortMergeJoin [codegen id : 19]
Left keys [1]: [ss_customer_sk#2]
Right keys [1]: [c_customer_sk#43]
Join type: Inner
Join condition: None

(53) 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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48]
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#39, s_store_name#41, s_zip#42, c_customer_sk#43, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48]

(54) Scan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#49, d_year#50]
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>

(55) ColumnarToRow [codegen id : 17]
Input [2]: [d_date_sk#49, d_year#50]

(56) Filter [codegen id : 17]
Input [2]: [d_date_sk#49, d_year#50]
Condition : isnotnull(d_date_sk#49)

(57) BroadcastExchange
Input [2]: [d_date_sk#49, d_year#50]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=11]

(58) BroadcastHashJoin [codegen id : 19]
Left keys [1]: [c_first_sales_date_sk#48]
Right keys [1]: [d_date_sk#49]
Join type: Inner
Join condition: None

(59) 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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, d_year#50]
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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, c_first_sales_date_sk#48, d_date_sk#49, d_year#50]

(60) ReusedExchange [Reuses operator id: 57]
Output [2]: [d_date_sk#51, d_year#52]

(61) BroadcastHashJoin [codegen id : 19]
Left keys [1]: [c_first_shipto_date_sk#47]
Right keys [1]: [d_date_sk#51]
Join type: Inner
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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52]
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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, c_first_shipto_date_sk#47, d_year#50, d_date_sk#51, d_year#52]

(63) 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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52]
Arguments: hashpartitioning(ss_cdemo_sk#3, 5), ENSURE_REQUIREMENTS, [plan_id=12]

(64) 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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52]
Arguments: [ss_cdemo_sk#3 ASC NULLS FIRST], false, 0

(65) Scan parquet spark_catalog.default.customer_demographics
Output [2]: [cd_demo_sk#53, cd_marital_status#54]
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>

(66) ColumnarToRow [codegen id : 21]
Input [2]: [cd_demo_sk#53, cd_marital_status#54]

(67) Filter [codegen id : 21]
Input [2]: [cd_demo_sk#53, cd_marital_status#54]
Condition : (isnotnull(cd_demo_sk#53) AND isnotnull(cd_marital_status#54))

(68) Exchange
Input [2]: [cd_demo_sk#53, cd_marital_status#54]
Arguments: hashpartitioning(cd_demo_sk#53, 5), ENSURE_REQUIREMENTS, [plan_id=13]

(69) Sort [codegen id : 22]
Input [2]: [cd_demo_sk#53, cd_marital_status#54]
Arguments: [cd_demo_sk#53 ASC NULLS FIRST], false, 0

(70) SortMergeJoin [codegen id : 23]
Left keys [1]: [ss_cdemo_sk#3]
Right keys [1]: [cd_demo_sk#53]
Join type: Inner
Join condition: None

(71) 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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, cd_marital_status#54]
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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, cd_demo_sk#53, cd_marital_status#54]

(72) 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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, cd_marital_status#54]
Arguments: hashpartitioning(c_current_cdemo_sk#44, 5), ENSURE_REQUIREMENTS, [plan_id=14]

(73) 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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, cd_marital_status#54]
Arguments: [c_current_cdemo_sk#44 ASC NULLS FIRST], false, 0

(74) ReusedExchange [Reuses operator id: 68]
Output [2]: [cd_demo_sk#55, cd_marital_status#56]

(75) Sort [codegen id : 26]
Input [2]: [cd_demo_sk#55, cd_marital_status#56]
Arguments: [cd_demo_sk#55 ASC NULLS FIRST], false, 0

(76) SortMergeJoin [codegen id : 30]
Left keys [1]: [c_current_cdemo_sk#44]
Right keys [1]: [cd_demo_sk#55]
Join type: Inner
Join condition: NOT (cd_marital_status#54 = cd_marital_status#56)

(77) 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#39, s_store_name#41, s_zip#42, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52]
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#39, s_store_name#41, s_zip#42, c_current_cdemo_sk#44, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, cd_marital_status#54, cd_demo_sk#55, cd_marital_status#56]

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

(79) ColumnarToRow [codegen id : 27]
Input [1]: [p_promo_sk#57]

(80) Filter [codegen id : 27]
Input [1]: [p_promo_sk#57]
Condition : isnotnull(p_promo_sk#57)

(81) BroadcastExchange
Input [1]: [p_promo_sk#57]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=15]

(82) BroadcastHashJoin [codegen id : 30]
Left keys [1]: [ss_promo_sk#7]
Right keys [1]: [p_promo_sk#57]
Join type: Inner
Join condition: None

(83) 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#39, s_store_name#41, s_zip#42, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52]
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#39, s_store_name#41, s_zip#42, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, p_promo_sk#57]

(84) Scan parquet spark_catalog.default.household_demographics
Output [2]: [hd_demo_sk#58, hd_income_band_sk#59]
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>

(85) ColumnarToRow [codegen id : 28]
Input [2]: [hd_demo_sk#58, hd_income_band_sk#59]

(86) Filter [codegen id : 28]
Input [2]: [hd_demo_sk#58, hd_income_band_sk#59]
Condition : (isnotnull(hd_demo_sk#58) AND isnotnull(hd_income_band_sk#59))

(87) BroadcastExchange
Input [2]: [hd_demo_sk#58, hd_income_band_sk#59]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=16]

(88) BroadcastHashJoin [codegen id : 30]
Left keys [1]: [ss_hdemo_sk#4]
Right keys [1]: [hd_demo_sk#58]
Join type: Inner
Join condition: None

(89) 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#39, s_store_name#41, s_zip#42, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59]
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#39, s_store_name#41, s_zip#42, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, hd_demo_sk#58, hd_income_band_sk#59]

(90) ReusedExchange [Reuses operator id: 87]
Output [2]: [hd_demo_sk#60, hd_income_band_sk#61]

(91) BroadcastHashJoin [codegen id : 30]
Left keys [1]: [c_current_hdemo_sk#45]
Right keys [1]: [hd_demo_sk#60]
Join type: Inner
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#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61]
Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, c_current_hdemo_sk#45, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_demo_sk#60, hd_income_band_sk#61]

(93) 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#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61]
Arguments: hashpartitioning(ss_addr_sk#5, 5), ENSURE_REQUIREMENTS, [plan_id=17]

(94) 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#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61]
Arguments: [ss_addr_sk#5 ASC NULLS FIRST], false, 0

(95) Scan parquet spark_catalog.default.customer_address
Output [5]: [ca_address_sk#62, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]
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>

(96) ColumnarToRow [codegen id : 32]
Input [5]: [ca_address_sk#62, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]

(97) Filter [codegen id : 32]
Input [5]: [ca_address_sk#62, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]
Condition : isnotnull(ca_address_sk#62)

(98) Exchange
Input [5]: [ca_address_sk#62, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]
Arguments: hashpartitioning(ca_address_sk#62, 5), ENSURE_REQUIREMENTS, [plan_id=18]

(99) Sort [codegen id : 33]
Input [5]: [ca_address_sk#62, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]
Arguments: [ca_address_sk#62 ASC NULLS FIRST], false, 0

(100) SortMergeJoin [codegen id : 34]
Left keys [1]: [ss_addr_sk#5]
Right keys [1]: [ca_address_sk#62]
Join type: Inner
Join condition: None

(101) Project [codegen id : 34]
Output [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]
Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61, ca_address_sk#62, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]

(102) Exchange
Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]
Arguments: hashpartitioning(c_current_addr_sk#46, 5), ENSURE_REQUIREMENTS, [plan_id=19]

(103) Sort [codegen id : 35]
Input [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66]
Arguments: [c_current_addr_sk#46 ASC NULLS FIRST], false, 0

(104) ReusedExchange [Reuses operator id: 98]
Output [5]: [ca_address_sk#67, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71]

(105) Sort [codegen id : 37]
Input [5]: [ca_address_sk#67, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71]
Arguments: [ca_address_sk#67 ASC NULLS FIRST], false, 0

(106) SortMergeJoin [codegen id : 41]
Left keys [1]: [c_current_addr_sk#46]
Right keys [1]: [ca_address_sk#67]
Join type: Inner
Join condition: None

(107) Project [codegen id : 41]
Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71]
Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, c_current_addr_sk#46, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_address_sk#67, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71]

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

(109) ColumnarToRow [codegen id : 38]
Input [1]: [ib_income_band_sk#72]

(110) Filter [codegen id : 38]
Input [1]: [ib_income_band_sk#72]
Condition : isnotnull(ib_income_band_sk#72)

(111) BroadcastExchange
Input [1]: [ib_income_band_sk#72]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20]

(112) BroadcastHashJoin [codegen id : 41]
Left keys [1]: [hd_income_band_sk#59]
Right keys [1]: [ib_income_band_sk#72]
Join type: Inner
Join condition: None

(113) Project [codegen id : 41]
Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, d_year#50, d_year#52, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71]
Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, d_year#50, d_year#52, hd_income_band_sk#59, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, ib_income_band_sk#72]

(114) ReusedExchange [Reuses operator id: 111]
Output [1]: [ib_income_band_sk#73]

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

(116) Project [codegen id : 41]
Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, d_year#50, d_year#52, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, d_year#50, d_year#52, hd_income_band_sk#61, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, ib_income_band_sk#73]

(117) Scan parquet spark_catalog.default.item
Output [4]: [i_item_sk#74, i_current_price#75, i_color#76, i_product_name#77]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood           ,floral              ,indian              ,medium              ,purple              ,spring              ]), 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>

(118) ColumnarToRow [codegen id : 40]
Input [4]: [i_item_sk#74, i_current_price#75, i_color#76, i_product_name#77]

(119) Filter [codegen id : 40]
Input [4]: [i_item_sk#74, i_current_price#75, i_color#76, i_product_name#77]
Condition : ((((((isnotnull(i_current_price#75) AND i_color#76 IN (purple              ,burlywood           ,indian              ,spring              ,floral              ,medium              )) AND (i_current_price#75 >= 64.00)) AND (i_current_price#75 <= 74.00)) AND (i_current_price#75 >= 65.00)) AND (i_current_price#75 <= 79.00)) AND isnotnull(i_item_sk#74))

(120) Project [codegen id : 40]
Output [2]: [i_item_sk#74, i_product_name#77]
Input [4]: [i_item_sk#74, i_current_price#75, i_color#76, i_product_name#77]

(121) BroadcastExchange
Input [2]: [i_item_sk#74, i_product_name#77]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=21]

(122) BroadcastHashJoin [codegen id : 41]
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [i_item_sk#74]
Join type: Inner
Join condition: None

(123) Project [codegen id : 41]
Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, d_year#50, d_year#52, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, i_item_sk#74, i_product_name#77]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, s_store_name#41, s_zip#42, d_year#50, d_year#52, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, i_item_sk#74, i_product_name#77]

(124) HashAggregate [codegen id : 41]
Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#39, d_year#50, d_year#52, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, i_item_sk#74, i_product_name#77]
Keys [15]: [i_product_name#77, i_item_sk#74, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, d_year#39, d_year#50, d_year#52]
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#78, sum#79, sum#80, sum#81]
Results [19]: [i_product_name#77, i_item_sk#74, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, d_year#39, d_year#50, d_year#52, count#82, sum#83, sum#84, sum#85]

(125) Exchange
Input [19]: [i_product_name#77, i_item_sk#74, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, d_year#39, d_year#50, d_year#52, count#82, sum#83, sum#84, sum#85]
Arguments: hashpartitioning(i_product_name#77, i_item_sk#74, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, d_year#39, d_year#50, d_year#52, 5), ENSURE_REQUIREMENTS, [plan_id=22]

(126) HashAggregate [codegen id : 42]
Input [19]: [i_product_name#77, i_item_sk#74, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, d_year#39, d_year#50, d_year#52, count#82, sum#83, sum#84, sum#85]
Keys [15]: [i_product_name#77, i_item_sk#74, s_store_name#41, s_zip#42, ca_street_number#63, ca_street_name#64, ca_city#65, ca_zip#66, ca_street_number#68, ca_street_name#69, ca_city#70, ca_zip#71, d_year#39, d_year#50, d_year#52]
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)#86, sum(UnscaledValue(ss_wholesale_cost#9))#87, sum(UnscaledValue(ss_list_price#10))#88, sum(UnscaledValue(ss_coupon_amt#11))#89]
Results [17]: [i_product_name#77 AS product_name#90, i_item_sk#74 AS item_sk#91, s_store_name#41 AS store_name#92, s_zip#42 AS store_zip#93, ca_street_number#63 AS b_street_number#94, ca_street_name#64 AS b_streen_name#95, ca_city#65 AS b_city#96, ca_zip#66 AS b_zip#97, ca_street_number#68 AS c_street_number#98, ca_street_name#69 AS c_street_name#99, ca_city#70 AS c_city#100, ca_zip#71 AS c_zip#101, d_year#39 AS syear#102, count(1)#86 AS cnt#103, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#87,17,2) AS s1#104, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#88,17,2) AS s2#105, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#89,17,2) AS s3#106]

(127) Exchange
Input [17]: [product_name#90, item_sk#91, store_name#92, store_zip#93, b_street_number#94, b_streen_name#95, b_city#96, b_zip#97, c_street_number#98, c_street_name#99, c_city#100, c_zip#101, syear#102, cnt#103, s1#104, s2#105, s3#106]
Arguments: hashpartitioning(item_sk#91, store_name#92, store_zip#93, 5), ENSURE_REQUIREMENTS, [plan_id=23]

(128) Sort [codegen id : 43]
Input [17]: [product_name#90, item_sk#91, store_name#92, store_zip#93, b_street_number#94, b_streen_name#95, b_city#96, b_zip#97, c_street_number#98, c_street_name#99, c_city#100, c_zip#101, syear#102, cnt#103, s1#104, s2#105, s3#106]
Arguments: [item_sk#91 ASC NULLS FIRST, store_name#92 ASC NULLS FIRST, store_zip#93 ASC NULLS FIRST], false, 0

(129) Scan parquet spark_catalog.default.store_sales
Output [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_ticket_number#114, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#118), dynamicpruningexpression(ss_sold_date_sk#118 IN dynamicpruning#119)]
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)>

(130) ColumnarToRow [codegen id : 44]
Input [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_ticket_number#114, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118]

(131) Filter [codegen id : 44]
Input [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_ticket_number#114, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118]
Condition : ((((((((isnotnull(ss_item_sk#107) AND isnotnull(ss_ticket_number#114)) AND isnotnull(ss_store_sk#112)) AND isnotnull(ss_customer_sk#108)) AND isnotnull(ss_cdemo_sk#109)) AND isnotnull(ss_promo_sk#113)) AND isnotnull(ss_hdemo_sk#110)) AND isnotnull(ss_addr_sk#111)) AND might_contain(ReusedSubquery Subquery scalar-subquery#14, [id=#1], xxhash64(ss_item_sk#107, 42)))

(132) Exchange
Input [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_ticket_number#114, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118]
Arguments: hashpartitioning(ss_item_sk#107, ss_ticket_number#114, 5), ENSURE_REQUIREMENTS, [plan_id=24]

(133) Sort [codegen id : 45]
Input [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_ticket_number#114, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118]
Arguments: [ss_item_sk#107 ASC NULLS FIRST, ss_ticket_number#114 ASC NULLS FIRST], false, 0

(134) ReusedExchange [Reuses operator id: 10]
Output [2]: [sr_item_sk#120, sr_ticket_number#121]

(135) Sort [codegen id : 47]
Input [2]: [sr_item_sk#120, sr_ticket_number#121]
Arguments: [sr_item_sk#120 ASC NULLS FIRST, sr_ticket_number#121 ASC NULLS FIRST], false, 0

(136) SortMergeJoin [codegen id : 56]
Left keys [2]: [ss_item_sk#107, ss_ticket_number#114]
Right keys [2]: [sr_item_sk#120, sr_ticket_number#121]
Join type: Inner
Join condition: None

(137) Project [codegen id : 56]
Output [11]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118]
Input [14]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_ticket_number#114, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118, sr_item_sk#120, sr_ticket_number#121]

(138) ReusedExchange [Reuses operator id: 33]
Output [1]: [cs_item_sk#122]

(139) BroadcastHashJoin [codegen id : 56]
Left keys [1]: [ss_item_sk#107]
Right keys [1]: [cs_item_sk#122]
Join type: Inner
Join condition: None

(140) Project [codegen id : 56]
Output [11]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118]
Input [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118, cs_item_sk#122]

(141) ReusedExchange [Reuses operator id: 224]
Output [2]: [d_date_sk#123, d_year#124]

(142) BroadcastHashJoin [codegen id : 56]
Left keys [1]: [ss_sold_date_sk#118]
Right keys [1]: [d_date_sk#123]
Join type: Inner
Join condition: None

(143) Project [codegen id : 56]
Output [11]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124]
Input [13]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, ss_sold_date_sk#118, d_date_sk#123, d_year#124]

(144) ReusedExchange [Reuses operator id: 42]
Output [3]: [s_store_sk#125, s_store_name#126, s_zip#127]

(145) BroadcastHashJoin [codegen id : 56]
Left keys [1]: [ss_store_sk#112]
Right keys [1]: [s_store_sk#125]
Join type: Inner
Join condition: None

(146) Project [codegen id : 56]
Output [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127]
Input [14]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_store_sk#112, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_sk#125, s_store_name#126, s_zip#127]

(147) Exchange
Input [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127]
Arguments: hashpartitioning(ss_customer_sk#108, 5), ENSURE_REQUIREMENTS, [plan_id=25]

(148) Sort [codegen id : 57]
Input [12]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127]
Arguments: [ss_customer_sk#108 ASC NULLS FIRST], false, 0

(149) ReusedExchange [Reuses operator id: 50]
Output [6]: [c_customer_sk#128, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, c_first_shipto_date_sk#132, c_first_sales_date_sk#133]

(150) Sort [codegen id : 59]
Input [6]: [c_customer_sk#128, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, c_first_shipto_date_sk#132, c_first_sales_date_sk#133]
Arguments: [c_customer_sk#128 ASC NULLS FIRST], false, 0

(151) SortMergeJoin [codegen id : 62]
Left keys [1]: [ss_customer_sk#108]
Right keys [1]: [c_customer_sk#128]
Join type: Inner
Join condition: None

(152) Project [codegen id : 62]
Output [16]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, c_first_shipto_date_sk#132, c_first_sales_date_sk#133]
Input [18]: [ss_item_sk#107, ss_customer_sk#108, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_customer_sk#128, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, c_first_shipto_date_sk#132, c_first_sales_date_sk#133]

(153) ReusedExchange [Reuses operator id: 57]
Output [2]: [d_date_sk#134, d_year#135]

(154) BroadcastHashJoin [codegen id : 62]
Left keys [1]: [c_first_sales_date_sk#133]
Right keys [1]: [d_date_sk#134]
Join type: Inner
Join condition: None

(155) Project [codegen id : 62]
Output [16]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, c_first_shipto_date_sk#132, d_year#135]
Input [18]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, c_first_shipto_date_sk#132, c_first_sales_date_sk#133, d_date_sk#134, d_year#135]

(156) ReusedExchange [Reuses operator id: 57]
Output [2]: [d_date_sk#136, d_year#137]

(157) BroadcastHashJoin [codegen id : 62]
Left keys [1]: [c_first_shipto_date_sk#132]
Right keys [1]: [d_date_sk#136]
Join type: Inner
Join condition: None

(158) Project [codegen id : 62]
Output [16]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137]
Input [18]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, c_first_shipto_date_sk#132, d_year#135, d_date_sk#136, d_year#137]

(159) Exchange
Input [16]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137]
Arguments: hashpartitioning(ss_cdemo_sk#109, 5), ENSURE_REQUIREMENTS, [plan_id=26]

(160) Sort [codegen id : 63]
Input [16]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137]
Arguments: [ss_cdemo_sk#109 ASC NULLS FIRST], false, 0

(161) ReusedExchange [Reuses operator id: 68]
Output [2]: [cd_demo_sk#138, cd_marital_status#139]

(162) Sort [codegen id : 65]
Input [2]: [cd_demo_sk#138, cd_marital_status#139]
Arguments: [cd_demo_sk#138 ASC NULLS FIRST], false, 0

(163) SortMergeJoin [codegen id : 66]
Left keys [1]: [ss_cdemo_sk#109]
Right keys [1]: [cd_demo_sk#138]
Join type: Inner
Join condition: None

(164) Project [codegen id : 66]
Output [16]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, cd_marital_status#139]
Input [18]: [ss_item_sk#107, ss_cdemo_sk#109, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, cd_demo_sk#138, cd_marital_status#139]

(165) Exchange
Input [16]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, cd_marital_status#139]
Arguments: hashpartitioning(c_current_cdemo_sk#129, 5), ENSURE_REQUIREMENTS, [plan_id=27]

(166) Sort [codegen id : 67]
Input [16]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, cd_marital_status#139]
Arguments: [c_current_cdemo_sk#129 ASC NULLS FIRST], false, 0

(167) ReusedExchange [Reuses operator id: 68]
Output [2]: [cd_demo_sk#140, cd_marital_status#141]

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

(169) SortMergeJoin [codegen id : 73]
Left keys [1]: [c_current_cdemo_sk#129]
Right keys [1]: [cd_demo_sk#140]
Join type: Inner
Join condition: NOT (cd_marital_status#139 = cd_marital_status#141)

(170) Project [codegen id : 73]
Output [14]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137]
Input [18]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_cdemo_sk#129, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, cd_marital_status#139, cd_demo_sk#140, cd_marital_status#141]

(171) ReusedExchange [Reuses operator id: 81]
Output [1]: [p_promo_sk#142]

(172) BroadcastHashJoin [codegen id : 73]
Left keys [1]: [ss_promo_sk#113]
Right keys [1]: [p_promo_sk#142]
Join type: Inner
Join condition: None

(173) Project [codegen id : 73]
Output [13]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137]
Input [15]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_promo_sk#113, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, p_promo_sk#142]

(174) ReusedExchange [Reuses operator id: 87]
Output [2]: [hd_demo_sk#143, hd_income_band_sk#144]

(175) BroadcastHashJoin [codegen id : 73]
Left keys [1]: [ss_hdemo_sk#110]
Right keys [1]: [hd_demo_sk#143]
Join type: Inner
Join condition: None

(176) Project [codegen id : 73]
Output [13]: [ss_item_sk#107, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144]
Input [15]: [ss_item_sk#107, ss_hdemo_sk#110, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, hd_demo_sk#143, hd_income_band_sk#144]

(177) ReusedExchange [Reuses operator id: 87]
Output [2]: [hd_demo_sk#145, hd_income_band_sk#146]

(178) BroadcastHashJoin [codegen id : 73]
Left keys [1]: [c_current_hdemo_sk#130]
Right keys [1]: [hd_demo_sk#145]
Join type: Inner
Join condition: None

(179) Project [codegen id : 73]
Output [13]: [ss_item_sk#107, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146]
Input [15]: [ss_item_sk#107, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_hdemo_sk#130, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_demo_sk#145, hd_income_band_sk#146]

(180) Exchange
Input [13]: [ss_item_sk#107, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146]
Arguments: hashpartitioning(ss_addr_sk#111, 5), ENSURE_REQUIREMENTS, [plan_id=28]

(181) Sort [codegen id : 74]
Input [13]: [ss_item_sk#107, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146]
Arguments: [ss_addr_sk#111 ASC NULLS FIRST], false, 0

(182) ReusedExchange [Reuses operator id: 98]
Output [5]: [ca_address_sk#147, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151]

(183) Sort [codegen id : 76]
Input [5]: [ca_address_sk#147, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151]
Arguments: [ca_address_sk#147 ASC NULLS FIRST], false, 0

(184) SortMergeJoin [codegen id : 77]
Left keys [1]: [ss_addr_sk#111]
Right keys [1]: [ca_address_sk#147]
Join type: Inner
Join condition: None

(185) Project [codegen id : 77]
Output [16]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151]
Input [18]: [ss_item_sk#107, ss_addr_sk#111, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146, ca_address_sk#147, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151]

(186) Exchange
Input [16]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151]
Arguments: hashpartitioning(c_current_addr_sk#131, 5), ENSURE_REQUIREMENTS, [plan_id=29]

(187) Sort [codegen id : 78]
Input [16]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151]
Arguments: [c_current_addr_sk#131 ASC NULLS FIRST], false, 0

(188) ReusedExchange [Reuses operator id: 98]
Output [5]: [ca_address_sk#152, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156]

(189) Sort [codegen id : 80]
Input [5]: [ca_address_sk#152, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156]
Arguments: [ca_address_sk#152 ASC NULLS FIRST], false, 0

(190) SortMergeJoin [codegen id : 84]
Left keys [1]: [c_current_addr_sk#131]
Right keys [1]: [ca_address_sk#152]
Join type: Inner
Join condition: None

(191) Project [codegen id : 84]
Output [19]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156]
Input [21]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, c_current_addr_sk#131, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_address_sk#152, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156]

(192) ReusedExchange [Reuses operator id: 111]
Output [1]: [ib_income_band_sk#157]

(193) BroadcastHashJoin [codegen id : 84]
Left keys [1]: [hd_income_band_sk#144]
Right keys [1]: [ib_income_band_sk#157]
Join type: Inner
Join condition: None

(194) Project [codegen id : 84]
Output [18]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, d_year#135, d_year#137, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156]
Input [20]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, d_year#135, d_year#137, hd_income_band_sk#144, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, ib_income_band_sk#157]

(195) ReusedExchange [Reuses operator id: 111]
Output [1]: [ib_income_band_sk#158]

(196) BroadcastHashJoin [codegen id : 84]
Left keys [1]: [hd_income_band_sk#146]
Right keys [1]: [ib_income_band_sk#158]
Join type: Inner
Join condition: None

(197) Project [codegen id : 84]
Output [17]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, d_year#135, d_year#137, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156]
Input [19]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, d_year#135, d_year#137, hd_income_band_sk#146, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, ib_income_band_sk#158]

(198) ReusedExchange [Reuses operator id: 121]
Output [2]: [i_item_sk#159, i_product_name#160]

(199) BroadcastHashJoin [codegen id : 84]
Left keys [1]: [ss_item_sk#107]
Right keys [1]: [i_item_sk#159]
Join type: Inner
Join condition: None

(200) Project [codegen id : 84]
Output [18]: [ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, d_year#135, d_year#137, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, i_item_sk#159, i_product_name#160]
Input [19]: [ss_item_sk#107, ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, s_store_name#126, s_zip#127, d_year#135, d_year#137, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, i_item_sk#159, i_product_name#160]

(201) HashAggregate [codegen id : 84]
Input [18]: [ss_wholesale_cost#115, ss_list_price#116, ss_coupon_amt#117, d_year#124, d_year#135, d_year#137, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, i_item_sk#159, i_product_name#160]
Keys [15]: [i_product_name#160, i_item_sk#159, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, d_year#124, d_year#135, d_year#137]
Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#115)), partial_sum(UnscaledValue(ss_list_price#116)), partial_sum(UnscaledValue(ss_coupon_amt#117))]
Aggregate Attributes [4]: [count#78, sum#161, sum#162, sum#163]
Results [19]: [i_product_name#160, i_item_sk#159, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, d_year#124, d_year#135, d_year#137, count#82, sum#164, sum#165, sum#166]

(202) Exchange
Input [19]: [i_product_name#160, i_item_sk#159, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, d_year#124, d_year#135, d_year#137, count#82, sum#164, sum#165, sum#166]
Arguments: hashpartitioning(i_product_name#160, i_item_sk#159, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, d_year#124, d_year#135, d_year#137, 5), ENSURE_REQUIREMENTS, [plan_id=30]

(203) HashAggregate [codegen id : 85]
Input [19]: [i_product_name#160, i_item_sk#159, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, d_year#124, d_year#135, d_year#137, count#82, sum#164, sum#165, sum#166]
Keys [15]: [i_product_name#160, i_item_sk#159, s_store_name#126, s_zip#127, ca_street_number#148, ca_street_name#149, ca_city#150, ca_zip#151, ca_street_number#153, ca_street_name#154, ca_city#155, ca_zip#156, d_year#124, d_year#135, d_year#137]
Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#115)), sum(UnscaledValue(ss_list_price#116)), sum(UnscaledValue(ss_coupon_amt#117))]
Aggregate Attributes [4]: [count(1)#86, sum(UnscaledValue(ss_wholesale_cost#115))#87, sum(UnscaledValue(ss_list_price#116))#88, sum(UnscaledValue(ss_coupon_amt#117))#89]
Results [8]: [i_item_sk#159 AS item_sk#167, s_store_name#126 AS store_name#168, s_zip#127 AS store_zip#169, d_year#124 AS syear#170, count(1)#86 AS cnt#171, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#115))#87,17,2) AS s1#172, MakeDecimal(sum(UnscaledValue(ss_list_price#116))#88,17,2) AS s2#173, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#117))#89,17,2) AS s3#174]

(204) Exchange
Input [8]: [item_sk#167, store_name#168, store_zip#169, syear#170, cnt#171, s1#172, s2#173, s3#174]
Arguments: hashpartitioning(item_sk#167, store_name#168, store_zip#169, 5), ENSURE_REQUIREMENTS, [plan_id=31]

(205) Sort [codegen id : 86]
Input [8]: [item_sk#167, store_name#168, store_zip#169, syear#170, cnt#171, s1#172, s2#173, s3#174]
Arguments: [item_sk#167 ASC NULLS FIRST, store_name#168 ASC NULLS FIRST, store_zip#169 ASC NULLS FIRST], false, 0

(206) SortMergeJoin [codegen id : 87]
Left keys [3]: [item_sk#91, store_name#92, store_zip#93]
Right keys [3]: [item_sk#167, store_name#168, store_zip#169]
Join type: Inner
Join condition: (cnt#171 <= cnt#103)

(207) Project [codegen id : 87]
Output [21]: [product_name#90, store_name#92, store_zip#93, b_street_number#94, b_streen_name#95, b_city#96, b_zip#97, c_street_number#98, c_street_name#99, c_city#100, c_zip#101, syear#102, cnt#103, s1#104, s2#105, s3#106, s1#172, s2#173, s3#174, syear#170, cnt#171]
Input [25]: [product_name#90, item_sk#91, store_name#92, store_zip#93, b_street_number#94, b_streen_name#95, b_city#96, b_zip#97, c_street_number#98, c_street_name#99, c_city#100, c_zip#101, syear#102, cnt#103, s1#104, s2#105, s3#106, item_sk#167, store_name#168, store_zip#169, syear#170, cnt#171, s1#172, s2#173, s3#174]

(208) Exchange
Input [21]: [product_name#90, store_name#92, store_zip#93, b_street_number#94, b_streen_name#95, b_city#96, b_zip#97, c_street_number#98, c_street_name#99, c_city#100, c_zip#101, syear#102, cnt#103, s1#104, s2#105, s3#106, s1#172, s2#173, s3#174, syear#170, cnt#171]
Arguments: rangepartitioning(product_name#90 ASC NULLS FIRST, store_name#92 ASC NULLS FIRST, cnt#171 ASC NULLS FIRST, s1#104 ASC NULLS FIRST, s1#172 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [plan_id=32]

(209) Sort [codegen id : 88]
Input [21]: [product_name#90, store_name#92, store_zip#93, b_street_number#94, b_streen_name#95, b_city#96, b_zip#97, c_street_number#98, c_street_name#99, c_city#100, c_zip#101, syear#102, cnt#103, s1#104, s2#105, s3#106, s1#172, s2#173, s3#174, syear#170, cnt#171]
Arguments: [product_name#90 ASC NULLS FIRST, store_name#92 ASC NULLS FIRST, cnt#171 ASC NULLS FIRST, s1#104 ASC NULLS FIRST, s1#172 ASC NULLS FIRST], true, 0

===== Subqueries =====

Subquery:1 Hosting operator id = 3 Hosting Expression = Subquery scalar-subquery#14, [id=#1]
ObjectHashAggregate (216)
+- Exchange (215)
   +- ObjectHashAggregate (214)
      +- * Project (213)
         +- * Filter (212)
            +- * ColumnarToRow (211)
               +- Scan parquet spark_catalog.default.item (210)


(210) Scan parquet spark_catalog.default.item
Output [3]: [i_item_sk#74, i_current_price#75, i_color#76]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_current_price), In(i_color, [burlywood           ,floral              ,indian              ,medium              ,purple              ,spring              ]), 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>

(211) ColumnarToRow [codegen id : 1]
Input [3]: [i_item_sk#74, i_current_price#75, i_color#76]

(212) Filter [codegen id : 1]
Input [3]: [i_item_sk#74, i_current_price#75, i_color#76]
Condition : ((((((isnotnull(i_current_price#75) AND i_color#76 IN (purple              ,burlywood           ,indian              ,spring              ,floral              ,medium              )) AND (i_current_price#75 >= 64.00)) AND (i_current_price#75 <= 74.00)) AND (i_current_price#75 >= 65.00)) AND (i_current_price#75 <= 79.00)) AND isnotnull(i_item_sk#74))

(213) Project [codegen id : 1]
Output [1]: [i_item_sk#74]
Input [3]: [i_item_sk#74, i_current_price#75, i_color#76]

(214) ObjectHashAggregate
Input [1]: [i_item_sk#74]
Keys: []
Functions [1]: [partial_bloom_filter_agg(xxhash64(i_item_sk#74, 42), 1250, 30121, 0, 0)]
Aggregate Attributes [1]: [buf#175]
Results [1]: [buf#176]

(215) Exchange
Input [1]: [buf#176]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=33]

(216) ObjectHashAggregate
Input [1]: [buf#176]
Keys: []
Functions [1]: [bloom_filter_agg(xxhash64(i_item_sk#74, 42), 1250, 30121, 0, 0)]
Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#74, 42), 1250, 30121, 0, 0)#177]
Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#74, 42), 1250, 30121, 0, 0)#177 AS bloomFilter#178]

Subquery:2 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13
BroadcastExchange (220)
+- * Filter (219)
   +- * ColumnarToRow (218)
      +- Scan parquet spark_catalog.default.date_dim (217)


(217) Scan parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#38, d_year#39]
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>

(218) ColumnarToRow [codegen id : 1]
Input [2]: [d_date_sk#38, d_year#39]

(219) Filter [codegen id : 1]
Input [2]: [d_date_sk#38, d_year#39]
Condition : ((isnotnull(d_year#39) AND (d_year#39 = 1999)) AND isnotnull(d_date_sk#38))

(220) BroadcastExchange
Input [2]: [d_date_sk#38, d_year#39]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=34]

Subquery:3 Hosting operator id = 131 Hosting Expression = ReusedSubquery Subquery scalar-subquery#14, [id=#1]

Subquery:4 Hosting operator id = 129 Hosting Expression = ss_sold_date_sk#118 IN dynamicpruning#119
BroadcastExchange (224)
+- * Filter (223)
   +- * ColumnarToRow (222)
      +- Scan parquet spark_catalog.default.date_dim (221)


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

(222) ColumnarToRow [codegen id : 1]
Input [2]: [d_date_sk#123, d_year#124]

(223) Filter [codegen id : 1]
Input [2]: [d_date_sk#123, d_year#124]
Condition : ((isnotnull(d_year#124) AND (d_year#124 = 2000)) AND isnotnull(d_date_sk#123))

(224) BroadcastExchange
Input [2]: [d_date_sk#123, d_year#124]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=35]


