== Physical Plan ==
VeloxColumnarToRow (177)
+- TakeOrderedAndProjectExecTransformer (176)
   +- ^ ProjectExecTransformer (174)
      +- ^ RegularHashAggregateExecTransformer (173)
         +- ^ InputIteratorTransformer (172)
            +- ColumnarExchange (170)
               +- VeloxResizeBatches (169)
                  +- ^ ProjectExecTransformer (167)
                     +- ^ FlushableHashAggregateExecTransformer (166)
                        +- ^ ExpandExecTransformer (165)
                           +- ^ InputIteratorTransformer (164)
                              +- ColumnarUnion (162)
                                 :- ^ ProjectExecTransformer (58)
                                 :  +- ^ RegularHashAggregateExecTransformer (57)
                                 :     +- ^ InputIteratorTransformer (56)
                                 :        +- ColumnarExchange (54)
                                 :           +- VeloxResizeBatches (53)
                                 :              +- ^ ProjectExecTransformer (51)
                                 :                 +- ^ FlushableHashAggregateExecTransformer (50)
                                 :                    +- ^ ProjectExecTransformer (49)
                                 :                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48)
                                 :                          :- ^ ProjectExecTransformer (40)
                                 :                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (39)
                                 :                          :     :- ^ ProjectExecTransformer (31)
                                 :                          :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (30)
                                 :                          :     :     :- ^ ProjectExecTransformer (23)
                                 :                          :     :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (22)
                                 :                          :     :     :     :- ^ ProjectExecTransformer (18)
                                 :                          :     :     :     :  +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildLeft (17)
                                 :                          :     :     :     :     :- ^ InputIteratorTransformer (8)
                                 :                          :     :     :     :     :  +- ColumnarExchange (6)
                                 :                          :     :     :     :     :     +- VeloxResizeBatches (5)
                                 :                          :     :     :     :     :        +- ^ ProjectExecTransformer (3)
                                 :                          :     :     :     :     :           +- ^ FilterExecTransformer (2)
                                 :                          :     :     :     :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
                                 :                          :     :     :     :     +- ^ InputIteratorTransformer (16)
                                 :                          :     :     :     :        +- ColumnarExchange (14)
                                 :                          :     :     :     :           +- VeloxResizeBatches (13)
                                 :                          :     :     :     :              +- ^ ProjectExecTransformer (11)
                                 :                          :     :     :     :                 +- ^ FilterExecTransformer (10)
                                 :                          :     :     :     :                    +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (9)
                                 :                          :     :     :     +- ^ InputIteratorTransformer (21)
                                 :                          :     :     :        +- ReusedExchange (19)
                                 :                          :     :     +- ^ InputIteratorTransformer (29)
                                 :                          :     :        +- ColumnarBroadcastExchange (27)
                                 :                          :     :           +- ^ FilterExecTransformer (25)
                                 :                          :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (24)
                                 :                          :     +- ^ InputIteratorTransformer (38)
                                 :                          :        +- ColumnarBroadcastExchange (36)
                                 :                          :           +- ^ ProjectExecTransformer (34)
                                 :                          :              +- ^ FilterExecTransformer (33)
                                 :                          :                 +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (32)
                                 :                          +- ^ InputIteratorTransformer (47)
                                 :                             +- ColumnarBroadcastExchange (45)
                                 :                                +- ^ ProjectExecTransformer (43)
                                 :                                   +- ^ FilterExecTransformer (42)
                                 :                                      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.promotion (41)
                                 :- ^ ProjectExecTransformer (109)
                                 :  +- ^ RegularHashAggregateExecTransformer (108)
                                 :     +- ^ InputIteratorTransformer (107)
                                 :        +- ColumnarExchange (105)
                                 :           +- VeloxResizeBatches (104)
                                 :              +- ^ ProjectExecTransformer (102)
                                 :                 +- ^ FlushableHashAggregateExecTransformer (101)
                                 :                    +- ^ ProjectExecTransformer (100)
                                 :                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (99)
                                 :                          :- ^ ProjectExecTransformer (95)
                                 :                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (94)
                                 :                          :     :- ^ ProjectExecTransformer (90)
                                 :                          :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (89)
                                 :                          :     :     :- ^ ProjectExecTransformer (82)
                                 :                          :     :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (81)
                                 :                          :     :     :     :- ^ ProjectExecTransformer (77)
                                 :                          :     :     :     :  +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildLeft (76)
                                 :                          :     :     :     :     :- ^ InputIteratorTransformer (67)
                                 :                          :     :     :     :     :  +- ColumnarExchange (65)
                                 :                          :     :     :     :     :     +- VeloxResizeBatches (64)
                                 :                          :     :     :     :     :        +- ^ ProjectExecTransformer (62)
                                 :                          :     :     :     :     :           +- ^ FilterExecTransformer (61)
                                 :                          :     :     :     :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (60)
                                 :                          :     :     :     :     +- ^ InputIteratorTransformer (75)
                                 :                          :     :     :     :        +- ColumnarExchange (73)
                                 :                          :     :     :     :           +- VeloxResizeBatches (72)
                                 :                          :     :     :     :              +- ^ ProjectExecTransformer (70)
                                 :                          :     :     :     :                 +- ^ FilterExecTransformer (69)
                                 :                          :     :     :     :                    +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (68)
                                 :                          :     :     :     +- ^ InputIteratorTransformer (80)
                                 :                          :     :     :        +- ReusedExchange (78)
                                 :                          :     :     +- ^ InputIteratorTransformer (88)
                                 :                          :     :        +- ColumnarBroadcastExchange (86)
                                 :                          :     :           +- ^ FilterExecTransformer (84)
                                 :                          :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (83)
                                 :                          :     +- ^ InputIteratorTransformer (93)
                                 :                          :        +- ReusedExchange (91)
                                 :                          +- ^ InputIteratorTransformer (98)
                                 :                             +- ReusedExchange (96)
                                 +- ^ ProjectExecTransformer (160)
                                    +- ^ RegularHashAggregateExecTransformer (159)
                                       +- ^ InputIteratorTransformer (158)
                                          +- ColumnarExchange (156)
                                             +- VeloxResizeBatches (155)
                                                +- ^ ProjectExecTransformer (153)
                                                   +- ^ FlushableHashAggregateExecTransformer (152)
                                                      +- ^ ProjectExecTransformer (151)
                                                         +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (150)
                                                            :- ^ ProjectExecTransformer (146)
                                                            :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (145)
                                                            :     :- ^ ProjectExecTransformer (141)
                                                            :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (140)
                                                            :     :     :- ^ ProjectExecTransformer (133)
                                                            :     :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (132)
                                                            :     :     :     :- ^ ProjectExecTransformer (128)
                                                            :     :     :     :  +- ^ ShuffledHashJoinExecTransformer LeftOuter BuildLeft (127)
                                                            :     :     :     :     :- ^ InputIteratorTransformer (118)
                                                            :     :     :     :     :  +- ColumnarExchange (116)
                                                            :     :     :     :     :     +- VeloxResizeBatches (115)
                                                            :     :     :     :     :        +- ^ ProjectExecTransformer (113)
                                                            :     :     :     :     :           +- ^ FilterExecTransformer (112)
                                                            :     :     :     :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (111)
                                                            :     :     :     :     +- ^ InputIteratorTransformer (126)
                                                            :     :     :     :        +- ColumnarExchange (124)
                                                            :     :     :     :           +- VeloxResizeBatches (123)
                                                            :     :     :     :              +- ^ ProjectExecTransformer (121)
                                                            :     :     :     :                 +- ^ FilterExecTransformer (120)
                                                            :     :     :     :                    +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (119)
                                                            :     :     :     +- ^ InputIteratorTransformer (131)
                                                            :     :     :        +- ReusedExchange (129)
                                                            :     :     +- ^ InputIteratorTransformer (139)
                                                            :     :        +- ColumnarBroadcastExchange (137)
                                                            :     :           +- ^ FilterExecTransformer (135)
                                                            :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (134)
                                                            :     +- ^ InputIteratorTransformer (144)
                                                            :        +- ReusedExchange (142)
                                                            +- ^ InputIteratorTransformer (149)
                                                               +- ReusedExchange (147)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#7), dynamicpruningexpression(ss_sold_date_sk#7 IN dynamicpruning#8)]
