== Physical Plan ==
VeloxColumnarToRow (48)
+- ^ ProjectExecTransformer (46)
   +- ^ SortExecTransformer (45)
      +- ^ InputIteratorTransformer (44)
         +- ColumnarExchange (42)
            +- VeloxResizeBatches (41)
               +- ^ ProjectExecTransformer (39)
                  +- ^ WindowExecTransformer (38)
                     +- ^ SortExecTransformer (37)
                        +- ^ InputIteratorTransformer (36)
                           +- ColumnarExchange (34)
                              +- VeloxResizeBatches (33)
                                 +- ^ ProjectExecTransformer (31)
                                    +- ^ RegularHashAggregateExecTransformer (30)
                                       +- ^ InputIteratorTransformer (29)
                                          +- ColumnarExchange (27)
                                             +- VeloxResizeBatches (26)
                                                +- ^ ProjectExecTransformer (24)
                                                   +- ^ FlushableHashAggregateExecTransformer (23)
                                                      +- ^ ProjectExecTransformer (22)
                                                         +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (21)
                                                            :- ^ InputIteratorTransformer (12)
                                                            :  +- ColumnarExchange (10)
                                                            :     +- VeloxResizeBatches (9)
                                                            :        +- ^ ProjectExecTransformer (7)
                                                            :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (6)
                                                            :              :- ^ FilterExecTransformer (2)
                                                            :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
                                                            :              +- ^ InputIteratorTransformer (5)
                                                            :                 +- ReusedExchange (3)
                                                            +- ^ InputIteratorTransformer (20)
                                                               +- ColumnarExchange (18)
                                                                  +- VeloxResizeBatches (17)
                                                                     +- ^ ProjectExecTransformer (15)
                                                                        +- ^ FilterExecTransformer (14)
                                                                           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (13)


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

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

