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 class
VirtualColumns.JsonIncludeFilter
JsonInclude
filter forgetVirtualColumns()
.
-
Field Summary
Fields Modifier and Type Field Description static VirtualColumns
EMPTY
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
canVectorize(ColumnInspector columnInspector)
static VirtualColumns
create(List<VirtualColumn> virtualColumns)
static VirtualColumns
create(VirtualColumn... virtualColumns)
boolean
equals(Object o)
boolean
exists(String columnName)
Returns true if a virtual column exists with a particular columnName.byte[]
getCacheKey()
Get a byte array used as a cache key.ColumnCapabilities
getColumnCapabilities(ColumnInspector inspector, String columnName)
ColumnCapabilities
getColumnCapabilitiesWithFallback(ColumnInspector inspector, String columnName)
List<String>
getColumnNames()
ColumnIndexSupplier
getIndexSupplier(String columnName, ColumnSelector columnSelector)
Get theColumnIndexSupplier
of the specified virtual column, with the assistance of aColumnSelector
to allow reading things from segments.VirtualColumn
getVirtualColumn(String columnName)
VirtualColumn[]
getVirtualColumns()
int
hashCode()
boolean
isEmpty()
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
.DimensionSelector
makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory factory)
Create a dimension (string) selector.DimensionSelector
makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableOffset offset)
Try to create an optimized dimension (string) selector directly from aColumnSelector
.MultiValueDimensionVectorSelector
makeMultiValueDimensionVectorSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset)
Try to create an optimized multi value dimension (string) vector selector, directly from aColumnSelector
.MultiValueDimensionVectorSelector
makeMultiValueDimensionVectorSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)
Create a multi value dimension vector (string) selector.SingleValueDimensionVectorSelector
makeSingleValueDimensionVectorSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset)
Try to create an optimized single value dimension (string) vector selector, directly from aColumnSelector
.SingleValueDimensionVectorSelector
makeSingleValueDimensionVectorSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)
Create a single value dimension vector (string) selector.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.VectorObjectSelector
makeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory)
Create a column vector object selector.VectorValueSelector
makeVectorValueSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset)
Try to create an optimized vector value selector directly from aColumnSelector
.VectorValueSelector
makeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory)
Create a column vector value selector.static VirtualColumns
nullToEmpty(VirtualColumns virtualColumns)
static boolean
shouldVectorize(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.String
toString()
ColumnSelectorFactory
wrap(ColumnSelectorFactory baseFactory)
Creates aVirtualizedColumnSelectorFactory
which can create column selectors forvirtualColumns
in addition to selectors for all physical columns in the underlying factory.ColumnInspector
wrapInspector(ColumnInspector inspector)
Creates aVirtualizedColumnInspector
that providesColumnCapabilities
information for allvirtualColumns
in 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, ColumnSelector columnSelector)
Get theColumnIndexSupplier
of the specified virtual column, with the assistance of aColumnSelector
to 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)
-
getColumnCapabilities
@Nullable public ColumnCapabilities getColumnCapabilities(ColumnInspector inspector, String columnName)
-
getColumnCapabilitiesWithFallback
@Nullable public ColumnCapabilities getColumnCapabilitiesWithFallback(ColumnInspector inspector, String columnName)
-
getVirtualColumns
public VirtualColumn[] getVirtualColumns()
-
wrap
public ColumnSelectorFactory wrap(ColumnSelectorFactory baseFactory)
Creates aVirtualizedColumnSelectorFactory
which can create column selectors forvirtualColumns
in addition to selectors for all physical columns in the underlying factory.
-
wrapInspector
public ColumnInspector wrapInspector(ColumnInspector inspector)
Creates aVirtualizedColumnInspector
that providesColumnCapabilities
information for allvirtualColumns
in addition to the capabilities of all physical columns in the underlying inspector.
-
getCacheKey
public byte[] getCacheKey()
Description copied from interface:Cacheable
Get a byte array used as a cache key.- Specified by:
getCacheKey
in interfaceCacheable
- Returns:
- a cache key
-
isEmpty
public boolean isEmpty()
-
-