diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 77388dd..87e878b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -5662,14 +5662,17 @@ private Operator genFileSinkPlan(String dest, QB qb, Operator input) colInfo.setAlias(nm[1]); } + String colName = colInfo.getInternalName(); if (field_schemas != null) { + //CTAS case. FieldSchema col = new FieldSchema(); if ("".equals(nm[0]) || nm[1] == null) { // ast expression is not a valid column name for table - col.setName(colInfo.getInternalName()); + colName = colInfo.getInternalName(); } else { - col.setName(unescapeIdentifier(colInfo.getAlias()).toLowerCase()); // remove `` + colName = unescapeIdentifier(colInfo.getAlias()).toLowerCase(); // remove `` } + col.setName(colName);; col.setType(colInfo.getType().getTypeName()); field_schemas.add(col); } @@ -5680,7 +5683,7 @@ private Operator genFileSinkPlan(String dest, QB qb, Operator input) } first = false; - cols = cols.concat(colInfo.getInternalName()); + cols = cols.concat(colName); // Replace VOID type with string when the output is a temp table or // local files. diff --git ql/src/test/queries/clientpositive/parquet_ctas.q ql/src/test/queries/clientpositive/parquet_ctas.q new file mode 100644 index 0000000..9682671 --- /dev/null +++ ql/src/test/queries/clientpositive/parquet_ctas.q @@ -0,0 +1,20 @@ +drop table parquet_ctas; +drop table parquet_ctas_advanced; +drop table parquet_ctas_alias; +drop table parquet_ctas_mixed; + +create table parquet_ctas stored as parquet as select * from srcbucket limit 10; +describe parquet_ctas; +select * from parquet_ctas; + +create table parquet_ctas_advanced stored as parquet as select key+1,concat(value,"value") from srcbucket limit 10; +describe parquet_ctas_advanced; +select * from parquet_ctas_advanced; + +create table parquet_ctas_alias stored as parquet as select key+1 as mykey,concat(value,"value") as myvalue from srcbucket limit 10; +describe parquet_ctas_alias; +select * from parquet_ctas_alias; + +create table parquet_ctas_mixed stored as parquet as select key,key+1,concat(value,"value") as myvalue from srcbucket limit 10; +describe parquet_ctas_mixed; +select * from parquet_ctas_mixed; \ No newline at end of file diff --git ql/src/test/results/clientpositive/ctas.q.out ql/src/test/results/clientpositive/ctas.q.out index 9668855..0bda29a 100644 --- ql/src/test/results/clientpositive/ctas.q.out +++ ql/src/test/results/clientpositive/ctas.q.out @@ -836,7 +836,7 @@ STAGE PLANS: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat properties: - columns _col0,_col1 + columns key,value columns.types string:string field.delim , line.delim diff --git ql/src/test/results/clientpositive/parquet_ctas.q.out ql/src/test/results/clientpositive/parquet_ctas.q.out new file mode 100644 index 0000000..e0d9744 --- /dev/null +++ ql/src/test/results/clientpositive/parquet_ctas.q.out @@ -0,0 +1,141 @@ +PREHOOK: query: drop table parquet_ctas +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table parquet_ctas +POSTHOOK: type: DROPTABLE +PREHOOK: query: drop table parquet_ctas_advanced +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table parquet_ctas_advanced +POSTHOOK: type: DROPTABLE +PREHOOK: query: drop table parquet_ctas_alias +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table parquet_ctas_alias +POSTHOOK: type: DROPTABLE +PREHOOK: query: drop table parquet_ctas_mixed +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table parquet_ctas_mixed +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table parquet_ctas stored as parquet as select * from srcbucket limit 10 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@srcbucket +POSTHOOK: query: create table parquet_ctas stored as parquet as select * from srcbucket limit 10 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@srcbucket +POSTHOOK: Output: default@parquet_ctas +PREHOOK: query: describe parquet_ctas +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe parquet_ctas +POSTHOOK: type: DESCTABLE +key int from deserializer +value string from deserializer +PREHOOK: query: select * from parquet_ctas +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_ctas +#### A masked pattern was here #### +POSTHOOK: query: select * from parquet_ctas +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_ctas +#### A masked pattern was here #### +428 val_429 +296 val_297 +278 val_279 +440 val_441 +246 val_247 +448 val_449 +272 val_273 +468 val_469 +62 val_63 +474 val_475 +PREHOOK: query: create table parquet_ctas_advanced stored as parquet as select key+1,concat(value,"value") from srcbucket limit 10 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@srcbucket +POSTHOOK: query: create table parquet_ctas_advanced stored as parquet as select key+1,concat(value,"value") from srcbucket limit 10 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@srcbucket +POSTHOOK: Output: default@parquet_ctas_advanced +PREHOOK: query: describe parquet_ctas_advanced +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe parquet_ctas_advanced +POSTHOOK: type: DESCTABLE +_c0 int from deserializer +_c1 string from deserializer +PREHOOK: query: select * from parquet_ctas_advanced +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_ctas_advanced +#### A masked pattern was here #### +POSTHOOK: query: select * from parquet_ctas_advanced +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_ctas_advanced +#### A masked pattern was here #### +429 val_429value +297 val_297value +279 val_279value +441 val_441value +247 val_247value +449 val_449value +273 val_273value +469 val_469value +63 val_63value +475 val_475value +PREHOOK: query: create table parquet_ctas_alias stored as parquet as select key+1 as mykey,concat(value,"value") as myvalue from srcbucket limit 10 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@srcbucket +POSTHOOK: query: create table parquet_ctas_alias stored as parquet as select key+1 as mykey,concat(value,"value") as myvalue from srcbucket limit 10 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@srcbucket +POSTHOOK: Output: default@parquet_ctas_alias +PREHOOK: query: describe parquet_ctas_alias +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe parquet_ctas_alias +POSTHOOK: type: DESCTABLE +mykey int from deserializer +myvalue string from deserializer +PREHOOK: query: select * from parquet_ctas_alias +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_ctas_alias +#### A masked pattern was here #### +POSTHOOK: query: select * from parquet_ctas_alias +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_ctas_alias +#### A masked pattern was here #### +429 val_429value +297 val_297value +279 val_279value +441 val_441value +247 val_247value +449 val_449value +273 val_273value +469 val_469value +63 val_63value +475 val_475value +PREHOOK: query: create table parquet_ctas_mixed stored as parquet as select key,key+1,concat(value,"value") as myvalue from srcbucket limit 10 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@srcbucket +POSTHOOK: query: create table parquet_ctas_mixed stored as parquet as select key,key+1,concat(value,"value") as myvalue from srcbucket limit 10 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@srcbucket +POSTHOOK: Output: default@parquet_ctas_mixed +PREHOOK: query: describe parquet_ctas_mixed +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe parquet_ctas_mixed +POSTHOOK: type: DESCTABLE +key int from deserializer +_c1 int from deserializer +myvalue string from deserializer +PREHOOK: query: select * from parquet_ctas_mixed +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_ctas_mixed +#### A masked pattern was here #### +POSTHOOK: query: select * from parquet_ctas_mixed +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_ctas_mixed +#### A masked pattern was here #### +428 429 val_429value +296 297 val_297value +278 279 val_279value +440 441 val_441value +246 247 val_247value +448 449 val_449value +272 273 val_273value +468 469 val_469value +62 63 val_63value +474 475 val_475value