diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 9355d25..7d8135a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -293,9 +293,9 @@ public void analyzeInternal(ASTNode input) throws SemanticException { } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_PARTCOLTYPE) { analyzeAlterTablePartColType(qualified, ast); } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_PROPERTIES) { - analyzeAlterTableProps(qualified, null, ast, false, false); + analyzeAlterTableProps(qualified, partSpec, ast, false, false); } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_DROPPROPERTIES) { - analyzeAlterTableProps(qualified, null, ast, false, true); + analyzeAlterTableProps(qualified, partSpec, ast, false, true); } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_UPDATESTATS) { analyzeAlterTableProps(qualified, partSpec, ast, false, false); } else if (ast.getType() == HiveParser.TOK_ALTERTABLE_SKEWED) { @@ -1529,14 +1529,19 @@ private void addInputsOutputsAlterTable(String tableName, Map pa // validate Unset Non Existed Table Properties if (op == AlterTableDesc.AlterTableTypes.DROPPROPS && !desc.getIsDropIfExists()) { - Map tableParams = tab.getTTable().getParameters(); + Map params = null; + if (partSpec == null) { + params = tab.getTTable().getParameters(); + } else { + Partition part = getPartition(tab, partSpec, true); + params = part.getTPartition().getParameters(); + } for (String currKey : desc.getProps().keySet()) { - if (!tableParams.containsKey(currKey)) { - String errorMsg = - "The following property " + currKey + - " does not exist in " + tab.getTableName(); + if (!params.containsKey(currKey)) { + String errorMsg = "The following property " + currKey + " does not exist in " + + tab.getTableName(); throw new SemanticException( - ErrorMsg.ALTER_TBL_UNSET_NON_EXIST_PROPERTY.getMsg(errorMsg)); + ErrorMsg.ALTER_TBL_UNSET_NON_EXIST_PROPERTY.getMsg(errorMsg)); } } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g index c411f5e..cbea1cb 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g @@ -1042,7 +1042,6 @@ alterTableStatementSuffix | alterStatementSuffixTouch | alterStatementSuffixArchive | alterStatementSuffixUnArchive - | alterStatementSuffixProperties | alterStatementSuffixSkewedby | alterStatementSuffixExchangePartition | alterStatementPartitionKeyType @@ -1058,6 +1057,7 @@ alterTblPartitionStatementSuffix | alterStatementSuffixLocation | alterStatementSuffixMergeFiles | alterStatementSuffixSerdeProperties + | alterStatementSuffixProperties | alterStatementSuffixRenamePart | alterStatementSuffixBucketNum | alterTblPartitionStatementSuffixSkewedLocation diff --git a/ql/src/test/queries/clientpositive/alter_table_part_properties.q b/ql/src/test/queries/clientpositive/alter_table_part_properties.q new file mode 100644 index 0000000..3638819 --- /dev/null +++ b/ql/src/test/queries/clientpositive/alter_table_part_properties.q @@ -0,0 +1,29 @@ +create table sp like srcpart; + +insert into sp partition (ds='2008-04-08', hr=11) select * from src; + +desc formatted sp partition (ds='2008-04-08', hr=11); + +alter table sp partition (ds='2008-04-08', hr=11) set tblproperties ('foo'='bar'); + +desc formatted sp partition (ds='2008-04-08', hr=11); + +alter table sp partition (ds='2008-04-08', hr=11) set tblproperties ('foo'='foo'); + +desc formatted sp partition (ds='2008-04-08', hr=11); + +alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties ('foo'); + +desc formatted sp partition (ds='2008-04-08', hr=11); + +alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties ("COLUMN_STATS_ACCURATE"); + +desc formatted sp partition (ds='2008-04-08', hr=11); + +ANALYZE TABLE sp partition (ds='2008-04-08', hr=11) COMPUTE STATISTICS; + +desc formatted sp partition (ds='2008-04-08', hr=11); + +alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties if exists ("COLUMN_STATS_ACCURATE"); + +desc formatted sp partition (ds='2008-04-08', hr=11); diff --git a/ql/src/test/results/clientpositive/alter_table_part_properties.q.out b/ql/src/test/results/clientpositive/alter_table_part_properties.q.out new file mode 100644 index 0000000..596a2a5 --- /dev/null +++ b/ql/src/test/results/clientpositive/alter_table_part_properties.q.out @@ -0,0 +1,361 @@ +PREHOOK: query: create table sp like srcpart +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@sp +POSTHOOK: query: create table sp like srcpart +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@sp +PREHOOK: query: insert into sp partition (ds='2008-04-08', hr=11) select * from src +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: query: insert into sp partition (ds='2008-04-08', hr=11) select * from src +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: Lineage: sp PARTITION(ds=2008-04-08,hr=11).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: sp PARTITION(ds=2008-04-08,hr=11).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@sp +POSTHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@sp +# col_name data_type comment + +key string default +value string default + +# Partition Information +# col_name data_type comment + +ds string +hr string + +# Detailed Partition Information +Partition Value: [2008-04-08, 11] +Database: default +Table: sp +#### A masked pattern was here #### +Partition Parameters: + COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} + numFiles 1 + numRows 500 + rawDataSize 5312 + totalSize 5812 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +PREHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) set tblproperties ('foo'='bar') +PREHOOK: type: ALTERTABLE_PROPERTIES +PREHOOK: Input: default@sp +PREHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) set tblproperties ('foo'='bar') +POSTHOOK: type: ALTERTABLE_PROPERTIES +POSTHOOK: Input: default@sp +POSTHOOK: Input: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: Output: default@sp@ds=2008-04-08/hr=11 +PREHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@sp +POSTHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@sp +# col_name data_type comment + +key string default +value string default + +# Partition Information +# col_name data_type comment + +ds string +hr string + +# Detailed Partition Information +Partition Value: [2008-04-08, 11] +Database: default +Table: sp +#### A masked pattern was here #### +Partition Parameters: + COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} + foo bar +#### A masked pattern was here #### + numFiles 1 + numRows 500 + rawDataSize 5312 + totalSize 5812 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +PREHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) set tblproperties ('foo'='foo') +PREHOOK: type: ALTERTABLE_PROPERTIES +PREHOOK: Input: default@sp +PREHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) set tblproperties ('foo'='foo') +POSTHOOK: type: ALTERTABLE_PROPERTIES +POSTHOOK: Input: default@sp +POSTHOOK: Input: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: Output: default@sp@ds=2008-04-08/hr=11 +PREHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@sp +POSTHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@sp +# col_name data_type comment + +key string default +value string default + +# Partition Information +# col_name data_type comment + +ds string +hr string + +# Detailed Partition Information +Partition Value: [2008-04-08, 11] +Database: default +Table: sp +#### A masked pattern was here #### +Partition Parameters: + COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} + foo foo +#### A masked pattern was here #### + numFiles 1 + numRows 500 + rawDataSize 5312 + totalSize 5812 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +PREHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties ('foo') +PREHOOK: type: ALTERTABLE_PROPERTIES +PREHOOK: Input: default@sp +PREHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties ('foo') +POSTHOOK: type: ALTERTABLE_PROPERTIES +POSTHOOK: Input: default@sp +POSTHOOK: Input: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: Output: default@sp@ds=2008-04-08/hr=11 +PREHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@sp +POSTHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@sp +# col_name data_type comment + +key string default +value string default + +# Partition Information +# col_name data_type comment + +ds string +hr string + +# Detailed Partition Information +Partition Value: [2008-04-08, 11] +Database: default +Table: sp +#### A masked pattern was here #### +Partition Parameters: + COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} +#### A masked pattern was here #### + numFiles 1 + numRows 500 + rawDataSize 5312 + totalSize 5812 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +PREHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties ("COLUMN_STATS_ACCURATE") +PREHOOK: type: ALTERTABLE_PROPERTIES +PREHOOK: Input: default@sp +PREHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties ("COLUMN_STATS_ACCURATE") +POSTHOOK: type: ALTERTABLE_PROPERTIES +POSTHOOK: Input: default@sp +POSTHOOK: Input: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: Output: default@sp@ds=2008-04-08/hr=11 +PREHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@sp +POSTHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@sp +# col_name data_type comment + +key string default +value string default + +# Partition Information +# col_name data_type comment + +ds string +hr string + +# Detailed Partition Information +Partition Value: [2008-04-08, 11] +Database: default +Table: sp +#### A masked pattern was here #### +Partition Parameters: +#### A masked pattern was here #### + numFiles 1 + numRows 500 + rawDataSize 5312 + totalSize 5812 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +PREHOOK: query: ANALYZE TABLE sp partition (ds='2008-04-08', hr=11) COMPUTE STATISTICS +PREHOOK: type: QUERY +PREHOOK: Input: default@sp +PREHOOK: Input: default@sp@ds=2008-04-08/hr=11 +PREHOOK: Output: default@sp +PREHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: query: ANALYZE TABLE sp partition (ds='2008-04-08', hr=11) COMPUTE STATISTICS +POSTHOOK: type: QUERY +POSTHOOK: Input: default@sp +POSTHOOK: Input: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: Output: default@sp +POSTHOOK: Output: default@sp@ds=2008-04-08/hr=11 +PREHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@sp +POSTHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@sp +# col_name data_type comment + +key string default +value string default + +# Partition Information +# col_name data_type comment + +ds string +hr string + +# Detailed Partition Information +Partition Value: [2008-04-08, 11] +Database: default +Table: sp +#### A masked pattern was here #### +Partition Parameters: + COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} +#### A masked pattern was here #### + numFiles 1 + numRows 500 + rawDataSize 5312 + totalSize 5812 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +PREHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties if exists ("COLUMN_STATS_ACCURATE") +PREHOOK: type: ALTERTABLE_PROPERTIES +PREHOOK: Input: default@sp +PREHOOK: Output: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: query: alter table sp partition (ds='2008-04-08', hr=11) unset tblproperties if exists ("COLUMN_STATS_ACCURATE") +POSTHOOK: type: ALTERTABLE_PROPERTIES +POSTHOOK: Input: default@sp +POSTHOOK: Input: default@sp@ds=2008-04-08/hr=11 +POSTHOOK: Output: default@sp@ds=2008-04-08/hr=11 +PREHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@sp +POSTHOOK: query: desc formatted sp partition (ds='2008-04-08', hr=11) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@sp +# col_name data_type comment + +key string default +value string default + +# Partition Information +# col_name data_type comment + +ds string +hr string + +# Detailed Partition Information +Partition Value: [2008-04-08, 11] +Database: default +Table: sp +#### A masked pattern was here #### +Partition Parameters: +#### A masked pattern was here #### + numFiles 1 + numRows 500 + rawDataSize 5312 + totalSize 5812 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1