aboutsummaryrefslogtreecommitdiff
path: root/sql/hive
diff options
context:
space:
mode:
authorgatorsmile <gatorsmile@gmail.com>2016-08-08 22:26:44 +0800
committerWenchen Fan <wenchen@databricks.com>2016-08-08 22:26:44 +0800
commitab126909ce381842dbb057d480a1f9bee1b4f38e (patch)
tree1e1c774ca8bc45e82be2f392ed4dee4b32e23adf /sql/hive
parent94a9d11ed1f61205af8067bf17d14dc93935ddf8 (diff)
downloadspark-ab126909ce381842dbb057d480a1f9bee1b4f38e.tar.gz
spark-ab126909ce381842dbb057d480a1f9bee1b4f38e.tar.bz2
spark-ab126909ce381842dbb057d480a1f9bee1b4f38e.zip
[SPARK-16457][SQL] Fix Wrong Messages when CTAS with a Partition By Clause
#### What changes were proposed in this pull request? When doing a CTAS with a Partition By clause, we got a wrong error message. For example, ```SQL CREATE TABLE gen__tmp PARTITIONED BY (key string) AS SELECT key, value FROM mytable1 ``` The error message we get now is like ``` Operation not allowed: Schema may not be specified in a Create Table As Select (CTAS) statement(line 2, pos 0) ``` However, based on the code, the message we should get is like ``` Operation not allowed: A Create Table As Select (CTAS) statement is not allowed to create a partitioned table using Hive's file formats. Please use the syntax of "CREATE TABLE tableName USING dataSource OPTIONS (...) PARTITIONED BY ...\" to create a partitioned table through a CTAS statement.(line 2, pos 0) ``` Currently, partitioning columns is part of the schema. This PR fixes the bug by changing the detection orders. #### How was this patch tested? Added test cases. Author: gatorsmile <gatorsmile@gmail.com> Closes #14113 from gatorsmile/ctas.
Diffstat (limited to 'sql/hive')
-rw-r--r--sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala36
1 files changed, 26 insertions, 10 deletions
diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala
index cba6aa53f1..b659325a62 100644
--- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala
+++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala
@@ -642,19 +642,35 @@ class SQLQuerySuite extends QueryTest with SQLTestUtils with TestHiveSingleton {
}
test("specifying the column list for CTAS") {
- Seq((1, "111111"), (2, "222222")).toDF("key", "value").createOrReplaceTempView("mytable1")
+ withTempView("mytable1") {
+ Seq((1, "111111"), (2, "222222")).toDF("key", "value").createOrReplaceTempView("mytable1")
+ withTable("gen__tmp") {
+ sql("create table gen__tmp as select key as a, value as b from mytable1")
+ checkAnswer(
+ sql("SELECT a, b from gen__tmp"),
+ sql("select key, value from mytable1").collect())
+ }
- sql("create table gen__tmp as select key as a, value as b from mytable1")
- checkAnswer(
- sql("SELECT a, b from gen__tmp"),
- sql("select key, value from mytable1").collect())
- sql("DROP TABLE gen__tmp")
+ withTable("gen__tmp") {
+ val e = intercept[AnalysisException] {
+ sql("create table gen__tmp(a int, b string) as select key, value from mytable1")
+ }.getMessage
+ assert(e.contains("Schema may not be specified in a Create Table As Select (CTAS)"))
+ }
- intercept[AnalysisException] {
- sql("create table gen__tmp(a int, b string) as select key, value from mytable1")
+ withTable("gen__tmp") {
+ val e = intercept[AnalysisException] {
+ sql(
+ """
+ |CREATE TABLE gen__tmp
+ |PARTITIONED BY (key string)
+ |AS SELECT key, value FROM mytable1
+ """.stripMargin)
+ }.getMessage
+ assert(e.contains("A Create Table As Select (CTAS) statement is not allowed to " +
+ "create a partitioned table using Hive's file formats"))
+ }
}
-
- sql("drop table mytable1")
}
test("command substitution") {