Skip to content

Commit

Permalink
[SPARK-2935][SQL]Fix parquet predicate push down bug
Browse files Browse the repository at this point in the history
Author: Michael Armbrust <michael@databricks.com>

Closes #1863 from marmbrus/parquetPredicates and squashes the following commits:

10ad202 [Michael Armbrust] left <=> right
f249158 [Michael Armbrust] quiet parquet tests.
802da5b [Michael Armbrust] Add test case.
eab2eda [Michael Armbrust] Fix parquet predicate push down bug
  • Loading branch information
marmbrus committed Aug 14, 2014
1 parent 376a82e commit 9fde1ff
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,9 @@ object ParquetFilters {
(leftFilter, rightFilter) match {
case (None, Some(filter)) => Some(filter)
case (Some(filter), None) => Some(filter)
case (_, _) =>
Some(new AndFilter(leftFilter.get, rightFilter.get))
case (Some(leftF), Some(rightF)) =>
Some(new AndFilter(leftF, rightF))
case _ => None
}
}
case p @ EqualTo(left: Literal, right: NamedExpression) if !right.nullable =>
Expand Down
3 changes: 3 additions & 0 deletions sql/core/src/test/resources/log4j.properties
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ log4j.appender.FA.layout.ConversionPattern=%d{HH:mm:ss.SSS} %p %c{1}: %m%n
log4j.appender.FA.Threshold = INFO

# Some packages are noisy for no good reason.
log4j.additivity.parquet.hadoop.ParquetRecordReader=false
log4j.logger.parquet.hadoop.ParquetRecordReader=OFF

log4j.additivity.org.apache.hadoop.hive.serde2.lazy.LazyStruct=false
log4j.logger.org.apache.hadoop.hive.serde2.lazy.LazyStruct=OFF

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -381,11 +381,14 @@ class ParquetQuerySuite extends QueryTest with FunSuiteLike with BeforeAndAfterA
val predicate5 = new GreaterThan(attribute1, attribute2)
val badfilter = ParquetFilters.createFilter(predicate5)
assert(badfilter.isDefined === false)

val predicate6 = And(GreaterThan(attribute1, attribute2), GreaterThan(attribute1, attribute2))
val badfilter2 = ParquetFilters.createFilter(predicate6)
assert(badfilter2.isDefined === false)
}

test("test filter by predicate pushdown") {
for(myval <- Seq("myint", "mylong", "mydouble", "myfloat")) {
println(s"testing field $myval")
val query1 = sql(s"SELECT * FROM testfiltersource WHERE $myval < 150 AND $myval >= 100")
assert(
query1.queryExecution.executedPlan(0)(0).isInstanceOf[ParquetTableScan],
Expand Down

0 comments on commit 9fde1ff

Please sign in to comment.