Repository: hive Updated Branches: refs/heads/master 6df4d6f04 -> 4931805c1
HIVE-19112: Support Analyze table for partitioned tables without partition spec (Vineet Garg, reviewed by Ashutosh Chauhan) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/4931805c Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/4931805c Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/4931805c Branch: refs/heads/master Commit: 4931805c172a7099f42226183025d480e7768fa0 Parents: 6df4d6f Author: Vineet Garg <vg...@apache.org> Authored: Fri Apr 6 12:43:10 2018 -0700 Committer: Vineet Garg <vg...@apache.org> Committed: Fri Apr 6 12:43:10 2018 -0700 ---------------------------------------------------------------------- .../hive/ql/parse/BaseSemanticAnalyzer.java | 23 +++++++++++++------- ql/src/test/queries/clientnegative/analyze.q | 1 - .../queries/clientpositive/analyze_tbl_part.q | 3 +++ .../test/results/clientnegative/analyze.q.out | 1 - .../clientpositive/analyze_tbl_part.q.out | 18 +++++++++++++++ 5 files changed, 36 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/4931805c/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java ---------------------------------------------------------------------- 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 3e8e1b3..5301b2a 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 abstract class BaseSemanticAnalyzer { } } + 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 abstract class BaseSemanticAnalyzer { } 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<FieldSchema> parts = tableHandle.getPartitionKeys(); partSpec = new LinkedHashMap<String, String>(parts.size()); for (FieldSchema fs : parts) { http://git-wip-us.apache.org/repos/asf/hive/blob/4931805c/ql/src/test/queries/clientnegative/analyze.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/analyze.q b/ql/src/test/queries/clientnegative/analyze.q deleted file mode 100644 index 874f5bf..0000000 --- a/ql/src/test/queries/clientnegative/analyze.q +++ /dev/null @@ -1 +0,0 @@ -analyze table srcpart compute statistics; http://git-wip-us.apache.org/repos/asf/hive/blob/4931805c/ql/src/test/queries/clientpositive/analyze_tbl_part.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/analyze_tbl_part.q b/ql/src/test/queries/clientpositive/analyze_tbl_part.q index 54e816a..e8010bd 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; http://git-wip-us.apache.org/repos/asf/hive/blob/4931805c/ql/src/test/results/clientnegative/analyze.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/analyze.q.out b/ql/src/test/results/clientnegative/analyze.q.out deleted file mode 100644 index 94079c9..0000000 --- a/ql/src/test/results/clientnegative/analyze.q.out +++ /dev/null @@ -1 +0,0 @@ -FAILED: SemanticException [Error 10115]: Table is partitioned and partition specification is needed http://git-wip-us.apache.org/repos/asf/hive/blob/4931805c/ql/src/test/results/clientpositive/analyze_tbl_part.q.out ---------------------------------------------------------------------- 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 5899ab2..c2380ee 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 ####