commit ccd10f6f32044e0fc3c1d3fc7086e97044228841 Author: Janaki Lahorani Date: Wed Oct 18 15:44:10 2017 -0700 Fix for HIVE-17832: Allow changing hive.metastore.disallow.incompatible.col.type.changes in metastore. diff --git common/src/java/org/apache/hadoop/hive/conf/HiveConf.java common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index a6ecb373d87dada369cd0f03c243d4498e01077e..4d2b7a0ee2f2266a0599f6d3afd43329d21fe9c2 100644 --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -299,7 +299,8 @@ private static URL checkConfigFile(File f) { HiveConf.ConfVars.METASTORE_TRY_DIRECT_SQL_DDL, HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT, HiveConf.ConfVars.METASTORE_PARTITION_NAME_WHITELIST_PATTERN, - HiveConf.ConfVars.METASTORE_CAPABILITY_CHECK + HiveConf.ConfVars.METASTORE_CAPABILITY_CHECK, + HiveConf.ConfVars.METASTORE_DISALLOW_INCOMPATIBLE_COL_TYPE_CHANGES }; static { diff --git ql/src/test/queries/clientnegative/allow_change_col_type_par_neg.q ql/src/test/queries/clientnegative/allow_change_col_type_par_neg.q new file mode 100644 index 0000000000000000000000000000000000000000..f619ccfa95b1382f1bb3e17e60e907cbf12f4392 --- /dev/null +++ ql/src/test/queries/clientnegative/allow_change_col_type_par_neg.q @@ -0,0 +1,17 @@ +-- Setup +create table t1 (c1 int); + +-- Check value of parameter +set hive.metastore.disallow.incompatible.col.type.changes; +set metaconf:hive.metastore.disallow.incompatible.col.type.changes; + +-- Change parameter to disallow column type changes in metastore +set hive.metastore.disallow.incompatible.col.type.changes=false; +set metaconf:hive.metastore.disallow.incompatible.col.type.changes=true; + +-- check value of parameter +set hive.metastore.disallow.incompatible.col.type.changes; +set metaconf:hive.metastore.disallow.incompatible.col.type.changes; + +-- Change int to small int now not allowed. +alter table t1 change column c1 c1 smallint; diff --git ql/src/test/queries/clientpositive/allow_change_col_type_par.q ql/src/test/queries/clientpositive/allow_change_col_type_par.q new file mode 100644 index 0000000000000000000000000000000000000000..dba4e70ccc11013b83c32d9e36af1bf299daf30f --- /dev/null +++ ql/src/test/queries/clientpositive/allow_change_col_type_par.q @@ -0,0 +1,16 @@ +-- Setup +create table t1 (c1 int); + +-- Check value of parameter +set hive.metastore.disallow.incompatible.col.type.changes; +set metaconf:hive.metastore.disallow.incompatible.col.type.changes; + +-- Change parameter to allow column type changes in metastore +set metaconf:hive.metastore.disallow.incompatible.col.type.changes=false; + +-- check value of parameter +set hive.metastore.disallow.incompatible.col.type.changes; +set metaconf:hive.metastore.disallow.incompatible.col.type.changes; + +-- Change int to small int now allowed. +alter table t1 change column c1 c1 smallint; diff --git ql/src/test/results/clientnegative/allow_change_col_type_par_neg.q.out ql/src/test/results/clientnegative/allow_change_col_type_par_neg.q.out new file mode 100644 index 0000000000000000000000000000000000000000..3f91e85a3a401c2147e4704d0e01906062162e4d --- /dev/null +++ ql/src/test/results/clientnegative/allow_change_col_type_par_neg.q.out @@ -0,0 +1,18 @@ +PREHOOK: query: create table t1 (c1 int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t1 +POSTHOOK: query: create table t1 (c1 int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t1 +hive.metastore.disallow.incompatible.col.type.changes=true +metaconf:hive.metastore.disallow.incompatible.col.type.changes=true +hive.metastore.disallow.incompatible.col.type.changes=false +metaconf:hive.metastore.disallow.incompatible.col.type.changes=true +PREHOOK: query: alter table t1 change column c1 c1 smallint +PREHOOK: type: ALTERTABLE_RENAMECOL +PREHOOK: Input: default@t1 +PREHOOK: Output: default@t1 +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The following columns have types incompatible with the existing columns in their respective positions : +c1 diff --git ql/src/test/results/clientpositive/allow_change_col_type_par.q.out ql/src/test/results/clientpositive/allow_change_col_type_par.q.out new file mode 100644 index 0000000000000000000000000000000000000000..d24dfdb55167789dbfbe84fc26864739c87134c5 --- /dev/null +++ ql/src/test/results/clientpositive/allow_change_col_type_par.q.out @@ -0,0 +1,20 @@ +PREHOOK: query: create table t1 (c1 int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t1 +POSTHOOK: query: create table t1 (c1 int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t1 +hive.metastore.disallow.incompatible.col.type.changes=true +metaconf:hive.metastore.disallow.incompatible.col.type.changes=true +hive.metastore.disallow.incompatible.col.type.changes=true +metaconf:hive.metastore.disallow.incompatible.col.type.changes=false +PREHOOK: query: alter table t1 change column c1 c1 smallint +PREHOOK: type: ALTERTABLE_RENAMECOL +PREHOOK: Input: default@t1 +PREHOOK: Output: default@t1 +POSTHOOK: query: alter table t1 change column c1 c1 smallint +POSTHOOK: type: ALTERTABLE_RENAMECOL +POSTHOOK: Input: default@t1 +POSTHOOK: Output: default@t1 diff --git standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java index 5933318e64b2bcf6e85fca4b87eb3f805742e66c..39d374b74aa7a99fbc424b6d3d990e497ba01c06 100644 --- standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java +++ standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java @@ -161,7 +161,8 @@ public String toString() { ConfVars.TRY_DIRECT_SQL_DDL, ConfVars.CLIENT_SOCKET_TIMEOUT, ConfVars.PARTITION_NAME_WHITELIST_PATTERN, - ConfVars.CAPABILITY_CHECK + ConfVars.CAPABILITY_CHECK, + ConfVars.DISALLOW_INCOMPATIBLE_COL_TYPE_CHANGES }; static {