== Physical Plan ==
VeloxColumnarToRow (132)
+- TakeOrderedAndProjectExecTransformer (131)
   +- ^ ProjectExecTransformer (129)
      +- ^ RegularHashAggregateExecTransformer (128)
         +- ^ InputIteratorTransformer (127)
            +- ColumnarExchange (125)
               +- VeloxResizeBatches (124)
                  +- ^ ProjectExecTransformer (122)
                     +- ^ FlushableHashAggregateExecTransformer (121)
                        +- ^ ExpandExecTransformer (120)
                           +- ^ InputIteratorTransformer (119)
                              +- ColumnarUnion (117)
                                 :- ^ ProjectExecTransformer (33)
                                 :  +- ^ RegularHashAggregateExecTransformer (32)
                                 :     +- ^ InputIteratorTransformer (31)
                                 :        +- ColumnarExchange (29)
                                 :           +- VeloxResizeBatches (28)
                                 :              +- ^ ProjectExecTransformer (26)
                                 :                 +- ^ FlushableHashAggregateExecTransformer (25)
                                 :                    +- ^ ProjectExecTransformer (24)
                                 :                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (23)
                                 :                          :- ^ ProjectExecTransformer (19)
                                 :                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (18)
                                 :                          :     :- ^ InputIteratorTransformer (11)
                                 :                          :     :  +- ColumnarUnion (9)
                                 :                          :     :     :- ^ ProjectExecTransformer (3)
                                 :                          :     :     :  +- ^ FilterExecTransformer (2)
                                 :                          :     :     :     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
                                 :                          :     :     +- ^ ProjectExecTransformer (7)
                                 :                          :     :        +- ^ FilterExecTransformer (6)
                                 :                          :     :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (5)
                                 :                          :     +- ^ InputIteratorTransformer (17)
                                 :                          :        +- ColumnarBroadcastExchange (15)
                                 :                          :           +- ^ FilterExecTransformer (13)
                                 :                          :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (12)
                                 :                          +- ^ InputIteratorTransformer (22)
                                 :                             +- ReusedExchange (20)
                                 :- ^ ProjectExecTransformer (67)
                                 :  +- ^ RegularHashAggregateExecTransformer (66)
                                 :     +- ^ InputIteratorTransformer (65)
                                 :        +- ColumnarExchange (63)
                                 :           +- VeloxResizeBatches (62)
                                 :              +- ^ ProjectExecTransformer (60)
                                 :                 +- ^ FlushableHashAggregateExecTransformer (59)
                                 :                    +- ^ ProjectExecTransformer (58)
                                 :                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (57)
                                 :                          :- ^ ProjectExecTransformer (53)
                                 :                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (52)
                                 :                          :     :- ^ InputIteratorTransformer (45)
                                 :                          :     :  +- ColumnarUnion (43)
                                 :                          :     :     :- ^ ProjectExecTransformer (37)
                                 :                          :     :     :  +- ^ FilterExecTransformer (36)
                                 :                          :     :     :     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (35)
                                 :                          :     :     +- ^ ProjectExecTransformer (41)
                                 :                          :     :        +- ^ FilterExecTransformer (40)
                                 :                          :     :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns (39)
                                 :                          :     +- ^ InputIteratorTransformer (51)
                                 :                          :        +- ColumnarBroadcastExchange (49)
                                 :                          :           +- ^ FilterExecTransformer (47)
                                 :                          :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page (46)
                                 :                          +- ^ InputIteratorTransformer (56)
                                 :                             +- ReusedExchange (54)
                                 +- ^ ProjectExecTransformer (115)
                                    +- ^ RegularHashAggregateExecTransformer (114)
                                       +- ^ InputIteratorTransformer (113)
                                          +- ColumnarExchange (111)
                                             +- VeloxResizeBatches (110)
                                                +- ^ ProjectExecTransformer (108)
                                                   +- ^ FlushableHashAggregateExecTransformer (107)
                                                      +- ^ ProjectExecTransformer (106)
                                                         +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (105)
                                                            :- ^ ProjectExecTransformer (101)
                                                            :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (100)
                                                            :     :- ^ InputIteratorTransformer (93)
                                                            :     :  +- ColumnarUnion (91)
                                                            :     :     :- ^ ProjectExecTransformer (71)
                                                            :     :     :  +- ^ FilterExecTransformer (70)
                                                            :     :     :     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (69)
                                                            :     :     +- ^ ProjectExecTransformer (89)
                                                            :     :        +- ^ ShuffledHashJoinExecTransformer Inner BuildLeft (88)
                                                            :     :           :- ^ InputIteratorTransformer (79)
                                                            :     :           :  +- ColumnarExchange (77)
                                                            :     :           :     +- VeloxResizeBatches (76)
                                                            :     :           :        +- ^ ProjectExecTransformer (74)
                                                            :     :           :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_returns (73)
                                                            :     :           +- ^ InputIteratorTransformer (87)
                                                            :     :              +- ColumnarExchange (85)
                                                            :     :                 +- VeloxResizeBatches (84)
                                                            :     :                    +- ^ ProjectExecTransformer (82)
                                                            :     :                       +- ^ FilterExecTransformer (81)
                                                            :     :                          +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (80)
                                                            :     +- ^ InputIteratorTransformer (99)
                                                            :        +- ColumnarBroadcastExchange (97)
                                                            :           +- ^ FilterExecTransformer (95)
                                                            :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_site (94)
                                                            +- ^ InputIteratorTransformer (104)
                                                               +- ReusedExchange (102)


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

