aboutsummaryrefslogtreecommitdiff
path: root/sql/hive/src
diff options
context:
space:
mode:
authorZongheng Yang <zongheng.y@gmail.com>2014-06-09 16:47:44 -0700
committerMichael Armbrust <michael@databricks.com>2014-06-09 16:47:56 -0700
commit5a79ba13ea75838fe53d99ca5aa289d81a58cdb3 (patch)
tree3a98bb1e9b05ac230c48a9e53aa2b9e790a0ea68 /sql/hive/src
parent65fa7bcac81fc2a7a6c578775f72929cb201c20a (diff)
downloadspark-5a79ba13ea75838fe53d99ca5aa289d81a58cdb3.tar.gz
spark-5a79ba13ea75838fe53d99ca5aa289d81a58cdb3.tar.bz2
spark-5a79ba13ea75838fe53d99ca5aa289d81a58cdb3.zip
[SPARK-1704][SQL] Fully support EXPLAIN commands as SchemaRDD.
This PR attempts to resolve [SPARK-1704](https://issues.apache.org/jira/browse/SPARK-1704) by introducing a physical plan for EXPLAIN commands, which just prints out the debug string (containing various SparkSQL's plans) of the corresponding QueryExecution for the actual query. Author: Zongheng Yang <zongheng.y@gmail.com> Closes #1003 from concretevitamin/explain-cmd and squashes the following commits: 5b7911f [Zongheng Yang] Add a regression test. 1bfa379 [Zongheng Yang] Modify output(). 719ada9 [Zongheng Yang] Override otherCopyArgs for ExplainCommandPhysical. 4318fd7 [Zongheng Yang] Make all output one Row. 439c6ab [Zongheng Yang] Minor cleanups. 408f574 [Zongheng Yang] SPARK-1704: Add CommandStrategy and ExplainCommandPhysical. (cherry picked from commit a9ec033c8cf489898cc47e2043bd9e86b7df1ff8) Signed-off-by: Michael Armbrust <michael@databricks.com>
Diffstat (limited to 'sql/hive/src')
-rw-r--r--sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveContext.scala3
-rw-r--r--sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala12
2 files changed, 14 insertions, 1 deletions
diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveContext.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveContext.scala
index fbab2ac16b..4b97dc25ac 100644
--- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveContext.scala
+++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveContext.scala
@@ -218,6 +218,7 @@ class HiveContext(sc: SparkContext) extends SQLContext(sc) {
val hiveContext = self
override val strategies: Seq[Strategy] = Seq(
+ CommandStrategy(self),
TakeOrdered,
ParquetOperations,
HiveTableScans,
@@ -304,7 +305,7 @@ class HiveContext(sc: SparkContext) extends SQLContext(sc) {
*/
def stringResult(): Seq[String] = analyzed match {
case NativeCommand(cmd) => runSqlHive(cmd)
- case ExplainCommand(plan) => new QueryExecution { val logical = plan }.toString.split("\n")
+ case ExplainCommand(plan) => mkQueryExecution(plan).toString.split("\n")
case query =>
val result: Seq[Seq[Any]] = toRdd.collect().toSeq
// We need the types so we can output struct field names
diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala
index 125cc18bfb..c56eee2580 100644
--- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala
+++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala
@@ -18,6 +18,7 @@
package org.apache.spark.sql.hive.execution
import org.apache.spark.sql.hive.test.TestHive._
+import org.apache.spark.sql.hive.test.TestHive
/**
* A set of test cases expressed in Hive QL that are not covered by the tests included in the hive distribution.
@@ -159,4 +160,15 @@ class HiveQuerySuite extends HiveComparisonTest {
hql("SHOW TABLES").toString
hql("SELECT * FROM src").toString
}
+
+ test("SPARK-1704: Explain commands as a SchemaRDD") {
+ hql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")
+ val rdd = hql("explain select key, count(value) from src group by key")
+ assert(rdd.collect().size == 1)
+ assert(rdd.toString.contains("ExplainCommand"))
+ assert(rdd.filter(row => row.toString.contains("ExplainCommand")).collect().size == 0,
+ "actual contents of the result should be the plans of the query to be explained")
+ TestHive.reset()
+ }
+
}