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


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

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

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

(4) BroadcastExchange
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: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[7, int, false] as bigint) & 4294967295))),false), [id=#14]

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

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

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

(8) Project
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]

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

(10) Project [codegen id : 2]
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]

(11) Exchange
Input [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]
Arguments: hashpartitioning(ss_item_sk#1, 5), ENSURE_REQUIREMENTS, [id=#18]

(12) Sort [codegen id : 3]
Input [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]
Arguments: [ss_item_sk#1 ASC NULLS FIRST], false, 0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(32) Sort [codegen id : 9]
Input [1]: [cs_item_sk#19]
Arguments: [cs_item_sk#19 ASC NULLS FIRST], false, 0

(33) SortMergeJoin [codegen id : 25]
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [cs_item_sk#19]
Join condition: None

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

(35) Scan parquet default.date_dim
Output [2]: [d_date_sk#42, d_year#43]
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>

(36) ColumnarToRow [codegen id : 10]
Input [2]: [d_date_sk#42, d_year#43]

(37) Filter [codegen id : 10]
Input [2]: [d_date_sk#42, d_year#43]
Condition : ((isnotnull(d_year#43) AND (d_year#43 = 1999)) AND isnotnull(d_date_sk#42))

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

(39) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [ss_sold_date_sk#12]
Right keys [1]: [d_date_sk#42]
Join condition: None

(40) Project [codegen id : 25]
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#43]
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#42, d_year#43]

(41) Scan parquet default.store
Output [3]: [s_store_sk#45, s_store_name#46, s_zip#47]
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>

(42) ColumnarToRow [codegen id : 11]
Input [3]: [s_store_sk#45, s_store_name#46, s_zip#47]

(43) Filter [codegen id : 11]
Input [3]: [s_store_sk#45, s_store_name#46, s_zip#47]
Condition : ((isnotnull(s_store_sk#45) AND isnotnull(s_store_name#46)) AND isnotnull(s_zip#47))

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

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

(46) Project [codegen id : 25]
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#43, s_store_name#46, s_zip#47]
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#43, s_store_sk#45, s_store_name#46, s_zip#47]

(47) Scan parquet default.customer
Output [6]: [c_customer_sk#49, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, c_first_sales_date_sk#54]
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 : 12]
Input [6]: [c_customer_sk#49, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, c_first_sales_date_sk#54]

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

(50) BroadcastExchange
Input [6]: [c_customer_sk#49, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, c_first_sales_date_sk#54]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#55]

(51) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [ss_customer_sk#2]
Right keys [1]: [c_customer_sk#49]
Join condition: None

(52) Project [codegen id : 25]
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#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, c_first_sales_date_sk#54]
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#43, s_store_name#46, s_zip#47, c_customer_sk#49, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, c_first_sales_date_sk#54]

(53) Scan parquet default.date_dim
Output [2]: [d_date_sk#56, d_year#57]
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>

(54) ColumnarToRow [codegen id : 13]
Input [2]: [d_date_sk#56, d_year#57]

(55) Filter [codegen id : 13]
Input [2]: [d_date_sk#56, d_year#57]
Condition : isnotnull(d_date_sk#56)

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

(57) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_first_sales_date_sk#54]
Right keys [1]: [d_date_sk#56]
Join condition: None

(58) Project [codegen id : 25]
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#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, d_year#57]
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#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, c_first_sales_date_sk#54, d_date_sk#56, d_year#57]

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

(60) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_first_shipto_date_sk#53]
Right keys [1]: [d_date_sk#59]
Join condition: None

(61) Project [codegen id : 25]
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#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60]
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#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, c_first_shipto_date_sk#53, d_year#57, d_date_sk#59, d_year#60]

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

(63) ColumnarToRow [codegen id : 15]
Input [2]: [cd_demo_sk#61, cd_marital_status#62]

(64) Filter [codegen id : 15]
Input [2]: [cd_demo_sk#61, cd_marital_status#62]
Condition : (isnotnull(cd_demo_sk#61) AND isnotnull(cd_marital_status#62))

(65) BroadcastExchange
Input [2]: [cd_demo_sk#61, cd_marital_status#62]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#63]

(66) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [ss_cdemo_sk#3]
Right keys [1]: [cd_demo_sk#61]
Join condition: None

(67) Project [codegen id : 25]
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#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60, cd_marital_status#62]
Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60, cd_demo_sk#61, cd_marital_status#62]

(68) ReusedExchange [Reuses operator id: 65]
Output [2]: [cd_demo_sk#64, cd_marital_status#65]

(69) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_current_cdemo_sk#50]
Right keys [1]: [cd_demo_sk#64]
Join condition: NOT (cd_marital_status#62 = cd_marital_status#65)

(70) Project [codegen id : 25]
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#43, s_store_name#46, s_zip#47, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60]
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#43, s_store_name#46, s_zip#47, c_current_cdemo_sk#50, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60, cd_marital_status#62, cd_demo_sk#64, cd_marital_status#65]

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

(72) ColumnarToRow [codegen id : 17]
Input [1]: [p_promo_sk#66]

(73) Filter [codegen id : 17]
Input [1]: [p_promo_sk#66]
Condition : isnotnull(p_promo_sk#66)

(74) BroadcastExchange
Input [1]: [p_promo_sk#66]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#67]

(75) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [ss_promo_sk#7]
Right keys [1]: [p_promo_sk#66]
Join condition: None

(76) Project [codegen id : 25]
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#43, s_store_name#46, s_zip#47, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60]
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#43, s_store_name#46, s_zip#47, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60, p_promo_sk#66]

(77) Scan parquet default.household_demographics
Output [2]: [hd_demo_sk#68, hd_income_band_sk#69]
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>

(78) ColumnarToRow [codegen id : 18]
Input [2]: [hd_demo_sk#68, hd_income_band_sk#69]

(79) Filter [codegen id : 18]
Input [2]: [hd_demo_sk#68, hd_income_band_sk#69]
Condition : (isnotnull(hd_demo_sk#68) AND isnotnull(hd_income_band_sk#69))

(80) BroadcastExchange
Input [2]: [hd_demo_sk#68, hd_income_band_sk#69]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#70]

(81) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [ss_hdemo_sk#4]
Right keys [1]: [hd_demo_sk#68]
Join condition: None

(82) Project [codegen id : 25]
Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60, hd_income_band_sk#69]
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#43, s_store_name#46, s_zip#47, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60, hd_demo_sk#68, hd_income_band_sk#69]

(83) ReusedExchange [Reuses operator id: 80]
Output [2]: [hd_demo_sk#71, hd_income_band_sk#72]

(84) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_current_hdemo_sk#51]
Right keys [1]: [hd_demo_sk#71]
Join condition: None

(85) Project [codegen id : 25]
Output [13]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, c_current_addr_sk#52, d_year#57, d_year#60, hd_income_band_sk#69, hd_income_band_sk#72]
Input [15]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, c_current_hdemo_sk#51, c_current_addr_sk#52, d_year#57, d_year#60, hd_income_band_sk#69, hd_demo_sk#71, hd_income_band_sk#72]

(86) Scan parquet default.customer_address
Output [5]: [ca_address_sk#73, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77]
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>

(87) ColumnarToRow [codegen id : 20]
Input [5]: [ca_address_sk#73, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77]

(88) Filter [codegen id : 20]
Input [5]: [ca_address_sk#73, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77]
Condition : isnotnull(ca_address_sk#73)

(89) BroadcastExchange
Input [5]: [ca_address_sk#73, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#78]

(90) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [ss_addr_sk#5]
Right keys [1]: [ca_address_sk#73]
Join condition: None

(91) Project [codegen id : 25]
Output [16]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, c_current_addr_sk#52, d_year#57, d_year#60, hd_income_band_sk#69, hd_income_band_sk#72, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77]
Input [18]: [ss_item_sk#1, ss_addr_sk#5, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, c_current_addr_sk#52, d_year#57, d_year#60, hd_income_band_sk#69, hd_income_band_sk#72, ca_address_sk#73, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77]

(92) ReusedExchange [Reuses operator id: 89]
Output [5]: [ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83]

(93) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_current_addr_sk#52]
Right keys [1]: [ca_address_sk#79]
Join condition: None

(94) Project [codegen id : 25]
Output [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, d_year#57, d_year#60, hd_income_band_sk#69, hd_income_band_sk#72, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83]
Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, c_current_addr_sk#52, d_year#57, d_year#60, hd_income_band_sk#69, hd_income_band_sk#72, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_address_sk#79, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83]

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

(96) ColumnarToRow [codegen id : 22]
Input [1]: [ib_income_band_sk#84]

(97) Filter [codegen id : 22]
Input [1]: [ib_income_band_sk#84]
Condition : isnotnull(ib_income_band_sk#84)

(98) BroadcastExchange
Input [1]: [ib_income_band_sk#84]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#85]

(99) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [hd_income_band_sk#69]
Right keys [1]: [ib_income_band_sk#84]
Join condition: None

(100) Project [codegen id : 25]
Output [18]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, d_year#57, d_year#60, hd_income_band_sk#72, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83]
Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, d_year#57, d_year#60, hd_income_band_sk#69, hd_income_band_sk#72, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ib_income_band_sk#84]

(101) ReusedExchange [Reuses operator id: 98]
Output [1]: [ib_income_band_sk#86]

(102) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [hd_income_band_sk#72]
Right keys [1]: [ib_income_band_sk#86]
Join condition: None

(103) Project [codegen id : 25]
Output [17]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, d_year#57, d_year#60, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, d_year#57, d_year#60, hd_income_band_sk#72, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, ib_income_band_sk#86]

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

(105) ColumnarToRow [codegen id : 24]
Input [4]: [i_item_sk#87, i_current_price#88, i_color#89, i_product_name#90]

(106) Filter [codegen id : 24]
Input [4]: [i_item_sk#87, i_current_price#88, i_color#89, i_product_name#90]
Condition : ((((((isnotnull(i_current_price#88) AND i_color#89 IN (purple              ,burlywood           ,indian              ,spring              ,floral              ,medium              )) AND (i_current_price#88 >= 64.00)) AND (i_current_price#88 <= 74.00)) AND (i_current_price#88 >= 65.00)) AND (i_current_price#88 <= 79.00)) AND isnotnull(i_item_sk#87))

(107) Project [codegen id : 24]
Output [2]: [i_item_sk#87, i_product_name#90]
Input [4]: [i_item_sk#87, i_current_price#88, i_color#89, i_product_name#90]

(108) BroadcastExchange
Input [2]: [i_item_sk#87, i_product_name#90]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [id=#91]

(109) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [i_item_sk#87]
Join condition: None

(110) Project [codegen id : 25]
Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, d_year#57, d_year#60, s_store_name#46, s_zip#47, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, i_item_sk#87, i_product_name#90]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#46, s_zip#47, d_year#57, d_year#60, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, i_item_sk#87, i_product_name#90]

(111) HashAggregate [codegen id : 25]
Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, d_year#57, d_year#60, s_store_name#46, s_zip#47, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, i_item_sk#87, i_product_name#90]
Keys [15]: [i_product_name#90, i_item_sk#87, s_store_name#46, s_zip#47, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, d_year#43, d_year#57, d_year#60]
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#92, sum#93, sum#94, sum#95]
Results [19]: [i_product_name#90, i_item_sk#87, s_store_name#46, s_zip#47, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, d_year#43, d_year#57, d_year#60, count#96, sum#97, sum#98, sum#99]

(112) HashAggregate [codegen id : 25]
Input [19]: [i_product_name#90, i_item_sk#87, s_store_name#46, s_zip#47, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, d_year#43, d_year#57, d_year#60, count#96, sum#97, sum#98, sum#99]
Keys [15]: [i_product_name#90, i_item_sk#87, s_store_name#46, s_zip#47, ca_street_number#74, ca_street_name#75, ca_city#76, ca_zip#77, ca_street_number#80, ca_street_name#81, ca_city#82, ca_zip#83, d_year#43, d_year#57, d_year#60]
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)#100, sum(UnscaledValue(ss_wholesale_cost#9))#101, sum(UnscaledValue(ss_list_price#10))#102, sum(UnscaledValue(ss_coupon_amt#11))#103]
Results [17]: [i_product_name#90 AS product_name#104, i_item_sk#87 AS item_sk#105, s_store_name#46 AS store_name#106, s_zip#47 AS store_zip#107, ca_street_number#74 AS b_street_number#108, ca_street_name#75 AS b_streen_name#109, ca_city#76 AS b_city#110, ca_zip#77 AS b_zip#111, ca_street_number#80 AS c_street_number#112, ca_street_name#81 AS c_street_name#113, ca_city#82 AS c_city#114, ca_zip#83 AS c_zip#115, d_year#43 AS syear#116, count(1)#100 AS cnt#117, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#9))#101,17,2) AS s1#118, MakeDecimal(sum(UnscaledValue(ss_list_price#10))#102,17,2) AS s2#119, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#11))#103,17,2) AS s3#120]

(113) Exchange
Input [17]: [product_name#104, item_sk#105, store_name#106, store_zip#107, b_street_number#108, b_streen_name#109, b_city#110, b_zip#111, c_street_number#112, c_street_name#113, c_city#114, c_zip#115, syear#116, cnt#117, s1#118, s2#119, s3#120]
Arguments: hashpartitioning(item_sk#105, store_name#106, store_zip#107, 5), ENSURE_REQUIREMENTS, [id=#121]

(114) Sort [codegen id : 26]
Input [17]: [product_name#104, item_sk#105, store_name#106, store_zip#107, b_street_number#108, b_streen_name#109, b_city#110, b_zip#111, c_street_number#112, c_street_name#113, c_city#114, c_zip#115, syear#116, cnt#117, s1#118, s2#119, s3#120]
Arguments: [item_sk#105 ASC NULLS FIRST, store_name#106 ASC NULLS FIRST, store_zip#107 ASC NULLS FIRST], false, 0

(115) Scan parquet default.store_sales
Output [12]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_ticket_number#129, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#133), dynamicpruningexpression(ss_sold_date_sk#133 IN dynamicpruning#134)]
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)>

(116) ColumnarToRow [codegen id : 27]
Input [12]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_ticket_number#129, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]

(117) Filter [codegen id : 27]
Input [12]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_ticket_number#129, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]
Condition : (((((((isnotnull(ss_item_sk#122) AND isnotnull(ss_ticket_number#129)) AND isnotnull(ss_store_sk#127)) AND isnotnull(ss_customer_sk#123)) AND isnotnull(ss_cdemo_sk#124)) AND isnotnull(ss_promo_sk#128)) AND isnotnull(ss_hdemo_sk#125)) AND isnotnull(ss_addr_sk#126))

(118) BroadcastExchange
Input [12]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_ticket_number#129, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]
Arguments: HashedRelationBroadcastMode(List((shiftleft(cast(input[0, int, false] as bigint), 32) | (cast(input[7, int, false] as bigint) & 4294967295))),false), [id=#135]

(119) Scan parquet default.store_returns
Output [3]: [sr_item_sk#136, sr_ticket_number#137, sr_returned_date_sk#138]
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>

(120) ColumnarToRow
Input [3]: [sr_item_sk#136, sr_ticket_number#137, sr_returned_date_sk#138]

(121) Filter
Input [3]: [sr_item_sk#136, sr_ticket_number#137, sr_returned_date_sk#138]
Condition : (isnotnull(sr_item_sk#136) AND isnotnull(sr_ticket_number#137))

(122) Project
Output [2]: [sr_item_sk#136, sr_ticket_number#137]
Input [3]: [sr_item_sk#136, sr_ticket_number#137, sr_returned_date_sk#138]

(123) BroadcastHashJoin [codegen id : 28]
Left keys [2]: [ss_item_sk#122, ss_ticket_number#129]
Right keys [2]: [sr_item_sk#136, sr_ticket_number#137]
Join condition: None

(124) Project [codegen id : 28]
Output [11]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]
Input [14]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_ticket_number#129, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133, sr_item_sk#136, sr_ticket_number#137]

(125) Exchange
Input [11]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]
Arguments: hashpartitioning(ss_item_sk#122, 5), ENSURE_REQUIREMENTS, [id=#139]

(126) Sort [codegen id : 29]
Input [11]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]
Arguments: [ss_item_sk#122 ASC NULLS FIRST], false, 0

(127) ReusedExchange [Reuses operator id: 28]
Output [4]: [cs_item_sk#140, sum#141, sum#142, isEmpty#143]

(128) HashAggregate [codegen id : 35]
Input [4]: [cs_item_sk#140, sum#141, sum#142, isEmpty#143]
Keys [1]: [cs_item_sk#140]
Functions [2]: [sum(UnscaledValue(cs_ext_list_price#144)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#145 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#146 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#147 as decimal(9,2)))), DecimalType(9,2), true))]
Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#144))#148, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#145 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#146 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#147 as decimal(9,2)))), DecimalType(9,2), true))#149]
Results [3]: [cs_item_sk#140, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#144))#148,17,2) AS sum(cs_ext_list_price#144)#150, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#145 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#146 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#147 as decimal(9,2)))), DecimalType(9,2), true))#149 AS sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#145 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#146 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#147 as decimal(9,2)))), DecimalType(9,2), true))#151]

(129) Filter [codegen id : 35]
Input [3]: [cs_item_sk#140, sum(cs_ext_list_price#144)#150, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#145 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#146 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#147 as decimal(9,2)))), DecimalType(9,2), true))#151]
Condition : (isnotnull(sum(cs_ext_list_price#144)#150) AND (cast(sum(cs_ext_list_price#144)#150 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#145 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#146 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#147 as decimal(9,2)))), DecimalType(9,2), true))#151)), DecimalType(21,2), true)))

(130) Project [codegen id : 35]
Output [1]: [cs_item_sk#140]
Input [3]: [cs_item_sk#140, sum(cs_ext_list_price#144)#150, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#145 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#146 as decimal(8,2)))), DecimalType(8,2), true) as decimal(9,2))) + promote_precision(cast(cr_store_credit#147 as decimal(9,2)))), DecimalType(9,2), true))#151]

(131) Sort [codegen id : 35]
Input [1]: [cs_item_sk#140]
Arguments: [cs_item_sk#140 ASC NULLS FIRST], false, 0

(132) SortMergeJoin [codegen id : 51]
Left keys [1]: [ss_item_sk#122]
Right keys [1]: [cs_item_sk#140]
Join condition: None

(133) Project [codegen id : 51]
Output [11]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133]
Input [12]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133, cs_item_sk#140]

(134) Scan parquet default.date_dim
Output [2]: [d_date_sk#152, d_year#153]
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>

(135) ColumnarToRow [codegen id : 36]
Input [2]: [d_date_sk#152, d_year#153]

(136) Filter [codegen id : 36]
Input [2]: [d_date_sk#152, d_year#153]
Condition : ((isnotnull(d_year#153) AND (d_year#153 = 2000)) AND isnotnull(d_date_sk#152))

(137) BroadcastExchange
Input [2]: [d_date_sk#152, d_year#153]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#154]

(138) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_sold_date_sk#133]
Right keys [1]: [d_date_sk#152]
Join condition: None

(139) Project [codegen id : 51]
Output [11]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153]
Input [13]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, ss_sold_date_sk#133, d_date_sk#152, d_year#153]

(140) ReusedExchange [Reuses operator id: 44]
Output [3]: [s_store_sk#155, s_store_name#156, s_zip#157]

(141) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_store_sk#127]
Right keys [1]: [s_store_sk#155]
Join condition: None

(142) Project [codegen id : 51]
Output [12]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157]
Input [14]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_store_sk#127, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_sk#155, s_store_name#156, s_zip#157]

(143) ReusedExchange [Reuses operator id: 50]
Output [6]: [c_customer_sk#158, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, c_first_shipto_date_sk#162, c_first_sales_date_sk#163]

(144) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_customer_sk#123]
Right keys [1]: [c_customer_sk#158]
Join condition: None

(145) Project [codegen id : 51]
Output [16]: [ss_item_sk#122, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, c_first_shipto_date_sk#162, c_first_sales_date_sk#163]
Input [18]: [ss_item_sk#122, ss_customer_sk#123, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_customer_sk#158, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, c_first_shipto_date_sk#162, c_first_sales_date_sk#163]

(146) ReusedExchange [Reuses operator id: 56]
Output [2]: [d_date_sk#164, d_year#165]

(147) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_first_sales_date_sk#163]
Right keys [1]: [d_date_sk#164]
Join condition: None

(148) Project [codegen id : 51]
Output [16]: [ss_item_sk#122, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, c_first_shipto_date_sk#162, d_year#165]
Input [18]: [ss_item_sk#122, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, c_first_shipto_date_sk#162, c_first_sales_date_sk#163, d_date_sk#164, d_year#165]

(149) ReusedExchange [Reuses operator id: 56]
Output [2]: [d_date_sk#166, d_year#167]

(150) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_first_shipto_date_sk#162]
Right keys [1]: [d_date_sk#166]
Join condition: None

(151) Project [codegen id : 51]
Output [16]: [ss_item_sk#122, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167]
Input [18]: [ss_item_sk#122, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, c_first_shipto_date_sk#162, d_year#165, d_date_sk#166, d_year#167]

(152) ReusedExchange [Reuses operator id: 65]
Output [2]: [cd_demo_sk#168, cd_marital_status#169]

(153) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_cdemo_sk#124]
Right keys [1]: [cd_demo_sk#168]
Join condition: None

(154) Project [codegen id : 51]
Output [16]: [ss_item_sk#122, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167, cd_marital_status#169]
Input [18]: [ss_item_sk#122, ss_cdemo_sk#124, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167, cd_demo_sk#168, cd_marital_status#169]

(155) ReusedExchange [Reuses operator id: 65]
Output [2]: [cd_demo_sk#170, cd_marital_status#171]

(156) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_current_cdemo_sk#159]
Right keys [1]: [cd_demo_sk#170]
Join condition: NOT (cd_marital_status#169 = cd_marital_status#171)

(157) Project [codegen id : 51]
Output [14]: [ss_item_sk#122, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167]
Input [18]: [ss_item_sk#122, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_cdemo_sk#159, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167, cd_marital_status#169, cd_demo_sk#170, cd_marital_status#171]

(158) ReusedExchange [Reuses operator id: 74]
Output [1]: [p_promo_sk#172]

(159) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_promo_sk#128]
Right keys [1]: [p_promo_sk#172]
Join condition: None

(160) Project [codegen id : 51]
Output [13]: [ss_item_sk#122, ss_hdemo_sk#125, ss_addr_sk#126, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167]
Input [15]: [ss_item_sk#122, ss_hdemo_sk#125, ss_addr_sk#126, ss_promo_sk#128, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167, p_promo_sk#172]

(161) ReusedExchange [Reuses operator id: 80]
Output [2]: [hd_demo_sk#173, hd_income_band_sk#174]

(162) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_hdemo_sk#125]
Right keys [1]: [hd_demo_sk#173]
Join condition: None

(163) Project [codegen id : 51]
Output [13]: [ss_item_sk#122, ss_addr_sk#126, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167, hd_income_band_sk#174]
Input [15]: [ss_item_sk#122, ss_hdemo_sk#125, ss_addr_sk#126, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167, hd_demo_sk#173, hd_income_band_sk#174]

(164) ReusedExchange [Reuses operator id: 80]
Output [2]: [hd_demo_sk#175, hd_income_band_sk#176]

(165) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_current_hdemo_sk#160]
Right keys [1]: [hd_demo_sk#175]
Join condition: None

(166) Project [codegen id : 51]
Output [13]: [ss_item_sk#122, ss_addr_sk#126, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_addr_sk#161, d_year#165, d_year#167, hd_income_band_sk#174, hd_income_band_sk#176]
Input [15]: [ss_item_sk#122, ss_addr_sk#126, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_hdemo_sk#160, c_current_addr_sk#161, d_year#165, d_year#167, hd_income_band_sk#174, hd_demo_sk#175, hd_income_band_sk#176]

(167) ReusedExchange [Reuses operator id: 89]
Output [5]: [ca_address_sk#177, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181]

(168) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_addr_sk#126]
Right keys [1]: [ca_address_sk#177]
Join condition: None

(169) Project [codegen id : 51]
Output [16]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_addr_sk#161, d_year#165, d_year#167, hd_income_band_sk#174, hd_income_band_sk#176, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181]
Input [18]: [ss_item_sk#122, ss_addr_sk#126, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_addr_sk#161, d_year#165, d_year#167, hd_income_band_sk#174, hd_income_band_sk#176, ca_address_sk#177, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181]

(170) ReusedExchange [Reuses operator id: 89]
Output [5]: [ca_address_sk#182, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186]

(171) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_current_addr_sk#161]
Right keys [1]: [ca_address_sk#182]
Join condition: None

(172) Project [codegen id : 51]
Output [19]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, d_year#165, d_year#167, hd_income_band_sk#174, hd_income_band_sk#176, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186]
Input [21]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, c_current_addr_sk#161, d_year#165, d_year#167, hd_income_band_sk#174, hd_income_band_sk#176, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_address_sk#182, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186]

(173) ReusedExchange [Reuses operator id: 98]
Output [1]: [ib_income_band_sk#187]

(174) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [hd_income_band_sk#174]
Right keys [1]: [ib_income_band_sk#187]
Join condition: None

(175) Project [codegen id : 51]
Output [18]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, d_year#165, d_year#167, hd_income_band_sk#176, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186]
Input [20]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, d_year#165, d_year#167, hd_income_band_sk#174, hd_income_band_sk#176, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, ib_income_band_sk#187]

(176) ReusedExchange [Reuses operator id: 98]
Output [1]: [ib_income_band_sk#188]

(177) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [hd_income_band_sk#176]
Right keys [1]: [ib_income_band_sk#188]
Join condition: None

(178) Project [codegen id : 51]
Output [17]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, d_year#165, d_year#167, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186]
Input [19]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, d_year#165, d_year#167, hd_income_band_sk#176, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, ib_income_band_sk#188]

(179) ReusedExchange [Reuses operator id: 108]
Output [2]: [i_item_sk#189, i_product_name#190]

(180) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_item_sk#122]
Right keys [1]: [i_item_sk#189]
Join condition: None

(181) Project [codegen id : 51]
Output [18]: [ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, d_year#165, d_year#167, s_store_name#156, s_zip#157, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, i_item_sk#189, i_product_name#190]
Input [19]: [ss_item_sk#122, ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, s_store_name#156, s_zip#157, d_year#165, d_year#167, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, i_item_sk#189, i_product_name#190]

(182) HashAggregate [codegen id : 51]
Input [18]: [ss_wholesale_cost#130, ss_list_price#131, ss_coupon_amt#132, d_year#153, d_year#165, d_year#167, s_store_name#156, s_zip#157, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, i_item_sk#189, i_product_name#190]
Keys [15]: [i_product_name#190, i_item_sk#189, s_store_name#156, s_zip#157, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, d_year#153, d_year#165, d_year#167]
Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#130)), partial_sum(UnscaledValue(ss_list_price#131)), partial_sum(UnscaledValue(ss_coupon_amt#132))]
Aggregate Attributes [4]: [count#191, sum#192, sum#193, sum#194]
Results [19]: [i_product_name#190, i_item_sk#189, s_store_name#156, s_zip#157, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, d_year#153, d_year#165, d_year#167, count#195, sum#196, sum#197, sum#198]

(183) HashAggregate [codegen id : 51]
Input [19]: [i_product_name#190, i_item_sk#189, s_store_name#156, s_zip#157, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, d_year#153, d_year#165, d_year#167, count#195, sum#196, sum#197, sum#198]
Keys [15]: [i_product_name#190, i_item_sk#189, s_store_name#156, s_zip#157, ca_street_number#178, ca_street_name#179, ca_city#180, ca_zip#181, ca_street_number#183, ca_street_name#184, ca_city#185, ca_zip#186, d_year#153, d_year#165, d_year#167]
Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#130)), sum(UnscaledValue(ss_list_price#131)), sum(UnscaledValue(ss_coupon_amt#132))]
Aggregate Attributes [4]: [count(1)#199, sum(UnscaledValue(ss_wholesale_cost#130))#200, sum(UnscaledValue(ss_list_price#131))#201, sum(UnscaledValue(ss_coupon_amt#132))#202]
Results [8]: [i_item_sk#189 AS item_sk#203, s_store_name#156 AS store_name#204, s_zip#157 AS store_zip#205, d_year#153 AS syear#206, count(1)#199 AS cnt#207, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#130))#200,17,2) AS s1#208, MakeDecimal(sum(UnscaledValue(ss_list_price#131))#201,17,2) AS s2#209, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#132))#202,17,2) AS s3#210]

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

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

(186) SortMergeJoin [codegen id : 53]
Left keys [3]: [item_sk#105, store_name#106, store_zip#107]
Right keys [3]: [item_sk#203, store_name#204, store_zip#205]
Join condition: (cnt#207 <= cnt#117)

(187) Project [codegen id : 53]
Output [21]: [product_name#104, store_name#106, store_zip#107, b_street_number#108, b_streen_name#109, b_city#110, b_zip#111, c_street_number#112, c_street_name#113, c_city#114, c_zip#115, syear#116, cnt#117, s1#118, s2#119, s3#120, s1#208, s2#209, s3#210, syear#206, cnt#207]
Input [25]: [product_name#104, item_sk#105, store_name#106, store_zip#107, b_street_number#108, b_streen_name#109, b_city#110, b_zip#111, c_street_number#112, c_street_name#113, c_city#114, c_zip#115, syear#116, cnt#117, s1#118, s2#119, s3#120, item_sk#203, store_name#204, store_zip#205, syear#206, cnt#207, s1#208, s2#209, s3#210]

(188) Exchange
Input [21]: [product_name#104, store_name#106, store_zip#107, b_street_number#108, b_streen_name#109, b_city#110, b_zip#111, c_street_number#112, c_street_name#113, c_city#114, c_zip#115, syear#116, cnt#117, s1#118, s2#119, s3#120, s1#208, s2#209, s3#210, syear#206, cnt#207]
Arguments: rangepartitioning(product_name#104 ASC NULLS FIRST, store_name#106 ASC NULLS FIRST, cnt#207 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#212]

(189) Sort [codegen id : 54]
Input [21]: [product_name#104, store_name#106, store_zip#107, b_street_number#108, b_streen_name#109, b_city#110, b_zip#111, c_street_number#112, c_street_name#113, c_city#114, c_zip#115, syear#116, cnt#117, s1#118, s2#119, s3#120, s1#208, s2#209, s3#210, syear#206, cnt#207]
Arguments: [product_name#104 ASC NULLS FIRST, store_name#106 ASC NULLS FIRST, cnt#207 ASC NULLS FIRST], true, 0

===== Subqueries =====

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


(190) ReusedExchange [Reuses operator id: 38]
Output [2]: [d_date_sk#42, d_year#43]

Subquery:2 Hosting operator id = 115 Hosting Expression = ss_sold_date_sk#133 IN dynamicpruning#134
ReusedExchange (191)


(191) ReusedExchange [Reuses operator id: 137]
Output [2]: [d_date_sk#152, d_year#153]


