diff --git ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java index 946f9a6..393ef57 100644 --- ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java +++ ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java @@ -403,6 +403,8 @@ 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; diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java index 5e3a513..b52cdeb 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java @@ -525,6 +525,7 @@ public ColumnStatsSemanticAnalyzer(HiveConf conf, ASTNode tree) throws SemanticE isTableLevel = false; partList = getPartKeyValuePairsFromAST(tree); validatePartitionClause(tableName, partList); + validateColumnNames(colNames, partList); partName = constructPartitionName(tableName, partList); colType = getPartitionColumnType(tableName, partName, colNames, numCols); } else { @@ -543,6 +544,16 @@ public ColumnStatsSemanticAnalyzer(HiveConf conf, ASTNode tree) throws SemanticE } } + private void validateColumnNames(List colNames, PartitionList partList) throws SemanticException { + // Raise error if the user has specified partition name in the list of columns + for(String partName : partList.getPartKeys()) { + if (colNames.contains(partName)) { + throw new SemanticException(ErrorMsg.COLUMNSTATSCOLLECTOR_INVALID_COLUMN.getMsg() + + " [Try removing column '" + partName + "' from column list]"); + } + } + } + @Override public void analyze(ASTNode ast, Context origCtx) throws SemanticException { QB qb;