diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java index 8495d73..210bc56 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java @@ -610,12 +610,11 @@ private int compareKey(final WritableComparator comparators[], final int pos, if ((joinKeysObjectInspectors != null) && (joinKeysObjectInspectors[alias] != null)) { return JoinUtil.computeKeys(row, joinKeys[alias], joinKeysObjectInspectors[alias]); } else { - row = - ObjectInspectorUtils.copyToStandardObject(row, inputObjInspectors[alias], - ObjectInspectorCopyOption.WRITABLE); - StructObjectInspector soi = (StructObjectInspector) inputObjInspectors[alias]; - StructField sf = soi.getStructFieldRef(Utilities.ReduceField.KEY.toString()); - return (List) soi.getStructFieldData(row, sf); + final List key = new ArrayList(1); + ObjectInspectorUtils.partialCopyToStandardObject(key, row, + Utilities.ReduceField.KEY.position, 1, (StructObjectInspector) inputObjInspectors[alias], + ObjectInspectorCopyOption.WRITABLE); + return (List) key.get(0); // this is always 0, even if KEY.position is not } } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java index cd2d091..e3e74f0 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java @@ -255,7 +255,12 @@ * VALUE: record value */ public static enum ReduceField { - KEY, VALUE + KEY(0), VALUE(1); + + int position; + ReduceField(int position) { + this.position = position; + }; }; public static List reduceFieldNameList; diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/tez/ReduceRecordSource.java ql/src/java/org/apache/hadoop/hive/ql/exec/tez/ReduceRecordSource.java index 95dbdba..e72d700 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/tez/ReduceRecordSource.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/tez/ReduceRecordSource.java @@ -343,7 +343,7 @@ public void next() throws HiveException { } else { row.add(passDownKey.get(0)); } - if ((passDownKey == null) && (reducer instanceof CommonMergeJoinOperator)) { + if ((passDownKey == null) && (reducer instanceof CommonMergeJoinOperator) && hasNext()) { passDownKey = (List) ObjectInspectorUtils.copyToStandardObject(row, reducer.getInputObjInspectors()[tag], ObjectInspectorCopyOption.WRITABLE);