== Physical Plan ==
* Sort (183)
+- Exchange (182)
   +- * Project (181)
      +- * SortMergeJoin Inner (180)
         :- * Sort (111)
         :  +- Exchange (110)
         :     +- * HashAggregate (109)
         :        +- * HashAggregate (108)
         :           +- * Project (107)
         :              +- * BroadcastHashJoin Inner BuildRight (106)
         :                 :- * Project (100)
         :                 :  +- * BroadcastHashJoin Inner BuildRight (99)
         :                 :     :- * Project (97)
         :                 :     :  +- * BroadcastHashJoin Inner BuildRight (96)
         :                 :     :     :- * Project (91)
         :                 :     :     :  +- * BroadcastHashJoin Inner BuildRight (90)
         :                 :     :     :     :- * Project (88)
         :                 :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (87)
         :                 :     :     :     :     :- * Project (82)
         :                 :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (81)
         :                 :     :     :     :     :     :- * Project (79)
         :                 :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (78)
         :                 :     :     :     :     :     :     :- * Project (73)
         :                 :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (72)
         :                 :     :     :     :     :     :     :     :- * Project (67)
         :                 :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (66)
         :                 :     :     :     :     :     :     :     :     :- * Project (64)
         :                 :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (63)
         :                 :     :     :     :     :     :     :     :     :     :- * Project (58)
         :                 :     :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (57)
         :                 :     :     :     :     :     :     :     :     :     :     :- * Project (55)
         :                 :     :     :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (54)
         :                 :     :     :     :     :     :     :     :     :     :     :     :- * Project (49)
         :                 :     :     :     :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (48)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :- * Project (43)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (42)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :     :- * Project (37)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (36)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :     :     :- * 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)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :     :     +- ReusedExchange (35)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :     +- BroadcastExchange (41)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :        +- * Filter (40)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :           +- * ColumnarToRow (39)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     :              +- Scan parquet default.store (38)
         :                 :     :     :     :     :     :     :     :     :     :     :     :     +- BroadcastExchange (47)
         :                 :     :     :     :     :     :     :     :     :     :     :     :        +- * Filter (46)
         :                 :     :     :     :     :     :     :     :     :     :     :     :           +- * ColumnarToRow (45)
         :                 :     :     :     :     :     :     :     :     :     :     :     :              +- Scan parquet default.customer (44)
         :                 :     :     :     :     :     :     :     :     :     :     :     +- BroadcastExchange (53)
         :                 :     :     :     :     :     :     :     :     :     :     :        +- * Filter (52)
         :                 :     :     :     :     :     :     :     :     :     :     :           +- * ColumnarToRow (51)
         :                 :     :     :     :     :     :     :     :     :     :     :              +- Scan parquet default.date_dim (50)
         :                 :     :     :     :     :     :     :     :     :     :     +- ReusedExchange (56)
         :                 :     :     :     :     :     :     :     :     :     +- BroadcastExchange (62)
         :                 :     :     :     :     :     :     :     :     :        +- * Filter (61)
         :                 :     :     :     :     :     :     :     :     :           +- * ColumnarToRow (60)
         :                 :     :     :     :     :     :     :     :     :              +- Scan parquet default.customer_demographics (59)
         :                 :     :     :     :     :     :     :     :     +- ReusedExchange (65)
         :                 :     :     :     :     :     :     :     +- BroadcastExchange (71)
         :                 :     :     :     :     :     :     :        +- * Filter (70)
         :                 :     :     :     :     :     :     :           +- * ColumnarToRow (69)
         :                 :     :     :     :     :     :     :              +- Scan parquet default.promotion (68)
         :                 :     :     :     :     :     :     +- BroadcastExchange (77)
         :                 :     :     :     :     :     :        +- * Filter (76)
         :                 :     :     :     :     :     :           +- * ColumnarToRow (75)
         :                 :     :     :     :     :     :              +- Scan parquet default.household_demographics (74)
         :                 :     :     :     :     :     +- ReusedExchange (80)
         :                 :     :     :     :     +- BroadcastExchange (86)
         :                 :     :     :     :        +- * Filter (85)
         :                 :     :     :     :           +- * ColumnarToRow (84)
         :                 :     :     :     :              +- Scan parquet default.customer_address (83)
         :                 :     :     :     +- ReusedExchange (89)
         :                 :     :     +- BroadcastExchange (95)
         :                 :     :        +- * Filter (94)
         :                 :     :           +- * ColumnarToRow (93)
         :                 :     :              +- Scan parquet default.income_band (92)
         :                 :     +- ReusedExchange (98)
         :                 +- BroadcastExchange (105)
         :                    +- * Project (104)
         :                       +- * Filter (103)
         :                          +- * ColumnarToRow (102)
         :                             +- Scan parquet default.item (101)
         +- * Sort (179)
            +- Exchange (178)
               +- * HashAggregate (177)
                  +- * HashAggregate (176)
                     +- * 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 (136)
                           :     :     :     :     :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (135)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :- * Project (133)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :  +- * BroadcastHashJoin Inner BuildRight (132)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :- * Project (130)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :  +- * SortMergeJoin Inner (129)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :- * Sort (123)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :  +- Exchange (122)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     +- * Project (121)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :        +- * BroadcastHashJoin Inner BuildLeft (120)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :           :- BroadcastExchange (115)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :           :  +- * Filter (114)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :           :     +- * ColumnarToRow (113)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :           :        +- Scan parquet default.store_sales (112)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :           +- * Project (119)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :              +- * Filter (118)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :                 +- * ColumnarToRow (117)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     :                    +- Scan parquet default.store_returns (116)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :     +- * Sort (128)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :        +- * Project (127)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :           +- * Filter (126)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :              +- * HashAggregate (125)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     :                 +- ReusedExchange (124)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     :     +- ReusedExchange (131)
                           :     :     :     :     :     :     :     :     :     :     :     :     :     +- ReusedExchange (134)
                           :     :     :     :     :     :     :     :     :     :     :     :     +- ReusedExchange (137)
                           :     :     :     :     :     :     :     :     :     :     :     +- ReusedExchange (140)
                           :     :     :     :     :     :     :     :     :     :     +- ReusedExchange (143)
                           :     :     :     :     :     :     :     :     :     +- ReusedExchange (146)
                           :     :     :     :     :     :     :     :     +- ReusedExchange (149)
                           :     :     :     :     :     :     :     +- ReusedExchange (152)
                           :     :     :     :     :     :     +- ReusedExchange (155)
                           :     :     :     :     :     +- ReusedExchange (158)
                           :     :     :     :     +- ReusedExchange (161)
                           :     :     :     +- ReusedExchange (164)
                           :     :     +- ReusedExchange (167)
                           :     +- ReusedExchange (170)
                           +- ReusedExchange (173)


