Class SettableDimensionValueSelector
- java.lang.Object
-
- org.apache.druid.segment.selector.settable.SettableDimensionValueSelector
-
- All Implemented Interfaces:
HotLoopCallee
,BaseDoubleColumnValueSelector
,BaseFloatColumnValueSelector
,BaseLongColumnValueSelector
,BaseNullableColumnValueSelector
,BaseObjectColumnValueSelector<Object>
,ColumnValueSelector<Object>
,DimensionDictionarySelector
,DimensionSelector
,SettableColumnValueSelector<Object>
public class SettableDimensionValueSelector extends Object implements DimensionSelector, SettableColumnValueSelector<Object>
Settable implementation ofDimensionSelector
.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.druid.segment.DimensionSelector
DimensionSelector.NullDimensionSelectorHolder
-
-
Field Summary
-
Fields inherited from interface org.apache.druid.segment.ColumnValueSelector
EMPTY_ARRAY
-
Fields inherited from interface org.apache.druid.segment.DimensionDictionarySelector
CARDINALITY_UNKNOWN
-
-
Constructor Summary
Constructors Constructor Description SettableDimensionValueSelector()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Class
classOfObject()
Most-specific class of object returned byBaseObjectColumnValueSelector.getObject()
, if known in advance.Object
getObject()
Returns the currently-selected object.IndexedInts
getRow()
Returns the indexed values at the current position in this DimensionSelector.int
getValueCardinality()
Value cardinality is the cardinality of the different occurring values.IdLookup
idLookup()
ReturnsIdLookup
if available for this DimensionSelector, or null.String
lookupName(int id)
Returns the value for a particular dictionary id as a Java String.ValueMatcher
makeValueMatcher(String value)
ValueMatcher
makeValueMatcher(DruidPredicateFactory predicateFactory)
boolean
nameLookupPossibleInAdvance()
Returns true if it is possible toDimensionDictionarySelector.lookupName(int)
by ids from 0 toDimensionDictionarySelector.getValueCardinality()
before the rows with those ids are returned.void
setValueFrom(ColumnValueSelector<?> selector)
-
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.DimensionDictionarySelector
lookupNameUtf8, supportsLookupNameUtf8
-
Methods inherited from interface org.apache.druid.segment.DimensionSelector
defaultGetObject, getDouble, getFloat, getLong, isNull
-
Methods inherited from interface org.apache.druid.segment.selector.settable.SettableColumnValueSelector
inspectRuntimeShape
-
-
-
-
Method Detail
-
setValueFrom
public void setValueFrom(ColumnValueSelector<?> selector)
- Specified by:
setValueFrom
in interfaceSettableColumnValueSelector<Object>
-
getRow
public IndexedInts getRow()
Description copied from interface:DimensionSelector
Returns the indexed values at the current position in this DimensionSelector. IMPORTANT. The returnedIndexedInts
object could generally be reused inside the implementation of DimensionSelector, i. e. this method could always return the same object for the same selector. Users of this API, such asAggregator.aggregate()
,BufferAggregator.aggregate(java.nio.ByteBuffer, int)
,AggregateCombiner.reset(org.apache.druid.segment.ColumnValueSelector)
,AggregateCombiner.fold(org.apache.druid.segment.ColumnValueSelector)
should be prepared for that and not storing the object returned from this method in their state, assuming that the object will remain unchanged even when the position of the selector changes. This may not be the case.- Specified by:
getRow
in interfaceDimensionSelector
-
makeValueMatcher
public ValueMatcher makeValueMatcher(@Nullable String value)
- Specified by:
makeValueMatcher
in interfaceDimensionSelector
- Parameters:
value
- nullable dimension value
-
makeValueMatcher
public ValueMatcher makeValueMatcher(DruidPredicateFactory predicateFactory)
- Specified by:
makeValueMatcher
in interfaceDimensionSelector
-
getValueCardinality
public int getValueCardinality()
Description copied from interface:DimensionDictionarySelector
Value cardinality is the cardinality of the different occurring values. If there were 4 rows: A,B A B A Value cardinality would be 2. Cardinality may be unknown (e.g. the selector used by IncrementalIndex while reading input rows), in which case this method will return -1. If cardinality is unknown, you should assume this dimension selector has no dictionary, and avoid storing ids, calling "lookupId", or calling "lookupName" outside of the context of operating on a single row. If cardinality is known then it is assumed that underlying dictionary is lexicographically sorted by the encoded value. For example if there are values "A" , "B" , "C" in a column with cardinality 3 then it is assumed that id("A") < id("B") < id("C")- Specified by:
getValueCardinality
in interfaceDimensionDictionarySelector
- Returns:
- the value cardinality, or
DimensionDictionarySelector.CARDINALITY_UNKNOWN
if unknown.
-
lookupName
@Nullable public String lookupName(int id)
Description copied from interface:DimensionDictionarySelector
Returns the value for a particular dictionary id as a Java String. For example, if a column has four rows: A,B A A,B B getRow() would return getRow(0) => [0 1] getRow(1) => [0] getRow(2) => [0 1] getRow(3) => [1] and then lookupName would return: lookupName(0) => A lookupName(1) => B Performance note: if you want ajava.lang.String
, always use this method. It will be at least as fast as callingDimensionDictionarySelector.lookupNameUtf8(int)
and decoding the bytes. However, if you want UTF-8 bytes, then check ifDimensionDictionarySelector.supportsLookupNameUtf8()
returns true, and if it does, useDimensionDictionarySelector.lookupNameUtf8(int)
instead.- Specified by:
lookupName
in interfaceDimensionDictionarySelector
- Parameters:
id
- id to lookup the dictionary value for- Returns:
- dictionary value for the given id, or null if the value is itself null
-
nameLookupPossibleInAdvance
public boolean nameLookupPossibleInAdvance()
Description copied from interface:DimensionDictionarySelector
Returns true if it is possible toDimensionDictionarySelector.lookupName(int)
by ids from 0 toDimensionDictionarySelector.getValueCardinality()
before the rows with those ids are returned.Returns false if
DimensionDictionarySelector.lookupName(int)
could be called with ids, returned from the most recent row (or row vector) returned by this DimensionSelector, but not earlier. IfDimensionDictionarySelector.getValueCardinality()
of this selector additionally returnsDimensionDictionarySelector.CARDINALITY_UNKNOWN
,lookupName()
couldn't be called with ids, returned by not the most recent row (or row vector), i. e. names for ids couldn't be looked up "later". IfDimensionDictionarySelector.getValueCardinality()
returns a non-negative number,lookupName()
could be called with any ids, returned from rows (or row vectors) returned since the creation of this DimensionSelector.If
DimensionDictionarySelector.lookupName(int)
is called with an ineligible id, result is undefined: exception could be thrown, or null returned, or some other random value.- Specified by:
nameLookupPossibleInAdvance
in interfaceDimensionDictionarySelector
-
idLookup
@Nullable public IdLookup idLookup()
Description copied from interface:DimensionDictionarySelector
ReturnsIdLookup
if available for this DimensionSelector, or null.- Specified by:
idLookup
in interfaceDimensionDictionarySelector
-
getObject
@Nullable public Object getObject()
Description copied from interface:BaseObjectColumnValueSelector
Returns the currently-selected object. The behavior of this method depends on the type of selector, which can be determined by callingColumnSelectorFactory.getColumnCapabilities(String)
on the sameColumnSelectorFactory
that you got this selector from. If the capabilties are nonnull, the selector type is given byTypeSignature.getType()
. String selectors, where type isColumnType.STRING
, may return any type of object from this method, especially in cases where the selector is casting objects to string at selection time. Callers are encouraged to avoid the need to deal with various objects by usingColumnSelectorFactory.makeDimensionSelector(org.apache.druid.query.dimension.DimensionSpec)
instead. Numeric selectors, whereTypeSignature.isNumeric()
, may return any type ofNumber
. Callers that wish to deal with more specific types should treat the originalColumnValueSelector
as aBaseLongColumnValueSelector
,BaseDoubleColumnValueSelector
, orBaseFloatColumnValueSelector
instead. Array selectors, whereTypeSignature.isArray()
, must returnObject[]
. The array may contain null elements, and the array itself may also be null. Selectors of unknown type, whereColumnSelectorFactory.getColumnCapabilities(String)
returns null, may return any type of object. Callers must be prepared for a wide variety of possible input objects. This case is common during ingestion, where selectors are built on top of external data.- Specified by:
getObject
in interfaceBaseObjectColumnValueSelector<Object>
-
classOfObject
public Class classOfObject()
Description copied from interface:BaseObjectColumnValueSelector
Most-specific class of object returned byBaseObjectColumnValueSelector.getObject()
, if known in advance. This method returnsObject
when selectors do not know in advance what class of object they may return.- Specified by:
classOfObject
in interfaceBaseObjectColumnValueSelector<Object>
-
-