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 00590e39f7..29c33f98c0 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java @@ -776,6 +776,11 @@ public static TableDesc getTableDesc(String cols, String colTypes) { serdeConstants.SERIALIZATION_LIB,LazySimpleSerDe.class.getName()))); } + public static PartitionDesc getPartitionDesc(Partition part, TableDesc tableDesc) throws + HiveException { + return new PartitionDesc(part, tableDesc); + } + public static PartitionDesc getPartitionDesc(Partition part) throws HiveException { return new PartitionDesc(part); } diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java index d86162bac8..67739a1db9 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java @@ -514,10 +514,11 @@ public static void setMapWork(MapWork plan, ParseContext parseCtx, Set parts = partsList.getPartitions(); + TableDesc tableSpec = Utilities.getTableDesc(tsOp.getConf().getTableMetadata()); PartitionDesc aliasPartnDesc = null; try { if (!parts.isEmpty()) { - aliasPartnDesc = Utilities.getPartitionDesc(parts.iterator().next()); + aliasPartnDesc = Utilities.getPartitionDesc(parts.iterator().next(), tableSpec); } } catch (HiveException e) { LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e)); @@ -526,8 +527,7 @@ public static void setMapWork(MapWork plan, ParseContext parseCtx, Set props = tsOp.getConf().getOpProps(); @@ -686,7 +686,7 @@ public static void setMapWork(MapWork plan, ParseContext parseCtx, Set setPartSpec(partSpec); } - public PartitionDesc(final Partition part) throws HiveException { - PartitionDescConstructorHelper(part, getTableDesc(part.getTable()), true); + public PartitionDesc(final Partition part, final TableDesc tableDesc) throws HiveException { + PartitionDescConstructorHelper(part, tableDesc, true); if (Utilities.isInputFileFormatSelfDescribing(this)) { // if IF is self describing no need to send column info per partition, since its not used anyway. Table tbl = part.getTable(); @@ -94,6 +94,10 @@ public PartitionDesc(final Partition part) throws HiveException { } } + public PartitionDesc(final Partition part) throws HiveException { + this(part, getTableDesc(part.getTable())); + } + /** * @param part Partition * @param tblDesc Table Descriptor @@ -229,10 +233,8 @@ public void setProperties(final Properties properties) { } } - private static TableDesc getTableDesc(Table table) { - TableDesc tableDesc = Utilities.getTableDesc(table); - internProperties(tableDesc.getProperties()); - return tableDesc; + public static TableDesc getTableDesc(Table table) { + return Utilities.getTableDesc(table); } private static void internProperties(Properties properties) {