== Physical Plan ==
AdaptiveSparkPlan (35)
+- == Final Plan ==
   VeloxColumnarToRowExec (23)
   +- ^ ProjectExecTransformer (21)
      +- ^ RegularHashAggregateExecTransformer (20)
         +- ^ InputIteratorTransformer (19)
            +- ShuffleQueryStage (17), Statistics(X)
               +- ColumnarExchange (16)
                  +- VeloxAppendBatches (15)
                     +- ^ FlushableHashAggregateExecTransformer (13)
                        +- ^ ProjectExecTransformer (12)
                           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (11)
                              :- ^ ProjectExecTransformer (3)
                              :  +- ^ NoopFilter (2)
                              :     +- ^ Scan parquet (1)
                              +- ^ InputIteratorTransformer (10)
                                 +- BroadcastQueryStage (8), Statistics(X)
                                    +- ColumnarBroadcastExchange (7)
                                       +- ^ NoopFilter (5)
                                          +- ^ Scan parquet (4)
+- == Initial Plan ==
   HashAggregate (34)
   +- Exchange (33)
      +- HashAggregate (32)
         +- Project (31)
            +- BroadcastHashJoin Inner BuildRight (30)
               :- Project (26)
               :  +- Filter (25)
               :     +- Scan parquet (24)
               +- BroadcastExchange (29)
                  +- Filter (28)
                     +- Scan parquet (27)


