aboutsummaryrefslogtreecommitdiff
path: root/sql/hive
diff options
context:
space:
mode:
authorCheng Hao <hao.cheng@intel.com>2014-11-20 15:46:00 -0800
committerMichael Armbrust <michael@databricks.com>2014-11-20 15:46:00 -0800
commit6aa0fc9f4d95f09383cbcb5f79166c60697e6683 (patch)
tree1db0dbdc6bcca71dc3469d816f049b36dd4ecbfd /sql/hive
parent2c2e7a44db2ebe44121226f3eac924a0668b991a (diff)
downloadspark-6aa0fc9f4d95f09383cbcb5f79166c60697e6683.tar.gz
spark-6aa0fc9f4d95f09383cbcb5f79166c60697e6683.tar.bz2
spark-6aa0fc9f4d95f09383cbcb5f79166c60697e6683.zip
[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 <hao.cheng@intel.com> Closes #3357 from chenghao-intel/explain and squashes the following commits: 7aace63 [Cheng Hao] Support the CTAS in EXPLAIN command
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")
+ }
}