Set<Partition> parts = null;
// pass both confirmed and unknown partitions through the map-reduce framework
parts = partsList.getConfirmedPartns();
parts.addAll(partsList.getUnknownPartns());
partitionDesc aliasPartnDesc = null;
try{
if (parts.isEmpty()) {
if (!partsList.getDeniedPartns().isEmpty())
aliasPartnDesc = Utilities.getPartitionDesc(partsList.getDeniedPartns()
.iterator().next());
} else {
aliasPartnDesc = Utilities.getPartitionDesc(parts.iterator().next());
}
} catch (HiveException e) {
LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e));
throw new SemanticException(e.getMessage(), e);
}
// The table does not have any partitions
if (aliasPartnDesc == null)
aliasPartnDesc = new partitionDesc(Utilities.getTableDesc(parseCtx.getTopToTable().get(topOp)), null);
plan.getAliasToPartnInfo().put(alias_id, aliasPartnDesc);
for (Partition part : parts) {
if (part.getTable().isPartitioned())
inputs.add(new ReadEntity(part));
else
inputs.add(new ReadEntity(part.getTable()));
// Later the properties have to come from the partition as opposed
// to from the table in order to support versioning.
Path paths[];
sampleDesc sampleDescr = parseCtx.getOpToSamplePruner().get(topOp);
if (sampleDescr != null) {
paths = SamplePruner.prune(part, sampleDescr);
}
else {
paths = part.getPath();
}
// is it a partitioned table ?
if (!part.getTable().isPartitioned()) {
assert ((tblDir == null) && (tblDesc == null));
tblDir = paths[0];
tblDesc = Utilities.getTableDesc(part.getTable());
}
for (Path p: paths) {
if(p == null)
continue;
String path = p.toString();
LOG.debug("Adding " + path + " of table" + alias_id);
partDir.add(p);
try{
partDesc.add(Utilities.getPartitionDesc(part));
} catch (HiveException e) {
LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e));
throw new SemanticException(e.getMessage(), e);
}
}
}
Iterator<Path> iterPath = partDir.iterator();
Iterator<partitionDesc> iterPartnDesc = partDesc.iterator();
if (!local) {
while (iterPath.hasNext()) {
assert iterPartnDesc.hasNext();
String path = iterPath.next().toString();
partitionDesc prtDesc = iterPartnDesc.next();
// Add the path to alias mapping
if (plan.getPathToAliases().get(path) == null) {
plan.getPathToAliases().put(path, new ArrayList<String>());
}