diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 8516631198aded8ad46ed8a8b4cc5e23cfff88f2..22a37c28c313e88a92fbf66a4e93faff621bc1c6 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -6483,7 +6483,13 @@ protected Operator genFileSinkPlan(String dest, QB qb, Operator input) } colName = fixCtasColumnName(colName); col.setName(colName); - col.setType(colInfo.getType().getTypeName()); + String typeName = colInfo.getType().getTypeName(); + //The schema field can not be void type. + if (typeName.equals(serdeConstants.VOID_TYPE_NAME)) { + col.setType(serdeConstants.STRING_TYPE_NAME); + } else { + col.setType(colInfo.getType().getTypeName()); + } field_schemas.add(col); } diff --git a/ql/src/test/queries/clientpositive/ctas_nullvalueorc.q b/ql/src/test/queries/clientpositive/ctas_nullvalueorc.q new file mode 100644 index 0000000000000000000000000000000000000000..666e4116b1f7aa01768cd6001d9174795eca7a36 --- /dev/null +++ b/ql/src/test/queries/clientpositive/ctas_nullvalueorc.q @@ -0,0 +1,9 @@ +create table if not exists emptytab(value int); +CREATE TABLE orc_table_with_null1 STORED AS ORC AS +SELECT value, null FROM emptytab; +insert into table emptytab select count(*) from emptytab; +CREATE TABLE orc_table_with_null2 STORED AS ORC AS +SELECT value, null FROM emptytab; +DROP TABLE orc_table_with_null2; +DROP TABLE orc_table_with_null1; +DROP TABLE emptytab; diff --git a/ql/src/test/results/clientpositive/ctas_nullvalueorc.q.out b/ql/src/test/results/clientpositive/ctas_nullvalueorc.q.out new file mode 100644 index 0000000000000000000000000000000000000000..593451bb3d58b7858f7ea780e1218bf6cd4dc381 --- /dev/null +++ b/ql/src/test/results/clientpositive/ctas_nullvalueorc.q.out @@ -0,0 +1,65 @@ +PREHOOK: query: create table if not exists emptytab(value int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@emptytab +POSTHOOK: query: create table if not exists emptytab(value int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@emptytab +PREHOOK: query: CREATE TABLE orc_table_with_null1 STORED AS ORC AS +SELECT value, null FROM emptytab +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@emptytab +PREHOOK: Output: database:default +PREHOOK: Output: default@orc_table_with_null1 +POSTHOOK: query: CREATE TABLE orc_table_with_null1 STORED AS ORC AS +SELECT value, null FROM emptytab +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@emptytab +POSTHOOK: Output: database:default +POSTHOOK: Output: default@orc_table_with_null1 +PREHOOK: query: insert into table emptytab select count(*) from emptytab +PREHOOK: type: QUERY +PREHOOK: Input: default@emptytab +PREHOOK: Output: default@emptytab +POSTHOOK: query: insert into table emptytab select count(*) from emptytab +POSTHOOK: type: QUERY +POSTHOOK: Input: default@emptytab +POSTHOOK: Output: default@emptytab +POSTHOOK: Lineage: emptytab.value EXPRESSION [] +PREHOOK: query: CREATE TABLE orc_table_with_null2 STORED AS ORC AS +SELECT value, null FROM emptytab +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@emptytab +PREHOOK: Output: database:default +PREHOOK: Output: default@orc_table_with_null2 +POSTHOOK: query: CREATE TABLE orc_table_with_null2 STORED AS ORC AS +SELECT value, null FROM emptytab +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@emptytab +POSTHOOK: Output: database:default +POSTHOOK: Output: default@orc_table_with_null2 +PREHOOK: query: DROP TABLE orc_table_with_null2 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@orc_table_with_null2 +PREHOOK: Output: default@orc_table_with_null2 +POSTHOOK: query: DROP TABLE orc_table_with_null2 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@orc_table_with_null2 +POSTHOOK: Output: default@orc_table_with_null2 +PREHOOK: query: DROP TABLE orc_table_with_null1 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@orc_table_with_null1 +PREHOOK: Output: default@orc_table_with_null1 +POSTHOOK: query: DROP TABLE orc_table_with_null1 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@orc_table_with_null1 +POSTHOOK: Output: default@orc_table_with_null1 +PREHOOK: query: DROP TABLE emptytab +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@emptytab +PREHOOK: Output: default@emptytab +POSTHOOK: query: DROP TABLE emptytab +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@emptytab +POSTHOOK: Output: default@emptytab