aboutsummaryrefslogtreecommitdiff
path: root/sql/hive
diff options
context:
space:
mode:
authorWenchen Fan <wenchen@databricks.com>2016-03-18 09:30:36 +0800
committerWenchen Fan <wenchen@databricks.com>2016-03-18 09:30:36 +0800
commit453455c479308badeeef2ad000577800982b1d4f (patch)
treea8b6f53f3004a7155d02ac1e5e0b559768fcda05 /sql/hive
parent1614485fd92fc94bc3989da49be612e542b93fb8 (diff)
downloadspark-453455c479308badeeef2ad000577800982b1d4f.tar.gz
spark-453455c479308badeeef2ad000577800982b1d4f.tar.bz2
spark-453455c479308badeeef2ad000577800982b1d4f.zip
[SPARK-13974][SQL] sub-query names do not need to be globally unique while generate SQL
## What changes were proposed in this pull request? We only need to make sub-query names unique every time we generate a SQL string, but not all the time. This PR moves the `newSubqueryName` method to `class SQLBuilder` and remove `object SQLBuilder`. also addressed 2 minor comments in https://github.com/apache/spark/pull/11696 ## How was this patch tested? existing tests. Author: Wenchen Fan <wenchen@databricks.com> Closes #11783 from cloud-fan/tmp.
Diffstat (limited to 'sql/hive')
-rw-r--r--sql/hive/src/main/scala/org/apache/spark/sql/hive/SQLBuilder.scala21
1 files changed, 9 insertions, 12 deletions
diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/SQLBuilder.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/SQLBuilder.scala
index 05dfad239a..9fa8474226 100644
--- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/SQLBuilder.scala
+++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/SQLBuilder.scala
@@ -54,6 +54,9 @@ class SQLBuilder(logicalPlan: LogicalPlan, sqlContext: SQLContext) extends Loggi
def this(df: DataFrame) = this(df.queryExecution.analyzed, df.sqlContext)
+ private val nextSubqueryId = new AtomicLong(0)
+ private def newSubqueryName(): String = s"gen_subquery_${nextSubqueryId.getAndIncrement()}"
+
def toSQL: String = {
val canonicalizedPlan = Canonicalizer.execute(logicalPlan)
val outputNames = logicalPlan.output.map(_.name)
@@ -64,7 +67,7 @@ class SQLBuilder(logicalPlan: LogicalPlan, sqlContext: SQLContext) extends Loggi
val finalName = if (qualifiers.length == 1) {
qualifiers.head
} else {
- SQLBuilder.newSubqueryName
+ newSubqueryName()
}
// Canonicalizer will remove all naming information, we should add it back by adding an extra
@@ -254,7 +257,7 @@ class SQLBuilder(logicalPlan: LogicalPlan, sqlContext: SQLContext) extends Loggi
}
private def generateToSQL(g: Generate): String = {
- val columnAliases = g.generatorOutput.map(_.sql).mkString(",")
+ val columnAliases = g.generatorOutput.map(_.sql).mkString(", ")
val childSQL = if (g.child == OneRowRelation) {
// This only happens when we put UDTF in project list and there is no FROM clause. Because we
@@ -262,8 +265,8 @@ class SQLBuilder(logicalPlan: LogicalPlan, sqlContext: SQLContext) extends Loggi
// after FROM clause, so that we can generate a valid LATERAL VIEW SQL string.
// For example, if the original SQL is: "SELECT EXPLODE(ARRAY(1, 2))", we will convert in to
// LATERAL VIEW format, and generate:
- // SELECT col FROM (SELECT 1) sub-q0 LATERAL VIEW EXPLODE(ARRAY(1, 2)) sub_q1 AS col
- s"(SELECT 1) ${SQLBuilder.newSubqueryName}"
+ // SELECT col FROM (SELECT 1) sub_q0 LATERAL VIEW EXPLODE(ARRAY(1, 2)) sub_q1 AS col
+ s"(SELECT 1) ${newSubqueryName()}"
} else {
toSQL(g.child)
}
@@ -283,7 +286,7 @@ class SQLBuilder(logicalPlan: LogicalPlan, sqlContext: SQLContext) extends Loggi
"LATERAL VIEW",
if (g.outer) "OUTER" else "",
g.generator.sql,
- SQLBuilder.newSubqueryName,
+ newSubqueryName(),
"AS",
columnAliases
)
@@ -477,7 +480,7 @@ class SQLBuilder(logicalPlan: LogicalPlan, sqlContext: SQLContext) extends Loggi
}
private def addSubquery(plan: LogicalPlan): SubqueryAlias = {
- SubqueryAlias(SQLBuilder.newSubqueryName, plan)
+ SubqueryAlias(newSubqueryName(), plan)
}
private def addSubqueryIfNeeded(plan: LogicalPlan): LogicalPlan = plan match {
@@ -514,9 +517,3 @@ class SQLBuilder(logicalPlan: LogicalPlan, sqlContext: SQLContext) extends Loggi
}
}
}
-
-object SQLBuilder {
- private val nextSubqueryId = new AtomicLong(0)
-
- private def newSubqueryName: String = s"gen_subquery_${nextSubqueryId.getAndIncrement()}"
-}