Package org.apache.druid.query.filter
Interface Filter
-
- All Known Subinterfaces:
BooleanFilter
- All Known Implementing Classes:
AndFilter,ArrayContainsElementFilter,BoundFilter,ColumnComparisonFilter,DimensionPredicateFilter,EqualityFilter,ExpressionFilter,FalseFilter,InDimFilter,IsBooleanFilter,JavaScriptFilter,LikeFilter,NotFilter,NullFilter,OrFilter,RangeFilter,RegexFilter,SearchQueryFilter,SelectorFilter,SpatialFilter,TrueFilter,TypedInFilter
@SubclassesMustOverrideEqualsAndHashCode public interface Filter
-
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default booleancanVectorizeMatcher(ColumnInspector inspector)Returns true if this filter can produce a vectorized matcher from its "makeVectorMatcher" method.BitmapColumnIndexgetBitmapColumnIndex(ColumnIndexSelector selector)Returns aBitmapColumnIndexif this filter supports using a bitmap index for filtering for the given inputColumnIndexSelector.Set<String>getRequiredColumns()Set of columns used by a filter.default <T> FilterBundlemakeFilterBundle(ColumnIndexSelector columnIndexSelector, BitmapResultFactory<T> bitmapResultFactory, int applyRowCount, int totalRowCount, boolean includeUnknown)Compute indexes and build a containerFilterBundleto be used duringCursororVectorCursorcreation, combining the computed outputs ofgetBitmapColumnIndex(ColumnIndexSelector)as well as references tomakeMatcher(ColumnSelectorFactory)andmakeVectorMatcher(VectorColumnSelectorFactory).ValueMatchermakeMatcher(ColumnSelectorFactory factory)Get aValueMatcherthat applies this filter to row values.default VectorValueMatchermakeVectorMatcher(VectorColumnSelectorFactory factory)Get aVectorValueMatcherthat applies this filter to row vectors.default FilterrewriteRequiredColumns(Map<String,String> columnRewrites)Return a copy of this filter that is identical to the this filter except that it operates on different columns, based on a renaming map where the key is the column to be renamed in the filter, and the value is the new column name.default booleansupportsRequiredColumnRewrite()Returns true is this filter is able to return a copy of this filter that is identical to this filter except that it operates on different columns, based on a renaming map.
-
-
-
Method Detail
-
makeFilterBundle
default <T> FilterBundle makeFilterBundle(ColumnIndexSelector columnIndexSelector, BitmapResultFactory<T> bitmapResultFactory, int applyRowCount, int totalRowCount, boolean includeUnknown)
Compute indexes and build a containerFilterBundleto be used duringCursororVectorCursorcreation, combining the computed outputs ofgetBitmapColumnIndex(ColumnIndexSelector)as well as references tomakeMatcher(ColumnSelectorFactory)andmakeVectorMatcher(VectorColumnSelectorFactory).Filters populating the
FilterBundlecontainer should only set the values which MUST be evaluated by the cursor. If both are set, the cursor will effectively perform a logical AND to combine them. SeeFilterBundlefor additional details.- Type Parameters:
T- - Type ofBitmapResultFactoryresults,ImmutableBitmapby default- Parameters:
columnIndexSelector- - providesColumnIndexSupplierto fetch column indexes andBitmapFactoryto manipulate thembitmapResultFactory- - wrapper forImmutableBitmapoperations to tie intoQueryMetricsand build the output indexesapplyRowCount- - upper bound on number of rows this filter would be applied to, after removing rows short-circuited by prior bundle operations. For example, given "x AND y", if "x" is resolved using an index, then "y" will receive the number of rows that matched the filter "x". As another example, given "x OR y", if "x" is resolved using an index, then "y" will receive the number of rows that did *not* match the filter "x".totalRowCount- - total number of rows to be scanned if no indexes are appliedincludeUnknown- - mapping for Druid native two state logic system into SQL three-state logic system. If set to true, bitmaps returned by this method should include true bits for any rows where the matching result is 'unknown', such as from the input being null valued. SeeNullHandling.useThreeValueLogic()- Returns:
- -
FilterBundlecontaining any indexes and/or matchers that are needed to build a cursor
-
getBitmapColumnIndex
@Nullable BitmapColumnIndex getBitmapColumnIndex(ColumnIndexSelector selector)
Returns aBitmapColumnIndexif this filter supports using a bitmap index for filtering for the given inputColumnIndexSelector. TheBitmapColumnIndexcan be used to compute into a bitmap indicating rows that match this filter resultBitmapColumnIndex.computeBitmapResult(BitmapResultFactory, boolean), or examine details about the index prior to computing it, viaBitmapColumnIndex.getIndexCapabilities().- Parameters:
selector- Object used to create BitmapColumnIndex- Returns:
- BitmapColumnIndex that can build ImmutableBitmap of matched row numbers
-
makeMatcher
ValueMatcher makeMatcher(ColumnSelectorFactory factory)
Get aValueMatcherthat applies this filter to row values.- Parameters:
factory- Object used to create ValueMatchers- Returns:
- ValueMatcher that applies this filter to row values.
-
makeVectorMatcher
default VectorValueMatcher makeVectorMatcher(VectorColumnSelectorFactory factory)
Get aVectorValueMatcherthat applies this filter to row vectors.- Parameters:
factory- Object used to create ValueMatchers- Returns:
- VectorValueMatcher that applies this filter to row vectors.
-
canVectorizeMatcher
default boolean canVectorizeMatcher(ColumnInspector inspector)
Returns true if this filter can produce a vectorized matcher from its "makeVectorMatcher" method.- Parameters:
inspector- Supplies type information for the selectors this filter will match against
-
supportsRequiredColumnRewrite
default boolean supportsRequiredColumnRewrite()
Returns true is this filter is able to return a copy of this filter that is identical to this filter except that it operates on different columns, based on a renaming map.
-
rewriteRequiredColumns
default Filter rewriteRequiredColumns(Map<String,String> columnRewrites)
Return a copy of this filter that is identical to the this filter except that it operates on different columns, based on a renaming map where the key is the column to be renamed in the filter, and the value is the new column name. For example, if I have a filter (A = hello), and I have a renaming map (A -> B), this should return the filter (B = hello)- Parameters:
columnRewrites- Column rewrite map- Returns:
- Copy of this filter that operates on new columns based on the rewrite map
-
-