You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kh...@apache.org on 2014/11/05 08:43:20 UTC
svn commit: r1636813 -
/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
Author: khorgath
Date: Wed Nov 5 07:43:20 2014
New Revision: 1636813
URL: http://svn.apache.org/r1636813
Log:
HIVE-8719 : LoadSemanticAnalyzer ignores previous partition location if inserting into partition that already exists (Sushanth Sowmyan, reviewed by Alan Gates)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java?rev=1636813&r1=1636812&r2=1636813&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java Wed Nov 5 07:43:20 2014
@@ -238,6 +238,8 @@ public class LoadSemanticAnalyzer extend
// create final load/move work
+ boolean preservePartitionSpecs = false;
+
Map<String, String> partSpec = ts.getPartSpec();
if (partSpec == null) {
partSpec = new LinkedHashMap<String, String>();
@@ -252,9 +254,14 @@ public class LoadSemanticAnalyzer extend
throw new SemanticException(ErrorMsg.OFFLINE_TABLE_OR_PARTITION.
getMsg(ts.tableName + ":" + part.getName()));
}
- outputs.add(new WriteEntity(part,
- (isOverWrite ? WriteEntity.WriteType.INSERT_OVERWRITE :
- WriteEntity.WriteType.INSERT)));
+ if (isOverWrite){
+ outputs.add(new WriteEntity(part, WriteEntity.WriteType.INSERT_OVERWRITE));
+ } else {
+ outputs.add(new WriteEntity(part, WriteEntity.WriteType.INSERT));
+ // If partition already exists and we aren't overwriting it, then respect
+ // its current location info rather than picking it from the parent TableDesc
+ preservePartitionSpecs = true;
+ }
} else {
outputs.add(new WriteEntity(ts.tableHandle,
(isOverWrite ? WriteEntity.WriteType.INSERT_OVERWRITE :
@@ -269,6 +276,12 @@ public class LoadSemanticAnalyzer extend
LoadTableDesc loadTableWork;
loadTableWork = new LoadTableDesc(new Path(fromURI),
Utilities.getTableDesc(ts.tableHandle), partSpec, isOverWrite);
+ if (preservePartitionSpecs){
+ // Note : preservePartitionSpecs=true implies inheritTableSpecs=false but
+ // but preservePartitionSpecs=false(default) here is not sufficient enough
+ // info to set inheritTableSpecs=true
+ loadTableWork.setInheritTableSpecs(false);
+ }
Task<? extends Serializable> childTask = TaskFactory.get(new MoveWork(getInputs(),
getOutputs(), loadTableWork, null, true, isLocal), conf);