(2) FilterExecTransformer
Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, ss_sold_date_sk#4]
Arguments: isnotnull(ss_store_sk#1)

(3) ProjectExecTransformer
Output [6]: [ss_store_sk#1 AS store_sk#6, ss_sold_date_sk#4 AS date_sk#7, ss_ext_sales_price#2 AS sales_price#8, ss_net_profit#3 AS profit#9, 0.00 AS return_amt#10, 0.00 AS net_loss#11]
Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, ss_sold_date_sk#4]

(4) WholeStageCodegenTransformer (2)
Input [6]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11]
Arguments: false

(5) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns
Output [4]: [sr_store_sk#12, sr_return_amt#13, sr_net_loss#14, sr_returned_date_sk#15]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(sr_returned_date_sk#15), dynamicpruningexpression(sr_returned_date_sk#15 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(sr_store_sk)]
ReadSchema: struct<sr_store_sk:int,sr_return_amt:decimal(7,2),sr_net_loss:decimal(7,2)>

(6) FilterExecTransformer
Input [4]: [sr_store_sk#12, sr_return_amt#13, sr_net_loss#14, sr_returned_date_sk#15]
Arguments: isnotnull(sr_store_sk#12)

(7) ProjectExecTransformer
Output [6]: [sr_store_sk#12 AS store_sk#16, sr_returned_date_sk#15 AS date_sk#17, 0.00 AS sales_price#18, 0.00 AS profit#19, sr_return_amt#13 AS return_amt#20, sr_net_loss#14 AS net_loss#21]
Input [4]: [sr_store_sk#12, sr_return_amt#13, sr_net_loss#14, sr_returned_date_sk#15]

(8) WholeStageCodegenTransformer (4)
Input [6]: [store_sk#16, date_sk#17, sales_price#18, profit#19, return_amt#20, net_loss#21]
Arguments: false

(9) ColumnarUnion
Arguments: UnknownPartitioning(0)

(10) InputAdapter
Input [6]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11]

(11) InputIteratorTransformer
Input [6]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11]

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

(13) FilterExecTransformer
Input [2]: [s_store_sk#22, s_store_id#23]
Arguments: isnotnull(s_store_sk#22)

(14) WholeStageCodegenTransformer (5)
Input [2]: [s_store_sk#22, s_store_id#23]
Arguments: false

(15) ColumnarBroadcastExchange
Input [2]: [s_store_sk#22, s_store_id#23]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1]

(16) InputAdapter
Input [2]: [s_store_sk#22, s_store_id#23]

(17) InputIteratorTransformer
Input [2]: [s_store_sk#22, s_store_id#23]

(18) BroadcastHashJoinExecTransformer
Left keys [1]: [store_sk#6]
Right keys [1]: [s_store_sk#22]
Join type: Inner
Join condition: None

(19) ProjectExecTransformer
Output [6]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23]
Input [8]: [store_sk#6, date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_sk#22, s_store_id#23]

(20) ReusedExchange [Reuses operator id: 137]
Output [1]: [d_date_sk#24]

(21) InputAdapter
Input [1]: [d_date_sk#24]

(22) InputIteratorTransformer
Input [1]: [d_date_sk#24]

(23) BroadcastHashJoinExecTransformer
Left keys [1]: [date_sk#7]
Right keys [1]: [d_date_sk#24]
Join type: Inner
Join condition: None

(24) ProjectExecTransformer
Output [5]: [s_store_id#23, UnscaledValue(sales_price#8) AS _pre_1#25, UnscaledValue(return_amt#10) AS _pre_2#26, UnscaledValue(profit#9) AS _pre_3#27, UnscaledValue(net_loss#11) AS _pre_4#28]
Input [7]: [date_sk#7, sales_price#8, profit#9, return_amt#10, net_loss#11, s_store_id#23, d_date_sk#24]

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

(26) ProjectExecTransformer
Output [6]: [hash(s_store_id#23, 42) AS hash_partition_key#37, s_store_id#23, sum#33, sum#34, sum#35, sum#36]
Input [5]: [s_store_id#23, sum#33, sum#34, sum#35, sum#36]

(27) WholeStageCodegenTransformer (7)
Input [6]: [hash_partition_key#37, s_store_id#23, sum#33, sum#34, sum#35, sum#36]
Arguments: false

(28) VeloxResizeBatches
Input [6]: [hash_partition_key#37, s_store_id#23, sum#33, sum#34, sum#35, sum#36]
Arguments: 1024, 2147483647, 10485760

(29) ColumnarExchange
Input [6]: [hash_partition_key#37, s_store_id#23, sum#33, sum#34, sum#35, sum#36]
Arguments: hashpartitioning(s_store_id#23, 1), ENSURE_REQUIREMENTS, [s_store_id#23, sum#33, sum#34, sum#35, sum#36], [plan_id=2], [shuffle_writer_type=hash]

(30) InputAdapter
Input [5]: [s_store_id#23, sum#33, sum#34, sum#35, sum#36]

(31) InputIteratorTransformer
Input [5]: [s_store_id#23, sum#33, sum#34, sum#35, sum#36]

(32) RegularHashAggregateExecTransformer
Input [5]: [s_store_id#23, sum#33, sum#34, sum#35, sum#36]
Keys [1]: [s_store_id#23]
Functions [4]: [sum(UnscaledValue(sales_price#8)), sum(UnscaledValue(return_amt#10)), sum(UnscaledValue(profit#9)), sum(UnscaledValue(net_loss#11))]
Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#8))#38, sum(UnscaledValue(return_amt#10))#39, sum(UnscaledValue(profit#9))#40, sum(UnscaledValue(net_loss#11))#41]
Results [5]: [s_store_id#23, sum(UnscaledValue(sales_price#8))#38, sum(UnscaledValue(return_amt#10))#39, sum(UnscaledValue(profit#9))#40, sum(UnscaledValue(net_loss#11))#41]

(33) ProjectExecTransformer
Output [5]: [MakeDecimal(sum(UnscaledValue(sales_price#8))#38,17,2) AS sales#42, MakeDecimal(sum(UnscaledValue(return_amt#10))#39,17,2) AS returns#43, (MakeDecimal(sum(UnscaledValue(profit#9))#40,17,2) - MakeDecimal(sum(UnscaledValue(net_loss#11))#41,17,2)) AS profit#44, store channel AS channel#45, concat(store, s_store_id#23) AS id#46]
Input [5]: [s_store_id#23, sum(UnscaledValue(sales_price#8))#38, sum(UnscaledValue(return_amt#10))#39, sum(UnscaledValue(profit#9))#40, sum(UnscaledValue(net_loss#11))#41]

(34) WholeStageCodegenTransformer (8)
Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46]
Arguments: false

(35) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [4]: [cs_catalog_page_sk#47, cs_ext_sales_price#48, cs_net_profit#49, cs_sold_date_sk#50]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#50), dynamicpruningexpression(cs_sold_date_sk#50 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(cs_catalog_page_sk)]
ReadSchema: struct<cs_catalog_page_sk:int,cs_ext_sales_price:decimal(7,2),cs_net_profit:decimal(7,2)>

(36) FilterExecTransformer
Input [4]: [cs_catalog_page_sk#47, cs_ext_sales_price#48, cs_net_profit#49, cs_sold_date_sk#50]
Arguments: isnotnull(cs_catalog_page_sk#47)

(37) ProjectExecTransformer
Output [6]: [cs_catalog_page_sk#47 AS page_sk#51, cs_sold_date_sk#50 AS date_sk#52, cs_ext_sales_price#48 AS sales_price#53, cs_net_profit#49 AS profit#54, 0.00 AS return_amt#55, 0.00 AS net_loss#56]
Input [4]: [cs_catalog_page_sk#47, cs_ext_sales_price#48, cs_net_profit#49, cs_sold_date_sk#50]

(38) WholeStageCodegenTransformer (10)
Input [6]: [page_sk#51, date_sk#52, sales_price#53, profit#54, return_amt#55, net_loss#56]
Arguments: false

(39) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_returns
Output [4]: [cr_catalog_page_sk#57, cr_return_amount#58, cr_net_loss#59, cr_returned_date_sk#60]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cr_returned_date_sk#60), dynamicpruningexpression(cr_returned_date_sk#60 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(cr_catalog_page_sk)]
ReadSchema: struct<cr_catalog_page_sk:int,cr_return_amount:decimal(7,2),cr_net_loss:decimal(7,2)>

(40) FilterExecTransformer
Input [4]: [cr_catalog_page_sk#57, cr_return_amount#58, cr_net_loss#59, cr_returned_date_sk#60]
Arguments: isnotnull(cr_catalog_page_sk#57)

(41) ProjectExecTransformer
Output [6]: [cr_catalog_page_sk#57 AS page_sk#61, cr_returned_date_sk#60 AS date_sk#62, 0.00 AS sales_price#63, 0.00 AS profit#64, cr_return_amount#58 AS return_amt#65, cr_net_loss#59 AS net_loss#66]
Input [4]: [cr_catalog_page_sk#57, cr_return_amount#58, cr_net_loss#59, cr_returned_date_sk#60]

(42) WholeStageCodegenTransformer (12)
Input [6]: [page_sk#61, date_sk#62, sales_price#63, profit#64, return_amt#65, net_loss#66]
Arguments: false

(43) ColumnarUnion
Arguments: UnknownPartitioning(0)

(44) InputAdapter
Input [6]: [page_sk#51, date_sk#52, sales_price#53, profit#54, return_amt#55, net_loss#56]

(45) InputIteratorTransformer
Input [6]: [page_sk#51, date_sk#52, sales_price#53, profit#54, return_amt#55, net_loss#56]

(46) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_page
Output [2]: [cp_catalog_page_sk#67, cp_catalog_page_id#68]
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>

(47) FilterExecTransformer
Input [2]: [cp_catalog_page_sk#67, cp_catalog_page_id#68]
Arguments: isnotnull(cp_catalog_page_sk#67)

(48) WholeStageCodegenTransformer (13)
Input [2]: [cp_catalog_page_sk#67, cp_catalog_page_id#68]
Arguments: false

(49) ColumnarBroadcastExchange
Input [2]: [cp_catalog_page_sk#67, cp_catalog_page_id#68]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=3]

(50) InputAdapter
Input [2]: [cp_catalog_page_sk#67, cp_catalog_page_id#68]

(51) InputIteratorTransformer
Input [2]: [cp_catalog_page_sk#67, cp_catalog_page_id#68]

(52) BroadcastHashJoinExecTransformer
Left keys [1]: [page_sk#51]
Right keys [1]: [cp_catalog_page_sk#67]
Join type: Inner
Join condition: None

(53) ProjectExecTransformer
Output [6]: [date_sk#52, sales_price#53, profit#54, return_amt#55, net_loss#56, cp_catalog_page_id#68]
Input [8]: [page_sk#51, date_sk#52, sales_price#53, profit#54, return_amt#55, net_loss#56, cp_catalog_page_sk#67, cp_catalog_page_id#68]

(54) ReusedExchange [Reuses operator id: 137]
Output [1]: [d_date_sk#69]

(55) InputAdapter
Input [1]: [d_date_sk#69]

(56) InputIteratorTransformer
Input [1]: [d_date_sk#69]

(57) BroadcastHashJoinExecTransformer
Left keys [1]: [date_sk#52]
Right keys [1]: [d_date_sk#69]
Join type: Inner
Join condition: None

(58) ProjectExecTransformer
Output [5]: [cp_catalog_page_id#68, UnscaledValue(sales_price#53) AS _pre_5#70, UnscaledValue(return_amt#55) AS _pre_6#71, UnscaledValue(profit#54) AS _pre_7#72, UnscaledValue(net_loss#56) AS _pre_8#73]
Input [7]: [date_sk#52, sales_price#53, profit#54, return_amt#55, net_loss#56, cp_catalog_page_id#68, d_date_sk#69]

(59) FlushableHashAggregateExecTransformer
Input [5]: [cp_catalog_page_id#68, _pre_5#70, _pre_6#71, _pre_7#72, _pre_8#73]
Keys [1]: [cp_catalog_page_id#68]
Functions [4]: [partial_sum(_pre_5#70), partial_sum(_pre_6#71), partial_sum(_pre_7#72), partial_sum(_pre_8#73)]
Aggregate Attributes [4]: [sum#74, sum#75, sum#76, sum#77]
Results [5]: [cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]

(60) ProjectExecTransformer
Output [6]: [hash(cp_catalog_page_id#68, 42) AS hash_partition_key#82, cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]
Input [5]: [cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]

(61) WholeStageCodegenTransformer (15)
Input [6]: [hash_partition_key#82, cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]
Arguments: false

(62) VeloxResizeBatches
Input [6]: [hash_partition_key#82, cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]
Arguments: 1024, 2147483647, 10485760

(63) ColumnarExchange
Input [6]: [hash_partition_key#82, cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]
Arguments: hashpartitioning(cp_catalog_page_id#68, 1), ENSURE_REQUIREMENTS, [cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81], [plan_id=4], [shuffle_writer_type=hash]

(64) InputAdapter
Input [5]: [cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]

(65) InputIteratorTransformer
Input [5]: [cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]

(66) RegularHashAggregateExecTransformer
Input [5]: [cp_catalog_page_id#68, sum#78, sum#79, sum#80, sum#81]
Keys [1]: [cp_catalog_page_id#68]
Functions [4]: [sum(UnscaledValue(sales_price#53)), sum(UnscaledValue(return_amt#55)), sum(UnscaledValue(profit#54)), sum(UnscaledValue(net_loss#56))]
Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#53))#83, sum(UnscaledValue(return_amt#55))#84, sum(UnscaledValue(profit#54))#85, sum(UnscaledValue(net_loss#56))#86]
Results [5]: [cp_catalog_page_id#68, sum(UnscaledValue(sales_price#53))#83, sum(UnscaledValue(return_amt#55))#84, sum(UnscaledValue(profit#54))#85, sum(UnscaledValue(net_loss#56))#86]

(67) ProjectExecTransformer
Output [5]: [MakeDecimal(sum(UnscaledValue(sales_price#53))#83,17,2) AS sales#87, MakeDecimal(sum(UnscaledValue(return_amt#55))#84,17,2) AS returns#88, (MakeDecimal(sum(UnscaledValue(profit#54))#85,17,2) - MakeDecimal(sum(UnscaledValue(net_loss#56))#86,17,2)) AS profit#89, catalog channel AS channel#90, concat(catalog_page, cp_catalog_page_id#68) AS id#91]
Input [5]: [cp_catalog_page_id#68, sum(UnscaledValue(sales_price#53))#83, sum(UnscaledValue(return_amt#55))#84, sum(UnscaledValue(profit#54))#85, sum(UnscaledValue(net_loss#56))#86]

(68) WholeStageCodegenTransformer (16)
Input [5]: [sales#87, returns#88, profit#89, channel#90, id#91]
Arguments: false

(69) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_web_site_sk#92, ws_ext_sales_price#93, ws_net_profit#94, ws_sold_date_sk#95]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#95), dynamicpruningexpression(ws_sold_date_sk#95 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(ws_web_site_sk)]
ReadSchema: struct<ws_web_site_sk:int,ws_ext_sales_price:decimal(7,2),ws_net_profit:decimal(7,2)>

(70) FilterExecTransformer
Input [4]: [ws_web_site_sk#92, ws_ext_sales_price#93, ws_net_profit#94, ws_sold_date_sk#95]
Arguments: isnotnull(ws_web_site_sk#92)

(71) ProjectExecTransformer
Output [6]: [ws_web_site_sk#92 AS wsr_web_site_sk#96, ws_sold_date_sk#95 AS date_sk#97, ws_ext_sales_price#93 AS sales_price#98, ws_net_profit#94 AS profit#99, 0.00 AS return_amt#100, 0.00 AS net_loss#101]
Input [4]: [ws_web_site_sk#92, ws_ext_sales_price#93, ws_net_profit#94, ws_sold_date_sk#95]

(72) WholeStageCodegenTransformer (18)
Input [6]: [wsr_web_site_sk#96, date_sk#97, sales_price#98, profit#99, return_amt#100, net_loss#101]
Arguments: false

(73) FileSourceScanExecTransformer parquet spark_catalog.default.web_returns
Output [5]: [wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(wr_returned_date_sk#106), dynamicpruningexpression(wr_returned_date_sk#106 IN dynamicpruning#5)]
ReadSchema: struct<wr_item_sk:int,wr_order_number:int,wr_return_amt:decimal(7,2),wr_net_loss:decimal(7,2)>

(74) ProjectExecTransformer
Output [6]: [hash(wr_item_sk#102, wr_order_number#103, 42) AS hash_partition_key#107, wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]
Input [5]: [wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]

(75) WholeStageCodegenTransformer (20)
Input [6]: [hash_partition_key#107, wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]
Arguments: false

(76) VeloxResizeBatches
Input [6]: [hash_partition_key#107, wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]
Arguments: 1024, 2147483647, 10485760

(77) ColumnarExchange
Input [6]: [hash_partition_key#107, wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]
Arguments: hashpartitioning(wr_item_sk#102, wr_order_number#103, 1), ENSURE_REQUIREMENTS, [wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106], [plan_id=5], [shuffle_writer_type=hash]

(78) InputAdapter
Input [5]: [wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]

(79) InputIteratorTransformer
Input [5]: [wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106]

(80) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110, ws_sold_date_sk#111]
Batched: true
Location: CatalogFileIndex [{warehouse_dir}/web_sales]
PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_order_number), IsNotNull(ws_web_site_sk)]
ReadSchema: struct<ws_item_sk:int,ws_web_site_sk:int,ws_order_number:int>

(81) FilterExecTransformer
Input [4]: [ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110, ws_sold_date_sk#111]
Arguments: ((isnotnull(ws_item_sk#108) AND isnotnull(ws_order_number#110)) AND isnotnull(ws_web_site_sk#109))

(82) ProjectExecTransformer
Output [4]: [hash(ws_item_sk#108, ws_order_number#110, 42) AS hash_partition_key#112, ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110]
Input [4]: [ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110, ws_sold_date_sk#111]

(83) WholeStageCodegenTransformer (21)
Input [4]: [hash_partition_key#112, ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110]
Arguments: false

(84) VeloxResizeBatches
Input [4]: [hash_partition_key#112, ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110]
Arguments: 1024, 2147483647, 10485760

(85) ColumnarExchange
Input [4]: [hash_partition_key#112, ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110]
Arguments: hashpartitioning(ws_item_sk#108, ws_order_number#110, 1), ENSURE_REQUIREMENTS, [ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110], [plan_id=6], [shuffle_writer_type=hash]

(86) InputAdapter
Input [3]: [ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110]

(87) InputIteratorTransformer
Input [3]: [ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110]

(88) ShuffledHashJoinExecTransformer
Left keys [2]: [wr_item_sk#102, wr_order_number#103]
Right keys [2]: [ws_item_sk#108, ws_order_number#110]
Join type: Inner
Join condition: None

(89) ProjectExecTransformer
Output [6]: [ws_web_site_sk#109 AS wsr_web_site_sk#113, wr_returned_date_sk#106 AS date_sk#114, 0.00 AS sales_price#115, 0.00 AS profit#116, wr_return_amt#104 AS return_amt#117, wr_net_loss#105 AS net_loss#118]
Input [8]: [wr_item_sk#102, wr_order_number#103, wr_return_amt#104, wr_net_loss#105, wr_returned_date_sk#106, ws_item_sk#108, ws_web_site_sk#109, ws_order_number#110]

(90) WholeStageCodegenTransformer (22)
Input [6]: [wsr_web_site_sk#113, date_sk#114, sales_price#115, profit#116, return_amt#117, net_loss#118]
Arguments: false

(91) ColumnarUnion
Arguments: UnknownPartitioning(0)

(92) InputAdapter
Input [6]: [wsr_web_site_sk#96, date_sk#97, sales_price#98, profit#99, return_amt#100, net_loss#101]

(93) InputIteratorTransformer
Input [6]: [wsr_web_site_sk#96, date_sk#97, sales_price#98, profit#99, return_amt#100, net_loss#101]

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

(95) FilterExecTransformer
Input [2]: [web_site_sk#119, web_site_id#120]
Arguments: isnotnull(web_site_sk#119)

(96) WholeStageCodegenTransformer (23)
Input [2]: [web_site_sk#119, web_site_id#120]
Arguments: false

(97) ColumnarBroadcastExchange
Input [2]: [web_site_sk#119, web_site_id#120]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=7]

(98) InputAdapter
Input [2]: [web_site_sk#119, web_site_id#120]

(99) InputIteratorTransformer
Input [2]: [web_site_sk#119, web_site_id#120]

(100) BroadcastHashJoinExecTransformer
Left keys [1]: [wsr_web_site_sk#96]
Right keys [1]: [web_site_sk#119]
Join type: Inner
Join condition: None

(101) ProjectExecTransformer
Output [6]: [date_sk#97, sales_price#98, profit#99, return_amt#100, net_loss#101, web_site_id#120]
Input [8]: [wsr_web_site_sk#96, date_sk#97, sales_price#98, profit#99, return_amt#100, net_loss#101, web_site_sk#119, web_site_id#120]

(102) ReusedExchange [Reuses operator id: 137]
Output [1]: [d_date_sk#121]

(103) InputAdapter
Input [1]: [d_date_sk#121]

(104) InputIteratorTransformer
Input [1]: [d_date_sk#121]

(105) BroadcastHashJoinExecTransformer
Left keys [1]: [date_sk#97]
Right keys [1]: [d_date_sk#121]
Join type: Inner
Join condition: None

(106) ProjectExecTransformer
Output [5]: [web_site_id#120, UnscaledValue(sales_price#98) AS _pre_9#122, UnscaledValue(return_amt#100) AS _pre_10#123, UnscaledValue(profit#99) AS _pre_11#124, UnscaledValue(net_loss#101) AS _pre_12#125]
Input [7]: [date_sk#97, sales_price#98, profit#99, return_amt#100, net_loss#101, web_site_id#120, d_date_sk#121]

(107) FlushableHashAggregateExecTransformer
Input [5]: [web_site_id#120, _pre_9#122, _pre_10#123, _pre_11#124, _pre_12#125]
Keys [1]: [web_site_id#120]
Functions [4]: [partial_sum(_pre_9#122), partial_sum(_pre_10#123), partial_sum(_pre_11#124), partial_sum(_pre_12#125)]
Aggregate Attributes [4]: [sum#126, sum#127, sum#128, sum#129]
Results [5]: [web_site_id#120, sum#130, sum#131, sum#132, sum#133]

(108) ProjectExecTransformer
Output [6]: [hash(web_site_id#120, 42) AS hash_partition_key#134, web_site_id#120, sum#130, sum#131, sum#132, sum#133]
Input [5]: [web_site_id#120, sum#130, sum#131, sum#132, sum#133]

(109) WholeStageCodegenTransformer (25)
Input [6]: [hash_partition_key#134, web_site_id#120, sum#130, sum#131, sum#132, sum#133]
Arguments: false

(110) VeloxResizeBatches
Input [6]: [hash_partition_key#134, web_site_id#120, sum#130, sum#131, sum#132, sum#133]
Arguments: 1024, 2147483647, 10485760

(111) ColumnarExchange
Input [6]: [hash_partition_key#134, web_site_id#120, sum#130, sum#131, sum#132, sum#133]
Arguments: hashpartitioning(web_site_id#120, 1), ENSURE_REQUIREMENTS, [web_site_id#120, sum#130, sum#131, sum#132, sum#133], [plan_id=8], [shuffle_writer_type=hash]

(112) InputAdapter
Input [5]: [web_site_id#120, sum#130, sum#131, sum#132, sum#133]

(113) InputIteratorTransformer
Input [5]: [web_site_id#120, sum#130, sum#131, sum#132, sum#133]

(114) RegularHashAggregateExecTransformer
Input [5]: [web_site_id#120, sum#130, sum#131, sum#132, sum#133]
Keys [1]: [web_site_id#120]
Functions [4]: [sum(UnscaledValue(sales_price#98)), sum(UnscaledValue(return_amt#100)), sum(UnscaledValue(profit#99)), sum(UnscaledValue(net_loss#101))]
Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#98))#135, sum(UnscaledValue(return_amt#100))#136, sum(UnscaledValue(profit#99))#137, sum(UnscaledValue(net_loss#101))#138]
Results [5]: [web_site_id#120, sum(UnscaledValue(sales_price#98))#135, sum(UnscaledValue(return_amt#100))#136, sum(UnscaledValue(profit#99))#137, sum(UnscaledValue(net_loss#101))#138]

(115) ProjectExecTransformer
Output [5]: [MakeDecimal(sum(UnscaledValue(sales_price#98))#135,17,2) AS sales#139, MakeDecimal(sum(UnscaledValue(return_amt#100))#136,17,2) AS returns#140, (MakeDecimal(sum(UnscaledValue(profit#99))#137,17,2) - MakeDecimal(sum(UnscaledValue(net_loss#101))#138,17,2)) AS profit#141, web channel AS channel#142, concat(web_site, web_site_id#120) AS id#143]
Input [5]: [web_site_id#120, sum(UnscaledValue(sales_price#98))#135, sum(UnscaledValue(return_amt#100))#136, sum(UnscaledValue(profit#99))#137, sum(UnscaledValue(net_loss#101))#138]

(116) WholeStageCodegenTransformer (26)
Input [5]: [sales#139, returns#140, profit#141, channel#142, id#143]
Arguments: false

(117) ColumnarUnion
Arguments: UnknownPartitioning(0)

(118) InputAdapter
Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46]

(119) InputIteratorTransformer
Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46]

(120) ExpandExecTransformer
Input [5]: [sales#42, returns#43, profit#44, channel#45, id#46]
Arguments: [[sales#42, returns#43, profit#44, channel#45, id#46, 0], [sales#42, returns#43, profit#44, channel#45, null, 1], [sales#42, returns#43, profit#44, null, null, 3]], [sales#42, returns#43, profit#44, channel#144, id#145, spark_grouping_id#146]

(121) FlushableHashAggregateExecTransformer
Input [6]: [sales#42, returns#43, profit#44, channel#144, id#145, spark_grouping_id#146]
Keys [3]: [channel#144, id#145, spark_grouping_id#146]
Functions [3]: [partial_sum(sales#42), partial_sum(returns#43), partial_sum(profit#44)]
Aggregate Attributes [6]: [sum#147, isEmpty#148, sum#149, isEmpty#150, sum#151, isEmpty#152]
Results [9]: [channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]

(122) ProjectExecTransformer
Output [10]: [hash(channel#144, id#145, spark_grouping_id#146, 42) AS hash_partition_key#159, channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]
Input [9]: [channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]

(123) WholeStageCodegenTransformer (27)
Input [10]: [hash_partition_key#159, channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]
Arguments: false

(124) VeloxResizeBatches
Input [10]: [hash_partition_key#159, channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]
Arguments: 1024, 2147483647, 10485760

(125) ColumnarExchange
Input [10]: [hash_partition_key#159, channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]
Arguments: hashpartitioning(channel#144, id#145, spark_grouping_id#146, 1), ENSURE_REQUIREMENTS, [channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158], [plan_id=9], [shuffle_writer_type=hash]

(126) InputAdapter
Input [9]: [channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]

(127) InputIteratorTransformer
Input [9]: [channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]

(128) RegularHashAggregateExecTransformer
Input [9]: [channel#144, id#145, spark_grouping_id#146, sum#153, isEmpty#154, sum#155, isEmpty#156, sum#157, isEmpty#158]
Keys [3]: [channel#144, id#145, spark_grouping_id#146]
Functions [3]: [sum(sales#42), sum(returns#43), sum(profit#44)]
Aggregate Attributes [3]: [sum(sales#42)#160, sum(returns#43)#161, sum(profit#44)#162]
Results [6]: [channel#144, id#145, spark_grouping_id#146, sum(sales#42)#160, sum(returns#43)#161, sum(profit#44)#162]

(129) ProjectExecTransformer
Output [5]: [channel#144, id#145, sum(sales#42)#160 AS sales#163, sum(returns#43)#161 AS returns#164, sum(profit#44)#162 AS profit#165]
Input [6]: [channel#144, id#145, spark_grouping_id#146, sum(sales#42)#160, sum(returns#43)#161, sum(profit#44)#162]

(130) WholeStageCodegenTransformer (28)
Input [5]: [channel#144, id#145, sales#163, returns#164, profit#165]
Arguments: false

(131) TakeOrderedAndProjectExecTransformer
Input [5]: [channel#144, id#145, sales#163, returns#164, profit#165]
Arguments: 100, [channel#144 ASC NULLS FIRST, id#145 ASC NULLS FIRST], [channel#144, id#145, sales#163, returns#164, profit#165], 0

(132) VeloxColumnarToRow
Input [5]: [channel#144, id#145, sales#163, returns#164, profit#165]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
ColumnarBroadcastExchange (137)
+- ^ ProjectExecTransformer (135)
   +- ^ FilterExecTransformer (134)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (133)


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

(134) FilterExecTransformer
Input [2]: [d_date_sk#24, d_date#166]
Arguments: (((isnotnull(d_date#166) AND (d_date#166 >= 2000-08-23)) AND (d_date#166 <= 2000-09-06)) AND isnotnull(d_date_sk#24))

(135) ProjectExecTransformer
Output [1]: [d_date_sk#24]
Input [2]: [d_date_sk#24, d_date#166]

(136) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#24]
Arguments: false

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

Subquery:2 Hosting operator id = 5 Hosting Expression = sr_returned_date_sk#15 IN dynamicpruning#5

Subquery:3 Hosting operator id = 35 Hosting Expression = cs_sold_date_sk#50 IN dynamicpruning#5

Subquery:4 Hosting operator id = 39 Hosting Expression = cr_returned_date_sk#60 IN dynamicpruning#5

Subquery:5 Hosting operator id = 69 Hosting Expression = ws_sold_date_sk#95 IN dynamicpruning#5

Subquery:6 Hosting operator id = 73 Hosting Expression = wr_returned_date_sk#106 IN dynamicpruning#5


