== Physical Plan ==
VeloxColumnarToRow (49)
+- TakeOrderedAndProjectExecTransformer (48)
   +- ^ RegularHashAggregateExecTransformer (46)
      +- ^ InputIteratorTransformer (45)
         +- ColumnarExchange (43)
            +- VeloxResizeBatches (42)
               +- ^ ProjectExecTransformer (40)
                  +- ^ FlushableHashAggregateExecTransformer (39)
                     +- ^ ProjectExecTransformer (38)
                        +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37)
                           :- ^ ProjectExecTransformer (26)
                           :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25)
                           :     :- ^ FilterExecTransformer (2)
                           :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (1)
                           :     +- ^ InputIteratorTransformer (24)
                           :        +- ColumnarBroadcastExchange (22)
                           :           +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (20)
                           :              :- ^ FilterExecTransformer (4)
                           :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.orders (3)
                           :              +- ^ InputIteratorTransformer (19)
                           :                 +- ColumnarBroadcastExchange (17)
                           :                    +- ^ ProjectExecTransformer (15)
                           :                       +- ^ FilterExecTransformer (14)
                           :                          +- ^ RegularHashAggregateExecTransformer (13)
                           :                             +- ^ InputIteratorTransformer (12)
                           :                                +- ColumnarExchange (10)
                           :                                   +- VeloxResizeBatches (9)
                           :                                      +- ^ ProjectExecTransformer (7)
                           :                                         +- ^ FlushableHashAggregateExecTransformer (6)
                           :                                            +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.lineitem (5)
                           +- ^ InputIteratorTransformer (36)
                              +- ColumnarBroadcastExchange (34)
                                 +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (32)
                                    :- ^ FilterExecTransformer (28)
                                    :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.lineitem (27)
                                    +- ^ InputIteratorTransformer (31)
                                       +- ReusedExchange (29)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [2]: [c_custkey#1, c_name#2]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_custkey)]
ReadSchema: struct<c_custkey:bigint,c_name:string>

(2) FilterExecTransformer
Input [2]: [c_custkey#1, c_name#2]
Arguments: isnotnull(c_custkey#1)

(3) FileSourceScanExecTransformer parquet spark_catalog.default.orders
Output [4]: [o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/orders]
PushedFilters: [IsNotNull(o_custkey), IsNotNull(o_orderkey)]
ReadSchema: struct<o_orderkey:bigint,o_custkey:bigint,o_totalprice:decimal(10,0),o_orderdate:date>

(4) FilterExecTransformer
Input [4]: [o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6]
Arguments: (isnotnull(o_custkey#4) AND isnotnull(o_orderkey#3))

(5) FileSourceScanExecTransformer parquet spark_catalog.default.lineitem
Output [2]: [l_orderkey#7, l_quantity#8]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/lineitem]
ReadSchema: struct<l_orderkey:bigint,l_quantity:decimal(10,0)>

(6) FlushableHashAggregateExecTransformer
Input [2]: [l_orderkey#7, l_quantity#8]
Keys [1]: [l_orderkey#7]
Functions [1]: [partial_sum(l_quantity#8)]
Aggregate Attributes [2]: [sum#9, isEmpty#10]
Results [3]: [l_orderkey#7, sum#11, isEmpty#12]

(7) ProjectExecTransformer
Output [4]: [hash(l_orderkey#7, 42) AS hash_partition_key#13, l_orderkey#7, sum#11, isEmpty#12]
Input [3]: [l_orderkey#7, sum#11, isEmpty#12]

(8) WholeStageCodegenTransformer (1)
Input [4]: [hash_partition_key#13, l_orderkey#7, sum#11, isEmpty#12]
Arguments: false

(9) VeloxResizeBatches
Input [4]: [hash_partition_key#13, l_orderkey#7, sum#11, isEmpty#12]
Arguments: 1024, 2147483647, 10485760

(10) ColumnarExchange
Input [4]: [hash_partition_key#13, l_orderkey#7, sum#11, isEmpty#12]
Arguments: hashpartitioning(l_orderkey#7, 1), ENSURE_REQUIREMENTS, [l_orderkey#7, sum#11, isEmpty#12], [plan_id=1], [shuffle_writer_type=hash]

(11) InputAdapter
Input [3]: [l_orderkey#7, sum#11, isEmpty#12]

(12) InputIteratorTransformer
Input [3]: [l_orderkey#7, sum#11, isEmpty#12]

(13) RegularHashAggregateExecTransformer
Input [3]: [l_orderkey#7, sum#11, isEmpty#12]
Keys [1]: [l_orderkey#7]
Functions [1]: [sum(l_quantity#8)]
Aggregate Attributes [1]: [sum(l_quantity#8)#14]
Results [2]: [l_orderkey#7, sum(l_quantity#8)#14 AS sum(l_quantity#15)#16]

(14) FilterExecTransformer
Input [2]: [l_orderkey#7, sum(l_quantity#15)#16]
Arguments: (isnotnull(sum(l_quantity#15)#16) AND (sum(l_quantity#15)#16 > 300))

(15) ProjectExecTransformer
Output [1]: [l_orderkey#7]
Input [2]: [l_orderkey#7, sum(l_quantity#15)#16]

(16) WholeStageCodegenTransformer (2)
Input [1]: [l_orderkey#7]
Arguments: false

(17) ColumnarBroadcastExchange
Input [1]: [l_orderkey#7]
Arguments: HashedRelationBroadcastMode(List(input[0, bigint, true]),false), [plan_id=2]

(18) InputAdapter
Input [1]: [l_orderkey#7]

(19) InputIteratorTransformer
Input [1]: [l_orderkey#7]

(20) BroadcastHashJoinExecTransformer
Left keys [1]: [o_orderkey#3]
Right keys [1]: [l_orderkey#7]
Join type: LeftSemi
Join condition: None

(21) WholeStageCodegenTransformer (3)
Input [4]: [o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6]
Arguments: false

(22) ColumnarBroadcastExchange
Input [4]: [o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6]
Arguments: HashedRelationBroadcastMode(List(input[1, bigint, false]),false), [plan_id=3]

(23) InputAdapter
Input [4]: [o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6]

(24) InputIteratorTransformer
Input [4]: [o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6]

(25) BroadcastHashJoinExecTransformer
Left keys [1]: [c_custkey#1]
Right keys [1]: [o_custkey#4]
Join type: Inner
Join condition: None

(26) ProjectExecTransformer
Output [5]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6]
Input [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_custkey#4, o_totalprice#5, o_orderdate#6]

(27) FileSourceScanExecTransformer parquet spark_catalog.default.lineitem
Output [2]: [l_orderkey#17, l_quantity#15]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/lineitem]
PushedFilters: [IsNotNull(l_orderkey)]
ReadSchema: struct<l_orderkey:bigint,l_quantity:decimal(10,0)>

(28) FilterExecTransformer
Input [2]: [l_orderkey#17, l_quantity#15]
Arguments: isnotnull(l_orderkey#17)

(29) ReusedExchange [Reuses operator id: 17]
Output [1]: [l_orderkey#7]

(30) InputAdapter
Input [1]: [l_orderkey#7]

(31) InputIteratorTransformer
Input [1]: [l_orderkey#7]

(32) BroadcastHashJoinExecTransformer
Left keys [1]: [l_orderkey#17]
Right keys [1]: [l_orderkey#7]
Join type: LeftSemi
Join condition: None

(33) WholeStageCodegenTransformer (6)
Input [2]: [l_orderkey#17, l_quantity#15]
Arguments: false

(34) ColumnarBroadcastExchange
Input [2]: [l_orderkey#17, l_quantity#15]
Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=4]

(35) InputAdapter
Input [2]: [l_orderkey#17, l_quantity#15]

(36) InputIteratorTransformer
Input [2]: [l_orderkey#17, l_quantity#15]

(37) BroadcastHashJoinExecTransformer
Left keys [1]: [o_orderkey#3]
Right keys [1]: [l_orderkey#17]
Join type: Inner
Join condition: None

(38) ProjectExecTransformer
Output [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_quantity#15]
Input [7]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_orderkey#17, l_quantity#15]

(39) FlushableHashAggregateExecTransformer
Input [6]: [c_custkey#1, c_name#2, o_orderkey#3, o_totalprice#5, o_orderdate#6, l_quantity#15]
Keys [5]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5]
Functions [1]: [partial_sum(l_quantity#15)]
Aggregate Attributes [2]: [sum#18, isEmpty#19]
Results [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]

(40) ProjectExecTransformer
Output [8]: [hash(c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, 42) AS hash_partition_key#22, c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]
Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]

(41) WholeStageCodegenTransformer (7)
Input [8]: [hash_partition_key#22, c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]
Arguments: false

(42) VeloxResizeBatches
Input [8]: [hash_partition_key#22, c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]
Arguments: 1024, 2147483647, 10485760

(43) ColumnarExchange
Input [8]: [hash_partition_key#22, c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]
Arguments: hashpartitioning(c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, 1), ENSURE_REQUIREMENTS, [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21], [plan_id=5], [shuffle_writer_type=hash]

(44) InputAdapter
Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]

(45) InputIteratorTransformer
Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]

(46) RegularHashAggregateExecTransformer
Input [7]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum#20, isEmpty#21]
Keys [5]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5]
Functions [1]: [sum(l_quantity#15)]
Aggregate Attributes [1]: [sum(l_quantity#15)#23]
Results [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity#15)#23 AS sum(l_quantity)#24]

(47) WholeStageCodegenTransformer (8)
Input [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#24]
Arguments: false

(48) TakeOrderedAndProjectExecTransformer
Input [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#24]
Arguments: 100, [o_totalprice#5 DESC NULLS LAST, o_orderdate#6 ASC NULLS FIRST], [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#24], 0

(49) VeloxColumnarToRow
Input [6]: [c_name#2, c_custkey#1, o_orderkey#3, o_orderdate#6, o_totalprice#5, sum(l_quantity)#24]