PushedFilters: [IsNotNull(ss_store_sk), IsNotNull(ss_item_sk), IsNotNull(ss_promo_sk)]
ReadSchema: struct<ss_item_sk:int,ss_store_sk:int,ss_promo_sk:int,ss_ticket_number:int,ss_ext_sales_price:decimal(7,2),ss_net_profit:decimal(7,2)>

(2) FilterExecTransformer
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Arguments: ((isnotnull(ss_store_sk#2) AND isnotnull(ss_item_sk#1)) AND isnotnull(ss_promo_sk#3))

(3) ProjectExecTransformer
Output [8]: [hash(ss_item_sk#1, ss_ticket_number#4, 42) AS hash_partition_key#9, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]

(4) WholeStageCodegenTransformer (2)
Input [8]: [hash_partition_key#9, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Arguments: false

(5) VeloxResizeBatches
Input [8]: [hash_partition_key#9, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Arguments: 1024, 2147483647, 10485760

(6) ColumnarExchange
Input [8]: [hash_partition_key#9, ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]
Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#4, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7], [plan_id=1], [shuffle_writer_type=hash]

(7) InputAdapter
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]

(8) InputIteratorTransformer
Input [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7]

(9) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns
Output [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14]
Batched: true
Location: CatalogFileIndex [{warehouse_dir}/store_returns]
PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number)]
ReadSchema: struct<sr_item_sk:int,sr_ticket_number:int,sr_return_amt:decimal(7,2),sr_net_loss:decimal(7,2)>

(10) FilterExecTransformer
Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14]
Arguments: (isnotnull(sr_item_sk#10) AND isnotnull(sr_ticket_number#11))

(11) ProjectExecTransformer
Output [5]: [hash(sr_item_sk#10, sr_ticket_number#11, 42) AS hash_partition_key#15, sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13]
Input [5]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14]

(12) WholeStageCodegenTransformer (3)
Input [5]: [hash_partition_key#15, sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13]
Arguments: false

(13) VeloxResizeBatches
Input [5]: [hash_partition_key#15, sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13]
Arguments: 1024, 2147483647, 10485760

(14) ColumnarExchange
Input [5]: [hash_partition_key#15, sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13]
Arguments: hashpartitioning(sr_item_sk#10, sr_ticket_number#11, 1), ENSURE_REQUIREMENTS, [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13], [plan_id=2], [shuffle_writer_type=hash]

(15) InputAdapter
Input [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13]

(16) InputIteratorTransformer
Input [4]: [sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13]

(17) ShuffledHashJoinExecTransformer
Left keys [2]: [ss_item_sk#1, ss_ticket_number#4]
Right keys [2]: [sr_item_sk#10, sr_ticket_number#11]
Join type: LeftOuter
Join condition: None

(18) ProjectExecTransformer
Output [8]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#12, sr_net_loss#13]
Input [11]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ticket_number#4, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_item_sk#10, sr_ticket_number#11, sr_return_amt#12, sr_net_loss#13]

(19) ReusedExchange [Reuses operator id: 182]
Output [1]: [d_date_sk#16]

(20) InputAdapter
Input [1]: [d_date_sk#16]

(21) InputIteratorTransformer
Input [1]: [d_date_sk#16]

(22) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#7]
Right keys [1]: [d_date_sk#16]
Join type: Inner
Join condition: None

(23) ProjectExecTransformer
Output [7]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13]
Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, ss_sold_date_sk#7, sr_return_amt#12, sr_net_loss#13, d_date_sk#16]

(24) FileSourceScanExecTransformer parquet spark_catalog.default.store
Output [2]: [s_store_sk#17, s_store_id#18]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_store_id:string>

(25) FilterExecTransformer
Input [2]: [s_store_sk#17, s_store_id#18]
Arguments: isnotnull(s_store_sk#17)

(26) WholeStageCodegenTransformer (5)
Input [2]: [s_store_sk#17, s_store_id#18]
Arguments: false

(27) ColumnarBroadcastExchange
Input [2]: [s_store_sk#17, s_store_id#18]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3]

(28) InputAdapter
Input [2]: [s_store_sk#17, s_store_id#18]

(29) InputIteratorTransformer
Input [2]: [s_store_sk#17, s_store_id#18]

(30) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_store_sk#2]
Right keys [1]: [s_store_sk#17]
Join type: Inner
Join condition: None

(31) ProjectExecTransformer
Output [7]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18]
Input [9]: [ss_item_sk#1, ss_store_sk#2, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_sk#17, s_store_id#18]

(32) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [2]: [i_item_sk#19, i_current_price#20]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_current_price), GreaterThan(i_current_price,50.00), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_current_price:decimal(7,2)>

(33) FilterExecTransformer
Input [2]: [i_item_sk#19, i_current_price#20]
Arguments: ((isnotnull(i_current_price#20) AND (i_current_price#20 > 50.00)) AND isnotnull(i_item_sk#19))

(34) ProjectExecTransformer
Output [1]: [i_item_sk#19]
Input [2]: [i_item_sk#19, i_current_price#20]

(35) WholeStageCodegenTransformer (6)
Input [1]: [i_item_sk#19]
Arguments: false

(36) ColumnarBroadcastExchange
Input [1]: [i_item_sk#19]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4]

(37) InputAdapter
Input [1]: [i_item_sk#19]

(38) InputIteratorTransformer
Input [1]: [i_item_sk#19]

(39) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [i_item_sk#19]
Join type: Inner
Join condition: None

(40) ProjectExecTransformer
Output [6]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18]
Input [8]: [ss_item_sk#1, ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18, i_item_sk#19]

(41) FileSourceScanExecTransformer parquet spark_catalog.default.promotion
Output [2]: [p_promo_sk#21, p_channel_tv#22]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/promotion]
PushedFilters: [IsNotNull(p_channel_tv), EqualTo(p_channel_tv,N), IsNotNull(p_promo_sk)]
ReadSchema: struct<p_promo_sk:int,p_channel_tv:string>

(42) FilterExecTransformer
Input [2]: [p_promo_sk#21, p_channel_tv#22]
Arguments: ((isnotnull(p_channel_tv#22) AND (p_channel_tv#22 = N)) AND isnotnull(p_promo_sk#21))

(43) ProjectExecTransformer
Output [1]: [p_promo_sk#21]
Input [2]: [p_promo_sk#21, p_channel_tv#22]

(44) WholeStageCodegenTransformer (7)
Input [1]: [p_promo_sk#21]
Arguments: false

(45) ColumnarBroadcastExchange
Input [1]: [p_promo_sk#21]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5]

(46) InputAdapter
Input [1]: [p_promo_sk#21]

(47) InputIteratorTransformer
Input [1]: [p_promo_sk#21]

(48) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_promo_sk#3]
Right keys [1]: [p_promo_sk#21]
Join type: Inner
Join condition: None

(49) ProjectExecTransformer
Output [4]: [s_store_id#18, UnscaledValue(ss_ext_sales_price#5) AS _pre_1#23, coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00) AS _pre_2#24, (ss_net_profit#6 - coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00)) AS _pre_3#25]
Input [7]: [ss_promo_sk#3, ss_ext_sales_price#5, ss_net_profit#6, sr_return_amt#12, sr_net_loss#13, s_store_id#18, p_promo_sk#21]

(50) FlushableHashAggregateExecTransformer
Input [4]: [s_store_id#18, _pre_1#23, _pre_2#24, _pre_3#25]
Keys [1]: [s_store_id#18]
Functions [3]: [partial_sum(_pre_1#23), partial_sum(_pre_2#24), partial_sum(_pre_3#25)]
Aggregate Attributes [5]: [sum#26, sum#27, isEmpty#28, sum#29, isEmpty#30]
Results [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]

(51) ProjectExecTransformer
Output [7]: [hash(s_store_id#18, 42) AS hash_partition_key#36, s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]
Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]

(52) WholeStageCodegenTransformer (8)
Input [7]: [hash_partition_key#36, s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]
Arguments: false

(53) VeloxResizeBatches
Input [7]: [hash_partition_key#36, s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]
Arguments: 1024, 2147483647, 10485760

(54) ColumnarExchange
Input [7]: [hash_partition_key#36, s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]
Arguments: hashpartitioning(s_store_id#18, 1), ENSURE_REQUIREMENTS, [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35], [plan_id=6], [shuffle_writer_type=hash]

(55) InputAdapter
Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]

(56) InputIteratorTransformer
Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]

(57) RegularHashAggregateExecTransformer
Input [6]: [s_store_id#18, sum#31, sum#32, isEmpty#33, sum#34, isEmpty#35]
Keys [1]: [s_store_id#18]
Functions [3]: [sum(UnscaledValue(ss_ext_sales_price#5)), sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00)), sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00)))]
Aggregate Attributes [3]: [sum(UnscaledValue(ss_ext_sales_price#5))#37, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00)))#39]
Results [4]: [s_store_id#18, sum(UnscaledValue(ss_ext_sales_price#5))#37, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00)))#39]

(58) ProjectExecTransformer
Output [5]: [MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#5))#37,17,2) AS sales#40, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38 AS returns#41, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00)))#39 AS profit#42, store channel AS channel#43, concat(store, s_store_id#18) AS id#44]
Input [4]: [s_store_id#18, sum(UnscaledValue(ss_ext_sales_price#5))#37, sum(coalesce(cast(sr_return_amt#12 as decimal(12,2)), 0.00))#38, sum((ss_net_profit#6 - coalesce(cast(sr_net_loss#13 as decimal(12,2)), 0.00)))#39]

(59) WholeStageCodegenTransformer (9)
Input [5]: [sales#40, returns#41, profit#42, channel#43, id#44]
Arguments: false

(60) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#51), dynamicpruningexpression(cs_sold_date_sk#51 IN dynamicpruning#8)]
PushedFilters: [IsNotNull(cs_catalog_page_sk), IsNotNull(cs_item_sk), IsNotNull(cs_promo_sk)]
ReadSchema: struct<cs_catalog_page_sk:int,cs_item_sk:int,cs_promo_sk:int,cs_order_number:int,cs_ext_sales_price:decimal(7,2),cs_net_profit:decimal(7,2)>

(61) FilterExecTransformer
Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]
Arguments: ((isnotnull(cs_catalog_page_sk#45) AND isnotnull(cs_item_sk#46)) AND isnotnull(cs_promo_sk#47))

(62) ProjectExecTransformer
Output [8]: [hash(cs_item_sk#46, cs_order_number#48, 42) AS hash_partition_key#52, cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]
Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]

(63) WholeStageCodegenTransformer (11)
Input [8]: [hash_partition_key#52, cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]
Arguments: false

(64) VeloxResizeBatches
Input [8]: [hash_partition_key#52, cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]
Arguments: 1024, 2147483647, 10485760

(65) ColumnarExchange
Input [8]: [hash_partition_key#52, cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]
Arguments: hashpartitioning(cs_item_sk#46, cs_order_number#48, 1), ENSURE_REQUIREMENTS, [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51], [plan_id=7], [shuffle_writer_type=hash]

(66) InputAdapter
Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]

(67) InputIteratorTransformer
Input [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51]

(68) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns
Output [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57]
Batched: true
Location: CatalogFileIndex [{warehouse_dir}/catalog_returns]
PushedFilters: [IsNotNull(cr_item_sk), IsNotNull(cr_order_number)]
ReadSchema: struct<cr_item_sk:int,cr_order_number:int,cr_return_amount:decimal(7,2),cr_net_loss:decimal(7,2)>

(69) FilterExecTransformer
Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57]
Arguments: (isnotnull(cr_item_sk#53) AND isnotnull(cr_order_number#54))

(70) ProjectExecTransformer
Output [5]: [hash(cr_item_sk#53, cr_order_number#54, 42) AS hash_partition_key#58, cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56]
Input [5]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56, cr_returned_date_sk#57]

(71) WholeStageCodegenTransformer (12)
Input [5]: [hash_partition_key#58, cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56]
Arguments: false

(72) VeloxResizeBatches
Input [5]: [hash_partition_key#58, cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56]
Arguments: 1024, 2147483647, 10485760

(73) ColumnarExchange
Input [5]: [hash_partition_key#58, cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56]
Arguments: hashpartitioning(cr_item_sk#53, cr_order_number#54, 1), ENSURE_REQUIREMENTS, [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56], [plan_id=8], [shuffle_writer_type=hash]

(74) InputAdapter
Input [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56]

(75) InputIteratorTransformer
Input [4]: [cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56]

(76) ShuffledHashJoinExecTransformer
Left keys [2]: [cs_item_sk#46, cs_order_number#48]
Right keys [2]: [cr_item_sk#53, cr_order_number#54]
Join type: LeftOuter
Join condition: None

(77) ProjectExecTransformer
Output [8]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_return_amount#55, cr_net_loss#56]
Input [11]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_order_number#48, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_item_sk#53, cr_order_number#54, cr_return_amount#55, cr_net_loss#56]

(78) ReusedExchange [Reuses operator id: 182]
Output [1]: [d_date_sk#59]

(79) InputAdapter
Input [1]: [d_date_sk#59]

(80) InputIteratorTransformer
Input [1]: [d_date_sk#59]

(81) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#51]
Right keys [1]: [d_date_sk#59]
Join type: Inner
Join condition: None

(82) ProjectExecTransformer
Output [7]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56]
Input [9]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cs_sold_date_sk#51, cr_return_amount#55, cr_net_loss#56, d_date_sk#59]

(83) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page
Output [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/catalog_page]
PushedFilters: [IsNotNull(cp_catalog_page_sk)]
ReadSchema: struct<cp_catalog_page_sk:int,cp_catalog_page_id:string>

(84) FilterExecTransformer
Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61]
Arguments: isnotnull(cp_catalog_page_sk#60)

(85) WholeStageCodegenTransformer (14)
Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61]
Arguments: false

(86) ColumnarBroadcastExchange
Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=9]

(87) InputAdapter
Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61]

(88) InputIteratorTransformer
Input [2]: [cp_catalog_page_sk#60, cp_catalog_page_id#61]

(89) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_catalog_page_sk#45]
Right keys [1]: [cp_catalog_page_sk#60]
Join type: Inner
Join condition: None

(90) ProjectExecTransformer
Output [7]: [cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61]
Input [9]: [cs_catalog_page_sk#45, cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_sk#60, cp_catalog_page_id#61]

(91) ReusedExchange [Reuses operator id: 36]
Output [1]: [i_item_sk#62]

(92) InputAdapter
Input [1]: [i_item_sk#62]

(93) InputIteratorTransformer
Input [1]: [i_item_sk#62]

(94) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_item_sk#46]
Right keys [1]: [i_item_sk#62]
Join type: Inner
Join condition: None

(95) ProjectExecTransformer
Output [6]: [cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61]
Input [8]: [cs_item_sk#46, cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61, i_item_sk#62]

(96) ReusedExchange [Reuses operator id: 45]
Output [1]: [p_promo_sk#63]

(97) InputAdapter
Input [1]: [p_promo_sk#63]

(98) InputIteratorTransformer
Input [1]: [p_promo_sk#63]

(99) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_promo_sk#47]
Right keys [1]: [p_promo_sk#63]
Join type: Inner
Join condition: None

(100) ProjectExecTransformer
Output [4]: [cp_catalog_page_id#61, UnscaledValue(cs_ext_sales_price#49) AS _pre_4#64, coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00) AS _pre_5#65, (cs_net_profit#50 - coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00)) AS _pre_6#66]
Input [7]: [cs_promo_sk#47, cs_ext_sales_price#49, cs_net_profit#50, cr_return_amount#55, cr_net_loss#56, cp_catalog_page_id#61, p_promo_sk#63]

(101) FlushableHashAggregateExecTransformer
Input [4]: [cp_catalog_page_id#61, _pre_4#64, _pre_5#65, _pre_6#66]
Keys [1]: [cp_catalog_page_id#61]
Functions [3]: [partial_sum(_pre_4#64), partial_sum(_pre_5#65), partial_sum(_pre_6#66)]
Aggregate Attributes [5]: [sum#67, sum#68, isEmpty#69, sum#70, isEmpty#71]
Results [6]: [cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]

(102) ProjectExecTransformer
Output [7]: [hash(cp_catalog_page_id#61, 42) AS hash_partition_key#77, cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]
Input [6]: [cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]

(103) WholeStageCodegenTransformer (17)
Input [7]: [hash_partition_key#77, cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]
Arguments: false

(104) VeloxResizeBatches
Input [7]: [hash_partition_key#77, cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]
Arguments: 1024, 2147483647, 10485760

(105) ColumnarExchange
Input [7]: [hash_partition_key#77, cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]
Arguments: hashpartitioning(cp_catalog_page_id#61, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76], [plan_id=10], [shuffle_writer_type=hash]

(106) InputAdapter
Input [6]: [cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]

(107) InputIteratorTransformer
Input [6]: [cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]

(108) RegularHashAggregateExecTransformer
Input [6]: [cp_catalog_page_id#61, sum#72, sum#73, isEmpty#74, sum#75, isEmpty#76]
Keys [1]: [cp_catalog_page_id#61]
Functions [3]: [sum(UnscaledValue(cs_ext_sales_price#49)), sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00)), sum((cs_net_profit#50 - coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00)))]
Aggregate Attributes [3]: [sum(UnscaledValue(cs_ext_sales_price#49))#78, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#79, sum((cs_net_profit#50 - coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00)))#80]
Results [4]: [cp_catalog_page_id#61, sum(UnscaledValue(cs_ext_sales_price#49))#78, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#79, sum((cs_net_profit#50 - coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00)))#80]

(109) ProjectExecTransformer
Output [5]: [MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#49))#78,17,2) AS sales#81, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#79 AS returns#82, sum((cs_net_profit#50 - coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00)))#80 AS profit#83, catalog channel AS channel#84, concat(catalog_page, cp_catalog_page_id#61) AS id#85]
Input [4]: [cp_catalog_page_id#61, sum(UnscaledValue(cs_ext_sales_price#49))#78, sum(coalesce(cast(cr_return_amount#55 as decimal(12,2)), 0.00))#79, sum((cs_net_profit#50 - coalesce(cast(cr_net_loss#56 as decimal(12,2)), 0.00)))#80]

(110) WholeStageCodegenTransformer (18)
Input [5]: [sales#81, returns#82, profit#83, channel#84, id#85]
Arguments: false

(111) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [7]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#92), dynamicpruningexpression(ws_sold_date_sk#92 IN dynamicpruning#8)]
PushedFilters: [IsNotNull(ws_web_site_sk), IsNotNull(ws_item_sk), IsNotNull(ws_promo_sk)]
ReadSchema: struct<ws_item_sk:int,ws_web_site_sk:int,ws_promo_sk:int,ws_order_number:int,ws_ext_sales_price:decimal(7,2),ws_net_profit:decimal(7,2)>

(112) FilterExecTransformer
Input [7]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]
Arguments: ((isnotnull(ws_web_site_sk#87) AND isnotnull(ws_item_sk#86)) AND isnotnull(ws_promo_sk#88))

(113) ProjectExecTransformer
Output [8]: [hash(ws_item_sk#86, ws_order_number#89, 42) AS hash_partition_key#93, ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]
Input [7]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]

(114) WholeStageCodegenTransformer (20)
Input [8]: [hash_partition_key#93, ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]
Arguments: false

(115) VeloxResizeBatches
Input [8]: [hash_partition_key#93, ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]
Arguments: 1024, 2147483647, 10485760

(116) ColumnarExchange
Input [8]: [hash_partition_key#93, ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]
Arguments: hashpartitioning(ws_item_sk#86, ws_order_number#89, 1), ENSURE_REQUIREMENTS, [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92], [plan_id=11], [shuffle_writer_type=hash]

(117) InputAdapter
Input [7]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]

(118) InputIteratorTransformer
Input [7]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92]

(119) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns
Output [5]: [wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97, wr_returned_date_sk#98]
Batched: true
Location: CatalogFileIndex [{warehouse_dir}/web_returns]
PushedFilters: [IsNotNull(wr_item_sk), IsNotNull(wr_order_number)]
ReadSchema: struct<wr_item_sk:int,wr_order_number:int,wr_return_amt:decimal(7,2),wr_net_loss:decimal(7,2)>

(120) FilterExecTransformer
Input [5]: [wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97, wr_returned_date_sk#98]
Arguments: (isnotnull(wr_item_sk#94) AND isnotnull(wr_order_number#95))

(121) ProjectExecTransformer
Output [5]: [hash(wr_item_sk#94, wr_order_number#95, 42) AS hash_partition_key#99, wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97]
Input [5]: [wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97, wr_returned_date_sk#98]

(122) WholeStageCodegenTransformer (21)
Input [5]: [hash_partition_key#99, wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97]
Arguments: false

(123) VeloxResizeBatches
Input [5]: [hash_partition_key#99, wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97]
Arguments: 1024, 2147483647, 10485760

(124) ColumnarExchange
Input [5]: [hash_partition_key#99, wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97]
Arguments: hashpartitioning(wr_item_sk#94, wr_order_number#95, 1), ENSURE_REQUIREMENTS, [wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97], [plan_id=12], [shuffle_writer_type=hash]

(125) InputAdapter
Input [4]: [wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97]

(126) InputIteratorTransformer
Input [4]: [wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97]

(127) ShuffledHashJoinExecTransformer
Left keys [2]: [ws_item_sk#86, ws_order_number#89]
Right keys [2]: [wr_item_sk#94, wr_order_number#95]
Join type: LeftOuter
Join condition: None

(128) ProjectExecTransformer
Output [8]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92, wr_return_amt#96, wr_net_loss#97]
Input [11]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_order_number#89, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92, wr_item_sk#94, wr_order_number#95, wr_return_amt#96, wr_net_loss#97]

(129) ReusedExchange [Reuses operator id: 182]
Output [1]: [d_date_sk#100]

(130) InputAdapter
Input [1]: [d_date_sk#100]

(131) InputIteratorTransformer
Input [1]: [d_date_sk#100]

(132) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#92]
Right keys [1]: [d_date_sk#100]
Join type: Inner
Join condition: None

(133) ProjectExecTransformer
Output [7]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, wr_return_amt#96, wr_net_loss#97]
Input [9]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, ws_sold_date_sk#92, wr_return_amt#96, wr_net_loss#97, d_date_sk#100]

(134) FileSourceScanExecTransformer parquet spark_catalog.default.web_site
Output [2]: [web_site_sk#101, web_site_id#102]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/web_site]
PushedFilters: [IsNotNull(web_site_sk)]
ReadSchema: struct<web_site_sk:int,web_site_id:string>

(135) FilterExecTransformer
Input [2]: [web_site_sk#101, web_site_id#102]
Arguments: isnotnull(web_site_sk#101)

(136) WholeStageCodegenTransformer (23)
Input [2]: [web_site_sk#101, web_site_id#102]
Arguments: false

(137) ColumnarBroadcastExchange
Input [2]: [web_site_sk#101, web_site_id#102]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=13]

(138) InputAdapter
Input [2]: [web_site_sk#101, web_site_id#102]

(139) InputIteratorTransformer
Input [2]: [web_site_sk#101, web_site_id#102]

(140) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_web_site_sk#87]
Right keys [1]: [web_site_sk#101]
Join type: Inner
Join condition: None

(141) ProjectExecTransformer
Output [7]: [ws_item_sk#86, ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, wr_return_amt#96, wr_net_loss#97, web_site_id#102]
Input [9]: [ws_item_sk#86, ws_web_site_sk#87, ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, wr_return_amt#96, wr_net_loss#97, web_site_sk#101, web_site_id#102]

(142) ReusedExchange [Reuses operator id: 36]
Output [1]: [i_item_sk#103]

(143) InputAdapter
Input [1]: [i_item_sk#103]

(144) InputIteratorTransformer
Input [1]: [i_item_sk#103]

(145) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_item_sk#86]
Right keys [1]: [i_item_sk#103]
Join type: Inner
Join condition: None

(146) ProjectExecTransformer
Output [6]: [ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, wr_return_amt#96, wr_net_loss#97, web_site_id#102]
Input [8]: [ws_item_sk#86, ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, wr_return_amt#96, wr_net_loss#97, web_site_id#102, i_item_sk#103]

(147) ReusedExchange [Reuses operator id: 45]
Output [1]: [p_promo_sk#104]

(148) InputAdapter
Input [1]: [p_promo_sk#104]

(149) InputIteratorTransformer
Input [1]: [p_promo_sk#104]

(150) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_promo_sk#88]
Right keys [1]: [p_promo_sk#104]
Join type: Inner
Join condition: None

(151) ProjectExecTransformer
Output [4]: [web_site_id#102, UnscaledValue(ws_ext_sales_price#90) AS _pre_7#105, coalesce(cast(wr_return_amt#96 as decimal(12,2)), 0.00) AS _pre_8#106, (ws_net_profit#91 - coalesce(cast(wr_net_loss#97 as decimal(12,2)), 0.00)) AS _pre_9#107]
Input [7]: [ws_promo_sk#88, ws_ext_sales_price#90, ws_net_profit#91, wr_return_amt#96, wr_net_loss#97, web_site_id#102, p_promo_sk#104]

(152) FlushableHashAggregateExecTransformer
Input [4]: [web_site_id#102, _pre_7#105, _pre_8#106, _pre_9#107]
Keys [1]: [web_site_id#102]
Functions [3]: [partial_sum(_pre_7#105), partial_sum(_pre_8#106), partial_sum(_pre_9#107)]
Aggregate Attributes [5]: [sum#108, sum#109, isEmpty#110, sum#111, isEmpty#112]
Results [6]: [web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]

(153) ProjectExecTransformer
Output [7]: [hash(web_site_id#102, 42) AS hash_partition_key#118, web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]
Input [6]: [web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]

(154) WholeStageCodegenTransformer (26)
Input [7]: [hash_partition_key#118, web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]
Arguments: false

(155) VeloxResizeBatches
Input [7]: [hash_partition_key#118, web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]
Arguments: 1024, 2147483647, 10485760

(156) ColumnarExchange
Input [7]: [hash_partition_key#118, web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]
Arguments: hashpartitioning(web_site_id#102, 1), ENSURE_REQUIREMENTS, [web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117], [plan_id=14], [shuffle_writer_type=hash]

(157) InputAdapter
Input [6]: [web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]

(158) InputIteratorTransformer
Input [6]: [web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]

(159) RegularHashAggregateExecTransformer
Input [6]: [web_site_id#102, sum#113, sum#114, isEmpty#115, sum#116, isEmpty#117]
Keys [1]: [web_site_id#102]
Functions [3]: [sum(UnscaledValue(ws_ext_sales_price#90)), sum(coalesce(cast(wr_return_amt#96 as decimal(12,2)), 0.00)), sum((ws_net_profit#91 - coalesce(cast(wr_net_loss#97 as decimal(12,2)), 0.00)))]
Aggregate Attributes [3]: [sum(UnscaledValue(ws_ext_sales_price#90))#119, sum(coalesce(cast(wr_return_amt#96 as decimal(12,2)), 0.00))#120, sum((ws_net_profit#91 - coalesce(cast(wr_net_loss#97 as decimal(12,2)), 0.00)))#121]
Results [4]: [web_site_id#102, sum(UnscaledValue(ws_ext_sales_price#90))#119, sum(coalesce(cast(wr_return_amt#96 as decimal(12,2)), 0.00))#120, sum((ws_net_profit#91 - coalesce(cast(wr_net_loss#97 as decimal(12,2)), 0.00)))#121]

(160) ProjectExecTransformer
Output [5]: [MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#90))#119,17,2) AS sales#122, sum(coalesce(cast(wr_return_amt#96 as decimal(12,2)), 0.00))#120 AS returns#123, sum((ws_net_profit#91 - coalesce(cast(wr_net_loss#97 as decimal(12,2)), 0.00)))#121 AS profit#124, web channel AS channel#125, concat(web_site, web_site_id#102) AS id#126]
Input [4]: [web_site_id#102, sum(UnscaledValue(ws_ext_sales_price#90))#119, sum(coalesce(cast(wr_return_amt#96 as decimal(12,2)), 0.00))#120, sum((ws_net_profit#91 - coalesce(cast(wr_net_loss#97 as decimal(12,2)), 0.00)))#121]

(161) WholeStageCodegenTransformer (27)
Input [5]: [sales#122, returns#123, profit#124, channel#125, id#126]
Arguments: false

(162) ColumnarUnion
Arguments: UnknownPartitioning(0)

(163) InputAdapter
Input [5]: [sales#40, returns#41, profit#42, channel#43, id#44]

(164) InputIteratorTransformer
Input [5]: [sales#40, returns#41, profit#42, channel#43, id#44]

(165) ExpandExecTransformer
Input [5]: [sales#40, returns#41, profit#42, channel#43, id#44]
Arguments: [[sales#40, returns#41, profit#42, channel#43, id#44, 0], [sales#40, returns#41, profit#42, channel#43, null, 1], [sales#40, returns#41, profit#42, null, null, 3]], [sales#40, returns#41, profit#42, channel#127, id#128, spark_grouping_id#129]

(166) FlushableHashAggregateExecTransformer
Input [6]: [sales#40, returns#41, profit#42, channel#127, id#128, spark_grouping_id#129]
Keys [3]: [channel#127, id#128, spark_grouping_id#129]
Functions [3]: [partial_sum(sales#40), partial_sum(returns#41), partial_sum(profit#42)]
Aggregate Attributes [6]: [sum#130, isEmpty#131, sum#132, isEmpty#133, sum#134, isEmpty#135]
Results [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]

(167) ProjectExecTransformer
Output [10]: [hash(channel#127, id#128, spark_grouping_id#129, 42) AS hash_partition_key#142, channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]
Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]

(168) WholeStageCodegenTransformer (28)
Input [10]: [hash_partition_key#142, channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]
Arguments: false

(169) VeloxResizeBatches
Input [10]: [hash_partition_key#142, channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]
Arguments: 1024, 2147483647, 10485760

(170) ColumnarExchange
Input [10]: [hash_partition_key#142, channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]
Arguments: hashpartitioning(channel#127, id#128, spark_grouping_id#129, 1), ENSURE_REQUIREMENTS, [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141], [plan_id=15], [shuffle_writer_type=hash]

(171) InputAdapter
Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]

(172) InputIteratorTransformer
Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]

(173) RegularHashAggregateExecTransformer
Input [9]: [channel#127, id#128, spark_grouping_id#129, sum#136, isEmpty#137, sum#138, isEmpty#139, sum#140, isEmpty#141]
Keys [3]: [channel#127, id#128, spark_grouping_id#129]
Functions [3]: [sum(sales#40), sum(returns#41), sum(profit#42)]
Aggregate Attributes [3]: [sum(sales#40)#143, sum(returns#41)#144, sum(profit#42)#145]
Results [6]: [channel#127, id#128, spark_grouping_id#129, sum(sales#40)#143, sum(returns#41)#144, sum(profit#42)#145]

(174) ProjectExecTransformer
Output [5]: [channel#127, id#128, sum(sales#40)#143 AS sales#146, sum(returns#41)#144 AS returns#147, sum(profit#42)#145 AS profit#148]
Input [6]: [channel#127, id#128, spark_grouping_id#129, sum(sales#40)#143, sum(returns#41)#144, sum(profit#42)#145]

(175) WholeStageCodegenTransformer (29)
Input [5]: [channel#127, id#128, sales#146, returns#147, profit#148]
Arguments: false

(176) TakeOrderedAndProjectExecTransformer
Input [5]: [channel#127, id#128, sales#146, returns#147, profit#148]
Arguments: 100, [channel#127 ASC NULLS FIRST, id#128 ASC NULLS FIRST], [channel#127, id#128, sales#146, returns#147, profit#148], 0

(177) VeloxColumnarToRow
Input [5]: [channel#127, id#128, sales#146, returns#147, profit#148]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#7 IN dynamicpruning#8
ColumnarBroadcastExchange (182)
+- ^ ProjectExecTransformer (180)
   +- ^ FilterExecTransformer (179)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (178)


(178) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#16, d_date#149]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-08-23), LessThanOrEqual(d_date,2000-09-22), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(179) FilterExecTransformer
Input [2]: [d_date_sk#16, d_date#149]
Arguments: (((isnotnull(d_date#149) AND (d_date#149 >= 2000-08-23)) AND (d_date#149 <= 2000-09-22)) AND isnotnull(d_date_sk#16))

(180) ProjectExecTransformer
Output [1]: [d_date_sk#16]
Input [2]: [d_date_sk#16, d_date#149]

(181) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#16]
Arguments: false

(182) ColumnarBroadcastExchange
Input [1]: [d_date_sk#16]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=16]

Subquery:2 Hosting operator id = 60 Hosting Expression = cs_sold_date_sk#51 IN dynamicpruning#8

Subquery:3 Hosting operator id = 111 Hosting Expression = ws_sold_date_sk#92 IN dynamicpruning#8


