Package org.apache.druid.segment
Class VirtualColumns
- java.lang.Object
-
- org.apache.druid.segment.VirtualColumns
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classVirtualColumns.JsonIncludeFilterJsonIncludefilter forgetVirtualColumns().
-
Field Summary
Fields Modifier and Type Field Description static VirtualColumnsEMPTY
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanVectorize(ColumnInspector columnInspector)static VirtualColumnscreate(List<VirtualColumn> virtualColumns)static VirtualColumnscreate(VirtualColumn... virtualColumns)booleanequals(Object o)booleanexists(String columnName)Returns true if a virtual column exists with a particular columnName.byte[]getCacheKey()Get a byte array used as a cache key.ColumnCapabilitiesgetColumnCapabilitiesWithFallback(ColumnInspector inspector, String columnName)Get capabilities for the column "columnName".List<String>getColumnNames()ColumnIndexSuppliergetIndexSupplier(String columnName, ColumnIndexSelector columnIndexSelector)Get theColumnIndexSupplierof the specified virtual column, with the assistance of aColumnSelectorto allow reading things from segments.VirtualColumngetVirtualColumn(String columnName)VirtualColumn[]getVirtualColumns()inthashCode()booleanisEmpty()ColumnValueSelector<?>makeColumnValueSelector(String columnName, ColumnSelectorFactory factory)Create a column value selector.ColumnValueSelector<?>makeColumnValueSelector(String columnName, ColumnSelector columnSelector, ReadableOffset offset)Try to create an optimized value selector directly from aColumnSelector.DimensionSelectormakeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory factory)Create a dimension (string) selector.DimensionSelectormakeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableOffset offset)Try to create an optimized dimension (string) selector directly from aColumnSelector.MultiValueDimensionVectorSelectormakeMultiValueDimensionVectorSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset)Try to create an optimized multi value dimension (string) vector selector, directly from aColumnSelector.MultiValueDimensionVectorSelectormakeMultiValueDimensionVectorSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)Create a multi value dimension vector (string) selector.SingleValueDimensionVectorSelectormakeSingleValueDimensionVectorSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset)Try to create an optimized single value dimension (string) vector selector, directly from aColumnSelector.SingleValueDimensionVectorSelectormakeSingleValueDimensionVectorSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)Create a single value dimension vector (string) selector.VectorObjectSelectormakeVectorObjectSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset)Try to create an optimized vector object selector directly from aColumnSelector.If this method returns null, callers should try to fallback tomakeVectorObjectSelector(String, VectorColumnSelectorFactory)instead.VectorObjectSelectormakeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory)Create a column vector object selector.VectorValueSelectormakeVectorValueSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset)Try to create an optimized vector value selector directly from aColumnSelector.VectorValueSelectormakeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory)Create a column vector value selector.static VirtualColumnsnullToEmpty(VirtualColumns virtualColumns)static booleanshouldVectorize(Query<?> query, VirtualColumns virtualColumns, ColumnInspector inspector)static Pair<String,String>splitColumnName(String columnName)Split a dot-style columnName into the "main" columnName and the subColumn name after the dot.StringtoString()ColumnSelectorFactorywrap(ColumnSelectorFactory baseFactory)Creates aVirtualizedColumnSelectorFactorywhich can create column selectors forvirtualColumnsin addition to selectors for all physical columns in the underlying factory.ColumnInspectorwrapInspector(ColumnInspector inspector)Creates aVirtualizedColumnInspectorthat providesColumnCapabilitiesinformation for allvirtualColumnsin addition to the capabilities of all physical columns in the underlying inspector.
-
-
-
Field Detail
-
EMPTY
public static final VirtualColumns EMPTY
-
-
Method Detail
-
splitColumnName
public static Pair<String,String> splitColumnName(String columnName)
Split a dot-style columnName into the "main" columnName and the subColumn name after the dot. Useful for columns that support dot notation.- Parameters:
columnName- columnName like "foo" or "foo.bar"- Returns:
- pair of main column name (will not be null) and subColumn name (may be null)
-
create
public static VirtualColumns create(List<VirtualColumn> virtualColumns)
-
create
public static VirtualColumns create(VirtualColumn... virtualColumns)
-
nullToEmpty
public static VirtualColumns nullToEmpty(@Nullable VirtualColumns virtualColumns)
-
shouldVectorize
public static boolean shouldVectorize(Query<?> query, VirtualColumns virtualColumns, ColumnInspector inspector)
-
exists
public boolean exists(String columnName)
Returns true if a virtual column exists with a particular columnName.- Parameters:
columnName- the column name- Returns:
- true or false
-
getVirtualColumn
@Nullable public VirtualColumn getVirtualColumn(String columnName)
-
getIndexSupplier
@Nullable public ColumnIndexSupplier getIndexSupplier(String columnName, ColumnIndexSelector columnIndexSelector)
Get theColumnIndexSupplierof the specified virtual column, with the assistance of aColumnSelectorto allow reading things from segments. If the column does not have indexes this method may return null, or may also return a non-null supplier whose methods may return null values - having a supplier is no guarantee that the column has indexes.
-
makeDimensionSelector
public DimensionSelector makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory factory)
Create a dimension (string) selector.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeDimensionSelector
@Nullable public DimensionSelector makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableOffset offset)
Try to create an optimized dimension (string) selector directly from aColumnSelector. If this method returns null, callers should try to fallback tomakeDimensionSelector(DimensionSpec, ColumnSelectorFactory)instead.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeColumnValueSelector
public ColumnValueSelector<?> makeColumnValueSelector(String columnName, ColumnSelectorFactory factory)
Create a column value selector.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeColumnValueSelector
@Nullable public ColumnValueSelector<?> makeColumnValueSelector(String columnName, ColumnSelector columnSelector, ReadableOffset offset)
Try to create an optimized value selector directly from aColumnSelector. If this method returns null, callers should try to fallback tomakeColumnValueSelector(String, ColumnSelectorFactory)instead.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
canVectorize
public boolean canVectorize(ColumnInspector columnInspector)
-
makeSingleValueDimensionVectorSelector
public SingleValueDimensionVectorSelector makeSingleValueDimensionVectorSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)
Create a single value dimension vector (string) selector.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeSingleValueDimensionVectorSelector
@Nullable public SingleValueDimensionVectorSelector makeSingleValueDimensionVectorSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset)
Try to create an optimized single value dimension (string) vector selector, directly from aColumnSelector. If this method returns null, callers should try to fallback tomakeSingleValueDimensionVectorSelector(DimensionSpec, VectorColumnSelectorFactory)instead.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeMultiValueDimensionVectorSelector
public MultiValueDimensionVectorSelector makeMultiValueDimensionVectorSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)
Create a multi value dimension vector (string) selector.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeMultiValueDimensionVectorSelector
@Nullable public MultiValueDimensionVectorSelector makeMultiValueDimensionVectorSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset)
Try to create an optimized multi value dimension (string) vector selector, directly from aColumnSelector. If this method returns null, callers should try to fallback tomakeMultiValueDimensionVectorSelector(DimensionSpec, VectorColumnSelectorFactory)instead.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeVectorValueSelector
public VectorValueSelector makeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory)
Create a column vector value selector.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeVectorValueSelector
@Nullable public VectorValueSelector makeVectorValueSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset)
Try to create an optimized vector value selector directly from aColumnSelector. If this method returns null, callers should try to fallback tomakeVectorValueSelector(String, VectorColumnSelectorFactory)instead.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeVectorObjectSelector
public VectorObjectSelector makeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory)
Create a column vector object selector.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
makeVectorObjectSelector
@Nullable public VectorObjectSelector makeVectorObjectSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset)
Try to create an optimized vector object selector directly from aColumnSelector.If this method returns null, callers should try to fallback tomakeVectorObjectSelector(String, VectorColumnSelectorFactory)instead.- Throws:
IllegalArgumentException- if the virtual column does not exist (seeexists(String)
-
getColumnCapabilitiesWithFallback
@Nullable public ColumnCapabilities getColumnCapabilitiesWithFallback(ColumnInspector inspector, String columnName)
Get capabilities for the column "columnName". If columnName is not a virtual column, delegates to the providedColumnInspector.
-
getVirtualColumns
public VirtualColumn[] getVirtualColumns()
-
wrap
public ColumnSelectorFactory wrap(ColumnSelectorFactory baseFactory)
Creates aVirtualizedColumnSelectorFactorywhich can create column selectors forvirtualColumnsin addition to selectors for all physical columns in the underlying factory.
-
wrapInspector
public ColumnInspector wrapInspector(ColumnInspector inspector)
Creates aVirtualizedColumnInspectorthat providesColumnCapabilitiesinformation for allvirtualColumnsin addition to the capabilities of all physical columns in the underlying inspector.
-
getCacheKey
public byte[] getCacheKey()
Description copied from interface:CacheableGet a byte array used as a cache key.- Specified by:
getCacheKeyin interfaceCacheable- Returns:
- a cache key
-
isEmpty
public boolean isEmpty()
-
-