From 6aa0fc9f4d95f09383cbcb5f79166c60697e6683 Mon Sep 17 00:00:00 2001 From: Cheng Hao Date: Thu, 20 Nov 2014 15:46:00 -0800 Subject: [SPARK-2918] [SQL] Support the CTAS in EXPLAIN command Hive supports the `explain` the CTAS, which was supported by Spark SQL previously, however, seems it was reverted after the code refactoring in HiveQL. Author: Cheng Hao Closes #3357 from chenghao-intel/explain and squashes the following commits: 7aace63 [Cheng Hao] Support the CTAS in EXPLAIN command --- .../scala/org/apache/spark/sql/hive/HiveQl.scala | 6 +++- .../sql/hive/execution/HiveExplainSuite.scala | 36 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) (limited to 'sql/hive') diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala index 1ca0403d6f..b9283f668a 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala @@ -124,7 +124,6 @@ private[hive] object HiveQl { // Commands that we do not need to explain. protected val noExplainCommands = Seq( - "TOK_CREATETABLE", "TOK_DESCTABLE", "TOK_TRUNCATETABLE" // truncate table" is a NativeCommand, does not need to explain. ) ++ nativeCommands @@ -421,6 +420,11 @@ private[hive] object HiveQl { case Token("TOK_EXPLAIN", explainArgs) if noExplainCommands.contains(explainArgs.head.getText) => ExplainCommand(NoRelation) + case Token("TOK_EXPLAIN", explainArgs) + if "TOK_CREATETABLE" == explainArgs.head.getText => + val Some(crtTbl) :: _ :: extended :: Nil = + getClauses(Seq("TOK_CREATETABLE", "FORMATTED", "EXTENDED"), explainArgs) + ExplainCommand(nodeToPlan(crtTbl), extended != None) case Token("TOK_EXPLAIN", explainArgs) => // Ignore FORMATTED if present. val Some(query) :: _ :: extended :: Nil = diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveExplainSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveExplainSuite.scala index a68fc2a803..697211222b 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveExplainSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveExplainSuite.scala @@ -38,4 +38,40 @@ class HiveExplainSuite extends QueryTest { "== Physical Plan ==", "Code Generation", "== RDD ==") } + + test("explain create table command") { + checkExistence(sql("explain create table temp__b as select * from src limit 2"), true, + "== Physical Plan ==", + "InsertIntoHiveTable", + "Limit", + "src") + + checkExistence(sql("explain extended create table temp__b as select * from src limit 2"), true, + "== Parsed Logical Plan ==", + "== Analyzed Logical Plan ==", + "== Optimized Logical Plan ==", + "== Physical Plan ==", + "CreateTableAsSelect", + "InsertIntoHiveTable", + "Limit", + "src") + + checkExistence(sql( + """ + | EXPLAIN EXTENDED CREATE TABLE temp__b + | ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe" + | WITH SERDEPROPERTIES("serde_p1"="p1","serde_p2"="p2") + | STORED AS RCFile + | TBLPROPERTIES("tbl_p1"="p11", "tbl_p2"="p22") + | AS SELECT * FROM src LIMIT 2 + """.stripMargin), true, + "== Parsed Logical Plan ==", + "== Analyzed Logical Plan ==", + "== Optimized Logical Plan ==", + "== Physical Plan ==", + "CreateTableAsSelect", + "InsertIntoHiveTable", + "Limit", + "src") + } } -- cgit v1.2.3