diff --git ql/src/java/org/apache/hadoop/hive/ql/hooks/WriteEntity.java ql/src/java/org/apache/hadoop/hive/ql/hooks/WriteEntity.java index 2194a6d..5004bd4 100644 --- ql/src/java/org/apache/hadoop/hive/ql/hooks/WriteEntity.java +++ ql/src/java/org/apache/hadoop/hive/ql/hooks/WriteEntity.java @@ -168,7 +168,7 @@ public boolean equals(Object o) { if (o instanceof WriteEntity) { WriteEntity ore = (WriteEntity) o; - return (toString().equalsIgnoreCase(ore.toString())); + return (toString().equalsIgnoreCase(ore.toString())) && this.writeType == ore.writeType; } else { return false; } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 9d58193..8355880 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -6673,7 +6673,7 @@ protected Operator genFileSinkPlan(String dest, QB qb, Operator input) new DummyPartition(dest_tab, dest_tab.getDbName() + "@" + dest_tab.getTableName() + "@" + ppath, partSpec); - output = new WriteEntity(p, WriteEntity.WriteType.INSERT, false); + output = new WriteEntity(p, getWriteType(), false); outputs.add(output); } catch (HiveException e) { throw new SemanticException(e.getMessage(), e); @@ -6746,9 +6746,9 @@ protected Operator genFileSinkPlan(String dest, QB qb, Operator input) ltd.setLbCtx(lbCtx); loadTableWork.add(ltd); - if (!outputs.add(new WriteEntity(dest_part, (ltd.getReplace() ? - WriteEntity.WriteType.INSERT_OVERWRITE : - WriteEntity.WriteType.INSERT)))) { + + if (!outputs.add(new WriteEntity(dest_part, + determineWriteType(ltd, dest_tab.isNonNative())))) { throw new SemanticException(ErrorMsg.OUTPUT_SPECIFIED_MULTIPLE_TIMES .getMsg(dest_tab.getTableName() + "@" + dest_part.getName())); } @@ -13034,8 +13034,11 @@ private void addAlternateGByKeyMappings(ASTNode gByExpr, ColumnInfo colInfo, // and don't have a rational way to guess, so assume the most // conservative case. if (isNonNativeTable) return WriteEntity.WriteType.INSERT_OVERWRITE; - else return (ltd.getReplace() ? WriteEntity.WriteType.INSERT_OVERWRITE : - WriteEntity.WriteType.INSERT); + else return (ltd.getReplace() ? WriteEntity.WriteType.INSERT_OVERWRITE : getWriteType()); + } + private WriteEntity.WriteType getWriteType() { + return updating() ? WriteEntity.WriteType.UPDATE : + (deleting() ? WriteEntity.WriteType.DELETE : WriteEntity.WriteType.INSERT); } private boolean isAcidOutputFormat(Class of) {