(1) Scan parquet
Output [4]: [l_partkey#X, l_extendedprice#X, l_discount#X, l_shipdate#X]
Batched: true
Location: InMemoryFileIndex [*]
PushedFilters: [IsNotNull(l_shipdate), GreaterThanOrEqual(l_shipdate,1995-09-01), LessThan(l_shipdate,1995-10-01), IsNotNull(l_partkey)]
ReadSchema: struct<l_partkey:bigint,l_extendedprice:decimal(12,2),l_discount:decimal(12,2),l_shipdate:date>

(2) NoopFilter
Input [4]: [l_partkey#X, l_extendedprice#X, l_discount#X, l_shipdate#X]
Arguments: [l_partkey#X, l_extendedprice#X, l_discount#X, l_shipdate#X]

(3) ProjectExecTransformer
Output [3]: [l_partkey#X, l_extendedprice#X, l_discount#X]
Input [4]: [l_partkey#X, l_extendedprice#X, l_discount#X, l_shipdate#X]

(4) Scan parquet
Output [2]: [p_partkey#X, p_type#X]
Batched: true
Location: InMemoryFileIndex [*]
PushedFilters: [IsNotNull(p_partkey)]
ReadSchema: struct<p_partkey:bigint,p_type:string>

(5) NoopFilter
Input [2]: [p_partkey#X, p_type#X]
Arguments: [p_partkey#X, p_type#X]

(6) WholeStageCodegenTransformer (X)
Input [2]: [p_partkey#X, p_type#X]
Arguments: false

(7) ColumnarBroadcastExchange
Input [2]: [p_partkey#X, p_type#X]
Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=X]

(8) BroadcastQueryStage
Output [2]: [p_partkey#X, p_type#X]
Arguments: X

(9) InputAdapter
Input [2]: [p_partkey#X, p_type#X]

(10) InputIteratorTransformer
Input [2]: [p_partkey#X, p_type#X]

(11) BroadcastHashJoinExecTransformer
Left keys [1]: [l_partkey#X]
Right keys [1]: [p_partkey#X]
Join type: Inner
Join condition: None

(12) ProjectExecTransformer
Output [5]: [l_extendedprice#X, l_discount#X, p_type#X, CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END AS _pre_X#X, (l_extendedprice#X * (1 - l_discount#X)) AS _pre_X#X]
Input [5]: [l_partkey#X, l_extendedprice#X, l_discount#X, p_partkey#X, p_type#X]

(13) FlushableHashAggregateExecTransformer
Input [5]: [l_extendedprice#X, l_discount#X, p_type#X, _pre_X#X, _pre_X#X]
Keys: []
Functions [2]: [partial_sum(_pre_X#X), partial_sum(_pre_X#X)]
Aggregate Attributes [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Results [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]

(14) WholeStageCodegenTransformer (X)
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Arguments: false

(15) VeloxAppendBatches
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Arguments: X

(16) ColumnarExchange
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=X], [id=#X]

(17) ShuffleQueryStage
Output [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Arguments: X

(18) InputAdapter
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]

(19) InputIteratorTransformer
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]

(20) RegularHashAggregateExecTransformer
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Keys: []
Functions [2]: [sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END), sum((l_extendedprice#X * (1 - l_discount#X)))]
Aggregate Attributes [2]: [sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END)#X, sum((l_extendedprice#X * (1 - l_discount#X)))#X]
Results [2]: [sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END)#X, sum((l_extendedprice#X * (1 - l_discount#X)))#X]

(21) ProjectExecTransformer
Output [1]: [((100.00 * sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END)#X) / sum((l_extendedprice#X * (1 - l_discount#X)))#X) AS promo_revenue#X]
Input [2]: [sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END)#X, sum((l_extendedprice#X * (1 - l_discount#X)))#X]

(22) WholeStageCodegenTransformer (X)
Input [1]: [promo_revenue#X]
Arguments: false

(23) VeloxColumnarToRowExec
Input [1]: [promo_revenue#X]

(24) Scan parquet
Output [4]: [l_partkey#X, l_extendedprice#X, l_discount#X, l_shipdate#X]
Batched: true
Location: InMemoryFileIndex [*]
PushedFilters: [IsNotNull(l_shipdate), GreaterThanOrEqual(l_shipdate,1995-09-01), LessThan(l_shipdate,1995-10-01), IsNotNull(l_partkey)]
ReadSchema: struct<l_partkey:bigint,l_extendedprice:decimal(12,2),l_discount:decimal(12,2),l_shipdate:date>

(25) Filter
Input [4]: [l_partkey#X, l_extendedprice#X, l_discount#X, l_shipdate#X]
Condition : (((isnotnull(l_shipdate#X) AND (l_shipdate#X >= 1995-09-01)) AND (l_shipdate#X < 1995-10-01)) AND isnotnull(l_partkey#X))

(26) Project
Output [3]: [l_partkey#X, l_extendedprice#X, l_discount#X]
Input [4]: [l_partkey#X, l_extendedprice#X, l_discount#X, l_shipdate#X]

(27) Scan parquet
Output [2]: [p_partkey#X, p_type#X]
Batched: true
Location: InMemoryFileIndex [*]
PushedFilters: [IsNotNull(p_partkey)]
ReadSchema: struct<p_partkey:bigint,p_type:string>

(28) Filter
Input [2]: [p_partkey#X, p_type#X]
Condition : isnotnull(p_partkey#X)

(29) BroadcastExchange
Input [2]: [p_partkey#X, p_type#X]
Arguments: HashedRelationBroadcastMode(List(input[0, bigint, false]),false), [plan_id=X]

(30) BroadcastHashJoin
Left keys [1]: [l_partkey#X]
Right keys [1]: [p_partkey#X]
Join type: Inner
Join condition: None

(31) Project
Output [3]: [l_extendedprice#X, l_discount#X, p_type#X]
Input [5]: [l_partkey#X, l_extendedprice#X, l_discount#X, p_partkey#X, p_type#X]

(32) HashAggregate
Input [3]: [l_extendedprice#X, l_discount#X, p_type#X]
Keys: []
Functions [2]: [partial_sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END), partial_sum((l_extendedprice#X * (1 - l_discount#X)))]
Aggregate Attributes [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Results [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]

(33) Exchange
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=X]

(34) HashAggregate
Input [4]: [sum#X, isEmpty#X, sum#X, isEmpty#X]
Keys: []
Functions [2]: [sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END), sum((l_extendedprice#X * (1 - l_discount#X)))]
Aggregate Attributes [2]: [sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END)#X, sum((l_extendedprice#X * (1 - l_discount#X)))#X]
Results [1]: [((100.00 * sum(CASE WHEN StartsWith(p_type#X, PROMO) THEN (l_extendedprice#X * (1 - l_discount#X)) ELSE 0.0000 END)#X) / sum((l_extendedprice#X * (1 - l_discount#X)))#X) AS promo_revenue#X]

(35) AdaptiveSparkPlan
Output [1]: [promo_revenue#X]
Arguments: isFinalPlan=true