== Physical Plan ==
VeloxColumnarToRow (37)
+- TakeOrderedAndProjectExecTransformer (36)
   +- ^ RegularHashAggregateExecTransformer (34)
      +- ^ InputIteratorTransformer (33)
         +- ColumnarExchange (31)
            +- VeloxResizeBatches (30)
               +- ^ ProjectExecTransformer (28)
                  +- ^ FlushableHashAggregateExecTransformer (27)
                     +- ^ ProjectExecTransformer (26)
                        +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25)
                           :- ^ ProjectExecTransformer (17)
                           :  +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (16)
                           :     :- ^ InputIteratorTransformer (7)
                           :     :  +- ColumnarExchange (5)
                           :     :     +- VeloxResizeBatches (4)
                           :     :        +- ^ ProjectExecTransformer (2)
                           :     :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
                           :     +- ^ InputIteratorTransformer (15)
                           :        +- ColumnarExchange (13)
                           :           +- VeloxResizeBatches (12)
                           :              +- ^ ProjectExecTransformer (10)
                           :                 +- ^ FilterExecTransformer (9)
                           :                    +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_returns (8)
                           +- ^ InputIteratorTransformer (24)
                              +- ColumnarBroadcastExchange (22)
                                 +- ^ ProjectExecTransformer (20)
                                    +- ^ FilterExecTransformer (19)
                                       +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.reason (18)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, ss_sold_date_sk#6]
Batched: true
Location: CatalogFileIndex [{warehouse_dir}/store_sales]
ReadSchema: struct<ss_item_sk:int,ss_customer_sk:int,ss_ticket_number:int,ss_quantity:int,ss_sales_price:decimal(7,2)>

