aboutsummaryrefslogtreecommitdiff
path: root/sql/hive
diff options
context:
space:
mode:
Diffstat (limited to 'sql/hive')
-rw-r--r--sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveQl.scala6
-rw-r--r--sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveExplainSuite.scala36
2 files changed, 41 insertions, 1 deletions
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")
+ }
}