Package org.apache.druid.segment.column
Class ColumnCapabilitiesImpl
- java.lang.Object
-
- org.apache.druid.segment.column.ColumnCapabilitiesImpl
-
- All Implemented Interfaces:
ColumnCapabilities
,TypeSignature<ValueType>
public class ColumnCapabilitiesImpl extends Object implements ColumnCapabilities
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.druid.segment.column.ColumnCapabilities
ColumnCapabilities.Capable, ColumnCapabilities.CoercionLogic
-
-
Field Summary
Fields Modifier and Type Field Description static ColumnCapabilities.CoercionLogic
ALL_FALSE
-
Constructor Summary
Constructors Constructor Description ColumnCapabilitiesImpl()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ColumnCapabilities.Capable
areDictionaryValuesSorted()
If the column is dictionary encoded, are those values sorted? Useful to know for optimizations that can defer looking up values and allowing sorting with the dictionary ids directlyColumnCapabilities.Capable
areDictionaryValuesUnique()
If the column is dictionary encoded, is there a 1:1 mapping of dictionary ids to values? If this is true, it unlocks optimizations such as allowing for things like grouping directly on dictionary ids and deferred value lookupstatic ColumnCapabilitiesImpl
copyOf(ColumnCapabilities other)
static ColumnCapabilitiesImpl
createDefault()
Creates aColumnCapabilitiesImpl
where allColumnCapabilities.Capable
that default to unknown instead are coerced to true or falsestatic ColumnCapabilitiesImpl
createSimpleArrayColumnCapabilities(TypeSignature<ValueType> valueType)
static ColumnCapabilitiesImpl
createSimpleNumericColumnCapabilities(TypeSignature<ValueType> valueType)
Create a no frills, simple column withValueType
set and everything else falsestatic ColumnCapabilitiesImpl
createSimpleSingleValueStringColumnCapabilities()
Simple, single valued, non dictionary encoded string without bitmap index or anything fancyString
getComplexTypeName()
Type name of 'complex' types (ValueType.COMPLEX
,ExprType.COMPLEX
), which are 'registered' by their name, acting as a key to get the correct set of serialization, deserialization, and other type specific handling facilties.TypeSignature<ValueType>
getElementType()
ValueType
getType()
TypeDescriptor
enumeration used to handle different classes of typesboolean
hasBitmapIndexes()
Does the column have an inverted index bitmap for each value? If so, these may be employed to 'pre-filter' the column by examining if the values match the filter and intersecting the bitmaps, to avoid having to scan and evaluate if every row matches the filterColumnCapabilities.Capable
hasMultipleValues()
String columns are sneaky, and might have multiple values, this is to allow callers to know and appropriately prepare themselvesColumnCapabilities.Capable
hasNulls()
Does this column contain null values? If so, callers, especially for primitive numeric columns, will need to check for null value rows and act accordinglyboolean
hasSpatialIndexes()
Does the column have spatial indexes available to allow use with spatial filtering?ColumnCapabilities.Capable
isDictionaryEncoded()
Is the column dictionary encoded? If so, a DimensionDictionarySelector may be used instead of using a value selector, allowing algorithms to operate on primitive integer dictionary ids rather than the looked up dictionary valuesColumnCapabilitiesImpl
setDictionaryEncoded(boolean dictionaryEncoded)
ColumnCapabilitiesImpl
setDictionaryValuesSorted(boolean dictionaryValuesSorted)
ColumnCapabilitiesImpl
setDictionaryValuesUnique(boolean dictionaryValuesUnique)
ColumnCapabilitiesImpl
setHasBitmapIndexes(boolean hasInvertedIndexes)
ColumnCapabilitiesImpl
setHasMultipleValues(boolean hasMultipleValues)
ColumnCapabilitiesImpl
setHasNulls(boolean hasNulls)
ColumnCapabilitiesImpl
setHasNulls(ColumnCapabilities.Capable hasNulls)
ColumnCapabilitiesImpl
setHasSpatialIndexes(boolean hasSpatialIndexes)
ColumnCapabilitiesImpl
setType(ColumnType type)
ColumnCapabilitiesImpl
setType(TypeSignature<ValueType> type)
static ColumnCapabilitiesImpl
snapshot(ColumnCapabilities capabilities, ColumnCapabilities.CoercionLogic coerce)
Copy aColumnCapabilities
and coerce allColumnCapabilities.Capable.UNKNOWN
toColumnCapabilities.Capable.TRUE
orColumnCapabilities.Capable.FALSE
as specified byColumnCapabilities.CoercionLogic
-
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.column.ColumnCapabilities
getStrategy, toColumnType
-
Methods inherited from interface org.apache.druid.segment.column.TypeSignature
anyOf, asTypeString, getNullableStrategy, is, isArray, isNumeric, isPrimitive, isPrimitiveArray
-
-
-
-
Field Detail
-
ALL_FALSE
public static final ColumnCapabilities.CoercionLogic ALL_FALSE
-
-
Method Detail
-
copyOf
public static ColumnCapabilitiesImpl copyOf(@Nullable ColumnCapabilities other)
-
snapshot
@Nullable public static ColumnCapabilitiesImpl snapshot(@Nullable ColumnCapabilities capabilities, ColumnCapabilities.CoercionLogic coerce)
Copy aColumnCapabilities
and coerce allColumnCapabilities.Capable.UNKNOWN
toColumnCapabilities.Capable.TRUE
orColumnCapabilities.Capable.FALSE
as specified byColumnCapabilities.CoercionLogic
-
createDefault
public static ColumnCapabilitiesImpl createDefault()
Creates aColumnCapabilitiesImpl
where allColumnCapabilities.Capable
that default to unknown instead are coerced to true or false
-
createSimpleNumericColumnCapabilities
public static ColumnCapabilitiesImpl createSimpleNumericColumnCapabilities(TypeSignature<ValueType> valueType)
Create a no frills, simple column withValueType
set and everything else false
-
createSimpleSingleValueStringColumnCapabilities
public static ColumnCapabilitiesImpl createSimpleSingleValueStringColumnCapabilities()
Simple, single valued, non dictionary encoded string without bitmap index or anything fancy
-
createSimpleArrayColumnCapabilities
public static ColumnCapabilitiesImpl createSimpleArrayColumnCapabilities(TypeSignature<ValueType> valueType)
-
getType
@Nullable public ValueType getType()
Description copied from interface:TypeSignature
TypeDescriptor
enumeration used to handle different classes of types- Specified by:
getType
in interfaceTypeSignature<ValueType>
- See Also:
ValueType
,ExprType
-
getComplexTypeName
@Nullable public String getComplexTypeName()
Description copied from interface:TypeSignature
Type name of 'complex' types (ValueType.COMPLEX
,ExprType.COMPLEX
), which are 'registered' by their name, acting as a key to get the correct set of serialization, deserialization, and other type specific handling facilties. For other types, this value will be null.- Specified by:
getComplexTypeName
in interfaceTypeSignature<ValueType>
-
getElementType
@Nullable public TypeSignature<ValueType> getElementType()
Description copied from interface:TypeSignature
TypeSignature
for the elements contained in an array type (ValueType.ARRAY
,ExprType.ARRAY
). For non-array types, this value will be null.- Specified by:
getElementType
in interfaceTypeSignature<ValueType>
-
setType
public ColumnCapabilitiesImpl setType(ColumnType type)
-
setType
public ColumnCapabilitiesImpl setType(TypeSignature<ValueType> type)
-
isDictionaryEncoded
public ColumnCapabilities.Capable isDictionaryEncoded()
Description copied from interface:ColumnCapabilities
Is the column dictionary encoded? If so, a DimensionDictionarySelector may be used instead of using a value selector, allowing algorithms to operate on primitive integer dictionary ids rather than the looked up dictionary values- Specified by:
isDictionaryEncoded
in interfaceColumnCapabilities
-
setDictionaryEncoded
public ColumnCapabilitiesImpl setDictionaryEncoded(boolean dictionaryEncoded)
-
areDictionaryValuesSorted
public ColumnCapabilities.Capable areDictionaryValuesSorted()
Description copied from interface:ColumnCapabilities
If the column is dictionary encoded, are those values sorted? Useful to know for optimizations that can defer looking up values and allowing sorting with the dictionary ids directly- Specified by:
areDictionaryValuesSorted
in interfaceColumnCapabilities
-
setDictionaryValuesSorted
public ColumnCapabilitiesImpl setDictionaryValuesSorted(boolean dictionaryValuesSorted)
-
areDictionaryValuesUnique
public ColumnCapabilities.Capable areDictionaryValuesUnique()
Description copied from interface:ColumnCapabilities
If the column is dictionary encoded, is there a 1:1 mapping of dictionary ids to values? If this is true, it unlocks optimizations such as allowing for things like grouping directly on dictionary ids and deferred value lookup- Specified by:
areDictionaryValuesUnique
in interfaceColumnCapabilities
-
setDictionaryValuesUnique
public ColumnCapabilitiesImpl setDictionaryValuesUnique(boolean dictionaryValuesUnique)
-
hasBitmapIndexes
public boolean hasBitmapIndexes()
Description copied from interface:ColumnCapabilities
Does the column have an inverted index bitmap for each value? If so, these may be employed to 'pre-filter' the column by examining if the values match the filter and intersecting the bitmaps, to avoid having to scan and evaluate if every row matches the filter- Specified by:
hasBitmapIndexes
in interfaceColumnCapabilities
-
setHasBitmapIndexes
public ColumnCapabilitiesImpl setHasBitmapIndexes(boolean hasInvertedIndexes)
-
hasSpatialIndexes
public boolean hasSpatialIndexes()
Description copied from interface:ColumnCapabilities
Does the column have spatial indexes available to allow use with spatial filtering?- Specified by:
hasSpatialIndexes
in interfaceColumnCapabilities
-
setHasSpatialIndexes
public ColumnCapabilitiesImpl setHasSpatialIndexes(boolean hasSpatialIndexes)
-
hasMultipleValues
public ColumnCapabilities.Capable hasMultipleValues()
Description copied from interface:ColumnCapabilities
String columns are sneaky, and might have multiple values, this is to allow callers to know and appropriately prepare themselves- Specified by:
hasMultipleValues
in interfaceColumnCapabilities
-
setHasMultipleValues
public ColumnCapabilitiesImpl setHasMultipleValues(boolean hasMultipleValues)
-
hasNulls
public ColumnCapabilities.Capable hasNulls()
Description copied from interface:ColumnCapabilities
Does this column contain null values? If so, callers, especially for primitive numeric columns, will need to check for null value rows and act accordingly- Specified by:
hasNulls
in interfaceColumnCapabilities
-
setHasNulls
public ColumnCapabilitiesImpl setHasNulls(boolean hasNulls)
-
setHasNulls
public ColumnCapabilitiesImpl setHasNulls(ColumnCapabilities.Capable hasNulls)
-
-