Package org.apache.druid.segment.join
Class HashJoinSegmentStorageAdapter
- java.lang.Object
-
- org.apache.druid.segment.join.HashJoinSegmentStorageAdapter
-
- All Implemented Interfaces:
Expr.InputBindingInspector,ColumnInspector,CursorFactory,StorageAdapter
public class HashJoinSegmentStorageAdapter extends Object implements StorageAdapter
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanVectorize(Filter filter, VirtualColumns virtualColumns, boolean descending)Returns true if the provided combination of parameters can be handled by "makeVectorCursor".Set<String>determineBaseColumnsWithPreAndPostJoinVirtualColumns(VirtualColumns virtualColumns, List<VirtualColumn> preJoinVirtualColumns, List<VirtualColumn> postJoinVirtualColumns)Return a String set containing the name of columns that belong to the base table (including any pre-join virtual columns as well).Indexed<String>getAvailableDimensions()Iterable<String>getAvailableMetrics()ColumnCapabilitiesgetColumnCapabilities(String column)Returns capabilities of a particular column, if known.intgetDimensionCardinality(String column)Returns the number of distinct values for a column, orDimensionDictionarySelector.CARDINALITY_UNKNOWNif unknown.org.joda.time.IntervalgetInterval()org.joda.time.DateTimegetMaxIngestedEventTime()org.joda.time.DateTimegetMaxTime()Metadata-only operation that returns an upper bound onColumnHolder.TIME_COLUMN_NAMEvalues for this adapter.ComparablegetMaxValue(String column)Returns the minimum value of the provided column, if known through an index, dictionary, or cache.MetadatagetMetadata()org.joda.time.DateTimegetMinTime()Metadata-only operation that returns a lower bound onColumnHolder.TIME_COLUMN_NAMEvalues for this adapter.ComparablegetMinValue(String column)Returns the minimum value of the provided column, if known through an index, dictionary, or cache.intgetNumRows()booleanhasBuiltInFilters()Returns true if this storage adapter can filter some rows out.booleanisBaseColumn(String column)Returns whether "column" will be selected from "baseAdapter".Sequence<Cursor>makeCursors(Filter filter, org.joda.time.Interval interval, VirtualColumns virtualColumns, Granularity gran, boolean descending, QueryMetrics<?> queryMetrics)Creates a sequence of Cursors, one for each time-granular bucket (based on the provided Granularity).VectorCursormakeVectorCursor(Filter filter, org.joda.time.Interval interval, VirtualColumns virtualColumns, boolean descending, int vectorSize, QueryMetrics<?> queryMetrics)Creates a VectorCursor.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.druid.segment.ColumnInspector
getType
-
Methods inherited from interface org.apache.druid.math.expr.Expr.InputBindingInspector
areNumeric, areNumeric, areSameTypes, areSameTypes, areScalar, areScalar, canVectorize, canVectorize
-
Methods inherited from interface org.apache.druid.segment.StorageAdapter
getRowSignature, isFromTombstone
-
-
-
-
Method Detail
-
getInterval
public org.joda.time.Interval getInterval()
- Specified by:
getIntervalin interfaceStorageAdapter
-
getAvailableDimensions
public Indexed<String> getAvailableDimensions()
- Specified by:
getAvailableDimensionsin interfaceStorageAdapter
-
getAvailableMetrics
public Iterable<String> getAvailableMetrics()
- Specified by:
getAvailableMetricsin interfaceStorageAdapter
-
getDimensionCardinality
public int getDimensionCardinality(String column)
Description copied from interface:StorageAdapterReturns the number of distinct values for a column, orDimensionDictionarySelector.CARDINALITY_UNKNOWNif unknown. If the column doesn't exist, returns 1, because a column that doesn't exist is treated as a column of default (or null) values.- Specified by:
getDimensionCardinalityin interfaceStorageAdapter
-
getMinTime
public org.joda.time.DateTime getMinTime()
Description copied from interface:StorageAdapterMetadata-only operation that returns a lower bound onColumnHolder.TIME_COLUMN_NAMEvalues for this adapter. May be earlier than the actual minimum data timestamp. ForQueryableIndexStorageAdapterandIncrementalIndexStorageAdapterspecifically, which back regular tables (i.e.TableDataSource), this method contract is tighter: it does return the actual minimum data timestamp. This fact is leveraged byTimeBoundaryQueryto return results using metadata only.- Specified by:
getMinTimein interfaceStorageAdapter
-
getMaxTime
public org.joda.time.DateTime getMaxTime()
Description copied from interface:StorageAdapterMetadata-only operation that returns an upper bound onColumnHolder.TIME_COLUMN_NAMEvalues for this adapter. May be later than the actual maximum data timestamp. ForQueryableIndexStorageAdapterandIncrementalIndexStorageAdapterspecifically, which back regular tables (i.e.TableDataSource), this method contract is tighter: it does return the actual maximum data timestamp. This fact is leveraged byTimeBoundaryQueryto return results using metadata only.- Specified by:
getMaxTimein interfaceStorageAdapter
-
getMinValue
@Nullable public Comparable getMinValue(String column)
Description copied from interface:StorageAdapterReturns the minimum value of the provided column, if known through an index, dictionary, or cache. Returns null if not known. Does not scan the column to find the minimum value.- Specified by:
getMinValuein interfaceStorageAdapter
-
getMaxValue
@Nullable public Comparable getMaxValue(String column)
Description copied from interface:StorageAdapterReturns the minimum value of the provided column, if known through an index, dictionary, or cache. Returns null if not known. Does not scan the column to find the maximum value.- Specified by:
getMaxValuein interfaceStorageAdapter
-
getColumnCapabilities
@Nullable public ColumnCapabilities getColumnCapabilities(String column)
Description copied from interface:StorageAdapterReturns capabilities of a particular column, if known. May be null if the column doesn't exist, or if the column does exist but the capabilities are unknown. The latter is possible with dynamically discovered columns. Note that StorageAdapters are representations of "real" segments, so they are not aware of any virtual columns that may be involved in a query. In general, query engines should instead use the methodColumnSelectorFactory.getColumnCapabilities(String), which returns capabilities for virtual columns as well.- Specified by:
getColumnCapabilitiesin interfaceColumnInspector- Specified by:
getColumnCapabilitiesin interfaceStorageAdapter- Parameters:
column- column name- Returns:
- capabilities, or null
-
getNumRows
public int getNumRows()
- Specified by:
getNumRowsin interfaceStorageAdapter
-
getMaxIngestedEventTime
public org.joda.time.DateTime getMaxIngestedEventTime()
- Specified by:
getMaxIngestedEventTimein interfaceStorageAdapter
-
getMetadata
public Metadata getMetadata()
- Specified by:
getMetadatain interfaceStorageAdapter
-
hasBuiltInFilters
public boolean hasBuiltInFilters()
Description copied from interface:StorageAdapterReturns true if this storage adapter can filter some rows out. The actual column cardinality can be lower than whatStorageAdapter.getDimensionCardinality(java.lang.String)returns if this returns true. Dimension selectors for such storage adapter can return non-contiguous dictionary IDs because the dictionary IDs in filtered rows will not be returned. Note that the number of rows accessible via this storage adapter will not necessarily decrease because of the built-in filters. For inner joins, for example, the number of joined rows can be larger than the number of rows in the base adapter even though this method returns true.- Specified by:
hasBuiltInFiltersin interfaceStorageAdapter
-
canVectorize
public boolean canVectorize(@Nullable Filter filter, VirtualColumns virtualColumns, boolean descending)
Description copied from interface:CursorFactoryReturns true if the provided combination of parameters can be handled by "makeVectorCursor". Query engines should use this before running in vectorized mode, and be prepared to fall back to non-vectorized mode if this method returns false.- Specified by:
canVectorizein interfaceCursorFactory
-
makeVectorCursor
@Nullable public VectorCursor makeVectorCursor(@Nullable Filter filter, org.joda.time.Interval interval, VirtualColumns virtualColumns, boolean descending, int vectorSize, @Nullable QueryMetrics<?> queryMetrics)
Description copied from interface:CursorFactoryCreates a VectorCursor. Unlike the Cursor returned by "makeCursor", there is just one of these. Hence, this method does not take a "granularity" parameter. Before calling this method, check "canVectorize" to see if the call you are about to make will throw an error or not. Returns null if there is no data to walk over (for example, if the "interval" does not overlap the data interval of this segment).- Specified by:
makeVectorCursorin interfaceCursorFactory
-
makeCursors
public Sequence<Cursor> makeCursors(@Nullable Filter filter, @Nonnull org.joda.time.Interval interval, @Nonnull VirtualColumns virtualColumns, @Nonnull Granularity gran, boolean descending, @Nullable QueryMetrics<?> queryMetrics)
Description copied from interface:CursorFactoryCreates a sequence of Cursors, one for each time-granular bucket (based on the provided Granularity).- Specified by:
makeCursorsin interfaceCursorFactory
-
isBaseColumn
public boolean isBaseColumn(String column)
Returns whether "column" will be selected from "baseAdapter". This is true if it is not shadowed by any joinables (i.e. if it does not start with any of their prefixes).
-
determineBaseColumnsWithPreAndPostJoinVirtualColumns
public Set<String> determineBaseColumnsWithPreAndPostJoinVirtualColumns(VirtualColumns virtualColumns, @Nullable List<VirtualColumn> preJoinVirtualColumns, @Nullable List<VirtualColumn> postJoinVirtualColumns)
Return a String set containing the name of columns that belong to the base table (including any pre-join virtual columns as well). Additionally, if the preJoinVirtualColumns and/or postJoinVirtualColumns arguments are provided, this method will add each VirtualColumn in the provided virtualColumns to either preJoinVirtualColumns or postJoinVirtualColumns based on whether the virtual column is pre-join or post-join.- Parameters:
virtualColumns- List of virtual columns from the querypreJoinVirtualColumns- If provided, virtual columns determined to be pre-join will be added to this listpostJoinVirtualColumns- If provided, virtual columns determined to be post-join will be added to this list- Returns:
- The set of base column names, including any pre-join virtual columns.
-
-