You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2013/09/12 04:07:42 UTC

svn commit: r1522118 - in /hive/trunk/ql/src/java/org/apache/hadoop/hive/ql: ErrorMsg.java parse/ColumnStatsSemanticAnalyzer.java

Author: navis
Date: Thu Sep 12 02:07:42 2013
New Revision: 1522118

URL: http://svn.apache.org/r1522118
Log:
HIVE-5240 : Column statistics on a partitioned column should fail early with proper error message (Prasanth J via Navis)

Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java?rev=1522118&r1=1522117&r2=1522118&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java Thu Sep 12 02:07:42 2013
@@ -403,6 +403,8 @@ public enum ErrorMsg {
   COLUMNSTATSCOLLECTOR_PARSE_ERROR(30009, "Encountered parse error while parsing rewritten query"),
   COLUMNSTATSCOLLECTOR_IO_ERROR(30010, "Encountered I/O exception while parsing rewritten query"),
   DROP_COMMAND_NOT_ALLOWED_FOR_PARTITION(30011, "Partition protected from being dropped"),
+  COLUMNSTATSCOLLECTOR_INVALID_COLUMN(30012, "Column statistics are not supported "
+      + "for partition columns"),
     ;
 
   private int errorCode;

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java?rev=1522118&r1=1522117&r2=1522118&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java Thu Sep 12 02:07:42 2013
@@ -31,6 +31,7 @@ import org.apache.hadoop.hive.conf.HiveC
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.ql.Context;
 import org.apache.hadoop.hive.ql.ErrorMsg;
+import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.Partition;
 import org.apache.hadoop.hive.ql.metadata.Table;
@@ -520,6 +521,7 @@ public class ColumnStatsSemanticAnalyzer
       originalTree = tree;
       boolean isPartitionStats = isPartitionLevelStats(tree);
       PartitionList partList = null;
+      checkForPartitionColumns(colNames, getPartitionKeys(tableName));
 
       if (isPartitionStats) {
         isTableLevel = false;
@@ -543,6 +545,30 @@ public class ColumnStatsSemanticAnalyzer
     }
   }
 
+  private List<String> getPartitionKeys(String tableName) throws SemanticException {
+    List<FieldSchema> fields;
+    try {
+      fields = db.getTable(tableName).getPartitionKeys();
+    } catch (HiveException e) {
+      throw new SemanticException(ErrorMsg.INVALID_TABLE.getMsg(tableName));
+    }
+
+    return Utilities.getColumnNamesFromFieldSchema(fields);
+  }
+
+  private void checkForPartitionColumns(List<String> specifiedCols, List<String> partCols)
+      throws SemanticException {
+    // Raise error if user has specified partition column for stats
+    for (String pc : partCols) {
+      for (String sc : specifiedCols) {
+        if (pc.equalsIgnoreCase(sc)) {
+          throw new SemanticException(ErrorMsg.COLUMNSTATSCOLLECTOR_INVALID_COLUMN.getMsg()
+              + " [Try removing column '" + sc + "' from column list]");
+        }
+      }
+    }
+  }
+
   @Override
   public void analyze(ASTNode ast, Context origCtx) throws SemanticException {
     QB qb;