aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala12
-rw-r--r--sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala36
2 files changed, 32 insertions, 16 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala
index 2bb686254c..c3e3b215bb 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala
@@ -998,12 +998,6 @@ class SparkSqlAstBuilder(conf: SQLConf) extends AstBuilder {
selectQuery match {
case Some(q) =>
- // Just use whatever is projected in the select statement as our schema
- if (schema.nonEmpty) {
- operationNotAllowed(
- "Schema may not be specified in a Create Table As Select (CTAS) statement",
- ctx)
- }
// Hive does not allow to use a CTAS statement to create a partitioned table.
if (tableDesc.partitionColumnNames.nonEmpty) {
val errorMessage = "A Create Table As Select (CTAS) statement is not allowed to " +
@@ -1013,6 +1007,12 @@ class SparkSqlAstBuilder(conf: SQLConf) extends AstBuilder {
"CTAS statement."
operationNotAllowed(errorMessage, ctx)
}
+ // Just use whatever is projected in the select statement as our schema
+ if (schema.nonEmpty) {
+ operationNotAllowed(
+ "Schema may not be specified in a Create Table As Select (CTAS) statement",
+ ctx)
+ }
val hasStorageProperties = (ctx.createFileFormat != null) || (ctx.rowFormat != null)
if (conf.convertCTAS && !hasStorageProperties) {
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") {