== Physical Plan ==
VeloxColumnarToRow (20)
+- ^ RegularHashAggregateExecTransformer (18)
   +- ^ InputIteratorTransformer (17)
      +- ColumnarExchange (15)
         +- VeloxResizeBatches (14)
            +- ^ FlushableHashAggregateExecTransformer (12)
               +- ^ ProjectExecTransformer (11)
                  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (10)
                     :- ^ ProjectExecTransformer (3)
                     :  +- ^ FilterExecTransformer (2)
                     :     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.lineitem (1)
                     +- ^ InputIteratorTransformer (9)
                        +- ColumnarBroadcastExchange (7)
                           +- ^ FilterExecTransformer (5)
                              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.part (4)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.lineitem
Output [6]: [l_partkey#1, l_quantity#2, l_extendedprice#3, l_discount#4, l_shipinstruct#5, l_shipmode#6]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/lineitem]
PushedFilters: [IsNotNull(l_shipinstruct), In(l_shipmode, [AIR,AIR REG]), EqualTo(l_shipinstruct,DELIVER IN PERSON), IsNotNull(l_partkey), Or(Or(And(GreaterThanOrEqual(l_quantity,1),LessThanOrEqual(l_quantity,11)),And(GreaterThanOrEqual(l_quantity,10),LessThanOrEqual(l_quantity,20))),And(GreaterThanOrEqual(l_quantity,20),LessThanOrEqual(l_quantity,30)))]
ReadSchema: struct<l_partkey:bigint,l_quantity:decimal(10,0),l_extendedprice:decimal(10,0),l_discount:decimal(10,0),l_shipinstruct:string,l_shipmode:string>

(2) FilterExecTransformer
Input [6]: [l_partkey#1, l_quantity#2, l_extendedprice#3, l_discount#4, l_shipinstruct#5, l_shipmode#6]
Arguments: ((((isnotnull(l_shipinstruct#5) AND l_shipmode#6 IN (AIR,AIR REG)) AND (l_shipinstruct#5 = DELIVER IN PERSON)) AND isnotnull(l_partkey#1)) AND ((((l_quantity#2 >= 1) AND (l_quantity#2 <= 11)) OR ((l_quantity#2 >= 10) AND (l_quantity#2 <= 20))) OR ((l_quantity#2 >= 20) AND (l_quantity#2 <= 30))))

(3) ProjectExecTransformer
Output [4]: [l_partkey#1, l_quantity#2, l_extendedprice#3, l_discount#4]
Input [6]: [l_partkey#1, l_quantity#2, l_extendedprice#3, l_discount#4, l_shipinstruct#5, l_shipmode#6]

(4) FileSourceScanExecTransformer parquet spark_catalog.default.part
Output [4]: [p_partkey#7, p_brand#8, p_size#9, p_container#10]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/part]
PushedFilters: [IsNotNull(p_size), GreaterThanOrEqual(p_size,1), IsNotNull(p_partkey), Or(Or(And(And(EqualTo(p_brand,Brand#11),In(p_container, [SM BOX,SM CASE,SM PACK,SM PKG])),LessThanOrEqual(p_size,5)),And(And(EqualTo(p_brand,Brand#12),In(p_container, [MED BAG,MED BOX,MED PACK,MED PKG])),LessThanOrEqual(p_size,10))),And(And(EqualTo(p_brand,Brand#13),In(p_container, [LG BOX,LG CASE,LG PACK,LG PKG])),LessThanOrEqual(p_size,15)))]
ReadSchema: struct<p_partkey:bigint,p_brand:string,p_size:int,p_container:string>

(5) FilterExecTransformer
Input [4]: [p_partkey#7, p_brand#8, p_size#9, p_container#10]
Arguments: (((isnotnull(p_size#9) AND (p_size#9 >= 1)) AND isnotnull(p_partkey#7)) AND (((((p_brand#8 = Brand#11) AND p_container#10 IN (SM CASE,SM BOX,SM PACK,SM PKG)) AND (p_size#9 <= 5)) OR (((p_brand#8 = Brand#12) AND p_container#10 IN (MED BAG,MED BOX,MED PKG,MED PACK)) AND (p_size#9 <= 10))) OR (((p_brand#8 = Brand#13) AND p_container#10 IN (LG CASE,LG BOX,LG PACK,LG PKG)) AND (p_size#9 <= 15))))

(6) WholeStageCodegenTransformer (1)
Input [4]: [p_partkey#7, p_brand#8, p_size#9, p_container#10]
Arguments: false

(7) ColumnarBroadcastExchange
Input [4]: [p_partkey#7, p_brand#8, p_size#9, p_container#10]
Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=1]

(8) InputAdapter
Input [4]: [p_partkey#7, p_brand#8, p_size#9, p_container#10]

(9) InputIteratorTransformer
Input [4]: [p_partkey#7, p_brand#8, p_size#9, p_container#10]

(10) BroadcastHashJoinExecTransformer
Left keys [1]: [l_partkey#1]
Right keys [1]: [p_partkey#7]
Join type: Inner
Join condition: (((((((p_brand#8 = Brand#11) AND p_container#10 IN (SM CASE,SM BOX,SM PACK,SM PKG)) AND (l_quantity#2 >= 1)) AND (l_quantity#2 <= 11)) AND (p_size#9 <= 5)) OR (((((p_brand#8 = Brand#12) AND p_container#10 IN (MED BAG,MED BOX,MED PKG,MED PACK)) AND (l_quantity#2 >= 10)) AND (l_quantity#2 <= 20)) AND (p_size#9 <= 10))) OR (((((p_brand#8 = Brand#13) AND p_container#10 IN (LG CASE,LG BOX,LG PACK,LG PKG)) AND (l_quantity#2 >= 20)) AND (l_quantity#2 <= 30)) AND (p_size#9 <= 15)))

(11) ProjectExecTransformer
Output [1]: [(l_extendedprice#3 * (1 - l_discount#4)) AS _pre_1#14]
Input [8]: [l_partkey#1, l_quantity#2, l_extendedprice#3, l_discount#4, p_partkey#7, p_brand#8, p_size#9, p_container#10]

(12) FlushableHashAggregateExecTransformer
Input [1]: [_pre_1#14]
Keys: []
Functions [1]: [partial_sum(_pre_1#14)]
Aggregate Attributes [2]: [sum#15, isEmpty#16]
Results [2]: [sum#17, isEmpty#18]

(13) WholeStageCodegenTransformer (2)
Input [2]: [sum#17, isEmpty#18]
Arguments: false

(14) VeloxResizeBatches
Input [2]: [sum#17, isEmpty#18]
Arguments: 1024, 2147483647, 10485760

(15) ColumnarExchange
Input [2]: [sum#17, isEmpty#18]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2], [shuffle_writer_type=hash]

(16) InputAdapter
Input [2]: [sum#17, isEmpty#18]

(17) InputIteratorTransformer
Input [2]: [sum#17, isEmpty#18]

(18) RegularHashAggregateExecTransformer
Input [2]: [sum#17, isEmpty#18]
Keys: []
Functions [1]: [sum((l_extendedprice#3 * (1 - l_discount#4)))]
Aggregate Attributes [1]: [sum((l_extendedprice#3 * (1 - l_discount#4)))#19]
Results [1]: [sum((l_extendedprice#3 * (1 - l_discount#4)))#19 AS revenue#20]

(19) WholeStageCodegenTransformer (3)
Input [1]: [revenue#20]
Arguments: false

(20) VeloxColumnarToRow
Input [1]: [revenue#20]

