Package org.apache.druid.segment
Class UnnestStorageAdapter
- java.lang.Object
-
- org.apache.druid.segment.UnnestStorageAdapter
-
- All Implemented Interfaces:
Expr.InputBindingInspector,ColumnInspector,CursorFactory,StorageAdapter
public class UnnestStorageAdapter extends Object implements StorageAdapter
This class serves as the Storage Adapter for the Unnest Segment and is responsible for creating the cursors If the column is dictionary encoded it createsUnnestDimensionCursorelseUnnestColumnValueSelectorCursorThese cursors help navigate the segments for these cases
-
-
Constructor Summary
Constructors Constructor Description UnnestStorageAdapter(StorageAdapter baseAdapter, VirtualColumn unnestColumn, DimFilter unnestFilter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Pair<Filter,Filter>computeBaseAndPostUnnestFilters(Filter queryFilter, Filter unnestFilter, VirtualColumns queryVirtualColumns, String inputColumn, ColumnCapabilities inputColumnCapabilites)Split queryFilter into pre- and post-correlate filters.Indexed<String>getAvailableDimensions()Iterable<String>getAvailableMetrics()StorageAdaptergetBaseAdapter()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()VirtualColumngetUnnestColumn()FiltergetUnnestFilter()StringgetUnnestInputIfDirectAccess(VirtualColumn unnestColumn)Returns the input ofunnestColumn, if it's a direct access; otherwise returns null.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).-
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.segment.CursorFactory
canVectorize, makeVectorCursor
-
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, hasBuiltInFilters, isFromTombstone
-
-
-
-
Constructor Detail
-
UnnestStorageAdapter
public UnnestStorageAdapter(StorageAdapter baseAdapter, VirtualColumn unnestColumn, @Nullable DimFilter unnestFilter)
-
-
Method Detail
-
getBaseAdapter
public StorageAdapter getBaseAdapter()
-
makeCursors
public Sequence<Cursor> makeCursors(@Nullable Filter filter, org.joda.time.Interval interval, VirtualColumns virtualColumns, 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
-
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
@Nullable public Metadata getMetadata()
- Specified by:
getMetadatain interfaceStorageAdapter
-
getUnnestColumn
public VirtualColumn getUnnestColumn()
-
computeBaseAndPostUnnestFilters
public Pair<Filter,Filter> computeBaseAndPostUnnestFilters(@Nullable Filter queryFilter, @Nullable Filter unnestFilter, VirtualColumns queryVirtualColumns, @Nullable String inputColumn, @Nullable ColumnCapabilities inputColumnCapabilites)
Split queryFilter into pre- and post-correlate filters.- Parameters:
queryFilter- query filter passed to makeCursorsunnestFilter- filter on unnested column passed to PostUnnestCursorqueryVirtualColumns- query virtual columns passed to makeCursorsinputColumn- input column to unnest if it's a direct access; otherwise nullinputColumnCapabilites- input column capabilities if known; otherwise null- Returns:
- pair of pre- and post-unnest filters
-
getUnnestInputIfDirectAccess
@Nullable public String getUnnestInputIfDirectAccess(VirtualColumn unnestColumn)
Returns the input ofunnestColumn, if it's a direct access; otherwise returns null.
-
-