You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by we...@apache.org on 2016/10/28 00:39:07 UTC
spark git commit: [SPARK-18121][SQL] Unable to query global temp
views when hive support is enabled
Repository: spark
Updated Branches:
refs/heads/master ccb115430 -> ab5f938bc
[SPARK-18121][SQL] Unable to query global temp views when hive support is enabled
## What changes were proposed in this pull request?
Issue:
Querying on a global temp view throws Table or view not found exception.
Fix:
Update the lookupRelation in HiveSessionCatalog to check for global temp views similar to the SessionCatalog.lookupRelation.
Before fix:
Querying on a global temp view ( for. e.g.: select * from global_temp.v1) throws Table or view not found exception
After fix:
Query succeeds and returns the right result.
## How was this patch tested?
- Two unit tests are added to check for global temp view for the code path when hive support is enabled.
- Regression unit tests were run successfully. ( build/sbt -Phive hive/test, build/sbt sql/test, build/sbt catalyst/test)
Author: Sunitha Kambhampati <sk...@us.ibm.com>
Closes #15649 from skambha/lookuprelationChanges.
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/ab5f938b
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/ab5f938b
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/ab5f938b
Branch: refs/heads/master
Commit: ab5f938bc7c3c9b137d63e479fced2b7e9c9d75b
Parents: ccb1154
Author: Sunitha Kambhampati <sk...@us.ibm.com>
Authored: Fri Oct 28 08:39:02 2016 +0800
Committer: Wenchen Fan <we...@databricks.com>
Committed: Fri Oct 28 08:39:02 2016 +0800
----------------------------------------------------------------------
.../apache/spark/sql/hive/HiveSessionCatalog.scala | 10 ++++++++--
.../spark/sql/hive/execution/SQLQuerySuite.scala | 16 ++++++++++++++++
2 files changed, 24 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/ab5f938b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionCatalog.scala
----------------------------------------------------------------------
diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionCatalog.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionCatalog.scala
index 85ecf0c..4f2910a 100644
--- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionCatalog.scala
+++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveSessionCatalog.scala
@@ -27,7 +27,7 @@ import org.apache.hadoop.hive.ql.udf.generic.{AbstractGenericUDAFResolver, Gener
import org.apache.spark.sql.{AnalysisException, SparkSession}
import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier}
-import org.apache.spark.sql.catalyst.analysis.FunctionRegistry
+import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, NoSuchTableException}
import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder
import org.apache.spark.sql.catalyst.catalog.{FunctionResourceLoader, GlobalTempViewManager, SessionCatalog}
import org.apache.spark.sql.catalyst.expressions.{Cast, Expression, ExpressionInfo}
@@ -57,7 +57,13 @@ private[sql] class HiveSessionCatalog(
override def lookupRelation(name: TableIdentifier, alias: Option[String]): LogicalPlan = {
val table = formatTableName(name.table)
- if (name.database.isDefined || !tempTables.contains(table)) {
+ val db = formatDatabaseName(name.database.getOrElse(currentDb))
+ if (db == globalTempViewManager.database) {
+ val relationAlias = alias.getOrElse(table)
+ globalTempViewManager.get(table).map { viewDef =>
+ SubqueryAlias(relationAlias, viewDef, Some(name))
+ }.getOrElse(throw new NoSuchTableException(db, table))
+ } else if (name.database.isDefined || !tempTables.contains(table)) {
val database = name.database.map(formatDatabaseName)
val newName = name.copy(database = database, table = table)
metastoreCatalog.lookupRelation(newName, alias)
http://git-wip-us.apache.org/repos/asf/spark/blob/ab5f938b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala
----------------------------------------------------------------------
diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala
index 01fa827..2735d3a 100644
--- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala
+++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/SQLQuerySuite.scala
@@ -68,6 +68,22 @@ class SQLQuerySuite extends QueryTest with SQLTestUtils with TestHiveSingleton {
import hiveContext._
import spark.implicits._
+ test("query global temp view") {
+ val df = Seq(1).toDF("i1")
+ df.createGlobalTempView("tbl1")
+ val global_temp_db = spark.conf.get("spark.sql.globalTempDatabase")
+ checkAnswer(spark.sql(s"select * from ${global_temp_db}.tbl1"), Row(1))
+ spark.sql(s"drop view ${global_temp_db}.tbl1")
+ }
+
+ test("non-existent global temp view") {
+ val global_temp_db = spark.conf.get("spark.sql.globalTempDatabase")
+ val message = intercept[AnalysisException] {
+ spark.sql(s"select * from ${global_temp_db}.nonexistentview")
+ }.getMessage
+ assert(message.contains("Table or view not found"))
+ }
+
test("script") {
val scriptFilePath = getTestResourcePath("test_script.sh")
if (testCommandAvailable("bash") && testCommandAvailable("echo | sed")) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org