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;