diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java index 3e8e1b3981..e99dd41d60 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java @@ -1453,6 +1453,19 @@ public TableSpec(Table tableHandle, List partitions) } } + private boolean createDynPartSpec(ASTNode ast) { + if(ast.getToken().getType() != HiveParser.TOK_CREATETABLE && + ast.getToken().getType() != HiveParser.TOK_CREATE_MATERIALIZED_VIEW && + ast.getToken().getType() != HiveParser.TOK_ALTER_MATERIALIZED_VIEW && + tableHandle.getPartitionKeys().size() > 0 + && (ast.getParent() != null && (ast.getParent().getType() == HiveParser.TOK_INSERT_INTO + || ast.getParent().getType() == HiveParser.TOK_INSERT) + || ast.getParent().getType() == HiveParser.TOK_DESTINATION + || ast.getParent().getType() == HiveParser.TOK_ANALYZE )) { + return true; + } + return false; + } public TableSpec(Hive db, HiveConf conf, ASTNode ast, boolean allowDynamicPartitionsSpec, boolean allowPartialPartitionsSpec) throws SemanticException { assert (ast.getToken().getType() == HiveParser.TOK_TAB @@ -1574,15 +1587,9 @@ public TableSpec(Hive db, HiveConf conf, ASTNode ast, boolean allowDynamicPartit } specType = SpecType.STATIC_PARTITION; } - } else if(ast.getToken().getType() != HiveParser.TOK_CREATETABLE && - ast.getToken().getType() != HiveParser.TOK_CREATE_MATERIALIZED_VIEW && - ast.getToken().getType() != HiveParser.TOK_ALTER_MATERIALIZED_VIEW && - tableHandle.getPartitionKeys().size() > 0 && allowDynamicPartitionsSpec - && (ast.getParent() != null && (ast.getParent().getType() == HiveParser.TOK_INSERT_INTO - || ast.getParent().getType() == HiveParser.TOK_INSERT) - || ast.getParent().getType() == HiveParser.TOK_DESTINATION)) { + } else if(createDynPartSpec(ast) && allowDynamicPartitionsSpec) { // if user hasn't specify partition spec generate it from table's partition spec - // do this only if it is INSERT/INSERT INTO/INSERT OVERWRITE + // do this only if it is INSERT/INSERT INTO/INSERT OVERWRITE/ANALYZE List parts = tableHandle.getPartitionKeys(); partSpec = new LinkedHashMap(parts.size()); for (FieldSchema fs : parts) { diff --git a/ql/src/test/queries/clientpositive/analyze_tbl_part.q b/ql/src/test/queries/clientpositive/analyze_tbl_part.q index 54e816a9ff..e8010bd540 100644 --- a/ql/src/test/queries/clientpositive/analyze_tbl_part.q +++ b/ql/src/test/queries/clientpositive/analyze_tbl_part.q @@ -28,3 +28,6 @@ select * from src1; ANALYZE TABLE src_stat_string_part partition (partitionName="p\'1") COMPUTE STATISTICS for columns key, value; ANALYZE TABLE src_stat_string_part partition (partitionName="p\"1") COMPUTE STATISTICS for columns key, value; + +-- analyze table without specifying partition spec +ANALYZE TABLE src_stat_string_part COMPUTE STATISTICS for columns key, value; diff --git a/ql/src/test/results/clientpositive/analyze_tbl_part.q.out b/ql/src/test/results/clientpositive/analyze_tbl_part.q.out index 5899ab2af0..c2380eee32 100644 --- a/ql/src/test/results/clientpositive/analyze_tbl_part.q.out +++ b/ql/src/test/results/clientpositive/analyze_tbl_part.q.out @@ -180,3 +180,21 @@ POSTHOOK: Input: default@src_stat_string_part@partitionname=p%221 POSTHOOK: Output: default@src_stat_string_part POSTHOOK: Output: default@src_stat_string_part@partitionname=p%221 #### A masked pattern was here #### +PREHOOK: query: ANALYZE TABLE src_stat_string_part COMPUTE STATISTICS for columns key, value +PREHOOK: type: QUERY +PREHOOK: Input: default@src_stat_string_part +PREHOOK: Input: default@src_stat_string_part@partitionname=p%221 +PREHOOK: Input: default@src_stat_string_part@partitionname=p%271 +PREHOOK: Output: default@src_stat_string_part +PREHOOK: Output: default@src_stat_string_part@partitionname=p%221 +PREHOOK: Output: default@src_stat_string_part@partitionname=p%271 +#### A masked pattern was here #### +POSTHOOK: query: ANALYZE TABLE src_stat_string_part COMPUTE STATISTICS for columns key, value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src_stat_string_part +POSTHOOK: Input: default@src_stat_string_part@partitionname=p%221 +POSTHOOK: Input: default@src_stat_string_part@partitionname=p%271 +POSTHOOK: Output: default@src_stat_string_part +POSTHOOK: Output: default@src_stat_string_part@partitionname=p%221 +POSTHOOK: Output: default@src_stat_string_part@partitionname=p%271 +#### A masked pattern was here ####