aboutsummaryrefslogtreecommitdiff
path: root/sql/core
diff options
context:
space:
mode:
authorDaoyuan Wang <daoyuan.wang@intel.com>2016-02-03 21:05:53 -0800
committerReynold Xin <rxin@databricks.com>2016-02-03 21:05:53 -0800
commit0f81318ae217346c20894572795e1a9cee2ebc8f (patch)
treef364e5944f879c58fa67760239b4e927e85ae733 /sql/core
parenta64831124c215f56f124747fa241560c70cf0a36 (diff)
downloadspark-0f81318ae217346c20894572795e1a9cee2ebc8f.tar.gz
spark-0f81318ae217346c20894572795e1a9cee2ebc8f.tar.bz2
spark-0f81318ae217346c20894572795e1a9cee2ebc8f.zip
[SPARK-12828][SQL] add natural join support
Jira: https://issues.apache.org/jira/browse/SPARK-12828 Author: Daoyuan Wang <daoyuan.wang@intel.com> Closes #10762 from adrian-wang/naturaljoin.
Diffstat (limited to 'sql/core')
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala1
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala24
2 files changed, 25 insertions, 0 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala
index 84203bbfef..f15b926bd2 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala
@@ -474,6 +474,7 @@ class DataFrame private[sql](
val rightCol = withPlan(joined.right).resolve(col).toAttribute.withNullability(true)
Alias(Coalesce(Seq(leftCol, rightCol)), col)()
}
+ case NaturalJoin(_) => sys.error("NaturalJoin with using clause is not supported.")
}
// The nullability of output of joined could be different than original column,
// so we can only compare them by exprId
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala
index 79bfd4b44b..8ef7b61314 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala
@@ -2075,4 +2075,28 @@ class SQLQuerySuite extends QueryTest with SharedSQLContext {
)
}
}
+
+ test("natural join") {
+ val df1 = Seq(("one", 1), ("two", 2), ("three", 3)).toDF("k", "v1")
+ val df2 = Seq(("one", 1), ("two", 22), ("one", 5)).toDF("k", "v2")
+ withTempTable("nt1", "nt2") {
+ df1.registerTempTable("nt1")
+ df2.registerTempTable("nt2")
+ checkAnswer(
+ sql("SELECT * FROM nt1 natural join nt2 where k = \"one\""),
+ Row("one", 1, 1) :: Row("one", 1, 5) :: Nil)
+
+ checkAnswer(
+ sql("SELECT * FROM nt1 natural left join nt2 order by v1, v2"),
+ Row("one", 1, 1) :: Row("one", 1, 5) :: Row("two", 2, 22) :: Row("three", 3, null) :: Nil)
+
+ checkAnswer(
+ sql("SELECT * FROM nt1 natural right join nt2 order by v1, v2"),
+ Row("one", 1, 1) :: Row("one", 1, 5) :: Row("two", 2, 22) :: Nil)
+
+ checkAnswer(
+ sql("SELECT count(*) FROM nt1 natural full outer join nt2"),
+ Row(4) :: Nil)
+ }
+ }
}