Repository: spark
Updated Branches:
  refs/heads/branch-2.3 3a22feab4 -> 4dc6719e9


[SPARK-24128][SQL] Mention configuration option in implicit CROSS JOIN error

## What changes were proposed in this pull request?

Mention `spark.sql.crossJoin.enabled` in error message when an implicit `CROSS 
JOIN` is detected.

## How was this patch tested?

`CartesianProductSuite` and `JoinSuite`.

Author: Henry Robinson <[email protected]>

Closes #21201 from henryr/spark-24128.

(cherry picked from commit cd12c5c3ecf28f7b04f566c2057f9b65eb456b7d)
Signed-off-by: hyukjinkwon <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/4dc6719e
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/4dc6719e
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/4dc6719e

Branch: refs/heads/branch-2.3
Commit: 4dc6719e9afdd0f0ba134bfc69f042f7796ff2cd
Parents: 3a22fea
Author: Henry Robinson <[email protected]>
Authored: Tue May 8 12:21:33 2018 +0800
Committer: hyukjinkwon <[email protected]>
Committed: Tue May 8 12:21:54 2018 +0800

----------------------------------------------------------------------
 R/pkg/tests/fulltests/test_sparkSQL.R                          | 4 ++--
 .../org/apache/spark/sql/catalyst/optimizer/Optimizer.scala    | 6 ++++--
 .../sql/catalyst/optimizer/CheckCartesianProductsSuite.scala   | 2 +-
 sql/core/src/test/scala/org/apache/spark/sql/JoinSuite.scala   | 4 ++--
 4 files changed, 9 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/4dc6719e/R/pkg/tests/fulltests/test_sparkSQL.R
----------------------------------------------------------------------
diff --git a/R/pkg/tests/fulltests/test_sparkSQL.R 
b/R/pkg/tests/fulltests/test_sparkSQL.R
index bed26ec..a73811e 100644
--- a/R/pkg/tests/fulltests/test_sparkSQL.R
+++ b/R/pkg/tests/fulltests/test_sparkSQL.R
@@ -2186,8 +2186,8 @@ test_that("join(), crossJoin() and merge() on a 
DataFrame", {
   expect_equal(count(where(join(df, df2), df$name == df2$name)), 3)
   # cartesian join
   expect_error(tryCatch(count(join(df, df2)), error = function(e) { stop(e) }),
-               paste0(".*(org.apache.spark.sql.AnalysisException: Detected 
cartesian product for",
-                      " INNER join between logical plans).*"))
+               paste0(".*(org.apache.spark.sql.AnalysisException: Detected 
implicit cartesian",
+                      " product for INNER join between logical plans).*"))
 
   joined <- crossJoin(df, df2)
   expect_equal(names(joined), c("age", "name", "name", "test"))

http://git-wip-us.apache.org/repos/asf/spark/blob/4dc6719e/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
index a28b6a0..c77e0f8 100644
--- 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
+++ 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
@@ -1122,12 +1122,14 @@ object CheckCartesianProducts extends Rule[LogicalPlan] 
with PredicateHelper {
       case j @ Join(left, right, Inner | LeftOuter | RightOuter | FullOuter, _)
         if isCartesianProduct(j) =>
           throw new AnalysisException(
-            s"""Detected cartesian product for ${j.joinType.sql} join between 
logical plans
+            s"""Detected implicit cartesian product for ${j.joinType.sql} join 
between logical plans
                |${left.treeString(false).trim}
                |and
                |${right.treeString(false).trim}
                |Join condition is missing or trivial.
-               |Use the CROSS JOIN syntax to allow cartesian products between 
these relations."""
+               |Either: use the CROSS JOIN syntax to allow cartesian products 
between these
+               |relations, or: enable implicit cartesian products by setting 
the configuration
+               |variable spark.sql.crossJoin.enabled=true"""
             .stripMargin)
     }
 }

http://git-wip-us.apache.org/repos/asf/spark/blob/4dc6719e/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/CheckCartesianProductsSuite.scala
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/CheckCartesianProductsSuite.scala
 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/CheckCartesianProductsSuite.scala
index 21220b3..788fedb 100644
--- 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/CheckCartesianProductsSuite.scala
+++ 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/CheckCartesianProductsSuite.scala
@@ -56,7 +56,7 @@ class CheckCartesianProductsSuite extends PlanTest {
         val thrownException = the [AnalysisException] thrownBy {
           performCartesianProductCheck(joinType)
         }
-        assert(thrownException.message.contains("Detected cartesian product"))
+        assert(thrownException.message.contains("Detected implicit cartesian 
product"))
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/spark/blob/4dc6719e/sql/core/src/test/scala/org/apache/spark/sql/JoinSuite.scala
----------------------------------------------------------------------
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/JoinSuite.scala 
b/sql/core/src/test/scala/org/apache/spark/sql/JoinSuite.scala
index 771e118..8fa7474 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/JoinSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/JoinSuite.scala
@@ -239,7 +239,7 @@ class JoinSuite extends QueryTest with SharedSQLContext {
             Row(2, 2, 1, null) ::
             Row(2, 2, 2, 2) :: Nil)
       }
-      assert(e.getMessage.contains("Detected cartesian product for INNER join 
" +
+      assert(e.getMessage.contains("Detected implicit cartesian product for 
INNER join " +
         "between logical plans"))
     }
   }
@@ -611,7 +611,7 @@ class JoinSuite extends QueryTest with SharedSQLContext {
       val e = intercept[Exception] {
         checkAnswer(sql(query), Nil);
       }
-      assert(e.getMessage.contains("Detected cartesian product"))
+      assert(e.getMessage.contains("Detected implicit cartesian product"))
     }
 
     cartesianQueries.foreach(checkCartesianDetection)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to