You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by th...@apache.org on 2015/02/26 19:23:55 UTC
svn commit: r1662527 - in
/hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse:
BaseSemanticAnalyzer.java SemanticAnalyzer.java
Author: thejas
Date: Thu Feb 26 18:23:54 2015
New Revision: 1662527
URL: http://svn.apache.org/r1662527
Log:
HIVE-9509 : Restore partition spec validation removed by HIVE-9445 (Sergey Shelukhin, reviewed by Ashutosh Chauhan)
Modified:
hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified: hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java?rev=1662527&r1=1662526&r2=1662527&view=diff
==============================================================================
--- hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java (original)
+++ hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java Thu Feb 26 18:23:54 2015
@@ -72,6 +72,8 @@ import org.apache.hadoop.hive.serde2.obj
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
+import com.google.common.annotations.VisibleForTesting;
+
/**
* BaseSemanticAnalyzer.
*
@@ -1242,7 +1244,36 @@ public abstract class BaseSemanticAnalyz
inputOI.getTypeName(), outputOI.getTypeName());
}
+ normalizeColSpec(partSpec, astKeyName, colType, colSpec, convertedValue);
+ }
+ }
+
+ @VisibleForTesting
+ static void normalizeColSpec(Map<String, String> partSpec, String colName,
+ String colType, String originalColSpec, Object colValue) throws SemanticException {
+ if (colValue == null) return; // nothing to do with nulls
+ String normalizedColSpec = originalColSpec;
+ if (colType.equals(serdeConstants.DATE_TYPE_NAME)) {
+ normalizedColSpec = normalizeDateCol(colValue, originalColSpec);
+ }
+ if (!normalizedColSpec.equals(originalColSpec)) {
+ STATIC_LOG.warn("Normalizing partition spec - " + colName + " from "
+ + originalColSpec + " to " + normalizedColSpec);
+ partSpec.put(colName, normalizedColSpec);
+ }
+ }
+
+ private static String normalizeDateCol(
+ Object colValue, String originalColSpec) throws SemanticException {
+ Date value;
+ if (colValue instanceof DateWritable) {
+ value = ((DateWritable) colValue).get();
+ } else if (colValue instanceof Date) {
+ value = (Date) colValue;
+ } else {
+ throw new SemanticException("Unexpected date type " + colValue.getClass());
}
+ return HiveMetaStore.PARTITION_DATE_FORMAT.get().format(value);
}
protected Database getDatabase(String dbName) throws SemanticException {
Modified: hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1662527&r1=1662526&r2=1662527&view=diff
==============================================================================
--- hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/branch-1.0/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Thu Feb 26 18:23:54 2015
@@ -1472,25 +1472,30 @@ public class SemanticAnalyzer extends Ba
partition.put(partitionName, partitionVal);
}
// if it is a dynamic partition throw the exception
- if (childCount == partition.size()) {
- try {
- Table table = db.getTable(tableName);
- Partition parMetaData = db.getPartition(table, partition, false);
- // Check partition exists if it exists skip the overwrite
- if (parMetaData != null) {
- phase1Result = false;
- skipRecursion = true;
- LOG.info("Partition already exists so insert into overwrite " +
- "skipped for partition : " + parMetaData.toString());
- break;
- }
- } catch (HiveException e) {
- LOG.info("Error while getting metadata : ", e);
- }
- } else {
+ if (childCount != partition.size()) {
throw new SemanticException(ErrorMsg.INSERT_INTO_DYNAMICPARTITION_IFNOTEXISTS
.getMsg(partition.toString()));
}
+ Table table = null;
+ try {
+ table = db.getTable(tableName);
+ } catch (HiveException ex) {
+ throw new SemanticException(ex);
+ }
+ try {
+ Partition parMetaData = db.getPartition(table, partition, false);
+ // Check partition exists if it exists skip the overwrite
+ if (parMetaData != null) {
+ phase1Result = false;
+ skipRecursion = true;
+ LOG.info("Partition already exists so insert into overwrite " +
+ "skipped for partition : " + parMetaData.toString());
+ break;
+ }
+ } catch (HiveException e) {
+ LOG.info("Error while getting metadata : ", e);
+ }
+ validatePartSpec(table, partition, (ASTNode)tab, conf, false);
}
skipRecursion = false;
break;