(2) ProjectExecTransformer
Output [6]: [hash(ss_item_sk#1, ss_ticket_number#3, 42) AS hash_partition_key#7, ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]
Input [6]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, ss_sold_date_sk#6]

(3) WholeStageCodegenTransformer (1)
Input [6]: [hash_partition_key#7, ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]
Arguments: false

(4) VeloxResizeBatches
Input [6]: [hash_partition_key#7, ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]
Arguments: 1024, 2147483647, 10485760

(5) ColumnarExchange
Input [6]: [hash_partition_key#7, ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]
Arguments: hashpartitioning(ss_item_sk#1, ss_ticket_number#3, 1), ENSURE_REQUIREMENTS, [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5], [plan_id=1], [shuffle_writer_type=hash]

(6) InputAdapter
Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]

(7) InputIteratorTransformer
Input [5]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5]

(8) FileSourceScanExecTransformer parquet spark_catalog.default.store_returns
Output [5]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12]
Batched: true
Location: CatalogFileIndex [{warehouse_dir}/store_returns]
PushedFilters: [IsNotNull(sr_item_sk), IsNotNull(sr_ticket_number), IsNotNull(sr_reason_sk)]
ReadSchema: struct<sr_item_sk:int,sr_reason_sk:int,sr_ticket_number:int,sr_return_quantity:int>

(9) FilterExecTransformer
Input [5]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12]
Arguments: ((isnotnull(sr_item_sk#8) AND isnotnull(sr_ticket_number#10)) AND isnotnull(sr_reason_sk#9))

(10) ProjectExecTransformer
Output [5]: [hash(sr_item_sk#8, sr_ticket_number#10, 42) AS hash_partition_key#13, sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11]
Input [5]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11, sr_returned_date_sk#12]

(11) WholeStageCodegenTransformer (2)
Input [5]: [hash_partition_key#13, sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11]
Arguments: false

(12) VeloxResizeBatches
Input [5]: [hash_partition_key#13, sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11]
Arguments: 1024, 2147483647, 10485760

(13) ColumnarExchange
Input [5]: [hash_partition_key#13, sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11]
Arguments: hashpartitioning(sr_item_sk#8, sr_ticket_number#10, 1), ENSURE_REQUIREMENTS, [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11], [plan_id=2], [shuffle_writer_type=hash]

(14) InputAdapter
Input [4]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11]

(15) InputIteratorTransformer
Input [4]: [sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11]

(16) ShuffledHashJoinExecTransformer
Left keys [2]: [ss_item_sk#1, ss_ticket_number#3]
Right keys [2]: [sr_item_sk#8, sr_ticket_number#10]
Join type: Inner
Join condition: None

(17) ProjectExecTransformer
Output [5]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#9, sr_return_quantity#11]
Input [9]: [ss_item_sk#1, ss_customer_sk#2, ss_ticket_number#3, ss_quantity#4, ss_sales_price#5, sr_item_sk#8, sr_reason_sk#9, sr_ticket_number#10, sr_return_quantity#11]

(18) FileSourceScanExecTransformer parquet spark_catalog.default.reason
Output [2]: [r_reason_sk#14, r_reason_desc#15]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/reason]
PushedFilters: [IsNotNull(r_reason_desc), EqualTo(r_reason_desc,reason 28                                                                                           ), IsNotNull(r_reason_sk)]
ReadSchema: struct<r_reason_sk:int,r_reason_desc:string>

(19) FilterExecTransformer
Input [2]: [r_reason_sk#14, r_reason_desc#15]
Arguments: ((isnotnull(r_reason_desc#15) AND (r_reason_desc#15 = reason 28                                                                                           )) AND isnotnull(r_reason_sk#14))

(20) ProjectExecTransformer
Output [1]: [r_reason_sk#14]
Input [2]: [r_reason_sk#14, r_reason_desc#15]

(21) WholeStageCodegenTransformer (3)
Input [1]: [r_reason_sk#14]
Arguments: false

(22) ColumnarBroadcastExchange
Input [1]: [r_reason_sk#14]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3]

(23) InputAdapter
Input [1]: [r_reason_sk#14]

(24) InputIteratorTransformer
Input [1]: [r_reason_sk#14]

(25) BroadcastHashJoinExecTransformer
Left keys [1]: [sr_reason_sk#9]
Right keys [1]: [r_reason_sk#14]
Join type: Inner
Join condition: None

(26) ProjectExecTransformer
Output [2]: [ss_customer_sk#2, CASE WHEN isnotnull(sr_return_quantity#11) THEN (cast((ss_quantity#4 - sr_return_quantity#11) as decimal(10,0)) * ss_sales_price#5) ELSE (cast(ss_quantity#4 as decimal(10,0)) * ss_sales_price#5) END AS act_sales#16]
Input [6]: [ss_customer_sk#2, ss_quantity#4, ss_sales_price#5, sr_reason_sk#9, sr_return_quantity#11, r_reason_sk#14]

(27) FlushableHashAggregateExecTransformer
Input [2]: [ss_customer_sk#2, act_sales#16]
Keys [1]: [ss_customer_sk#2]
Functions [1]: [partial_sum(act_sales#16)]
Aggregate Attributes [2]: [sum#17, isEmpty#18]
Results [3]: [ss_customer_sk#2, sum#19, isEmpty#20]

(28) ProjectExecTransformer
Output [4]: [hash(ss_customer_sk#2, 42) AS hash_partition_key#21, ss_customer_sk#2, sum#19, isEmpty#20]
Input [3]: [ss_customer_sk#2, sum#19, isEmpty#20]

(29) WholeStageCodegenTransformer (4)
Input [4]: [hash_partition_key#21, ss_customer_sk#2, sum#19, isEmpty#20]
Arguments: false

(30) VeloxResizeBatches
Input [4]: [hash_partition_key#21, ss_customer_sk#2, sum#19, isEmpty#20]
Arguments: 1024, 2147483647, 10485760

(31) ColumnarExchange
Input [4]: [hash_partition_key#21, ss_customer_sk#2, sum#19, isEmpty#20]
Arguments: hashpartitioning(ss_customer_sk#2, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#2, sum#19, isEmpty#20], [plan_id=4], [shuffle_writer_type=hash]

(32) InputAdapter
Input [3]: [ss_customer_sk#2, sum#19, isEmpty#20]

(33) InputIteratorTransformer
Input [3]: [ss_customer_sk#2, sum#19, isEmpty#20]

(34) RegularHashAggregateExecTransformer
Input [3]: [ss_customer_sk#2, sum#19, isEmpty#20]
Keys [1]: [ss_customer_sk#2]
Functions [1]: [sum(act_sales#16)]
Aggregate Attributes [1]: [sum(act_sales#16)#22]
Results [2]: [ss_customer_sk#2, sum(act_sales#16)#22 AS sumsales#23]

(35) WholeStageCodegenTransformer (5)
Input [2]: [ss_customer_sk#2, sumsales#23]
Arguments: false

(36) TakeOrderedAndProjectExecTransformer
Input [2]: [ss_customer_sk#2, sumsales#23]
Arguments: 100, [sumsales#23 ASC NULLS FIRST, ss_customer_sk#2 ASC NULLS FIRST], [ss_customer_sk#2, sumsales#23], 0

(37) VeloxColumnarToRow
Input [2]: [ss_customer_sk#2, sumsales#23]

