Skip to content

Commit 7914c72

Browse files
pzzsmarmbrus
authored andcommitted
[SPARK-7824] [SQL] Collapse operator reordering and constant folding into a single batch.
SQL ``` select * from tableA join tableB on (a > 3 and b = d) or (a > 3 and b = e) ``` Plan before modify ``` == Optimized Logical Plan == Project [a#293,b#294,c#295,d#296,e#297] Join Inner, Some(((a#293 > 3) && ((b#294 = d#296) || (b#294 = e#297)))) MetastoreRelation default, tablea, None MetastoreRelation default, tableb, None ``` Plan after modify ``` == Optimized Logical Plan == Project [a#293,b#294,c#295,d#296,e#297] Join Inner, Some(((b#294 = d#296) || (b#294 = e#297))) Filter (a#293 > 3) MetastoreRelation default, tablea, None MetastoreRelation default, tableb, None ``` CombineLimits ==> Limit(If(LessThan(ne, le), ne, le), grandChild) and LessThan is in BooleanSimplification , so CombineLimits must before BooleanSimplification and BooleanSimplification must before PushPredicateThroughJoin. Author: Zhongshuai Pei <[email protected]> Author: DoingDone9 <[email protected]> Closes apache#6351 from DoingDone9/master and squashes the following commits: 20de7be [Zhongshuai Pei] Update Optimizer.scala 7bc7d28 [Zhongshuai Pei] Merge pull request apache#17 from apache/master 0ba5f42 [Zhongshuai Pei] Update Optimizer.scala f8b9314 [Zhongshuai Pei] Update FilterPushdownSuite.scala c529d9f [Zhongshuai Pei] Update FilterPushdownSuite.scala ae3af6d [Zhongshuai Pei] Update FilterPushdownSuite.scala a04ffae [Zhongshuai Pei] Update Optimizer.scala 11beb61 [Zhongshuai Pei] Update FilterPushdownSuite.scala f2ee5fe [Zhongshuai Pei] Update Optimizer.scala be6b1d5 [Zhongshuai Pei] Update Optimizer.scala b01e622 [Zhongshuai Pei] Merge pull request apache#15 from apache/master 8df716a [Zhongshuai Pei] Update FilterPushdownSuite.scala d98bc35 [Zhongshuai Pei] Update FilterPushdownSuite.scala fa65718 [Zhongshuai Pei] Update Optimizer.scala ab8e9a6 [Zhongshuai Pei] Merge pull request apache#14 from apache/master 14952e2 [Zhongshuai Pei] Merge pull request apache#13 from apache/master f03fe7f [Zhongshuai Pei] Merge pull request apache#12 from apache/master f12fa50 [Zhongshuai Pei] Merge pull request #10 from apache/master f61210c [Zhongshuai Pei] Merge pull request #9 from apache/master 34b1a9a [Zhongshuai Pei] Merge pull request #8 from apache/master 802261c [DoingDone9] Merge pull request #7 from apache/master d00303b [DoingDone9] Merge pull request #6 from apache/master 98b134f [DoingDone9] Merge pull request #5 from apache/master 161cae3 [DoingDone9] Merge pull request #4 from apache/master c87e8b6 [DoingDone9] Merge pull request #3 from apache/master cb1852d [DoingDone9] Merge pull request #2 from apache/master c3f046f [DoingDone9] Merge pull request #1 from apache/master
1 parent 7d669a5 commit 7914c72

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,20 @@ object DefaultOptimizer extends Optimizer {
3838
EliminateSubQueries) ::
3939
Batch("Distinct", FixedPoint(100),
4040
ReplaceDistinctWithAggregate) ::
41-
Batch("Operator Reordering", FixedPoint(100),
41+
Batch("Operator Optimizations", FixedPoint(100),
4242
UnionPushdown,
4343
CombineFilters,
4444
PushPredicateThroughProject,
45-
PushPredicateThroughJoin,
4645
PushPredicateThroughGenerate,
4746
ColumnPruning,
4847
ProjectCollapsing,
49-
CombineLimits) ::
50-
Batch("ConstantFolding", FixedPoint(100),
48+
CombineLimits,
5149
NullPropagation,
5250
OptimizeIn,
5351
ConstantFolding,
5452
LikeSimplification,
5553
BooleanSimplification,
54+
PushPredicateThroughJoin,
5655
SimplifyFilters,
5756
SimplifyCasts,
5857
SimplifyCaseConversionExpressions) ::

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/FilterPushdownSuite.scala

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class FilterPushdownSuite extends PlanTest {
3636
Batch("Filter Pushdown", Once,
3737
CombineFilters,
3838
PushPredicateThroughProject,
39+
BooleanSimplification,
3940
PushPredicateThroughJoin,
4041
PushPredicateThroughGenerate,
4142
ColumnPruning,
@@ -156,11 +157,9 @@ class FilterPushdownSuite extends PlanTest {
156157
.where('a === 1 && 'a === 2)
157158
.select('a).analyze
158159

159-
160160
comparePlans(optimized, correctAnswer)
161161
}
162162

163-
164163
test("joins: push to either side") {
165164
val x = testRelation.subquery('x)
166165
val y = testRelation.subquery('y)
@@ -198,6 +197,25 @@ class FilterPushdownSuite extends PlanTest {
198197
comparePlans(optimized, correctAnswer)
199198
}
200199

200+
test("joins: push to one side after transformCondition") {
201+
val x = testRelation.subquery('x)
202+
val y = testRelation1.subquery('y)
203+
204+
val originalQuery = {
205+
x.join(y)
206+
.where(("x.a".attr === 1 && "y.d".attr === "x.b".attr) ||
207+
("x.a".attr === 1 && "y.d".attr === "x.c".attr))
208+
}
209+
210+
val optimized = Optimize.execute(originalQuery.analyze)
211+
val left = testRelation.where('a === 1)
212+
val right = testRelation1
213+
val correctAnswer =
214+
left.join(right, condition = Some("d".attr === "b".attr || "d".attr === "c".attr)).analyze
215+
216+
comparePlans(optimized, correctAnswer)
217+
}
218+
201219
test("joins: rewrite filter to push to either side") {
202220
val x = testRelation.subquery('x)
203221
val y = testRelation.subquery('y)
@@ -563,17 +581,16 @@ class FilterPushdownSuite extends PlanTest {
563581
// push down invalid
564582
val originalQuery1 = {
565583
x.select('a, 'b)
566-
.sortBy(SortOrder('a, Ascending))
567-
.select('b)
584+
.sortBy(SortOrder('a, Ascending))
585+
.select('b)
568586
}
569587

570588
val optimized1 = Optimize.execute(originalQuery1.analyze)
571589
val correctAnswer1 =
572590
x.select('a, 'b)
573-
.sortBy(SortOrder('a, Ascending))
574-
.select('b).analyze
591+
.sortBy(SortOrder('a, Ascending))
592+
.select('b).analyze
575593

576594
comparePlans(optimized1, analysis.EliminateSubQueries(correctAnswer1))
577-
578595
}
579596
}

0 commit comments

Comments
 (0)