This is an automated email from the ASF dual-hosted git repository. dongjoon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push: new 8a8643c [SPARK-27480][SQL] Improve `EXPLAIN DESC QUERY` to show the input SQL statement 8a8643c is described below commit 8a8643c28dd0416e226894ebacf36c7edb547081 Author: Dilip Biswal <dbis...@us.ibm.com> AuthorDate: Sun Apr 21 15:34:16 2019 -0700 [SPARK-27480][SQL] Improve `EXPLAIN DESC QUERY` to show the input SQL statement Currently running explain on describe query gives a little confusing output. This is a minor pr that improves the output of explain. Before ``` 1.EXPLAIN DESCRIBE WITH s AS (SELECT 'hello' as col1) SELECT * FROM s; == Physical Plan == Execute DescribeQueryCommand +- DescribeQueryCommand CTE [s] 2.EXPLAIN EXTENDED DESCRIBE SELECT * from s1 where c1 > 0; == Physical Plan == Execute DescribeQueryCommand +- DescribeQueryCommand 'Project [*] ``` After ``` 1. EXPLAIN DESCRIBE WITH s AS (SELECT 'hello' as col1) SELECT * FROM s; == Physical Plan == Execute DescribeQueryCommand +- DescribeQueryCommand WITH s AS (SELECT 'hello' as col1) SELECT * FROM s 2. EXPLAIN DESCRIBE SELECT * from s1 where c1 > 0; == Physical Plan == Execute DescribeQueryCommand +- DescribeQueryCommand SELECT * from s1 where c1 > 0 ``` Added a couple of tests in describe-query.sql under SQLQueryTestSuite. Closes #24385 from dilipbiswal/describe_query_explain. Authored-by: Dilip Biswal <dbis...@us.ibm.com> Signed-off-by: Dongjoon Hyun <dh...@apple.com> --- .../spark/sql/execution/SparkSqlParser.scala | 2 +- .../spark/sql/execution/command/tables.scala | 6 ++-- .../resources/sql-tests/inputs/describe-query.sql | 4 +++ .../sql-tests/results/describe-query.sql.out | 42 ++++++++++++++++++---- .../spark/sql/execution/SparkSqlParserSuite.scala | 4 +-- 5 files changed, 47 insertions(+), 11 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 2c20b53..bfb50be 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 @@ -373,7 +373,7 @@ class SparkSqlAstBuilder(conf: SQLConf) extends AstBuilder(conf) { * Create a [[DescribeQueryCommand]] logical command. */ override def visitDescribeQuery(ctx: DescribeQueryContext): LogicalPlan = withOrigin(ctx) { - DescribeQueryCommand(visitQuery(ctx.query)) + DescribeQueryCommand(source(ctx.query), visitQuery(ctx.query)) } /** diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/tables.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/tables.scala index b31b2d3..395d61b 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/tables.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/tables.scala @@ -639,12 +639,14 @@ case class DescribeTableCommand( * select * from (from a select * select *) * 7. Common table expressions (CTEs) */ -case class DescribeQueryCommand(query: LogicalPlan) +case class DescribeQueryCommand(queryText: String, plan: LogicalPlan) extends DescribeCommandBase { + override def simpleString(maxFields: Int): String = s"$nodeName $queryText".trim + override def run(sparkSession: SparkSession): Seq[Row] = { val result = new ArrayBuffer[Row] - val queryExecution = sparkSession.sessionState.executePlan(query) + val queryExecution = sparkSession.sessionState.executePlan(plan) describeSchema(queryExecution.analyzed.schema, result, header = false) result } diff --git a/sql/core/src/test/resources/sql-tests/inputs/describe-query.sql b/sql/core/src/test/resources/sql-tests/inputs/describe-query.sql index b6351f9..f8fbb43 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/describe-query.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/describe-query.sql @@ -22,6 +22,10 @@ DESCRIBE insert into desc_temp1 select * insert into desc_temp2 select *; +-- Explain +EXPLAIN DESC QUERY SELECT * FROM desc_temp2 WHERE key > 0; +EXPLAIN EXTENDED DESC WITH s AS (SELECT 'hello' as col1) SELECT * FROM s; + -- cleanup DROP TABLE desc_temp1; DROP TABLE desc_temp2; diff --git a/sql/core/src/test/resources/sql-tests/results/describe-query.sql.out b/sql/core/src/test/resources/sql-tests/results/describe-query.sql.out index 15a346f..9c65e54 100644 --- a/sql/core/src/test/resources/sql-tests/results/describe-query.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/describe-query.sql.out @@ -1,5 +1,5 @@ -- Automatically generated by SQLQueryTestSuite --- Number of queries: 17 +-- Number of queries: 19 -- !query 0 @@ -154,16 +154,46 @@ DESCRIBE -- !query 15 -DROP TABLE desc_temp1 +EXPLAIN DESC QUERY SELECT * FROM desc_temp2 WHERE key > 0 -- !query 15 schema -struct<> +struct<plan:string> -- !query 15 output - +== Physical Plan == +Execute DescribeQueryCommand + +- DescribeQueryCommand SELECT * FROM desc_temp2 WHERE key > 0 -- !query 16 -DROP TABLE desc_temp2 +EXPLAIN EXTENDED DESC WITH s AS (SELECT 'hello' as col1) SELECT * FROM s -- !query 16 schema -struct<> +struct<plan:string> -- !query 16 output +== Parsed Logical Plan == +DescribeQueryCommand WITH s AS (SELECT 'hello' as col1) SELECT * FROM s + +== Analyzed Logical Plan == +col_name: string, data_type: string, comment: string +DescribeQueryCommand WITH s AS (SELECT 'hello' as col1) SELECT * FROM s + +== Optimized Logical Plan == +DescribeQueryCommand WITH s AS (SELECT 'hello' as col1) SELECT * FROM s + +== Physical Plan == +Execute DescribeQueryCommand + +- DescribeQueryCommand WITH s AS (SELECT 'hello' as col1) SELECT * FROM s + + +-- !query 17 +DROP TABLE desc_temp1 +-- !query 17 schema +struct<> +-- !query 17 output + + + +-- !query 18 +DROP TABLE desc_temp2 +-- !query 18 schema +struct<> +-- !query 18 output diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala index fd60779..c293ce3 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala @@ -228,8 +228,8 @@ class SparkSqlParserSuite extends AnalysisTest { test("describe query") { val query = "SELECT * FROM t" - assertEqual("DESCRIBE QUERY " + query, DescribeQueryCommand(parser.parsePlan(query))) - assertEqual("DESCRIBE " + query, DescribeQueryCommand(parser.parsePlan(query))) + assertEqual("DESCRIBE QUERY " + query, DescribeQueryCommand(query, parser.parsePlan(query))) + assertEqual("DESCRIBE " + query, DescribeQueryCommand(query, parser.parsePlan(query))) } test("describe table column") { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org