This is an automated email from the ASF dual-hosted git repository.
deniskuzZ pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new d2d7ff14eef HIVE-29696: Vectorization: ClassCastException in
VectorPTFGroupBatches when buffering complex window function inputs (#6579)
d2d7ff14eef is described below
commit d2d7ff14eefebacf296008bb5d03f620fcc3cd72
Author: Raghav Aggarwal <[email protected]>
AuthorDate: Mon Jul 13 18:20:10 2026 +0530
HIVE-29696: Vectorization: ClassCastException in VectorPTFGroupBatches when
buffering complex window function inputs (#6579)
---
.../vector/ptf/BufferedVectorizedRowBatch.java | 1 -
.../ql/exec/vector/ptf/VectorPTFEvaluatorBase.java | 6 -
.../exec/vector/ptf/VectorPTFEvaluatorCount.java | 1 -
.../ptf/VectorPTFEvaluatorCountDistinct.java | 1 -
.../vector/ptf/VectorPTFEvaluatorCountStar.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDecimalAvg.java | 1 -
.../ptf/VectorPTFEvaluatorDecimalFirstValue.java | 1 -
.../ptf/VectorPTFEvaluatorDecimalLastValue.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDecimalMax.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDecimalMin.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDecimalSum.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDoubleAvg.java | 1 -
.../ptf/VectorPTFEvaluatorDoubleFirstValue.java | 1 -
.../ptf/VectorPTFEvaluatorDoubleLastValue.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDoubleMax.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDoubleMin.java | 1 -
.../vector/ptf/VectorPTFEvaluatorDoubleSum.java | 1 -
.../ql/exec/vector/ptf/VectorPTFEvaluatorLag.java | 2 +-
.../ql/exec/vector/ptf/VectorPTFEvaluatorLead.java | 2 +-
.../exec/vector/ptf/VectorPTFEvaluatorLongAvg.java | 1 -
.../ptf/VectorPTFEvaluatorLongFirstValue.java | 1 -
.../ptf/VectorPTFEvaluatorLongLastValue.java | 1 -
.../exec/vector/ptf/VectorPTFEvaluatorLongMax.java | 1 -
.../exec/vector/ptf/VectorPTFEvaluatorLongMin.java | 1 -
.../exec/vector/ptf/VectorPTFEvaluatorLongSum.java | 1 -
.../vector/ptf/VectorPTFEvaluatorRowNumber.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDecimalAvg.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDecimalMax.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDecimalMin.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDecimalSum.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDoubleAvg.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDoubleMax.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDoubleMin.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingDoubleSum.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingLongAvg.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingLongMax.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingLongMin.java | 1 -
.../ptf/VectorPTFEvaluatorStreamingLongSum.java | 1 -
.../ql/exec/vector/ptf/VectorPTFGroupBatches.java | 12 -
.../hive/ql/exec/vector/ptf/VectorPTFOperator.java | 61 ++-
.../exec/vector/ptf/VectorSpillBlockContainer.java | 5 -
.../clientpositive/vector_ptf_nested_input_expr.q | 56 +++
.../llap/vector_ptf_nested_input_expr.q.out | 434 +++++++++++++++++++++
43 files changed, 522 insertions(+), 91 deletions(-)
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/BufferedVectorizedRowBatch.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/BufferedVectorizedRowBatch.java
index f70fc2dea47..2e750f6408d 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/BufferedVectorizedRowBatch.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/BufferedVectorizedRowBatch.java
@@ -24,7 +24,6 @@
*/
public class BufferedVectorizedRowBatch extends VectorizedRowBatch {
boolean isLastGroupBatch;
- boolean isInputExpressionEvaluated;
public BufferedVectorizedRowBatch(int numCols) {
super(numCols);
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorBase.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorBase.java
index 9243c3cb00e..31995c434d8 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorBase.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorBase.java
@@ -86,12 +86,6 @@ public void setNullsLast(boolean nullsLast) {
this.nullsLast = nullsLast;
}
- // Evaluate the aggregation input argument expression.
- public void evaluateInputExpr(VectorizedRowBatch batch) throws HiveException
{
- if (inputVecExpr != null) {
- inputVecExpr.evaluate(batch);
- }
- }
/*
* Evaluate the aggregation over one of the group's batches. In this mode,
evaluator is not
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCount.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCount.java
index 94b038e2e8e..eed564b3971 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCount.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCount.java
@@ -46,7 +46,6 @@ public VectorPTFEvaluatorCount(WindowFrameDef windowFrameDef,
VectorExpression i
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Count non-null column rows.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountDistinct.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountDistinct.java
index 167c07dc209..3f34274cf01 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountDistinct.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountDistinct.java
@@ -68,7 +68,6 @@ public VectorPTFEvaluatorCountDistinct(WindowFrameDef
windowFrameDef,
@Override
public void evaluateGroupBatch(VectorizedRowBatch batch) throws
HiveException {
- evaluateInputExpr(batch);
// We do not filter when PTF is in reducer.
Preconditions.checkState(!batch.selectedInUse);
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountStar.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountStar.java
index c48141ef8d1..3cff308550c 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountStar.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorCountStar.java
@@ -42,7 +42,6 @@ public VectorPTFEvaluatorCountStar(WindowFrameDef
windowFrameDef, VectorExpressi
@Override
public void evaluateGroupBatch(VectorizedRowBatch batch) {
// No input expression for COUNT(*).
- // evaluateInputExpr(batch);
// Count all rows.
count += batch.size;
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalAvg.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalAvg.java
index 5d4d757060d..7f7cfec9d0d 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalAvg.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalAvg.java
@@ -54,7 +54,6 @@ public VectorPTFEvaluatorDecimalAvg(WindowFrameDef
windowFrameDef, VectorExpress
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null decimal column values for avg; maintain
isGroupResultNull; after last row of
// last group batch compute the group avg when sum is non-null.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalFirstValue.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalFirstValue.java
index d21e882084b..c500cf193ec 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalFirstValue.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalFirstValue.java
@@ -50,7 +50,6 @@ public VectorPTFEvaluatorDecimalFirstValue(WindowFrameDef
windowFrameDef,
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// First row determines isGroupResultNull and decimal firstValue; stream
fill result as repeated.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalLastValue.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalLastValue.java
index 0fb88d69c3d..78ff8b7bd20 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalLastValue.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalLastValue.java
@@ -50,7 +50,6 @@ public VectorPTFEvaluatorDecimalLastValue(WindowFrameDef
windowFrameDef,
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Last row of last batch determines isGroupResultNull and decimal
lastValue.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMax.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMax.java
index 11f146db706..33a8a8b4ddb 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMax.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMax.java
@@ -48,7 +48,6 @@ public VectorPTFEvaluatorDecimalMax(WindowFrameDef
windowFrameDef, VectorExpress
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine maximum of all non-null decimal column values; maintain
isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMin.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMin.java
index e06d1868856..bb57159338f 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMin.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalMin.java
@@ -46,7 +46,6 @@ public VectorPTFEvaluatorDecimalMin(WindowFrameDef
windowFrameDef, VectorExpress
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine minimum of all non-null decimal column values; maintain
isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalSum.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalSum.java
index f9263e17af9..02b388d55dc 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalSum.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDecimalSum.java
@@ -48,7 +48,6 @@ public VectorPTFEvaluatorDecimalSum(WindowFrameDef
windowFrameDef, VectorExpress
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null decimal column values; maintain isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleAvg.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleAvg.java
index d7123fb2579..7cd42a382c2 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleAvg.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleAvg.java
@@ -46,7 +46,6 @@ public VectorPTFEvaluatorDoubleAvg(WindowFrameDef
windowFrameDef, VectorExpressi
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null double column values for avg; maintain
isGroupResultNull; after last row of
// last group batch compute the group avg when sum is non-null.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleFirstValue.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleFirstValue.java
index 40b49d7960c..026baa0aa33 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleFirstValue.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleFirstValue.java
@@ -49,7 +49,6 @@ public VectorPTFEvaluatorDoubleFirstValue(WindowFrameDef
windowFrameDef,
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// First row determines isGroupResultNull and double firstValue; stream
fill result as repeated.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleLastValue.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleLastValue.java
index e7e4a0ce3a7..d8936413678 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleLastValue.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleLastValue.java
@@ -47,7 +47,6 @@ public VectorPTFEvaluatorDoubleLastValue(WindowFrameDef
windowFrameDef,
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Last row of last batch determines isGroupResultNull and double
lastValue.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMax.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMax.java
index 5b124d20269..1a8f029639d 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMax.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMax.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorDoubleMax(WindowFrameDef
windowFrameDef, VectorExpressi
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine maximum of all non-null double column values; maintain
isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMin.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMin.java
index b76df013b35..e8f28eb9c31 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMin.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleMin.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorDoubleMin(WindowFrameDef
windowFrameDef, VectorExpressi
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine minimum of all non-null double column values; maintain
isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleSum.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleSum.java
index e8cda454bcd..4ecefb4f2fe 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleSum.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorDoubleSum.java
@@ -42,7 +42,6 @@ public VectorPTFEvaluatorDoubleSum(WindowFrameDef
windowFrameDef, VectorExpressi
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null double column values; maintain isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLag.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLag.java
index d35d089c6c0..31922508862 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLag.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLag.java
@@ -38,7 +38,7 @@ public Object runOnRange(int rowNum, Range range,
VectorPTFGroupBatches batches)
if (lagRow < 0 || lagRow >= batches.size()) {
return getDefaultValue(rowNum, batches);
} else {
- return batches.getValueAndEvaluateInputExpression(this, lagRow,
inputColumnNum);
+ return batches.getValue(lagRow, inputColumnNum);
}
}
}
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLead.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLead.java
index db0332ce9d9..d2806bb65b9 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLead.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLead.java
@@ -38,7 +38,7 @@ public Object runOnRange(int rowNum, Range range,
VectorPTFGroupBatches batches)
if (leadRow < 0 || leadRow >= batches.size()) {
return getDefaultValue(rowNum, batches);
} else {
- return batches.getValueAndEvaluateInputExpression(this, leadRow,
inputColumnNum);
+ return batches.getValue(leadRow, inputColumnNum);
}
}
}
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongAvg.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongAvg.java
index 9c5b402fa5c..5729a9a11e2 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongAvg.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongAvg.java
@@ -46,7 +46,6 @@ public VectorPTFEvaluatorLongAvg(WindowFrameDef
windowFrameDef, VectorExpression
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null long column values for avg; maintain
isGroupResultNull; after last row of
// last group batch compute the group avg when sum is non-null.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongFirstValue.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongFirstValue.java
index 1b1ca204939..d370a07880d 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongFirstValue.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongFirstValue.java
@@ -49,7 +49,6 @@ public VectorPTFEvaluatorLongFirstValue(WindowFrameDef
windowFrameDef,
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// First row determines isGroupResultNull and long firstValue; stream fill
result as repeated.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongLastValue.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongLastValue.java
index bf0f27af832..536c05c9901 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongLastValue.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongLastValue.java
@@ -48,7 +48,6 @@ public VectorPTFEvaluatorLongLastValue(WindowFrameDef
windowFrameDef,
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Last row of last batch determines isGroupResultNull and long lastValue.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMax.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMax.java
index 47911af4521..fe6d3753839 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMax.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMax.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorLongMax(WindowFrameDef
windowFrameDef, VectorExpression
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine maximum of all non-null long column values; maintain
isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMin.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMin.java
index 91d21f2f182..2867653d10b 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMin.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongMin.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorLongMin(WindowFrameDef
windowFrameDef, VectorExpression
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine minimum of all non-null long column values; maintain
isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongSum.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongSum.java
index d37bf985dc1..5318407d6bb 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongSum.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorLongSum.java
@@ -42,7 +42,6 @@ public VectorPTFEvaluatorLongSum(WindowFrameDef
windowFrameDef, VectorExpression
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null long column values; maintain isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorRowNumber.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorRowNumber.java
index 3e4bc3d84bc..b287639c27a 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorRowNumber.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorRowNumber.java
@@ -44,7 +44,6 @@ public VectorPTFEvaluatorRowNumber(WindowFrameDef
windowFrameDef, VectorExpressi
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
final int size = batch.size;
LongColumnVector longColVector = (LongColumnVector)
batch.cols[outputColumnNum];
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalAvg.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalAvg.java
index e51d1fc5f66..58ad82003c5 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalAvg.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalAvg.java
@@ -56,7 +56,6 @@ public VectorPTFEvaluatorStreamingDecimalAvg(WindowFrameDef
windowFrameDef, Vect
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null decimal column values for avg; maintain
isGroupResultNull; after last row of
// last group batch compute the group avg when sum is non-null.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMax.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMax.java
index 93572427107..dabfa18b323 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMax.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMax.java
@@ -48,7 +48,6 @@ public VectorPTFEvaluatorStreamingDecimalMax(WindowFrameDef
windowFrameDef, Vect
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine maximum of all non-null decimal column values; maintain
isNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMin.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMin.java
index 51b43d7c622..a729775b00f 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMin.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalMin.java
@@ -48,7 +48,6 @@ public VectorPTFEvaluatorStreamingDecimalMin(WindowFrameDef
windowFrameDef, Vect
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine minimum of all non-null decimal column values; maintain
isNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalSum.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalSum.java
index bc8620ac37f..3fb86f9379d 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalSum.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDecimalSum.java
@@ -48,7 +48,6 @@ public VectorPTFEvaluatorStreamingDecimalSum(WindowFrameDef
windowFrameDef, Vect
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null decimal column values; maintain isGroupResultNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleAvg.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleAvg.java
index f6c5942c065..18d521c07c2 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleAvg.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleAvg.java
@@ -50,7 +50,6 @@ public VectorPTFEvaluatorStreamingDoubleAvg(WindowFrameDef
windowFrameDef, Vecto
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null double column values for avg; maintain
isGroupResultNull; after last row of
// last group batch compute the group avg when sum is non-null.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMax.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMax.java
index 1d61cc5bf09..5a40b638e71 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMax.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMax.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorStreamingDoubleMax(WindowFrameDef
windowFrameDef, Vecto
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine maximum of all non-null double column values; maintain isNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMin.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMin.java
index 9ac197d17a8..14c0b831edd 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMin.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleMin.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorStreamingDoubleMin(WindowFrameDef
windowFrameDef, Vecto
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine minimum of all non-null double column values; maintain isNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleSum.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleSum.java
index 8f17663a358..2e0dfa9a45f 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleSum.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingDoubleSum.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorStreamingDoubleSum(WindowFrameDef
windowFrameDef, Vecto
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// We do not filter when PTF is in reducer.
Preconditions.checkState(!batch.selectedInUse);
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongAvg.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongAvg.java
index 78d543a0c20..9117ac16d31 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongAvg.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongAvg.java
@@ -50,7 +50,6 @@ public VectorPTFEvaluatorStreamingLongAvg(WindowFrameDef
windowFrameDef, VectorE
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null long column values for avg; maintain
isGroupResultNull; after last row of
// last group batch compute the group avg when sum is non-null.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMax.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMax.java
index 94d19b3376f..ee2804b5838 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMax.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMax.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorStreamingLongMax(WindowFrameDef
windowFrameDef, VectorE
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine maximum of all non-null long column values; maintain isNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMin.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMin.java
index 2d7caf34152..42ab267e947 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMin.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongMin.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorStreamingLongMin(WindowFrameDef
windowFrameDef, VectorE
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Determine minimum of all non-null long column values; maintain isNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongSum.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongSum.java
index 76bca6b6557..311707966c9 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongSum.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFEvaluatorStreamingLongSum.java
@@ -45,7 +45,6 @@ public VectorPTFEvaluatorStreamingLongSum(WindowFrameDef
windowFrameDef, VectorE
public void evaluateGroupBatch(VectorizedRowBatch batch)
throws HiveException {
- evaluateInputExpr(batch);
// Sum all non-null long column values; maintain isNull.
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFGroupBatches.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFGroupBatches.java
index 8fee32a569c..a6547a11bcb 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFGroupBatches.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFGroupBatches.java
@@ -346,15 +346,6 @@ public Object getValue(int row, int col) throws
HiveException {
return getValueFromBatch(bufferedBatches.get(rp.batchIndex), col,
rp.rowIndexInBatch);
}
- public Object getValueAndEvaluateInputExpression(VectorPTFEvaluatorBase
evaluator, int row,
- int col) throws HiveException {
- RowPositionInBatch rp = getPosition(row);
- BufferedVectorizedRowBatch batch = bufferedBatches.get(rp.batchIndex);
- if (!batch.isInputExpressionEvaluated) {
- evaluator.evaluateInputExpr(batch);
- }
- return getValueFromBatch(batch, col, rp.rowIndexInBatch);
- }
public RowPositionInBatch getPosition(int i) throws HiveException {
if (positionCache[i] != null) {
@@ -1012,7 +1003,6 @@ private VectorizedRowBatch
createTruncatedBufferedBatch(BufferedVectorizedRowBat
partialBatch.size = size;
partialBatch.isLastGroupBatch = bufferedBatch.isLastGroupBatch;
- partialBatch.isInputExpressionEvaluated =
bufferedBatch.isInputExpressionEvaluated;
return partialBatch;
}
@@ -1174,7 +1164,6 @@ private void readBlockFromSpillToMemory(VectorSpillBlock
block) throws HiveExcep
block.readSingleRowFromBytesContainer(bufferedBatch);
bufferedBatch.size += 1;
bufferedBatch.isLastGroupBatch = block.isLastGroupBatch[batchIndex];
- bufferedBatch.isInputExpressionEvaluated =
block.isInputExpressionEvaluated[batchIndex];
}
currentBufferedBatchCount = block.spillBatchCount;
partitionMetrics.batchesReadFromSpill += currentBufferedBatchCount;
@@ -1202,7 +1191,6 @@ private void spillAndResetCurrentBufferedBatches() throws
HiveException {
BufferedVectorizedRowBatch bufferedBatch = bufferedBatches.get(i);
block.spillBatch(bufferedBatch);
block.isLastGroupBatch[i] = bufferedBatch.isLastGroupBatch;
- block.isInputExpressionEvaluated[i] =
bufferedBatch.isInputExpressionEvaluated;
block.spillRowCount += bufferedBatch.size;
block.spillBatchCount += 1;
if (previousBatch != null) {
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFOperator.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFOperator.java
index 5accf6950c3..feb12617de1 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFOperator.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorPTFOperator.java
@@ -28,7 +28,6 @@
import org.apache.hadoop.hive.common.type.DataTypePhysicalVariation;
import org.apache.hadoop.hive.common.type.HiveIntervalDayTime;
import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.common.type.DataTypePhysicalVariation;
import org.apache.hadoop.hive.ql.CompilationOpContext;
import org.apache.hadoop.hive.ql.exec.Operator;
import org.apache.hadoop.hive.ql.exec.Utilities;
@@ -390,6 +389,18 @@ public void process(Object row, int tag) throws
HiveException {
}
}
+ /*
+ Evaluate input expressions on the original batch before it gets buffered.
+ This ensures that complex expressions read from the correct columns in
+ the original batch and write their results to scratch columns, which
+ are then buffered.
+ */
+ for (VectorPTFEvaluatorBase evaluator : evaluators) {
+ if (evaluator.inputVecExpr != null) {
+ evaluator.inputVecExpr.evaluate(batch);
+ }
+ }
+
if (isFirstPartition) {
isFirstPartition = false;
setCurrentPartition(batch);
@@ -477,39 +488,27 @@ private void initBufferedColumns() {
}
private void initExpressionColumns() {
- for (int i = 0; i < evaluators.length; i++) {
- VectorPTFEvaluatorBase evaluator = evaluators[i];
+ for (VectorPTFEvaluatorBase evaluator : evaluators) {
/*
- * Non-streaming evaluators work on buffered batches, we need to adapt
them. Before PTF
- * bounded start vectorization (HIVE-24761),
VectorExpression.outputColumnNum was closed and
- * VectorExpression.inputColumnNum didn't even exist (even though the
vast majority of
- * VectorExpression subclasses use at least 1 input column). Since
VectorPTFOperator and
- * VectorPTFGroupBatches work on modified batches (by not storing all
the columns, and having
- * ordering columns first), the expressions planned in compile-time
won't work with the
- * original config (column layout). It would make sense to move this
logic to compile time,
- * because here in runtime, a very simple mapping (bufferedColumnMap) is
used, so it might be
- * used. However, vectorized expression compilation affects many layers
of code (having
- * VectorizationContext as the common scope), and moving the calculation
of bufferedColumnMap
- * and this override logic to compile-time would create much more
complicated behavior there
- * (probably involving hacking most of the time, or maybe a great
re-design) just because of
- * the optimized column layout of the PTF vectorization.
+ * Non-streaming window function evaluators (like SUM or LEAD) work on
packed, buffered batches.
+ * VectorPTFOperator and VectorPTFGroupBatches significantly modify the
batch structure to save memory
+ * (e.g. by dropping unused columns and moving ordering columns to the
front).
+ *
+ * Because of this dense packing, the absolute column indices assigned
by the compiler (e.g., Index 15)
+ * are no longer valid for the buffer (where it might now be Index 2).
+ * Therefore, we must dynamically map the evaluator's inputColumnNum to
its new location in the packed array.
+ *
+ * NOTE: We ONLY patch the evaluator's input index here. We specifically
DO NOT patch
+ * evaluator.inputVecExpr (the math expressions like A+B) because those
are now evaluated eagerly
+ * on the original batch before any packing occurs, so their absolute
indices remain perfectly valid.
*/
if (!evaluator.streamsResult()) {
- evaluator.inputColumnNum = IntStream.range(0, bufferedColumnMap.length)
- .filter(j -> bufferedColumnMap[j] ==
evaluator.inputColumnNum).findFirst()
- .orElseGet(() -> evaluator.inputColumnNum);
-
- if (evaluator.inputVecExpr != null) {
- for (int j = 0; j < evaluator.inputVecExpr.inputColumnNum.length;
j++){
- final int jj = j; // need a final in stream filter
- evaluator.inputVecExpr.inputColumnNum[jj] = IntStream.range(0,
bufferedColumnMap.length)
- .filter(k -> bufferedColumnMap[k] ==
evaluator.inputVecExpr.inputColumnNum[jj])
- .findFirst().orElseGet(() ->
evaluator.inputVecExpr.inputColumnNum[jj]);
- }
- evaluator.inputVecExpr.outputColumnNum = IntStream.range(0,
bufferedColumnMap.length)
- .filter(j -> bufferedColumnMap[j] ==
evaluator.inputVecExpr.outputColumnNum)
- .findFirst().orElseGet(() ->
evaluator.inputVecExpr.outputColumnNum);
- }
+ evaluator.inputColumnNum =
+ IntStream.range(0, bufferedColumnMap.length)
+ .filter(j -> bufferedColumnMap[j] == evaluator.inputColumnNum)
+ .findFirst()
+ .orElseGet(() -> evaluator.inputColumnNum);
+
evaluator.mapCustomColumns(bufferedColumnMap);
}
}
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorSpillBlockContainer.java
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorSpillBlockContainer.java
index 8d21892b785..a5c6170324c 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorSpillBlockContainer.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/ptf/VectorSpillBlockContainer.java
@@ -139,10 +139,6 @@ class VectorSpillBlock {
*/
boolean[] isLastGroupBatch;
- /**
- * Stores the isInputExpressionEvaluated property for buffered/spilled
batches.
- */
- boolean[] isInputExpressionEvaluated;
/**
* <pre>
* Deserializer needs to know which columns to put the deserialized
values into. Basically,
@@ -165,7 +161,6 @@ class VectorSpillBlock {
startBatchIndex = blockIndex * blockSize;
startRowIndex = new int[blockSize];
isLastGroupBatch = new boolean[blockSize];
- isInputExpressionEvaluated = new boolean[blockSize];
}
void releaseRowBytesContainer() {
diff --git a/ql/src/test/queries/clientpositive/vector_ptf_nested_input_expr.q
b/ql/src/test/queries/clientpositive/vector_ptf_nested_input_expr.q
new file mode 100644
index 00000000000..823954565e9
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/vector_ptf_nested_input_expr.q
@@ -0,0 +1,56 @@
+set hive.cli.print.header=true;
+set hive.vectorized.execution.enabled=true;
+set hive.vectorized.execution.reduce.enabled=true;
+set hive.vectorized.execution.ptf.enabled=true;
+
+CREATE TABLE repro_ptf_decimal (
+ id STRING,
+ val1 DECIMAL(20,2),
+ val2 BIGINT,
+ val3 SMALLINT
+) STORED AS ORC TBLPROPERTIES ('orc.compress'='ZLIB');
+
+INSERT INTO repro_ptf_decimal VALUES ('req1', 5.0, 2, 1), ('req1', 10.0, 4,
2), ('req2', 10.0, 5, 2);
+
+EXPLAIN VECTORIZATION DETAIL
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_decimal;
+
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_decimal;
+
+CREATE TABLE repro_ptf_long (
+ id STRING,
+ val1 BIGINT,
+ val2 INT,
+ val3 SMALLINT
+) STORED AS ORC TBLPROPERTIES ('orc.compress'='ZLIB');
+
+INSERT INTO repro_ptf_long VALUES ('req1', 5, 2, 1), ('req1', 10, 4, 2),
('req2', 10, 5, 2);
+
+EXPLAIN VECTORIZATION DETAIL
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_long;
+
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_long;
diff --git
a/ql/src/test/results/clientpositive/llap/vector_ptf_nested_input_expr.q.out
b/ql/src/test/results/clientpositive/llap/vector_ptf_nested_input_expr.q.out
new file mode 100644
index 00000000000..cf12f629649
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/vector_ptf_nested_input_expr.q.out
@@ -0,0 +1,434 @@
+PREHOOK: query: CREATE TABLE repro_ptf_decimal (
+ id STRING,
+ val1 DECIMAL(20,2),
+ val2 BIGINT,
+ val3 SMALLINT
+) STORED AS ORC TBLPROPERTIES ('orc.compress'='ZLIB')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@repro_ptf_decimal
+POSTHOOK: query: CREATE TABLE repro_ptf_decimal (
+ id STRING,
+ val1 DECIMAL(20,2),
+ val2 BIGINT,
+ val3 SMALLINT
+) STORED AS ORC TBLPROPERTIES ('orc.compress'='ZLIB')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@repro_ptf_decimal
+PREHOOK: query: INSERT INTO repro_ptf_decimal VALUES ('req1', 5.0, 2, 1),
('req1', 10.0, 4, 2), ('req2', 10.0, 5, 2)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@repro_ptf_decimal
+POSTHOOK: query: INSERT INTO repro_ptf_decimal VALUES ('req1', 5.0, 2, 1),
('req1', 10.0, 4, 2), ('req2', 10.0, 5, 2)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@repro_ptf_decimal
+POSTHOOK: Lineage: repro_ptf_decimal.id SCRIPT []
+POSTHOOK: Lineage: repro_ptf_decimal.val1 SCRIPT []
+POSTHOOK: Lineage: repro_ptf_decimal.val2 SCRIPT []
+POSTHOOK: Lineage: repro_ptf_decimal.val3 SCRIPT []
+_col0 _col1 _col2 _col3
+PREHOOK: query: EXPLAIN VECTORIZATION DETAIL
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_decimal
+PREHOOK: type: QUERY
+PREHOOK: Input: default@repro_ptf_decimal
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN VECTORIZATION DETAIL
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_decimal
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@repro_ptf_decimal
+#### A masked pattern was here ####
+Explain
+PLAN VECTORIZATION:
+ enabled: true
+ enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Tez
+#### A masked pattern was here ####
+ Edges:
+ Reducer 2 <- Map 1 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+ Vertices:
+ Map 1
+ Map Operator Tree:
+ TableScan
+ alias: repro_ptf_decimal
+ Statistics: Num rows: 3 Data size: 636 Basic stats: COMPLETE
Column stats: COMPLETE
+ TableScan Vectorization:
+ native: true
+ vectorizationSchemaColumns: [0:id:string,
1:val1:decimal(20,2), 2:val2:bigint, 3:val3:smallint,
4:ROW__ID:struct<writeid:bigint,bucketid:int,rowid:bigint>,
5:ROW__IS__DELETED:boolean]
+ Reduce Output Operator
+ key expressions: 0 (type: int), val1 (type:
decimal(20,2)), id (type: string)
+ null sort order: aaz
+ sort order: +-+
+ Map-reduce partition columns: 0 (type: int)
+ Reduce Sink Vectorization:
+ className: VectorReduceSinkObjectHashOperator
+ keyColumns: 6:int, 1:decimal(20,2), 0:string
+ keyExpressions: ConstantVectorExpression(val 0) ->
6:int
+ native: true
+ nativeConditionsMet:
hive.vectorized.execution.reducesink.new.enabled IS true, hive.execution.engine
tez IN [tez] IS true, No PTF TopN IS true, No DISTINCT columns IS true,
BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true
+ partitionColumns: 7:int
+ valueColumns: 2:bigint, 3:smallint
+ Statistics: Num rows: 3 Data size: 636 Basic stats:
COMPLETE Column stats: COMPLETE
+ value expressions: val2 (type: bigint), val3 (type:
smallint)
+ Execution mode: vectorized, llap
+ LLAP IO: all inputs
+ Map Vectorization:
+ enabled: true
+ enabledConditionsMet:
hive.vectorized.use.vectorized.input.format IS true
+ inputFormatFeatureSupport: [DECIMAL_64]
+ featureSupportInUse: [DECIMAL_64]
+ inputFileFormats:
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+ allNative: true
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 4
+ includeColumns: [0, 1, 2, 3]
+ dataColumns: id:string, val1:decimal(20,2), val2:bigint,
val3:smallint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [bigint, bigint]
+ Reducer 2
+ Execution mode: vectorized, llap
+ Reduce Vectorization:
+ enabled: true
+ enableConditionsMet: hive.vectorized.execution.reduce.enabled
IS true, hive.execution.engine tez IN [tez] IS true
+ reduceColumnNullOrder: aaz
+ reduceColumnSortOrder: +-+
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 5
+ dataColumns: KEY.reducesinkkey0:int,
KEY.reducesinkkey1:decimal(20,2), KEY.reducesinkkey2:string,
VALUE._col0:bigint, VALUE._col1:smallint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [decimal(34,2), bigint,
decimal(22,2), decimal(19,0), decimal(23,2), decimal(5,0), decimal(24,2)]
+ Reduce Operator Tree:
+ Select Operator
+ expressions: KEY.reducesinkkey2 (type: string),
KEY.reducesinkkey1 (type: decimal(20,2)), VALUE._col0 (type: bigint),
VALUE._col1 (type: smallint)
+ outputColumnNames: _col0, _col1, _col2, _col3
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: [2, 1, 3, 4]
+ Statistics: Num rows: 3 Data size: 636 Basic stats: COMPLETE
Column stats: COMPLETE
+ PTF Operator
+ Function definitions:
+ Input definition
+ input alias: ptf_0
+ output shape: _col0: string, _col1: decimal(20,2),
_col2: bigint, _col3: smallint
+ type: WINDOWING
+ Windowing table definition
+ input alias: ptf_1
+ name: windowingtablefunction
+ order by: _col1 DESC NULLS FIRST, _col0 ASC NULLS LAST
+ partition by: 0
+ raw input shape:
+ window functions:
+ window function definition
+ alias: sum_window_0
+ arguments: (((_col1 * CAST( 2 AS decimal(10,0)))
+ CAST( _col2 AS decimal(19,0))) - CAST( _col3 AS decimal(5,0)))
+ name: sum
+ window function: GenericUDAFSumHiveDecimal
+ window frame: RANGE PRECEDING(MAX)~CURRENT
+ PTF Vectorization:
+ allEvaluatorsAreStreaming: false
+ className: VectorPTFOperator
+ evaluatorClasses: [VectorPTFEvaluatorDecimalSum]
+ functionInputExpressions:
[DecimalColSubtractDecimalColumn(col 9:decimal(23,2), col
10:decimal(5,0))(children: DecimalColAddDecimalColumn(col 7:decimal(22,2), col
8:decimal(19,0))(children: DecimalColMultiplyDecimalScalar(col 1:decimal(20,2),
val 2) -> 7:decimal(22,2), CastLongToDecimal(col 3:bigint) -> 8:decimal(19,0))
-> 9:decimal(23,2), CastLongToDecimal(col 4:smallint) -> 10:decimal(5,0)) ->
11:decimal(24,2)]
+ functionNames: [sum]
+ keyInputColumns: [2, 1]
+ native: true
+ nonKeyInputColumns: [3, 4]
+ orderExpressions: [col 1:decimal(20,2), col 2:string]
+ outputColumns: [5, 2, 1, 3, 4]
+ outputTypes: [decimal(34,2), string, decimal(20,2),
bigint, smallint]
+ partitionExpressions: [ConstantVectorExpression(val 0)
-> 6:int]
+ streamingColumns: []
+ Statistics: Num rows: 3 Data size: 636 Basic stats: COMPLETE
Column stats: COMPLETE
+ Select Operator
+ expressions: _col0 (type: string), _col1 (type:
decimal(20,2)), _col2 (type: bigint), _col3 (type: smallint), sum_window_0
(type: decimal(34,2))
+ outputColumnNames: _col0, _col1, _col2, _col3, _col4
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: [2, 1, 3, 4, 5]
+ Statistics: Num rows: 3 Data size: 972 Basic stats:
COMPLETE Column stats: COMPLETE
+ File Output Operator
+ compressed: false
+ File Sink Vectorization:
+ className: VectorFileSinkOperator
+ native: false
+ Statistics: Num rows: 3 Data size: 972 Basic stats:
COMPLETE Column stats: COMPLETE
+ table:
+ input format:
org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde:
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+PREHOOK: query: SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_decimal
+PREHOOK: type: QUERY
+PREHOOK: Input: default@repro_ptf_decimal
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_decimal
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@repro_ptf_decimal
+#### A masked pattern was here ####
+id val1 val2 val3 final_total
+req1 10.00 4 2 22.00
+req2 10.00 5 2 45.00
+req1 5.00 2 1 56.00
+PREHOOK: query: CREATE TABLE repro_ptf_long (
+ id STRING,
+ val1 BIGINT,
+ val2 INT,
+ val3 SMALLINT
+) STORED AS ORC TBLPROPERTIES ('orc.compress'='ZLIB')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@repro_ptf_long
+POSTHOOK: query: CREATE TABLE repro_ptf_long (
+ id STRING,
+ val1 BIGINT,
+ val2 INT,
+ val3 SMALLINT
+) STORED AS ORC TBLPROPERTIES ('orc.compress'='ZLIB')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@repro_ptf_long
+PREHOOK: query: INSERT INTO repro_ptf_long VALUES ('req1', 5, 2, 1), ('req1',
10, 4, 2), ('req2', 10, 5, 2)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@repro_ptf_long
+POSTHOOK: query: INSERT INTO repro_ptf_long VALUES ('req1', 5, 2, 1), ('req1',
10, 4, 2), ('req2', 10, 5, 2)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@repro_ptf_long
+POSTHOOK: Lineage: repro_ptf_long.id SCRIPT []
+POSTHOOK: Lineage: repro_ptf_long.val1 SCRIPT []
+POSTHOOK: Lineage: repro_ptf_long.val2 SCRIPT []
+POSTHOOK: Lineage: repro_ptf_long.val3 SCRIPT []
+_col0 _col1 _col2 _col3
+PREHOOK: query: EXPLAIN VECTORIZATION DETAIL
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_long
+PREHOOK: type: QUERY
+PREHOOK: Input: default@repro_ptf_long
+#### A masked pattern was here ####
+POSTHOOK: query: EXPLAIN VECTORIZATION DETAIL
+SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_long
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@repro_ptf_long
+#### A masked pattern was here ####
+Explain
+PLAN VECTORIZATION:
+ enabled: true
+ enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+ Stage: Stage-1
+ Tez
+#### A masked pattern was here ####
+ Edges:
+ Reducer 2 <- Map 1 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+ Vertices:
+ Map 1
+ Map Operator Tree:
+ TableScan
+ alias: repro_ptf_long
+ Statistics: Num rows: 3 Data size: 312 Basic stats: COMPLETE
Column stats: COMPLETE
+ TableScan Vectorization:
+ native: true
+ vectorizationSchemaColumns: [0:id:string, 1:val1:bigint,
2:val2:int, 3:val3:smallint,
4:ROW__ID:struct<writeid:bigint,bucketid:int,rowid:bigint>,
5:ROW__IS__DELETED:boolean]
+ Reduce Output Operator
+ key expressions: 0 (type: int), val1 (type: bigint), id
(type: string)
+ null sort order: aaz
+ sort order: +-+
+ Map-reduce partition columns: 0 (type: int)
+ Reduce Sink Vectorization:
+ className: VectorReduceSinkObjectHashOperator
+ keyColumns: 6:int, 1:bigint, 0:string
+ keyExpressions: ConstantVectorExpression(val 0) ->
6:int
+ native: true
+ nativeConditionsMet:
hive.vectorized.execution.reducesink.new.enabled IS true, hive.execution.engine
tez IN [tez] IS true, No PTF TopN IS true, No DISTINCT columns IS true,
BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true
+ partitionColumns: 7:int
+ valueColumns: 2:int, 3:smallint
+ Statistics: Num rows: 3 Data size: 312 Basic stats:
COMPLETE Column stats: COMPLETE
+ value expressions: val2 (type: int), val3 (type: smallint)
+ Execution mode: vectorized, llap
+ LLAP IO: all inputs
+ Map Vectorization:
+ enabled: true
+ enabledConditionsMet:
hive.vectorized.use.vectorized.input.format IS true
+ inputFormatFeatureSupport: [DECIMAL_64]
+ featureSupportInUse: [DECIMAL_64]
+ inputFileFormats:
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
+ allNative: true
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 4
+ includeColumns: [0, 1, 2, 3]
+ dataColumns: id:string, val1:bigint, val2:int,
val3:smallint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [bigint, bigint]
+ Reducer 2
+ Execution mode: vectorized, llap
+ Reduce Vectorization:
+ enabled: true
+ enableConditionsMet: hive.vectorized.execution.reduce.enabled
IS true, hive.execution.engine tez IN [tez] IS true
+ reduceColumnNullOrder: aaz
+ reduceColumnSortOrder: +-+
+ allNative: false
+ usesVectorUDFAdaptor: false
+ vectorized: true
+ rowBatchContext:
+ dataColumnCount: 5
+ dataColumns: KEY.reducesinkkey0:int,
KEY.reducesinkkey1:bigint, KEY.reducesinkkey2:string, VALUE._col0:int,
VALUE._col1:smallint
+ partitionColumnCount: 0
+ scratchColumnTypeNames: [bigint, bigint, bigint, bigint,
bigint]
+ Reduce Operator Tree:
+ Select Operator
+ expressions: KEY.reducesinkkey2 (type: string),
KEY.reducesinkkey1 (type: bigint), VALUE._col0 (type: int), VALUE._col1 (type:
smallint)
+ outputColumnNames: _col0, _col1, _col2, _col3
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: [2, 1, 3, 4]
+ Statistics: Num rows: 3 Data size: 312 Basic stats: COMPLETE
Column stats: COMPLETE
+ PTF Operator
+ Function definitions:
+ Input definition
+ input alias: ptf_0
+ output shape: _col0: string, _col1: bigint, _col2:
int, _col3: smallint
+ type: WINDOWING
+ Windowing table definition
+ input alias: ptf_1
+ name: windowingtablefunction
+ order by: _col1 DESC NULLS FIRST, _col0 ASC NULLS LAST
+ partition by: 0
+ raw input shape:
+ window functions:
+ window function definition
+ alias: sum_window_0
+ arguments: (((_col1 * UDFToLong(2)) +
UDFToLong(_col2)) - UDFToLong(_col3))
+ name: sum
+ window function: GenericUDAFSumLong
+ window frame: RANGE PRECEDING(MAX)~CURRENT
+ PTF Vectorization:
+ allEvaluatorsAreStreaming: false
+ className: VectorPTFOperator
+ evaluatorClasses: [VectorPTFEvaluatorLongSum]
+ functionInputExpressions: [LongColSubtractLongColumn(col
8:bigint, col 4:bigint)(children: LongColAddLongColumn(col 7:bigint, col
3:bigint)(children: LongColMultiplyLongScalar(col 1:bigint, val 2) -> 7:bigint,
col 3:int) -> 8:bigint, col 4:smallint) -> 9:bigint]
+ functionNames: [sum]
+ keyInputColumns: [2, 1]
+ native: true
+ nonKeyInputColumns: [3, 4]
+ orderExpressions: [col 1:bigint, col 2:string]
+ outputColumns: [5, 2, 1, 3, 4]
+ outputTypes: [bigint, string, bigint, int, smallint]
+ partitionExpressions: [ConstantVectorExpression(val 0)
-> 6:int]
+ streamingColumns: []
+ Statistics: Num rows: 3 Data size: 312 Basic stats: COMPLETE
Column stats: COMPLETE
+ Select Operator
+ expressions: _col0 (type: string), _col1 (type: bigint),
_col2 (type: int), _col3 (type: smallint), sum_window_0 (type: bigint)
+ outputColumnNames: _col0, _col1, _col2, _col3, _col4
+ Select Vectorization:
+ className: VectorSelectOperator
+ native: true
+ projectedOutputColumnNums: [2, 1, 3, 4, 5]
+ Statistics: Num rows: 3 Data size: 336 Basic stats:
COMPLETE Column stats: COMPLETE
+ File Output Operator
+ compressed: false
+ File Sink Vectorization:
+ className: VectorFileSinkOperator
+ native: false
+ Statistics: Num rows: 3 Data size: 336 Basic stats:
COMPLETE Column stats: COMPLETE
+ table:
+ input format:
org.apache.hadoop.mapred.SequenceFileInputFormat
+ output format:
org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+ serde:
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: -1
+ Processor Tree:
+ ListSink
+
+PREHOOK: query: SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_long
+PREHOOK: type: QUERY
+PREHOOK: Input: default@repro_ptf_long
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT
+ id,
+ val1,
+ val2,
+ val3,
+ SUM(val1 * 2 + val2 - val3) OVER (ORDER BY val1 DESC, id ASC) AS final_total
+FROM repro_ptf_long
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@repro_ptf_long
+#### A masked pattern was here ####
+id val1 val2 val3 final_total
+req1 10 4 2 22
+req2 10 5 2 45
+req1 5 2 1 56