HIVE-11217: CTAS statements throws error, when the table is stored as ORC File format and select clause has NULL/VOID type column (Yongzhi Chen reviewed by Prasanth Jayachandran)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/2e8324e4 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/2e8324e4 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/2e8324e4 Branch: refs/heads/beeline-cli Commit: 2e8324e439de02c75e173e27147d208720f51964 Parents: 072c5a0 Author: Prasanth Jayachandran <[email protected]> Authored: Wed Sep 23 00:48:03 2015 -0500 Committer: Prasanth Jayachandran <[email protected]> Committed: Wed Sep 23 00:48:03 2015 -0500 ---------------------------------------------------------------------- ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java | 2 +- .../org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java | 8 +++++++- ql/src/test/queries/clientnegative/ctasnullcol.q | 2 ++ ql/src/test/results/clientnegative/ctasnullcol.q.out | 5 +++++ 4 files changed, 15 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/2e8324e4/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java index 7abef0b..87c2830 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java @@ -432,7 +432,7 @@ public enum ErrorMsg { UPDATE_CANNOT_UPDATE_BUCKET_VALUE(10302, "Updating values of bucketing columns is not supported. Column {0}.", true), IMPORT_INTO_STRICT_REPL_TABLE(10303,"Non-repl import disallowed against table that is a destination of replication."), CTAS_LOCATION_NONEMPTY(10304, "CREATE-TABLE-AS-SELECT cannot create table with location to a non-empty directory."), - + CTAS_CREATES_VOID_TYPE(10305, "CREATE-TABLE-AS-SELECT creates a VOID type, please use CAST to specify the type, near field: "), //========================== 20000 range starts here ========================// SCRIPT_INIT_ERROR(20000, "Unable to initialize custom script."), SCRIPT_IO_ERROR(20001, "An error occurred while reading or writing to your custom script. " http://git-wip-us.apache.org/repos/asf/hive/blob/2e8324e4/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ---------------------------------------------------------------------- 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 1076dfd..c5f39d3 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 @@ -6477,7 +6477,13 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { } colName = fixCtasColumnName(colName); col.setName(colName); - col.setType(colInfo.getType().getTypeName()); + String typeName = colInfo.getType().getTypeName(); + // CTAS should NOT create a VOID type + if (typeName.equals(serdeConstants.VOID_TYPE_NAME)) { + throw new SemanticException(ErrorMsg.CTAS_CREATES_VOID_TYPE + .getMsg(colName)); + } + col.setType(typeName); field_schemas.add(col); } http://git-wip-us.apache.org/repos/asf/hive/blob/2e8324e4/ql/src/test/queries/clientnegative/ctasnullcol.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/ctasnullcol.q b/ql/src/test/queries/clientnegative/ctasnullcol.q new file mode 100644 index 0000000..b03c172 --- /dev/null +++ b/ql/src/test/queries/clientnegative/ctasnullcol.q @@ -0,0 +1,2 @@ +drop table if exists orc_table_with_null; +CREATE TABLE orc_table_with_null STORED AS ORC AS SELECT key, null FROM src; http://git-wip-us.apache.org/repos/asf/hive/blob/2e8324e4/ql/src/test/results/clientnegative/ctasnullcol.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/ctasnullcol.q.out b/ql/src/test/results/clientnegative/ctasnullcol.q.out new file mode 100644 index 0000000..6d36bb8 --- /dev/null +++ b/ql/src/test/results/clientnegative/ctasnullcol.q.out @@ -0,0 +1,5 @@ +PREHOOK: query: drop table if exists orc_table_with_null +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table if exists orc_table_with_null +POSTHOOK: type: DROPTABLE +FAILED: SemanticException [Error 10305]: CREATE-TABLE-AS-SELECT creates a VOID type, please use CAST to specify the type, near field: c1
