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 79955e9..ce43f61 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java @@ -753,6 +753,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 88bf829..1a1a020 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java @@ -510,10 +510,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)); @@ -522,8 +523,7 @@ public static void setMapWork(MapWork plan, ParseContext parseCtx, Set props = tsOp.getConf().getOpProps(); @@ -682,7 +682,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(); @@ -97,6 +97,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 @@ -224,10 +228,8 @@ public void setProperties(final Properties properties) { this.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) {