-
- Downloads
[SPARK-20334][SQL] Return a better error message when correlated predicates...
[SPARK-20334][SQL] Return a better error message when correlated predicates contain aggregate expression that has mixture of outer and local references. ## What changes were proposed in this pull request? Address a follow up in [comment](https://github.com/apache/spark/pull/16954#discussion_r105718880) Currently subqueries with correlated predicates containing aggregate expression having mixture of outer references and local references generate a codegen error like following : ```SQL SELECT t1a FROM t1 GROUP BY 1 HAVING EXISTS (SELECT 1 FROM t2 WHERE t2a < min(t1a + t2a)); ``` Exception snippet. ``` Cannot evaluate expression: min((input[0, int, false] + input[4, int, false])) at org.apache.spark.sql.catalyst.expressions.Unevaluable$class.doGenCode(Expression.scala:226) at org.apache.spark.sql.catalyst.expressions.aggregate.AggregateExpression.doGenCode(interfaces.scala:87) at org.apache.spark.sql.catalyst.expressions.Expression$$anonfun$genCode$2.apply(Expression.scala:106) at org.apache.spark.sql.catalyst.expressions.Expression$$anonfun$genCode$2.apply(Expression.scala:103) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.catalyst.expressions.Expression.genCode(Expression.scala:103) ``` After this PR, a better error message is issued. ``` org.apache.spark.sql.AnalysisException Error in query: Found an aggregate expression in a correlated predicate that has both outer and local references, which is not supported yet. Aggregate expression: min((t1.`t1a` + t2.`t2a`)), Outer references: t1.`t1a`, Local references: t2.`t2a`.; ``` ## How was this patch tested? Added tests in SQLQueryTestSuite. Author: Dilip Biswal <dbiswal@us.ibm.com> Closes #17636 from dilipbiswal/subquery_followup1.
Showing
- sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala 38 additions, 11 deletions...ala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
- sql/core/src/test/resources/sql-tests/inputs/subquery/negative-cases/invalid-correlation.sql 52 additions, 22 deletions...ts/inputs/subquery/negative-cases/invalid-correlation.sql
- sql/core/src/test/resources/sql-tests/results/subquery/negative-cases/invalid-correlation.sql.out 73 additions, 23 deletions...sults/subquery/negative-cases/invalid-correlation.sql.out
- sql/core/src/test/scala/org/apache/spark/sql/SubquerySuite.scala 18 additions, 5 deletions...e/src/test/scala/org/apache/spark/sql/SubquerySuite.scala
Please register or sign in to comment