(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)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))]
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)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))]
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)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))#39]
Results [3]: [cs_item_sk#19, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#21))#38,17,2) AS sale#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)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#28 as decimal(9,2)))), DecimalType(9,2)))#39 AS refund#41]

(30) Filter [codegen id : 9]
Input [3]: [cs_item_sk#19, sale#40, refund#41]
Condition : (isnotnull(sale#40) AND (cast(sale#40 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#41)), DecimalType(21,2))))

(31) Project [codegen id : 9]
Output [1]: [cs_item_sk#19]
Input [3]: [cs_item_sk#19, sale#40, refund#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) ReusedExchange [Reuses operator id: 187]
Output [2]: [d_date_sk#42, d_year#43]

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

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

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

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

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

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

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

(43) 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#45, s_zip#46]
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#44, s_store_name#45, s_zip#46]

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

(45) ColumnarToRow [codegen id : 12]
Input [6]: [c_customer_sk#48, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53]

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

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

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

(49) 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#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53]
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#45, s_zip#46, c_customer_sk#48, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53]

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

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

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

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

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

(55) 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#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, d_year#56]
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#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, c_first_sales_date_sk#53, d_date_sk#55, d_year#56]

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

(57) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_first_shipto_date_sk#52]
Right keys [1]: [d_date_sk#58]
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#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59]
Input [18]: [ss_item_sk#1, ss_cdemo_sk#3, ss_hdemo_sk#4, ss_addr_sk#5, ss_promo_sk#7, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, c_first_shipto_date_sk#52, d_year#56, d_date_sk#58, d_year#59]

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

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

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

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

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

(64) 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#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, cd_marital_status#61]
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#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, cd_demo_sk#60, cd_marital_status#61]

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

(66) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_current_cdemo_sk#49]
Right keys [1]: [cd_demo_sk#63]
Join condition: NOT (cd_marital_status#61 = cd_marital_status#64)

(67) 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#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59]
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#45, s_zip#46, c_current_cdemo_sk#49, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, cd_marital_status#61, cd_demo_sk#63, cd_marital_status#64]

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

(69) ColumnarToRow [codegen id : 17]
Input [1]: [p_promo_sk#65]

(70) Filter [codegen id : 17]
Input [1]: [p_promo_sk#65]
Condition : isnotnull(p_promo_sk#65)

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

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

(73) 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#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59]
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#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, p_promo_sk#65]

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

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

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

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

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

(79) 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#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68]
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#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, hd_demo_sk#67, hd_income_band_sk#68]

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

(81) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_current_hdemo_sk#50]
Right keys [1]: [hd_demo_sk#70]
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#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71]
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#45, s_zip#46, c_current_hdemo_sk#50, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_demo_sk#70, hd_income_band_sk#71]

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

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

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

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

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

(88) 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#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76]
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#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_address_sk#72, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76]

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

(90) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [c_current_addr_sk#51]
Right keys [1]: [ca_address_sk#78]
Join condition: None

(91) 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#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Input [21]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, c_current_addr_sk#51, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_address_sk#78, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]

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

(93) ColumnarToRow [codegen id : 22]
Input [1]: [ib_income_band_sk#83]

(94) Filter [codegen id : 22]
Input [1]: [ib_income_band_sk#83]
Condition : isnotnull(ib_income_band_sk#83)

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

(96) BroadcastHashJoin [codegen id : 25]
Left keys [1]: [hd_income_band_sk#68]
Right keys [1]: [ib_income_band_sk#83]
Join condition: None

(97) 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#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Input [20]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#68, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ib_income_band_sk#83]

(98) ReusedExchange [Reuses operator id: 95]
Output [1]: [ib_income_band_sk#85]

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

(100) 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#45, s_zip#46, d_year#56, d_year#59, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, hd_income_band_sk#71, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, ib_income_band_sk#85]

(101) Scan parquet default.item
Output [4]: [i_item_sk#86, i_current_price#87, i_color#88, i_product_name#89]
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>

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

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

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

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

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

(107) Project [codegen id : 25]
Output [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, d_year#56, d_year#59, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, i_item_sk#86, i_product_name#89]
Input [19]: [ss_item_sk#1, ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, s_store_name#45, s_zip#46, d_year#56, d_year#59, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, i_item_sk#86, i_product_name#89]

(108) HashAggregate [codegen id : 25]
Input [18]: [ss_wholesale_cost#9, ss_list_price#10, ss_coupon_amt#11, d_year#43, d_year#56, d_year#59, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, i_item_sk#86, i_product_name#89]
Keys [15]: [i_product_name#89, i_item_sk#86, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, d_year#43, d_year#56, d_year#59]
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#91, sum#92, sum#93, sum#94]
Results [19]: [i_product_name#89, i_item_sk#86, s_store_name#45, s_zip#46, ca_street_number#73, ca_street_name#74, ca_city#75, ca_zip#76, ca_street_number#79, ca_street_name#80, ca_city#81, ca_zip#82, d_year#43, d_year#56, d_year#59, count#95, sum#96, sum#97, sum#98]

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

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

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

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

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

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

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

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

(117) ColumnarToRow
Input [3]: [sr_item_sk#135, sr_ticket_number#136, sr_returned_date_sk#137]

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

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

(120) BroadcastHashJoin [codegen id : 28]
Left keys [2]: [ss_item_sk#121, ss_ticket_number#128]
Right keys [2]: [sr_item_sk#135, sr_ticket_number#136]
Join condition: None

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

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

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

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

(125) HashAggregate [codegen id : 35]
Input [4]: [cs_item_sk#139, sum#140, sum#141, isEmpty#142]
Keys [1]: [cs_item_sk#139]
Functions [2]: [sum(UnscaledValue(cs_ext_list_price#143)), sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#144 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#145 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#146 as decimal(9,2)))), DecimalType(9,2)))]
Aggregate Attributes [2]: [sum(UnscaledValue(cs_ext_list_price#143))#38, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#144 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#145 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#146 as decimal(9,2)))), DecimalType(9,2)))#39]
Results [3]: [cs_item_sk#139, MakeDecimal(sum(UnscaledValue(cs_ext_list_price#143))#38,17,2) AS sale#40, sum(CheckOverflow((promote_precision(cast(CheckOverflow((promote_precision(cast(cr_refunded_cash#144 as decimal(8,2))) + promote_precision(cast(cr_reversed_charge#145 as decimal(8,2)))), DecimalType(8,2)) as decimal(9,2))) + promote_precision(cast(cr_store_credit#146 as decimal(9,2)))), DecimalType(9,2)))#39 AS refund#41]

(126) Filter [codegen id : 35]
Input [3]: [cs_item_sk#139, sale#40, refund#41]
Condition : (isnotnull(sale#40) AND (cast(sale#40 as decimal(21,2)) > CheckOverflow((2.00 * promote_precision(refund#41)), DecimalType(21,2))))

(127) Project [codegen id : 35]
Output [1]: [cs_item_sk#139]
Input [3]: [cs_item_sk#139, sale#40, refund#41]

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

(129) SortMergeJoin [codegen id : 51]
Left keys [1]: [ss_item_sk#121]
Right keys [1]: [cs_item_sk#139]
Join condition: None

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

(131) ReusedExchange [Reuses operator id: 191]
Output [2]: [d_date_sk#147, d_year#148]

(132) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_sold_date_sk#132]
Right keys [1]: [d_date_sk#147]
Join condition: None

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

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

(135) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_store_sk#126]
Right keys [1]: [s_store_sk#149]
Join condition: None

(136) Project [codegen id : 51]
Output [12]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151]
Input [14]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_store_sk#126, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_sk#149, s_store_name#150, s_zip#151]

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

(138) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_customer_sk#122]
Right keys [1]: [c_customer_sk#152]
Join condition: None

(139) Project [codegen id : 51]
Output [16]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, c_first_sales_date_sk#157]
Input [18]: [ss_item_sk#121, ss_customer_sk#122, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_customer_sk#152, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, c_first_sales_date_sk#157]

(140) ReusedExchange [Reuses operator id: 53]
Output [2]: [d_date_sk#158, d_year#159]

(141) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_first_sales_date_sk#157]
Right keys [1]: [d_date_sk#158]
Join condition: None

(142) Project [codegen id : 51]
Output [16]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, d_year#159]
Input [18]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, c_first_sales_date_sk#157, d_date_sk#158, d_year#159]

(143) ReusedExchange [Reuses operator id: 53]
Output [2]: [d_date_sk#160, d_year#161]

(144) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_first_shipto_date_sk#156]
Right keys [1]: [d_date_sk#160]
Join condition: None

(145) Project [codegen id : 51]
Output [16]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161]
Input [18]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, c_first_shipto_date_sk#156, d_year#159, d_date_sk#160, d_year#161]

(146) ReusedExchange [Reuses operator id: 62]
Output [2]: [cd_demo_sk#162, cd_marital_status#163]

(147) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_cdemo_sk#123]
Right keys [1]: [cd_demo_sk#162]
Join condition: None

(148) Project [codegen id : 51]
Output [16]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, cd_marital_status#163]
Input [18]: [ss_item_sk#121, ss_cdemo_sk#123, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, cd_demo_sk#162, cd_marital_status#163]

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

(150) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_current_cdemo_sk#153]
Right keys [1]: [cd_demo_sk#164]
Join condition: NOT (cd_marital_status#163 = cd_marital_status#165)

(151) Project [codegen id : 51]
Output [14]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161]
Input [18]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_cdemo_sk#153, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, cd_marital_status#163, cd_demo_sk#164, cd_marital_status#165]

(152) ReusedExchange [Reuses operator id: 71]
Output [1]: [p_promo_sk#166]

(153) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_promo_sk#127]
Right keys [1]: [p_promo_sk#166]
Join condition: None

(154) Project [codegen id : 51]
Output [13]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161]
Input [15]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_promo_sk#127, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, p_promo_sk#166]

(155) ReusedExchange [Reuses operator id: 77]
Output [2]: [hd_demo_sk#167, hd_income_band_sk#168]

(156) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_hdemo_sk#124]
Right keys [1]: [hd_demo_sk#167]
Join condition: None

(157) Project [codegen id : 51]
Output [13]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168]
Input [15]: [ss_item_sk#121, ss_hdemo_sk#124, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, hd_demo_sk#167, hd_income_band_sk#168]

(158) ReusedExchange [Reuses operator id: 77]
Output [2]: [hd_demo_sk#169, hd_income_band_sk#170]

(159) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_current_hdemo_sk#154]
Right keys [1]: [hd_demo_sk#169]
Join condition: None

(160) Project [codegen id : 51]
Output [13]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170]
Input [15]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_hdemo_sk#154, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_demo_sk#169, hd_income_band_sk#170]

(161) ReusedExchange [Reuses operator id: 86]
Output [5]: [ca_address_sk#171, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175]

(162) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_addr_sk#125]
Right keys [1]: [ca_address_sk#171]
Join condition: None

(163) Project [codegen id : 51]
Output [16]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175]
Input [18]: [ss_item_sk#121, ss_addr_sk#125, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_address_sk#171, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175]

(164) ReusedExchange [Reuses operator id: 86]
Output [5]: [ca_address_sk#176, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180]

(165) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [c_current_addr_sk#155]
Right keys [1]: [ca_address_sk#176]
Join condition: None

(166) Project [codegen id : 51]
Output [19]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180]
Input [21]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, c_current_addr_sk#155, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_address_sk#176, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180]

(167) ReusedExchange [Reuses operator id: 95]
Output [1]: [ib_income_band_sk#181]

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

(169) Project [codegen id : 51]
Output [18]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180]
Input [20]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#168, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, ib_income_band_sk#181]

(170) ReusedExchange [Reuses operator id: 95]
Output [1]: [ib_income_band_sk#182]

(171) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [hd_income_band_sk#170]
Right keys [1]: [ib_income_band_sk#182]
Join condition: None

(172) Project [codegen id : 51]
Output [17]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180]
Input [19]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, hd_income_band_sk#170, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, ib_income_band_sk#182]

(173) ReusedExchange [Reuses operator id: 105]
Output [2]: [i_item_sk#183, i_product_name#184]

(174) BroadcastHashJoin [codegen id : 51]
Left keys [1]: [ss_item_sk#121]
Right keys [1]: [i_item_sk#183]
Join condition: None

(175) Project [codegen id : 51]
Output [18]: [ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, d_year#159, d_year#161, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, i_item_sk#183, i_product_name#184]
Input [19]: [ss_item_sk#121, ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, s_store_name#150, s_zip#151, d_year#159, d_year#161, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, i_item_sk#183, i_product_name#184]

(176) HashAggregate [codegen id : 51]
Input [18]: [ss_wholesale_cost#129, ss_list_price#130, ss_coupon_amt#131, d_year#148, d_year#159, d_year#161, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, i_item_sk#183, i_product_name#184]
Keys [15]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161]
Functions [4]: [partial_count(1), partial_sum(UnscaledValue(ss_wholesale_cost#129)), partial_sum(UnscaledValue(ss_list_price#130)), partial_sum(UnscaledValue(ss_coupon_amt#131))]
Aggregate Attributes [4]: [count#91, sum#185, sum#186, sum#187]
Results [19]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161, count#95, sum#188, sum#189, sum#190]

(177) HashAggregate [codegen id : 51]
Input [19]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161, count#95, sum#188, sum#189, sum#190]
Keys [15]: [i_product_name#184, i_item_sk#183, s_store_name#150, s_zip#151, ca_street_number#172, ca_street_name#173, ca_city#174, ca_zip#175, ca_street_number#177, ca_street_name#178, ca_city#179, ca_zip#180, d_year#148, d_year#159, d_year#161]
Functions [4]: [count(1), sum(UnscaledValue(ss_wholesale_cost#129)), sum(UnscaledValue(ss_list_price#130)), sum(UnscaledValue(ss_coupon_amt#131))]
Aggregate Attributes [4]: [count(1)#99, sum(UnscaledValue(ss_wholesale_cost#129))#100, sum(UnscaledValue(ss_list_price#130))#101, sum(UnscaledValue(ss_coupon_amt#131))#102]
Results [8]: [i_item_sk#183 AS item_sk#191, s_store_name#150 AS store_name#192, s_zip#151 AS store_zip#193, d_year#148 AS syear#194, count(1)#99 AS cnt#195, MakeDecimal(sum(UnscaledValue(ss_wholesale_cost#129))#100,17,2) AS s1#196, MakeDecimal(sum(UnscaledValue(ss_list_price#130))#101,17,2) AS s2#197, MakeDecimal(sum(UnscaledValue(ss_coupon_amt#131))#102,17,2) AS s3#198]

(178) Exchange
Input [8]: [item_sk#191, store_name#192, store_zip#193, syear#194, cnt#195, s1#196, s2#197, s3#198]
Arguments: hashpartitioning(item_sk#191, store_name#192, store_zip#193, 5), ENSURE_REQUIREMENTS, [id=#199]

(179) Sort [codegen id : 52]
Input [8]: [item_sk#191, store_name#192, store_zip#193, syear#194, cnt#195, s1#196, s2#197, s3#198]
Arguments: [item_sk#191 ASC NULLS FIRST, store_name#192 ASC NULLS FIRST, store_zip#193 ASC NULLS FIRST], false, 0

(180) SortMergeJoin [codegen id : 53]
Left keys [3]: [item_sk#104, store_name#105, store_zip#106]
Right keys [3]: [item_sk#191, store_name#192, store_zip#193]
Join condition: (cnt#195 <= cnt#116)

(181) Project [codegen id : 53]
Output [21]: [product_name#103, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, s1#196, s2#197, s3#198, syear#194, cnt#195]
Input [25]: [product_name#103, item_sk#104, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, item_sk#191, store_name#192, store_zip#193, syear#194, cnt#195, s1#196, s2#197, s3#198]

(182) Exchange
Input [21]: [product_name#103, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, s1#196, s2#197, s3#198, syear#194, cnt#195]
Arguments: rangepartitioning(product_name#103 ASC NULLS FIRST, store_name#105 ASC NULLS FIRST, cnt#195 ASC NULLS FIRST, s1#117 ASC NULLS FIRST, s1#196 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, [id=#200]

(183) Sort [codegen id : 54]
Input [21]: [product_name#103, store_name#105, store_zip#106, b_street_number#107, b_streen_name#108, b_city#109, b_zip#110, c_street_number#111, c_street_name#112, c_city#113, c_zip#114, syear#115, cnt#116, s1#117, s2#118, s3#119, s1#196, s2#197, s3#198, syear#194, cnt#195]
Arguments: [product_name#103 ASC NULLS FIRST, store_name#105 ASC NULLS FIRST, cnt#195 ASC NULLS FIRST, s1#117 ASC NULLS FIRST, s1#196 ASC NULLS FIRST], true, 0

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#12 IN dynamicpruning#13
BroadcastExchange (187)
+- * Filter (186)
   +- * ColumnarToRow (185)
      +- Scan parquet default.date_dim (184)


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

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

(186) Filter [codegen id : 1]
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))

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

Subquery:2 Hosting operator id = 112 Hosting Expression = ss_sold_date_sk#132 IN dynamicpruning#133
BroadcastExchange (191)
+- * Filter (190)
   +- * ColumnarToRow (189)
      +- Scan parquet default.date_dim (188)


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

(189) ColumnarToRow [codegen id : 1]
Input [2]: [d_date_sk#147, d_year#148]

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

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


