diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java index 9bbaadd..9f33ab3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java @@ -62,13 +62,16 @@ int parents = parentOperators.size(); parentObjInspectors = new StructObjectInspector[parents]; parentFields = new List[parents]; + int columns = 0; for (int p = 0; p < parents; p++) { parentObjInspectors[p] = (StructObjectInspector) inputObjInspectors[p]; parentFields[p] = parentObjInspectors[p].getAllStructFieldRefs(); + if (p == 0 || parentFields[p].size() < columns) { + columns = parentFields[p].size(); + } } // Get columnNames from the first parent - int columns = parentFields[0].size(); ArrayList columnNames = new ArrayList(columns); for (int c = 0; c < columns; c++) { columnNames.add(parentFields[0].get(c).getFieldName()); @@ -81,7 +84,8 @@ } for (int p = 0; p < parents; p++) { - assert (parentFields[p].size() == columns); + // When columns is 0, the union operator is empty. + assert (columns == 0 || parentFields[p].size() == columns); for (int c = 0; c < columns; c++) { if (!columnTypeResolvers[c].updateForUnionAll(parentFields[p].get(c) .getFieldObjectInspector())) {