Class LookupJoinable
- java.lang.Object
-
- org.apache.druid.segment.join.lookup.LookupJoinable
-
- All Implemented Interfaces:
Joinable
,ReferenceCountedObject
public class LookupJoinable extends Object implements Joinable
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.druid.segment.join.Joinable
Joinable.ColumnValuesWithUniqueFlag
-
-
Field Summary
-
Fields inherited from interface org.apache.druid.segment.join.Joinable
CARDINALITY_UNKNOWN
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Optional<Closeable>
acquireReferences()
This method is expected to increment a reference count and provide aCloseable
that decrements the reference count when closed.List<String>
getAvailableColumns()
Returns the list of columns that this Joinable offers.int
getCardinality(String columnName)
Returns the cardinality of "columnName", orJoinable.CARDINALITY_UNKNOWN
if not known.ColumnCapabilities
getColumnCapabilities(String columnName)
Returns capabilities for one of this Joinable's columns.Optional<InDimFilter.ValuesSet>
getCorrelatedColumnValues(String searchColumnName, String searchColumnValue, String retrievalColumnName, long maxCorrelationSetSize, boolean allowNonKeyColumnSearch)
Searches a column from this Joinable for a particular value, finds rows that match, and returns values of a second column for those rows.Joinable.ColumnValuesWithUniqueFlag
getMatchableColumnValues(String columnName, boolean includeNull, int maxNumValues)
Returns all matchable values from a particular column along with a flag to tell if they are all unique in the column.JoinMatcher
makeJoinMatcher(ColumnSelectorFactory leftSelectorFactory, JoinConditionAnalysis condition, boolean remainderNeeded, boolean descending, Closer closer)
Creates a JoinMatcher that can be used to implement a join onto this Joinable.static LookupJoinable
wrap(LookupExtractor extractor)
-
-
-
Method Detail
-
wrap
public static LookupJoinable wrap(LookupExtractor extractor)
-
getAvailableColumns
public List<String> getAvailableColumns()
Description copied from interface:Joinable
Returns the list of columns that this Joinable offers.- Specified by:
getAvailableColumns
in interfaceJoinable
-
getCardinality
public int getCardinality(String columnName)
Description copied from interface:Joinable
Returns the cardinality of "columnName", orJoinable.CARDINALITY_UNKNOWN
if not known. May be used at query time to trigger optimizations. If notJoinable.CARDINALITY_UNKNOWN
, this must match the cardinality of selectors returned by theColumnSelectorFactory.makeDimensionSelector(org.apache.druid.query.dimension.DimensionSpec)
method of this joinable'sJoinMatcher.getColumnSelectorFactory()
.- Specified by:
getCardinality
in interfaceJoinable
-
getColumnCapabilities
@Nullable public ColumnCapabilities getColumnCapabilities(String columnName)
Description copied from interface:Joinable
Returns capabilities for one of this Joinable's columns.- Specified by:
getColumnCapabilities
in interfaceJoinable
- Parameters:
columnName
- column name- Returns:
- capabilities, or null if the columnName is not one of this Joinable's columns
-
makeJoinMatcher
public JoinMatcher makeJoinMatcher(ColumnSelectorFactory leftSelectorFactory, JoinConditionAnalysis condition, boolean remainderNeeded, boolean descending, Closer closer)
Description copied from interface:Joinable
Creates a JoinMatcher that can be used to implement a join onto this Joinable.- Specified by:
makeJoinMatcher
in interfaceJoinable
- Parameters:
leftSelectorFactory
- column selector factory that allows access to the left-hand side of the joincondition
- join condition for the matcherremainderNeeded
- whether or notJoinMatcher.matchRemainder()
will ever be called on the matcher. If we know it will not, additional optimizations are often possible.descending
- true if join cursor is iterated in descending ordercloser
- closer that will run after join cursor has completed to clean up any per query resources the joinable uses- Returns:
- the matcher
-
getMatchableColumnValues
public Joinable.ColumnValuesWithUniqueFlag getMatchableColumnValues(String columnName, boolean includeNull, int maxNumValues)
Description copied from interface:Joinable
Returns all matchable values from a particular column along with a flag to tell if they are all unique in the column. If the matchable values are greater than "maxNumValues" or if the column doesn't exists or doesn't supports this operation, returns an object with empty set for column values and false for uniqueness flag. The uniqueness flag will only be true if we've collected all matchable values in the column and found that they're all unique. In all other cases it will be false. The returned set may be passed toInDimFilter
. For efficiency, implementations should prefer creating the returned set withnew TreeSet<String>(Comparators.naturalNullsFirst()
}. This avoids a copy in the filter's constructor.- Specified by:
getMatchableColumnValues
in interfaceJoinable
- Parameters:
columnName
- name of the columnincludeNull
- whether null should be considered a matchable value. If true, this method returns all values that are present in the column. If false, this method returns all non-null values.maxNumValues
- maximum number of values to return. If exceeded, returns an empty set with the "allUnique" flag set to false.
-
getCorrelatedColumnValues
public Optional<InDimFilter.ValuesSet> getCorrelatedColumnValues(String searchColumnName, String searchColumnValue, String retrievalColumnName, long maxCorrelationSetSize, boolean allowNonKeyColumnSearch)
Description copied from interface:Joinable
Searches a column from this Joinable for a particular value, finds rows that match, and returns values of a second column for those rows. The returned set may be passed toInDimFilter
. For efficiency, implementations should prefer creating the returned set withnew TreeSet<String>(Comparators.naturalNullsFirst()
}. This avoids a copy in the filter's constructor.- Specified by:
getCorrelatedColumnValues
in interfaceJoinable
- Parameters:
searchColumnName
- Name of the search column. This is the column that is being used in the filtersearchColumnValue
- Target value of the search column. This is the value that is being filtered on.retrievalColumnName
- The column to retrieve values from. This is the column that is being joined against.maxCorrelationSetSize
- Maximum number of values to retrieve. If we detect that more values would be returned than this limit, return absent.allowNonKeyColumnSearch
- If true, allow searchs on non-key columns. If this is false, a search on a non-key column returns absent.- Returns:
- The set of correlated column values. If we cannot determine correlated values, return absent. In case either the search or retrieval column names are not found, this will return absent.
-
acquireReferences
public Optional<Closeable> acquireReferences()
Description copied from interface:ReferenceCountedObject
This method is expected to increment a reference count and provide aCloseable
that decrements the reference count when closed. This is likely just a wrapper aroundReferenceCountingCloseableObject.incrementReferenceAndDecrementOnceCloseable()
, but may also include any other associated references which should be incremented when this method is called, and decremented/released by the closeable. IMPORTANT NOTE: to fulfill the contract of this method, implementors must return a closeable to indicate that the reference can be acquired, even if there is nothing to close. Implementors should avoid allowing this method or theCloseable
it creates to throw exceptions. For callers: if this method returns non-empty, IT MUST BE CLOSED, else reference counts can potentially leak.- Specified by:
acquireReferences
in interfaceReferenceCountedObject
-
-