diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java index 50eda15..ac5da9d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java @@ -2056,6 +2056,17 @@ private boolean validateGroupByOperator(GroupByOperator op, boolean isReduce, bo ProcessingMode processingMode = VectorGroupByDesc.groupByDescModeToVectorProcessingMode(desc.getMode(), hasKeys); + if (processingMode == ProcessingMode.MERGE_PARTIAL) { + // For now, VectorGroupByOperator ProcessingModeReduceMergePartial cannot handle key + // expressions. + for (ExprNodeDesc keyExpr : desc.getKeys()) { + if (!(keyExpr instanceof ExprNodeColumnDesc)) { + setExpressionIssue("Key", "Non-column key expressions not supported for MERGEPARTIAL"); + return false; + } + } + } + Pair retPair = validateAggregationDescs(desc.getAggregators(), processingMode, hasKeys); if (!retPair.left) { diff --git storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatch.java storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatch.java index 0235ffc..278865f 100644 --- storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatch.java +++ storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizedRowBatch.java @@ -137,6 +137,43 @@ public String toString() { return ""; } StringBuilder b = new StringBuilder(); + b.append("Column vector types: "); + for (int k = 0; k < projectionSize; k++) { + int projIndex = projectedColumns[k]; + ColumnVector cv = cols[projIndex]; + if (k > 0) { + b.append(", "); + } + b.append(projIndex); + b.append(":"); + String colVectorType = null; + if (cv instanceof LongColumnVector) { + colVectorType = "LONG"; + } else if (cv instanceof DoubleColumnVector) { + colVectorType = "DOUBLE"; + } else if (cv instanceof BytesColumnVector) { + colVectorType = "BYTES"; + } else if (cv instanceof DecimalColumnVector) { + colVectorType = "DECIMAL"; + } else if (cv instanceof TimestampColumnVector) { + colVectorType = "TIMESTAMP"; + } else if (cv instanceof IntervalDayTimeColumnVector) { + colVectorType = "INTERVAL_DAY_TIME"; + } else if (cv instanceof ListColumnVector) { + colVectorType = "LIST"; + } else if (cv instanceof MapColumnVector) { + colVectorType = "MAP"; + } else if (cv instanceof StructColumnVector) { + colVectorType = "STRUCT"; + } else if (cv instanceof UnionColumnVector) { + colVectorType = "UNION"; + } else { + colVectorType = "Unknown"; + } + b.append(colVectorType); + } + b.append('\n'); + if (this.selectedInUse) { for (int j = 0; j < size; j++) { int i = selected[j];