Interface FilterPredicate
- All Known Implementing Classes:
FilterPredicate.And, FilterPredicate.BinaryColumnPredicate, FilterPredicate.BinaryInPredicate, FilterPredicate.BooleanColumnPredicate, FilterPredicate.DateColumnPredicate, FilterPredicate.DecimalColumnPredicate, FilterPredicate.DoubleColumnPredicate, FilterPredicate.FloatColumnPredicate, FilterPredicate.InstantColumnPredicate, FilterPredicate.IntColumnPredicate, FilterPredicate.IntInPredicate, FilterPredicate.IsNotNullPredicate, FilterPredicate.IsNullPredicate, FilterPredicate.LongColumnPredicate, FilterPredicate.LongInPredicate, FilterPredicate.Not, FilterPredicate.Or, FilterPredicate.SignedBinaryColumnPredicate, FilterPredicate.TimeColumnPredicate, FilterPredicate.UUIDColumnPredicate
A predicate for filtering row groups based on column statistics.
Filter predicates enable predicate push-down: row groups whose statistics prove that no rows can match the predicate are skipped entirely, avoiding unnecessary I/O and decoding.
Usage examples:
// Simple comparison
FilterPredicate filter = FilterPredicate.gt("age", 21);
// Compound predicate
FilterPredicate filter = FilterPredicate.and(
FilterPredicate.gtEq("salary", 50000L),
FilterPredicate.lt("age", 65)
);
// Use with reader
try (ColumnReader reader = fileReader.buildColumnReader("salary").filter(filter).build()) {
while (reader.nextBatch()) { ... }
}
Null handling
All comparison predicates (eq, notEq, lt, ltEq, gt, gtEq, in,
inStrings) follow SQL three-valued logic: comparing a null column value
against any operand yields UNKNOWN, and rows whose predicate is UNKNOWN are
not returned. In practice this means rows with a null in the tested column
are never returned by a comparison predicate. Use isNull / isNotNull
for explicit null checks, or or(...) to include null rows alongside a
comparison — e.g. or(gt("age", 30), isNull("age")).
not(p) preserves this behavior: rows where p is UNKNOWN stay UNKNOWN
under negation and are dropped. The SQL identity not(gt(x, v)) ≡ ltEq(x, v)
holds on all rows, including null ones.
This matches the SQL semantics of WHERE predicates and differs from
parquet-java's notEq, which treats null <> v as true and therefore
includes null rows. To reproduce parquet-java's behavior in Hardwood, write
the null-inclusion explicitly: or(notEq("x", v), isNull("x")).
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic final recordstatic final recordstatic final recordstatic final recordstatic final recordPredicate for DATE columns.static final recordPredicate for DECIMAL columns.static final recordstatic final recordstatic final recordPredicate for TIMESTAMP columns.static final recordstatic final recordstatic final recordPredicate that matches rows where the column value is not null.static final recordPredicate that matches rows where the column value is null.static final recordstatic final recordstatic final recordstatic enumstatic final recordstatic final recordPredicate for decimal columns stored asFIXED_LEN_BYTE_ARRAY, which require signed (two's complement) comparison.static final recordPredicate for TIME columns.static final record -
Method Summary
Static MethodsModifier and TypeMethodDescriptionstatic FilterPredicateand(FilterPredicate... filters) static FilterPredicateand(FilterPredicate left, FilterPredicate right) static FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicateeq(String column, BigDecimal value) Creates an equals predicate for aBigDecimalcolumn (Parquet DECIMAL logical type).static FilterPredicateCreates an equals predicate for anInstantcolumn (Parquet TIMESTAMP logical type).static FilterPredicateCreates an equals predicate for aLocalDatecolumn (Parquet DATE logical type).static FilterPredicateCreates an equals predicate for aLocalTimecolumn (Parquet TIME logical type).static FilterPredicateCreates an equals predicate for aUUIDcolumn (Parquet UUID logical type).static FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicategt(String column, BigDecimal value) Creates a greater-than predicate for aBigDecimalcolumn.static FilterPredicateCreates a greater-than predicate for anInstantcolumn.static FilterPredicateCreates a greater-than predicate for aLocalDatecolumn.static FilterPredicateCreates a greater-than predicate for aLocalTimecolumn.static FilterPredicateCreates a greater-than predicate for aUUIDcolumn.static FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicategtEq(String column, BigDecimal value) Creates a greater-than-or-equal predicate for aBigDecimalcolumn.static FilterPredicateCreates a greater-than-or-equal predicate for anInstantcolumn.static FilterPredicateCreates a greater-than-or-equal predicate for aLocalDatecolumn.static FilterPredicateCreates a greater-than-or-equal predicate for aLocalTimecolumn.static FilterPredicateCreates a greater-than-or-equal predicate for aUUIDcolumn.static FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicateCreates a predicate that matches rows where the given column is not null.static FilterPredicateCreates a predicate that matches rows where the given column is null.static FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatelt(String column, BigDecimal value) Creates a less-than predicate for aBigDecimalcolumn.static FilterPredicateCreates a less-than predicate for anInstantcolumn.static FilterPredicateCreates a less-than predicate for aLocalDatecolumn.static FilterPredicateCreates a less-than predicate for aLocalTimecolumn.static FilterPredicateCreates a less-than predicate for aUUIDcolumn.static FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicateltEq(String column, BigDecimal value) Creates a less-than-or-equal predicate for aBigDecimalcolumn.static FilterPredicateCreates a less-than-or-equal predicate for anInstantcolumn.static FilterPredicateCreates a less-than-or-equal predicate for aLocalDatecolumn.static FilterPredicateCreates a less-than-or-equal predicate for aLocalTimecolumn.static FilterPredicateCreates a less-than-or-equal predicate for aUUIDcolumn.static FilterPredicatenot(FilterPredicate filter) static FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatestatic FilterPredicatenotEq(String column, BigDecimal value) Creates a not-equals predicate for aBigDecimalcolumn.static FilterPredicateCreates a not-equals predicate for anInstantcolumn.static FilterPredicateCreates a not-equals predicate for aLocalDatecolumn.static FilterPredicateCreates a not-equals predicate for aLocalTimecolumn.static FilterPredicateCreates a not-equals predicate for aUUIDcolumn.static FilterPredicateor(FilterPredicate... filters) static FilterPredicateor(FilterPredicate left, FilterPredicate right)
-
Method Details
-
eq
-
notEq
-
lt
-
ltEq
-
gt
-
gtEq
-
eq
-
notEq
-
lt
-
ltEq
-
gt
-
gtEq
-
eq
-
notEq
-
lt
-
ltEq
-
gt
-
gtEq
-
eq
-
notEq
-
lt
-
ltEq
-
gt
-
gtEq
-
eq
-
notEq
-
eq
-
notEq
-
lt
-
ltEq
-
gt
-
gtEq
-
in
-
in
-
inStrings
-
eq
Creates an equals predicate for aLocalDatecolumn (Parquet DATE logical type). The date is converted to days since the Unix epoch at evaluation time. -
notEq
Creates a not-equals predicate for aLocalDatecolumn. -
lt
Creates a less-than predicate for aLocalDatecolumn. -
ltEq
Creates a less-than-or-equal predicate for aLocalDatecolumn. -
gt
Creates a greater-than predicate for aLocalDatecolumn. -
gtEq
Creates a greater-than-or-equal predicate for aLocalDatecolumn. -
eq
Creates an equals predicate for anInstantcolumn (Parquet TIMESTAMP logical type). The column's time unit is determined from the schema at evaluation time. -
notEq
Creates a not-equals predicate for anInstantcolumn. -
lt
Creates a less-than predicate for anInstantcolumn. -
ltEq
Creates a less-than-or-equal predicate for anInstantcolumn. -
gt
Creates a greater-than predicate for anInstantcolumn. -
gtEq
Creates a greater-than-or-equal predicate for anInstantcolumn. -
eq
Creates an equals predicate for aLocalTimecolumn (Parquet TIME logical type). The column's time unit is determined from the schema at evaluation time. -
notEq
Creates a not-equals predicate for aLocalTimecolumn. -
lt
Creates a less-than predicate for aLocalTimecolumn. -
ltEq
Creates a less-than-or-equal predicate for aLocalTimecolumn. -
gt
Creates a greater-than predicate for aLocalTimecolumn. -
gtEq
Creates a greater-than-or-equal predicate for aLocalTimecolumn. -
eq
Creates an equals predicate for aBigDecimalcolumn (Parquet DECIMAL logical type). The column's scale, precision, and physical type are determined from the schema at evaluation time. -
notEq
Creates a not-equals predicate for aBigDecimalcolumn. -
lt
Creates a less-than predicate for aBigDecimalcolumn. -
ltEq
Creates a less-than-or-equal predicate for aBigDecimalcolumn. -
gt
Creates a greater-than predicate for aBigDecimalcolumn. -
gtEq
Creates a greater-than-or-equal predicate for aBigDecimalcolumn. -
eq
Creates an equals predicate for aUUIDcolumn (Parquet UUID logical type). The UUID is encoded as a 16-byte big-endianFIXED_LEN_BYTE_ARRAY. -
notEq
Creates a not-equals predicate for aUUIDcolumn. -
lt
Creates a less-than predicate for aUUIDcolumn. -
ltEq
Creates a less-than-or-equal predicate for aUUIDcolumn. -
gt
Creates a greater-than predicate for aUUIDcolumn. -
gtEq
Creates a greater-than-or-equal predicate for aUUIDcolumn. -
isNull
Creates a predicate that matches rows where the given column is null. -
isNotNull
Creates a predicate that matches rows where the given column is not null. -
and
-
and
-
or
-
or
-
not
-