[SPARK-5324][SQL] Results of describe can't be queried
Make below code works. ``` sql("DESCRIBE test").registerTempTable("describeTest") sql("SELECT * FROM describeTest").collect() ``` Author: OopsOutOfMemory <victorshengli@126.com> Author: Sheng, Li <OopsOutOfMemory@users.noreply.github.com> Closes #4249 from OopsOutOfMemory/desc_query and squashes the following commits: 6fee13d [OopsOutOfMemory] up-to-date e71430a [Sheng, Li] Update HiveOperatorQueryableSuite.scala 3ba1058 [OopsOutOfMemory] change to default argument aac7226 [OopsOutOfMemory] Merge branch 'master' into desc_query 68eb6dd [OopsOutOfMemory] Merge branch 'desc_query' of github.com:OopsOutOfMemory/spark into desc_query 354ad71 [OopsOutOfMemory] query describe command d541a35 [OopsOutOfMemory] refine test suite e1da481 [OopsOutOfMemory] refine test suite a780539 [OopsOutOfMemory] Merge branch 'desc_query' of github.com:OopsOutOfMemory/spark into desc_query 0015f82 [OopsOutOfMemory] code style dd0aaef [OopsOutOfMemory] code style c7d606d [OopsOutOfMemory] rename test suite 75f2342 [OopsOutOfMemory] refine code and test suite f942c9b [OopsOutOfMemory] initial 11559ae [OopsOutOfMemory] code style c5fdecf [OopsOutOfMemory] code style aeaea5f [OopsOutOfMemory] rename test suite ac2c3bb [OopsOutOfMemory] refine code and test suite 544573e [OopsOutOfMemory] initial
This commit is contained in:
parent
a958d60975
commit
0b7eb3f3b7
|
@ -296,11 +296,14 @@ private[sql] case class ResolvedDataSource(provider: Class[_], relation: BaseRel
|
||||||
private[sql] case class DescribeCommand(
|
private[sql] case class DescribeCommand(
|
||||||
table: LogicalPlan,
|
table: LogicalPlan,
|
||||||
isExtended: Boolean) extends Command {
|
isExtended: Boolean) extends Command {
|
||||||
override def output = Seq(
|
override val output = Seq(
|
||||||
// Column names are based on Hive.
|
// Column names are based on Hive.
|
||||||
AttributeReference("col_name", StringType, nullable = false)(),
|
AttributeReference("col_name", StringType, nullable = false,
|
||||||
AttributeReference("data_type", StringType, nullable = false)(),
|
new MetadataBuilder().putString("comment", "name of the column").build())(),
|
||||||
AttributeReference("comment", StringType, nullable = false)())
|
AttributeReference("data_type", StringType, nullable = false,
|
||||||
|
new MetadataBuilder().putString("comment", "data type of the column").build())(),
|
||||||
|
AttributeReference("comment", StringType, nullable = false,
|
||||||
|
new MetadataBuilder().putString("comment", "comment of the column").build())())
|
||||||
}
|
}
|
||||||
|
|
||||||
private[sql] case class CreateTableUsing(
|
private[sql] case class CreateTableUsing(
|
||||||
|
|
|
@ -497,15 +497,14 @@ https://cwiki.apache.org/confluence/display/Hive/Enhanced+Aggregation%2C+Cube%2C
|
||||||
// TODO: Actually, a user may mean tableName.columnName. Need to resolve this issue.
|
// TODO: Actually, a user may mean tableName.columnName. Need to resolve this issue.
|
||||||
val tableIdent = extractTableIdent(nameParts.head)
|
val tableIdent = extractTableIdent(nameParts.head)
|
||||||
DescribeCommand(
|
DescribeCommand(
|
||||||
UnresolvedRelation(tableIdent, None), extended.isDefined)
|
UnresolvedRelation(tableIdent, None), isExtended = extended.isDefined)
|
||||||
case Token(".", dbName :: tableName :: colName :: Nil) =>
|
case Token(".", dbName :: tableName :: colName :: Nil) =>
|
||||||
// It is describing a column with the format like "describe db.table column".
|
// It is describing a column with the format like "describe db.table column".
|
||||||
NativePlaceholder
|
NativePlaceholder
|
||||||
case tableName =>
|
case tableName =>
|
||||||
// It is describing a table with the format like "describe table".
|
// It is describing a table with the format like "describe table".
|
||||||
DescribeCommand(
|
DescribeCommand(
|
||||||
UnresolvedRelation(Seq(tableName.getText), None),
|
UnresolvedRelation(Seq(tableName.getText), None), isExtended = extended.isDefined)
|
||||||
extended.isDefined)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// All other cases.
|
// All other cases.
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.spark.sql.hive.execution
|
||||||
|
|
||||||
|
import org.apache.spark.sql.{Row, QueryTest}
|
||||||
|
import org.apache.spark.sql.hive.test.TestHive._
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A set of tests that validates commands can also be queried by like a table
|
||||||
|
*/
|
||||||
|
class HiveOperatorQueryableSuite extends QueryTest {
|
||||||
|
test("SPARK-5324 query result of describe command") {
|
||||||
|
loadTestTable("src")
|
||||||
|
|
||||||
|
// register a describe command to be a temp table
|
||||||
|
sql("desc src").registerTempTable("mydesc")
|
||||||
|
checkAnswer(
|
||||||
|
sql("desc mydesc"),
|
||||||
|
Seq(
|
||||||
|
Row("col_name", "string", "name of the column"),
|
||||||
|
Row("data_type", "string", "data type of the column"),
|
||||||
|
Row("comment", "string", "comment of the column")))
|
||||||
|
|
||||||
|
checkAnswer(
|
||||||
|
sql("select * from mydesc"),
|
||||||
|
Seq(
|
||||||
|
Row("key", "int", null),
|
||||||
|
Row("value", "string", null)))
|
||||||
|
|
||||||
|
checkAnswer(
|
||||||
|
sql("select col_name, data_type, comment from mydesc"),
|
||||||
|
Seq(
|
||||||
|
Row("key", "int", null),
|
||||||
|
Row("value", "string", null)))
|
||||||
|
}
|
||||||
|
}
|
|
@ -59,7 +59,7 @@ class HiveQuerySuite extends HiveComparisonTest with BeforeAndAfter {
|
||||||
Locale.setDefault(originalLocale)
|
Locale.setDefault(originalLocale)
|
||||||
}
|
}
|
||||||
|
|
||||||
test("SPARK-4908: concurent hive native commands") {
|
test("SPARK-4908: concurrent hive native commands") {
|
||||||
(1 to 100).par.map { _ =>
|
(1 to 100).par.map { _ =>
|
||||||
sql("USE default")
|
sql("USE default")
|
||||||
sql("SHOW TABLES")
|
sql("SHOW TABLES")
|
||||||
|
|
Loading…
Reference in a new issue