(3) ReusedExchange [Reuses operator id: 53]
Output [1]: [d_date_sk#5]

(4) InputAdapter
Input [1]: [d_date_sk#5]

(5) InputIteratorTransformer
Input [1]: [d_date_sk#5]

(6) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#3]
Right keys [1]: [d_date_sk#5]
Join type: Inner
Join condition: None

(7) ProjectExecTransformer
Output [3]: [hash(ss_item_sk#1, 42) AS hash_partition_key#6, ss_item_sk#1, ss_ext_sales_price#2]
Input [4]: [ss_item_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, d_date_sk#5]

(8) WholeStageCodegenTransformer (3)
Input [3]: [hash_partition_key#6, ss_item_sk#1, ss_ext_sales_price#2]
Arguments: false

(9) VeloxResizeBatches
Input [3]: [hash_partition_key#6, ss_item_sk#1, ss_ext_sales_price#2]
Arguments: 1024, 2147483647, 10485760

(10) ColumnarExchange
Input [3]: [hash_partition_key#6, ss_item_sk#1, ss_ext_sales_price#2]
Arguments: hashpartitioning(ss_item_sk#1, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_ext_sales_price#2], [plan_id=1], [shuffle_writer_type=hash]

(11) InputAdapter
Input [2]: [ss_item_sk#1, ss_ext_sales_price#2]

(12) InputIteratorTransformer
Input [2]: [ss_item_sk#1, ss_ext_sales_price#2]

(13) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [In(i_category, [Books                                             ,Jewelry                                           ,Sports                                            ]), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_id:string,i_item_desc:string,i_current_price:decimal(7,2),i_class:string,i_category:string>

(14) FilterExecTransformer
Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]
Arguments: (i_category#12 IN (Jewelry                                           ,Sports                                            ,Books                                             ) AND isnotnull(i_item_sk#7))

(15) ProjectExecTransformer
Output [7]: [hash(i_item_sk#7, 42) AS hash_partition_key#13, i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]
Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]

(16) WholeStageCodegenTransformer (4)
Input [7]: [hash_partition_key#13, i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]
Arguments: false

(17) VeloxResizeBatches
Input [7]: [hash_partition_key#13, i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]
Arguments: 1024, 2147483647, 10485760

(18) ColumnarExchange
Input [7]: [hash_partition_key#13, i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]
Arguments: hashpartitioning(i_item_sk#7, 1), ENSURE_REQUIREMENTS, [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12], [plan_id=2], [shuffle_writer_type=hash]

(19) InputAdapter
Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]

(20) InputIteratorTransformer
Input [6]: [i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]

(21) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [i_item_sk#7]
Join type: Inner
Join condition: None

(22) ProjectExecTransformer
Output [6]: [i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12, UnscaledValue(ss_ext_sales_price#2) AS _pre_1#14]
Input [8]: [ss_item_sk#1, ss_ext_sales_price#2, i_item_sk#7, i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12]

(23) FlushableHashAggregateExecTransformer
Input [6]: [i_item_id#8, i_item_desc#9, i_current_price#10, i_class#11, i_category#12, _pre_1#14]
Keys [5]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10]
Functions [1]: [partial_sum(_pre_1#14)]
Aggregate Attributes [1]: [sum#15]
Results [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]

(24) ProjectExecTransformer
Output [7]: [hash(i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, 42) AS hash_partition_key#17, i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]
Input [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]

(25) WholeStageCodegenTransformer (5)
Input [7]: [hash_partition_key#17, i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]
Arguments: false

(26) VeloxResizeBatches
Input [7]: [hash_partition_key#17, i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]
Arguments: 1024, 2147483647, 10485760

(27) ColumnarExchange
Input [7]: [hash_partition_key#17, i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]
Arguments: hashpartitioning(i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, 1), ENSURE_REQUIREMENTS, [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16], [plan_id=3], [shuffle_writer_type=hash]

(28) InputAdapter
Input [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]

(29) InputIteratorTransformer
Input [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]

(30) RegularHashAggregateExecTransformer
Input [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum#16]
Keys [5]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10]
Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#18]
Results [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum(UnscaledValue(ss_ext_sales_price#2))#18]

(31) ProjectExecTransformer
Output [8]: [hash(i_class#11, 42) AS hash_partition_key#19, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#18,17,2) AS itemrevenue#20, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#18,17,2) AS _w0#21, i_item_id#8]
Input [6]: [i_item_id#8, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, sum(UnscaledValue(ss_ext_sales_price#2))#18]

(32) WholeStageCodegenTransformer (6)
Input [8]: [hash_partition_key#19, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8]
Arguments: false

(33) VeloxResizeBatches
Input [8]: [hash_partition_key#19, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8]
Arguments: 1024, 2147483647, 10485760

(34) ColumnarExchange
Input [8]: [hash_partition_key#19, i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8]
Arguments: hashpartitioning(i_class#11, 1), ENSURE_REQUIREMENTS, [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8], [plan_id=4], [shuffle_writer_type=hash]

(35) InputAdapter
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8]

(36) InputIteratorTransformer
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8]

(37) SortExecTransformer
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8]
Arguments: [i_class#11 ASC NULLS FIRST], false, 0

(38) WindowExecTransformer
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8]
Arguments: [sum(_w0#21) windowspecdefinition(i_class#11, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS _we0#22], [i_class#11]

(39) ProjectExecTransformer
Output [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, ((_w0#21 * 100) / _we0#22) AS revenueratio#23, i_item_id#8]
Input [8]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, _w0#21, i_item_id#8, _we0#22]

(40) WholeStageCodegenTransformer (7)
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23, i_item_id#8]
Arguments: false

(41) VeloxResizeBatches
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23, i_item_id#8]
Arguments: 1024, 2147483647, 10485760

(42) ColumnarExchange
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23, i_item_id#8]
Arguments: rangepartitioning(i_category#12 ASC NULLS FIRST, i_class#11 ASC NULLS FIRST, i_item_id#8 ASC NULLS FIRST, i_item_desc#9 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=5], [shuffle_writer_type=hash]

(43) InputAdapter
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23, i_item_id#8]

(44) InputIteratorTransformer
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23, i_item_id#8]

(45) SortExecTransformer
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23, i_item_id#8]
Arguments: [i_category#12 ASC NULLS FIRST, i_class#11 ASC NULLS FIRST, i_item_id#8 ASC NULLS FIRST, i_item_desc#9 ASC NULLS FIRST, revenueratio#23 ASC NULLS FIRST], true, 0

(46) ProjectExecTransformer
Output [6]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23]
Input [7]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23, i_item_id#8]

(47) WholeStageCodegenTransformer (8)
Input [6]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23]
Arguments: false

(48) VeloxColumnarToRow
Input [6]: [i_item_desc#9, i_category#12, i_class#11, i_current_price#10, itemrevenue#20, revenueratio#23]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#3 IN dynamicpruning#4
ColumnarBroadcastExchange (53)
+- ^ ProjectExecTransformer (51)
   +- ^ FilterExecTransformer (50)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (49)


(49) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#5, d_date#24]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2001-01-01), LessThanOrEqual(d_date,2001-01-31), GreaterThanOrEqual(d_date_sk,2451911), LessThanOrEqual(d_date_sk,2451941), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(50) FilterExecTransformer
Input [2]: [d_date_sk#5, d_date#24]
Arguments: (((((isnotnull(d_date#24) AND (d_date#24 >= 2001-01-01)) AND (d_date#24 <= 2001-01-31)) AND (d_date_sk#5 >= 2451911)) AND (d_date_sk#5 <= 2451941)) AND isnotnull(d_date_sk#5))

(51) ProjectExecTransformer
Output [1]: [d_date_sk#5]
Input [2]: [d_date_sk#5, d_date#24]

(52) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#5]
Arguments: false

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


