Index: metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java (revision 32896) +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java (working copy) @@ -465,8 +465,9 @@ while (oldPartKeysIter.hasNext()) { oldFs = oldPartKeysIter.next(); newFs = newPartKeysIter.next(); - if (!oldFs.getName().equals(newFs.getName()) || - !oldFs.getType().equals(newFs.getType())) { + // Alter table can change the type of partition key now. + // So check the column name only. + if (!oldFs.getName().equals(newFs.getName())) { return false; } } Index: ql/src/test/results/clientnegative/alter_partition_coltype_invalidtype.q.out =================================================================== --- ql/src/test/results/clientnegative/alter_partition_coltype_invalidtype.q.out (revision 0) +++ ql/src/test/results/clientnegative/alter_partition_coltype_invalidtype.q.out (working copy) @@ -0,0 +1,40 @@ +PREHOOK: query: -- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: default@alter_coltype +POSTHOOK: query: -- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@alter_coltype +PREHOOK: query: -- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src1 +PREHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: query: -- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src1 +POSTHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: desc alter_coltype +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt string None +ts string None + +# Partition Information +# col_name data_type comment + +dt string None +ts string None +FAILED: ParseException line 4:47 cannot recognize input near 'time' ')' '' in column type + Index: ql/src/test/results/clientnegative/alter_partition_coltype_invalidcolname.q.out =================================================================== --- ql/src/test/results/clientnegative/alter_partition_coltype_invalidcolname.q.out (revision 0) +++ ql/src/test/results/clientnegative/alter_partition_coltype_invalidcolname.q.out (working copy) @@ -0,0 +1,39 @@ +PREHOOK: query: -- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: default@alter_coltype +POSTHOOK: query: -- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@alter_coltype +PREHOOK: query: -- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src1 +PREHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: query: -- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src1 +POSTHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: desc alter_coltype +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt string None +ts string None + +# Partition Information +# col_name data_type comment + +dt string None +ts string None +FAILED: SemanticException [Error 10002]: Invalid column reference dd Index: ql/src/test/results/clientnegative/alter_partition_coltype_2columns.q.out =================================================================== --- ql/src/test/results/clientnegative/alter_partition_coltype_2columns.q.out (revision 0) +++ ql/src/test/results/clientnegative/alter_partition_coltype_2columns.q.out (working copy) @@ -0,0 +1,40 @@ +PREHOOK: query: -- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: default@alter_coltype +POSTHOOK: query: -- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@alter_coltype +PREHOOK: query: -- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src1 +PREHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: query: -- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src1 +POSTHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: desc alter_coltype +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt string None +ts string None + +# Partition Information +# col_name data_type comment + +dt string None +ts string None +FAILED: ParseException line 4:50 mismatched input ',' expecting ) near 'int' in alter table partition statement + Index: ql/src/test/results/clientpositive/alter_partition_coltype.q.out =================================================================== --- ql/src/test/results/clientpositive/alter_partition_coltype.q.out (revision 0) +++ ql/src/test/results/clientpositive/alter_partition_coltype.q.out (working copy) @@ -0,0 +1,1333 @@ +PREHOOK: query: -- create testing table. +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: default@alter_coltype +POSTHOOK: query: -- create testing table. +create table alter_coltype(key string, value string) partitioned by (dt string, ts string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@alter_coltype +PREHOOK: query: -- insert and create a partition. +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src1 +PREHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: query: -- insert and create a partition. +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src1 +POSTHOOK: Output: default@alter_coltype@dt=100x/ts=6%3A30pm +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: desc alter_coltype +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt string None +ts string None + +# Partition Information +# col_name data_type comment + +dt string None +ts string None +PREHOOK: query: -- select with paritition predicate. +select count(*) from alter_coltype where dt = '100x' +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: -- select with paritition predicate. +select count(*) from alter_coltype where dt = '100x' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +25 +PREHOOK: query: -- alter partition key column data type for dt column. +alter table alter_coltype partition column (dt int) +PREHOOK: type: null +PREHOOK: Input: default@alter_coltype +POSTHOOK: query: -- alter partition key column data type for dt column. +alter table alter_coltype partition column (dt int) +POSTHOOK: type: null +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Output: default@alter_coltype +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: -- load a new partition using new data type. +insert overwrite table alter_coltype partition(dt=10, ts='3.0') select * from src1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src1 +PREHOOK: Output: default@alter_coltype@dt=10/ts=3.0 +POSTHOOK: query: -- load a new partition using new data type. +insert overwrite table alter_coltype partition(dt=10, ts='3.0') select * from src1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src1 +POSTHOOK: Output: default@alter_coltype@dt=10/ts=3.0 +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: -- make sure the partition predicate still works. +select count(*) from alter_coltype where dt = '100x' +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: -- make sure the partition predicate still works. +select count(*) from alter_coltype where dt = '100x' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +25 +PREHOOK: query: explain extended select count(*) from alter_coltype where dt = '100x' +PREHOOK: type: QUERY +POSTHOOK: query: explain extended select count(*) from alter_coltype where dt = '100x' +POSTHOOK: type: QUERY +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME alter_coltype))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTIONSTAR count))) (TOK_WHERE (= (TOK_TABLE_OR_COL dt) '100x')))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + alter_coltype + TableScan + alias: alter_coltype + GatherStats: false + Select Operator + Group By Operator + aggregations: + expr: count() + bucketGroup: false + mode: hash + outputColumnNames: _col0 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: _col0 + type: bigint + Needs Tagging: false + Path -> Alias: +#### A masked pattern was here #### + Path -> Partition: +#### A masked pattern was here #### + Partition + base file name: ts=6%3A30pm + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 6:30pm + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 2 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 2 + numPartitions 2 + numRows 50 + partition_columns dt/ts + rawDataSize 382 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 432 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype + Reduce Operator Tree: + Group By Operator + aggregations: + expr: count(VALUE._col0) + bucketGroup: false + mode: mergepartial + outputColumnNames: _col0 + Select Operator + expressions: + expr: _col0 + type: bigint + outputColumnNames: _col0 + File Output Operator + compressed: false + GlobalTableId: 0 +#### A masked pattern was here #### + NumFilesPerFileSink: 1 +#### A masked pattern was here #### + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + columns _col0 + columns.types bigint + escape.delim \ + serialization.format 1 + TotalFiles: 1 + GatherStats: false + MultiFileSpray: false + Truncated Path -> Alias: + /alter_coltype/dt=100x/ts=6%3A30pm [alter_coltype] + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +PREHOOK: query: select count(*) from alter_coltype where dt = 100 +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: select count(*) from alter_coltype where dt = 100 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +0 +PREHOOK: query: -- alter partition key column data type for ts column. +alter table alter_coltype partition column (ts double) +PREHOOK: type: null +PREHOOK: Input: default@alter_coltype +POSTHOOK: query: -- alter partition key column data type for ts column. +alter table alter_coltype partition column (ts double) +POSTHOOK: type: null +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Output: default@alter_coltype +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: -- load a new partition using new data type. +insert overwrite table alter_coltype partition(dt='100x', ts=3.0) select * from src1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src1 +PREHOOK: Output: default@alter_coltype@dt=100x/ts=3.0 +POSTHOOK: query: -- load a new partition using new data type. +insert overwrite table alter_coltype partition(dt='100x', ts=3.0) select * from src1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src1 +POSTHOOK: Output: default@alter_coltype@dt=100x/ts=3.0 +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: -- validate partition key column predicate can still work. +select count(*) from alter_coltype where ts = '6:30pm' +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: -- validate partition key column predicate can still work. +select count(*) from alter_coltype where ts = '6:30pm' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +25 +PREHOOK: query: explain extended select count(*) from alter_coltype where ts = '6:30pm' +PREHOOK: type: QUERY +POSTHOOK: query: explain extended select count(*) from alter_coltype where ts = '6:30pm' +POSTHOOK: type: QUERY +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME alter_coltype))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTIONSTAR count))) (TOK_WHERE (= (TOK_TABLE_OR_COL ts) '6:30pm')))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + alter_coltype + TableScan + alias: alter_coltype + GatherStats: false + Select Operator + Group By Operator + aggregations: + expr: count() + bucketGroup: false + mode: hash + outputColumnNames: _col0 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: _col0 + type: bigint + Needs Tagging: false + Path -> Alias: +#### A masked pattern was here #### + Path -> Partition: +#### A masked pattern was here #### + Partition + base file name: ts=6%3A30pm + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 6:30pm + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype + Reduce Operator Tree: + Group By Operator + aggregations: + expr: count(VALUE._col0) + bucketGroup: false + mode: mergepartial + outputColumnNames: _col0 + Select Operator + expressions: + expr: _col0 + type: bigint + outputColumnNames: _col0 + File Output Operator + compressed: false + GlobalTableId: 0 +#### A masked pattern was here #### + NumFilesPerFileSink: 1 +#### A masked pattern was here #### + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + columns _col0 + columns.types bigint + escape.delim \ + serialization.format 1 + TotalFiles: 1 + GatherStats: false + MultiFileSpray: false + Truncated Path -> Alias: + /alter_coltype/dt=100x/ts=6%3A30pm [alter_coltype] + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +PREHOOK: query: -- validate partition key column predicate on two different partition column data type +-- can still work. +select count(*) from alter_coltype where ts = 3.0 and dt=10 +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: -- validate partition key column predicate on two different partition column data type +-- can still work. +select count(*) from alter_coltype where ts = 3.0 and dt=10 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +25 +PREHOOK: query: explain extended select count(*) from alter_coltype where ts = 3.0 and dt=10 +PREHOOK: type: QUERY +POSTHOOK: query: explain extended select count(*) from alter_coltype where ts = 3.0 and dt=10 +POSTHOOK: type: QUERY +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME alter_coltype))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTIONSTAR count))) (TOK_WHERE (and (= (TOK_TABLE_OR_COL ts) 3.0) (= (TOK_TABLE_OR_COL dt) 10))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + alter_coltype + TableScan + alias: alter_coltype + GatherStats: false + Filter Operator + isSamplingPred: false + predicate: + expr: ((ts = 3.0) and (dt = 10.0)) + type: boolean + Select Operator + Group By Operator + aggregations: + expr: count() + bucketGroup: false + mode: hash + outputColumnNames: _col0 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: _col0 + type: bigint + Needs Tagging: false + Path -> Alias: +#### A masked pattern was here #### + Path -> Partition: +#### A masked pattern was here #### + Partition + base file name: ts=3.0 + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 10 + ts 3.0 + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype +#### A masked pattern was here #### + Partition + base file name: ts=3.0 + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 3.0 + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype +#### A masked pattern was here #### + Partition + base file name: ts=6%3A30pm + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 6:30pm + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype + Reduce Operator Tree: + Group By Operator + aggregations: + expr: count(VALUE._col0) + bucketGroup: false + mode: mergepartial + outputColumnNames: _col0 + Select Operator + expressions: + expr: _col0 + type: bigint + outputColumnNames: _col0 + File Output Operator + compressed: false + GlobalTableId: 0 +#### A masked pattern was here #### + NumFilesPerFileSink: 1 +#### A masked pattern was here #### + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + columns _col0 + columns.types bigint + escape.delim \ + serialization.format 1 + TotalFiles: 1 + GatherStats: false + MultiFileSpray: false + Truncated Path -> Alias: + /alter_coltype/dt=10/ts=3.0 [alter_coltype] + /alter_coltype/dt=100x/ts=3.0 [alter_coltype] + /alter_coltype/dt=100x/ts=6%3A30pm [alter_coltype] + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +PREHOOK: query: -- query where multiple partition values (of different datatypes) are being selected +select key, value, dt, ts from alter_coltype where dt is not null +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: -- query where multiple partition values (of different datatypes) are being selected +select key, value, dt, ts from alter_coltype where dt is not null +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +238 val_238 10 3.0 + 10 3.0 +311 val_311 10 3.0 + val_27 10 3.0 + val_165 10 3.0 + val_409 10 3.0 +255 val_255 10 3.0 +278 val_278 10 3.0 +98 val_98 10 3.0 + val_484 10 3.0 + val_265 10 3.0 + val_193 10 3.0 +401 val_401 10 3.0 +150 val_150 10 3.0 +273 val_273 10 3.0 +224 10 3.0 +369 10 3.0 +66 val_66 10 3.0 +128 10 3.0 +213 val_213 10 3.0 +146 val_146 10 3.0 +406 val_406 10 3.0 + 10 3.0 + 10 3.0 + 10 3.0 +238 val_238 100x 3.0 + 100x 3.0 +311 val_311 100x 3.0 + val_27 100x 3.0 + val_165 100x 3.0 + val_409 100x 3.0 +255 val_255 100x 3.0 +278 val_278 100x 3.0 +98 val_98 100x 3.0 + val_484 100x 3.0 + val_265 100x 3.0 + val_193 100x 3.0 +401 val_401 100x 3.0 +150 val_150 100x 3.0 +273 val_273 100x 3.0 +224 100x 3.0 +369 100x 3.0 +66 val_66 100x 3.0 +128 100x 3.0 +213 val_213 100x 3.0 +146 val_146 100x 3.0 +406 val_406 100x 3.0 + 100x 3.0 + 100x 3.0 + 100x 3.0 +238 val_238 100x 6:30pm + 100x 6:30pm +311 val_311 100x 6:30pm + val_27 100x 6:30pm + val_165 100x 6:30pm + val_409 100x 6:30pm +255 val_255 100x 6:30pm +278 val_278 100x 6:30pm +98 val_98 100x 6:30pm + val_484 100x 6:30pm + val_265 100x 6:30pm + val_193 100x 6:30pm +401 val_401 100x 6:30pm +150 val_150 100x 6:30pm +273 val_273 100x 6:30pm +224 100x 6:30pm +369 100x 6:30pm +66 val_66 100x 6:30pm +128 100x 6:30pm +213 val_213 100x 6:30pm +146 val_146 100x 6:30pm +406 val_406 100x 6:30pm + 100x 6:30pm + 100x 6:30pm + 100x 6:30pm +PREHOOK: query: explain extended select key, value, dt, ts from alter_coltype where dt is not null +PREHOOK: type: QUERY +POSTHOOK: query: explain extended select key, value, dt, ts from alter_coltype where dt is not null +POSTHOOK: type: QUERY +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME alter_coltype))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key)) (TOK_SELEXPR (TOK_TABLE_OR_COL value)) (TOK_SELEXPR (TOK_TABLE_OR_COL dt)) (TOK_SELEXPR (TOK_TABLE_OR_COL ts))) (TOK_WHERE (TOK_FUNCTION TOK_ISNOTNULL (TOK_TABLE_OR_COL dt))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + alter_coltype + TableScan + alias: alter_coltype + GatherStats: false + Select Operator + expressions: + expr: key + type: string + expr: value + type: string + expr: dt + type: string + expr: ts + type: string + outputColumnNames: _col0, _col1, _col2, _col3 + File Output Operator + compressed: false + GlobalTableId: 0 +#### A masked pattern was here #### + NumFilesPerFileSink: 1 +#### A masked pattern was here #### + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + columns _col0,_col1,_col2,_col3 + columns.types string:string:string:string + escape.delim \ + serialization.format 1 + TotalFiles: 1 + GatherStats: false + MultiFileSpray: false + Needs Tagging: false + Path -> Alias: +#### A masked pattern was here #### + Path -> Partition: +#### A masked pattern was here #### + Partition + base file name: ts=3.0 + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 10 + ts 3.0 + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype +#### A masked pattern was here #### + Partition + base file name: ts=3.0 + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 3.0 + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype +#### A masked pattern was here #### + Partition + base file name: ts=6%3A30pm + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 6:30pm + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype + Truncated Path -> Alias: + /alter_coltype/dt=10/ts=3.0 [alter_coltype] + /alter_coltype/dt=100x/ts=3.0 [alter_coltype] + /alter_coltype/dt=100x/ts=6%3A30pm [alter_coltype] + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +PREHOOK: query: select count(*) from alter_coltype where ts = 3.0 +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: select count(*) from alter_coltype where ts = 3.0 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +50 +PREHOOK: query: -- make sure the partition predicate still works. +select count(*) from alter_coltype where dt = '100x' or dt = '10' +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_coltype +PREHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +PREHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: query: -- make sure the partition predicate still works. +select count(*) from alter_coltype where dt = '100x' or dt = '10' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Input: default@alter_coltype@dt=10/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=3.0 +POSTHOOK: Input: default@alter_coltype@dt=100x/ts=6%3A30pm +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +75 +PREHOOK: query: explain extended select count(*) from alter_coltype where dt = '100x' or dt = '10' +PREHOOK: type: QUERY +POSTHOOK: query: explain extended select count(*) from alter_coltype where dt = '100x' or dt = '10' +POSTHOOK: type: QUERY +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME alter_coltype))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTIONSTAR count))) (TOK_WHERE (or (= (TOK_TABLE_OR_COL dt) '100x') (= (TOK_TABLE_OR_COL dt) '10'))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + alter_coltype + TableScan + alias: alter_coltype + GatherStats: false + Select Operator + Group By Operator + aggregations: + expr: count() + bucketGroup: false + mode: hash + outputColumnNames: _col0 + Reduce Output Operator + sort order: + tag: -1 + value expressions: + expr: _col0 + type: bigint + Needs Tagging: false + Path -> Alias: +#### A masked pattern was here #### + Path -> Partition: +#### A masked pattern was here #### + Partition + base file name: ts=3.0 + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 10 + ts 3.0 + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype +#### A masked pattern was here #### + Partition + base file name: ts=3.0 + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 3.0 + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype +#### A masked pattern was here #### + Partition + base file name: ts=6%3A30pm + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + partition values: + dt 100x + ts 6:30pm + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 1 + numPartitions 3 + numRows 25 + partition_columns dt/ts + rawDataSize 191 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 216 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string +#### A masked pattern was here #### + name default.alter_coltype + numFiles 3 + numPartitions 3 + numRows 75 + partition_columns dt/ts + rawDataSize 573 + serialization.ddl struct alter_coltype { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + totalSize 648 +#### A masked pattern was here #### + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.alter_coltype + name: default.alter_coltype + Reduce Operator Tree: + Group By Operator + aggregations: + expr: count(VALUE._col0) + bucketGroup: false + mode: mergepartial + outputColumnNames: _col0 + Select Operator + expressions: + expr: _col0 + type: bigint + outputColumnNames: _col0 + File Output Operator + compressed: false + GlobalTableId: 0 +#### A masked pattern was here #### + NumFilesPerFileSink: 1 +#### A masked pattern was here #### + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + columns _col0 + columns.types bigint + escape.delim \ + serialization.format 1 + TotalFiles: 1 + GatherStats: false + MultiFileSpray: false + Truncated Path -> Alias: + /alter_coltype/dt=10/ts=3.0 [alter_coltype] + /alter_coltype/dt=100x/ts=3.0 [alter_coltype] + /alter_coltype/dt=100x/ts=6%3A30pm [alter_coltype] + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +PREHOOK: query: desc alter_coltype +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt int None +ts double None + +# Partition Information +# col_name data_type comment + +dt int None +ts double None +PREHOOK: query: desc alter_coltype partition (dt='100x', ts='6:30pm') +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype partition (dt='100x', ts='6:30pm') +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt int None +ts double None + +# Partition Information +# col_name data_type comment + +dt int None +ts double None +PREHOOK: query: desc alter_coltype partition (dt='100x', ts=3.0) +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype partition (dt='100x', ts=3.0) +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt int None +ts double None + +# Partition Information +# col_name data_type comment + +dt int None +ts double None +PREHOOK: query: desc alter_coltype partition (dt=10, ts=3.0) +PREHOOK: type: DESCTABLE +POSTHOOK: query: desc alter_coltype partition (dt=10, ts=3.0) +POSTHOOK: type: DESCTABLE +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +# col_name data_type comment + +key string None +value string None +dt int None +ts double None + +# Partition Information +# col_name data_type comment + +dt int None +ts double None +PREHOOK: query: drop table alter_coltype +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@alter_coltype +PREHOOK: Output: default@alter_coltype +POSTHOOK: query: drop table alter_coltype +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@alter_coltype +POSTHOOK: Output: default@alter_coltype +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=10,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=3.0).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).key SIMPLE [(src1)src1.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: alter_coltype PARTITION(dt=100x,ts=6:30pm).value SIMPLE [(src1)src1.FieldSchema(name:value, type:string, comment:default), ] Index: ql/src/test/queries/clientnegative/alter_partition_coltype_invalidcolname.q =================================================================== --- ql/src/test/queries/clientnegative/alter_partition_coltype_invalidcolname.q (revision 0) +++ ql/src/test/queries/clientnegative/alter_partition_coltype_invalidcolname.q (working copy) @@ -0,0 +1,12 @@ +-- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string); + +-- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1; + +desc alter_coltype; + +-- alter partition key column with invalid column name +alter table alter_coltype partition column (dd int); + + Index: ql/src/test/queries/clientnegative/alter_partition_coltype_2columns.q =================================================================== --- ql/src/test/queries/clientnegative/alter_partition_coltype_2columns.q (revision 0) +++ ql/src/test/queries/clientnegative/alter_partition_coltype_2columns.q (working copy) @@ -0,0 +1,11 @@ +-- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string); + +-- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1; + +desc alter_coltype; + +-- alter partition change multiple keys at same time +alter table alter_coltype partition column (dt int, ts int); + Index: ql/src/test/queries/clientnegative/alter_partition_coltype_invalidtype.q =================================================================== --- ql/src/test/queries/clientnegative/alter_partition_coltype_invalidtype.q (revision 0) +++ ql/src/test/queries/clientnegative/alter_partition_coltype_invalidtype.q (working copy) @@ -0,0 +1,11 @@ +-- create testing table +create table alter_coltype(key string, value string) partitioned by (dt string, ts string); + +-- insert and create a partition +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1; + +desc alter_coltype; + +-- alter partition key column data type for ts column to a wrong type +alter table alter_coltype partition column (ts time); + Index: ql/src/test/queries/clientpositive/alter_partition_coltype.q =================================================================== --- ql/src/test/queries/clientpositive/alter_partition_coltype.q (revision 0) +++ ql/src/test/queries/clientpositive/alter_partition_coltype.q (working copy) @@ -0,0 +1,55 @@ +-- create testing table. +create table alter_coltype(key string, value string) partitioned by (dt string, ts string); + +-- insert and create a partition. +insert overwrite table alter_coltype partition(dt='100x', ts='6:30pm') select * from src1; + +desc alter_coltype; + +-- select with paritition predicate. +select count(*) from alter_coltype where dt = '100x'; + +-- alter partition key column data type for dt column. +alter table alter_coltype partition column (dt int); + +-- load a new partition using new data type. +insert overwrite table alter_coltype partition(dt=10, ts='3.0') select * from src1; + +-- make sure the partition predicate still works. +select count(*) from alter_coltype where dt = '100x'; +explain extended select count(*) from alter_coltype where dt = '100x'; + +select count(*) from alter_coltype where dt = 100; + +-- alter partition key column data type for ts column. +alter table alter_coltype partition column (ts double); + +-- load a new partition using new data type. +insert overwrite table alter_coltype partition(dt='100x', ts=3.0) select * from src1; + +-- validate partition key column predicate can still work. +select count(*) from alter_coltype where ts = '6:30pm'; +explain extended select count(*) from alter_coltype where ts = '6:30pm'; + +-- validate partition key column predicate on two different partition column data type +-- can still work. +select count(*) from alter_coltype where ts = 3.0 and dt=10; +explain extended select count(*) from alter_coltype where ts = 3.0 and dt=10; + +-- query where multiple partition values (of different datatypes) are being selected +select key, value, dt, ts from alter_coltype where dt is not null; +explain extended select key, value, dt, ts from alter_coltype where dt is not null; + +select count(*) from alter_coltype where ts = 3.0; + +-- make sure the partition predicate still works. +select count(*) from alter_coltype where dt = '100x' or dt = '10'; +explain extended select count(*) from alter_coltype where dt = '100x' or dt = '10'; + +desc alter_coltype; +desc alter_coltype partition (dt='100x', ts='6:30pm'); +desc alter_coltype partition (dt='100x', ts=3.0); +desc alter_coltype partition (dt=10, ts=3.0); + +drop table alter_coltype; + Index: ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (revision 32896) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (working copy) @@ -115,6 +115,7 @@ import org.apache.hadoop.hive.ql.plan.AlterTableDesc; import org.apache.hadoop.hive.ql.plan.AlterTableDesc.AlterTableTypes; import org.apache.hadoop.hive.ql.plan.AlterTableSimpleDesc; +import org.apache.hadoop.hive.ql.plan.AlterTableAlterPartDesc; import org.apache.hadoop.hive.ql.plan.CreateDatabaseDesc; import org.apache.hadoop.hive.ql.plan.CreateIndexDesc; import org.apache.hadoop.hive.ql.plan.CreateTableDesc; @@ -432,6 +433,11 @@ return mergeFiles(db, mergeFilesDesc); } + AlterTableAlterPartDesc alterPartDesc = work.getAlterTableAlterPartDesc(); + if(alterPartDesc != null) { + return alterTableAlterPart(db, alterPartDesc); + } + TruncateTableDesc truncateTableDesc = work.getTruncateTblDesc(); if (truncateTableDesc != null) { return truncateTable(db, truncateTableDesc); @@ -1088,6 +1094,49 @@ } /** + * Alter partition column type in a table + * + * @param db + * Database to rename the partition. + * @param alterPartitionDesc + * change partition column type. + * @return Returns 0 when execution succeeds and above 0 if it fails. + * @throws HiveException + */ + private int alterTableAlterPart(Hive db, AlterTableAlterPartDesc alterPartitionDesc) + throws HiveException { + + Table tbl = db.getTable(alterPartitionDesc.getDbName(), alterPartitionDesc.getTableName()); + String tabName = alterPartitionDesc.getTableName(); + + // This is checked by DDLSemanticAnalyzer + assert(tbl.isPartitioned()); + + List newPartitionKeys = new ArrayList(); + + for(FieldSchema col : tbl.getTTable().getPartitionKeys()) { + if (col.getName().compareTo(alterPartitionDesc.getPartKeySpec().getName()) == 0) { + newPartitionKeys.add(alterPartitionDesc.getPartKeySpec()); + } else { + newPartitionKeys.add(col); + } + } + + tbl.getTTable().setPartitionKeys(newPartitionKeys); + + try { + db.alterTable(tabName, tbl); + } catch (InvalidOperationException e) { + throw new HiveException("Uable to update table"); + } + + work.getInputs().add(new ReadEntity(tbl)); + work.getOutputs().add(new WriteEntity(tbl)); + + return 0; + } + + /** * Rewrite the partition's metadata and force the pre/post execute hooks to * be fired. * Index: ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java (revision 32896) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java (working copy) @@ -48,7 +48,7 @@ ADDFILEFORMAT, ADDCLUSTERSORTCOLUMN, RENAMECOLUMN, ADDPARTITION, TOUCH, ARCHIVE, UNARCHIVE, ALTERPROTECTMODE, ALTERPARTITIONPROTECTMODE, ALTERLOCATION, DROPPARTITION, RENAMEPARTITION, ADDSKEWEDBY, ALTERSKEWEDLOCATION, - ALTERBUCKETNUM + ALTERBUCKETNUM, ALTERPARTITION } public static enum ProtectModeType { Index: ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java (revision 32896) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/DDLWork.java (working copy) @@ -64,6 +64,7 @@ private ShowIndexesDesc showIndexesDesc; private DescDatabaseDesc descDbDesc; private AlterDatabaseDesc alterDbDesc; + private AlterTableAlterPartDesc alterTableAlterPartDesc; private TruncateTableDesc truncateTblDesc; private RoleDDLDesc roleDDLDesc; @@ -463,7 +464,13 @@ this.mergeFilesDesc = mergeDesc; } - /** + public DDLWork(HashSet inputs, HashSet outputs, + AlterTableAlterPartDesc alterPartDesc) { + this(inputs, outputs); + this.alterTableAlterPartDesc = alterPartDesc; + } + + /** * @return Create Database descriptor */ public CreateDatabaseDesc getCreateDatabaseDesc() { @@ -1048,6 +1055,21 @@ this.needLock = needLock; } + /** + * @return information about the partitions we want to change. + */ + public AlterTableAlterPartDesc getAlterTableAlterPartDesc() { + return alterTableAlterPartDesc; + } + + /** + * @param alterPartitionDesc + * information about the partitions we want to change. + */ + public void setAlterTableAlterPartDesc(AlterTableAlterPartDesc alterPartitionDesc) { + this.alterTableAlterPartDesc = alterPartitionDesc; + } + @Explain(displayName = "Truncate Table Operator") public TruncateTableDesc getTruncateTblDesc() { return truncateTblDesc; Index: ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableAlterPartDesc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableAlterPartDesc.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableAlterPartDesc.java (working copy) @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.plan; + +import org.apache.hadoop.hive.metastore.api.FieldSchema; + +import java.util.List; + +public class AlterTableAlterPartDesc extends DDLDesc { + private String tableName; + private String dbName; + private FieldSchema partKeySpec; + + public AlterTableAlterPartDesc() { + } + + /** + * @param dbName + * database that contains the table / partition + * @param tableName + * table containing the partition + * @param partKeySpec + * key column specification. + */ + public AlterTableAlterPartDesc(String dbName, String tableName, FieldSchema partKeySpec) { + super(); + this.dbName = dbName; + this.tableName = tableName; + this.partKeySpec = partKeySpec; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getDbName() { + return dbName; + } + + public void setDbName(String dbName) { + this.dbName = dbName; + } + + public FieldSchema getPartKeySpec() { + return partKeySpec; + } + + public void setPartKeySpec(FieldSchema partKeySpec) { + this.partKeySpec = partKeySpec; + } +} Index: ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (revision 32896) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (working copy) @@ -134,6 +134,7 @@ TOK_ALTERTABLE_REPLACECOLS; TOK_ALTERTABLE_ADDPARTS; TOK_ALTERTABLE_DROPPARTS; +TOK_ALTERTABLE_ALTERPARTS; TOK_ALTERTABLE_ALTERPARTS_PROTECTMODE; TOK_ALTERTABLE_TOUCH; TOK_ALTERTABLE_ARCHIVE; @@ -817,8 +818,10 @@ alterTblPartitionStatement @init {msgs.push("alter table partition statement");} @after {msgs.pop();} - : tablePartitionPrefix alterTblPartitionStatementSuffix + : tablePartitionPrefix alterTblPartitionStatementSuffix -> ^(TOK_ALTERTABLE_PARTITION tablePartitionPrefix alterTblPartitionStatementSuffix) + |Identifier KW_PARTITION KW_COLUMN LPAREN columnNameType RPAREN + -> ^(TOK_ALTERTABLE_ALTERPARTS Identifier columnNameType) ; alterTblPartitionStatementSuffix Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java (revision 32896) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java (working copy) @@ -200,6 +200,7 @@ case HiveParser.TOK_ALTERTABLE_TOUCH: case HiveParser.TOK_ALTERTABLE_ARCHIVE: case HiveParser.TOK_ALTERTABLE_UNARCHIVE: + case HiveParser.TOK_ALTERTABLE_ALTERPARTS: case HiveParser.TOK_LOCKTABLE: case HiveParser.TOK_UNLOCKTABLE: case HiveParser.TOK_CREATEROLE: Index: ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (revision 32896) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (working copy) @@ -131,6 +131,7 @@ import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; import org.apache.hadoop.mapred.InputFormat; import org.apache.hadoop.mapred.TextInputFormat; +import org.apache.hadoop.hive.ql.plan.AlterTableAlterPartDesc; /** * DDLSemanticAnalyzer. @@ -340,6 +341,9 @@ case HiveParser.TOK_ALTERTABLE_DROPPARTS: analyzeAlterTableDropParts(ast, false); break; + case HiveParser.TOK_ALTERTABLE_ALTERPARTS: + analyzeAlterTableAlterParts(ast); + break; case HiveParser.TOK_ALTERTABLE_PROPERTIES: analyzeAlterTableProps(ast, false, false, false); break; @@ -2572,7 +2576,60 @@ dropTblDesc), conf)); } - /** + private void analyzeAlterTableAlterParts(ASTNode ast) + throws SemanticException { + // get table name + String tblName = getUnescapedName((ASTNode)ast.getChild(0)); + + Table tab = null; + + // check if table exists. + try { + tab = db.getTable(db.getCurrentDatabase(), tblName, true); + inputs.add(new ReadEntity(tab)); + } catch (HiveException e) { + throw new SemanticException(ErrorMsg.INVALID_TABLE.getMsg(tblName)); + } + + // validate the DDL is a valid operation on the table. + validateAlterTableType(tab, AlterTableTypes.ALTERPARTITION, false, false); + + // Alter table ... partition column ( column newtype) only takes one column at a time. + // It must have a column name followed with type. + ASTNode colAst = (ASTNode) ast.getChild(1); + assert(colAst.getChildCount() == 2); + + FieldSchema newCol = new FieldSchema(); + + // get column name + String name = colAst.getChild(0).getText().toLowerCase(); + newCol.setName(unescapeIdentifier(name)); + + // get column type + ASTNode typeChild = (ASTNode) (colAst.getChild(1)); + newCol.setType(getTypeStringFromAST(typeChild)); + + // check if column is defined or not + boolean fFoundColumn = false; + for( FieldSchema col : tab.getTTable().getPartitionKeys()) { + if (col.getName().compareTo(newCol.getName()) == 0) { + fFoundColumn = true; + } + } + + // raise error if we could not find the column + if (!fFoundColumn) { + throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(newCol.getName())); + } + + AlterTableAlterPartDesc alterTblAlterPartDesc = + new AlterTableAlterPartDesc(db.getCurrentDatabase(), tblName, newCol); + + rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), + alterTblAlterPartDesc), conf)); + } + + /** * Add one or more partitions to a table. Useful when the data has been copied * to the right location by some other process. *