diff options
author | Ioana Delaney <ioanamdelaney@gmail.com> | 2016-06-03 12:04:27 -0700 |
---|---|---|
committer | Wenchen Fan <wenchen@databricks.com> | 2016-06-03 12:04:27 -0700 |
commit | 9e2eb13ca59fc7ac66c6accd49469f339700b23b (patch) | |
tree | a328b3a7ce6d67e38f7836c6bb4c6d1dcbdb0706 /docs/programming-guide.md | |
parent | 8fa00dd05f3b5e78e9268715b0f05f9f739eca5c (diff) | |
download | spark-9e2eb13ca59fc7ac66c6accd49469f339700b23b.tar.gz spark-9e2eb13ca59fc7ac66c6accd49469f339700b23b.tar.bz2 spark-9e2eb13ca59fc7ac66c6accd49469f339700b23b.zip |
[SPARK-15677][SQL] Query with scalar sub-query in the SELECT list throws UnsupportedOperationException
## What changes were proposed in this pull request?
Queries with scalar sub-query in the SELECT list run against a local, in-memory relation throw
UnsupportedOperationException exception.
Problem repro:
```SQL
scala> Seq((1, 1), (2, 2)).toDF("c1", "c2").createOrReplaceTempView("t1")
scala> Seq((1, 1), (2, 2)).toDF("c1", "c2").createOrReplaceTempView("t2")
scala> sql("select (select min(c1) from t2) from t1").show()
java.lang.UnsupportedOperationException: Cannot evaluate expression: scalar-subquery#62 []
at org.apache.spark.sql.catalyst.expressions.Unevaluable$class.eval(Expression.scala:215)
at org.apache.spark.sql.catalyst.expressions.ScalarSubquery.eval(subquery.scala:62)
at org.apache.spark.sql.catalyst.expressions.Alias.eval(namedExpressions.scala:142)
at org.apache.spark.sql.catalyst.expressions.InterpretedProjection.apply(Projection.scala:45)
at org.apache.spark.sql.catalyst.expressions.InterpretedProjection.apply(Projection.scala:29)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.immutable.List.map(List.scala:285)
at org.apache.spark.sql.catalyst.optimizer.ConvertToLocalRelation$$anonfun$apply$37.applyOrElse(Optimizer.scala:1473)
```
The problem is specific to local, in memory relations. It is caused by rule ConvertToLocalRelation, which attempts to push down
a scalar-subquery expression to the local tables.
The solution prevents the rule to apply if Project references scalar subqueries.
## How was this patch tested?
Added regression tests to SubquerySuite.scala
Author: Ioana Delaney <ioanamdelaney@gmail.com>
Closes #13418 from ioana-delaney/scalarSubV2.
Diffstat (limited to 'docs/programming-guide.md')
0 files changed, 0 insertions, 0 deletions