Class FallbackVirtualColumn
- java.lang.Object
-
- org.apache.druid.segment.virtual.FallbackVirtualColumn
-
- All Implemented Interfaces:
Cacheable,VirtualColumn
public class FallbackVirtualColumn extends Object implements VirtualColumn
A virtual column that picks one column or another based on whether they exist. It walks through an array of DimensionSpecs finding and using the first column that actually exists. If it believes that none of them exist it YOLOs it with the first entry from the list.If you are using this virtual column and want to have a decorator/extraction function on your DimensionSpec, it is expected that you will put it on the specs in the list rather than on the spec that references this virtual column. That is, when this virtual column resolves a dimension, it ignores the decoration from the spec that it was given and instead uses the spec as defined in the list as-is to delegate to the column that it chose.
-
-
Constructor Summary
Constructors Constructor Description FallbackVirtualColumn(String name, ArrayList<DimensionSpec> columns)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanVectorize(ColumnInspector inspector)ColumnCapabilitiescapabilities(String columnName)This method is deprecated in favor ofVirtualColumn.capabilities(ColumnInspector, String), which should be used whenever possible and can support virtual column implementations that need to inspect other columns as inputs.ColumnCapabilitiescapabilities(ColumnInspector inspector, String columnName)Return theColumnCapabilitieswhich best describe the optimal selector to read from this virtual column.byte[]getCacheKey()Get a byte array used as a cache key.ArrayList<DimensionSpec>getColumns()ColumnIndexSuppliergetIndexSupplier(String columnName, ColumnSelector columnSelector)Get theColumnIndexSupplierfor the specified virtual column, with the assistance of aColumnSelectorto allow reading things from segments.StringgetOutputName()Output name of this column.ColumnValueSelector<?>makeColumnValueSelector(String columnName, ColumnSelectorFactory factory)Build aColumnValueSelectorcorresponding to this virtual column.DimensionSelectormakeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory factory)Build a selector corresponding to this virtual column.MultiValueDimensionVectorSelectormakeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)Build aMultiValueDimensionVectorSelectorcorresponding to this virtual column.SingleValueDimensionVectorSelectormakeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)Build aSingleValueDimensionVectorSelectorcorresponding to this virtual column.VectorObjectSelectormakeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory)Build aVectorObjectSelectorcorresponding to this virtual column.VectorValueSelectormakeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory)Build aVectorValueSelectorcorresponding to this virtual column.List<String>requiredColumns()Returns a list of columns that this virtual column will access.booleanusesDotNotation()Indicates that this virtual column can be referenced with dot notation.-
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.VirtualColumn
makeColumnValueSelector, makeDimensionSelector, makeMultiValueVectorDimensionSelector, makeSingleValueVectorDimensionSelector, makeVectorObjectSelector, makeVectorValueSelector
-
-
-
-
Constructor Detail
-
FallbackVirtualColumn
public FallbackVirtualColumn(String name, ArrayList<DimensionSpec> columns)
-
-
Method Detail
-
getOutputName
public String getOutputName()
Description copied from interface:VirtualColumnOutput name of this column.- Specified by:
getOutputNamein interfaceVirtualColumn- Returns:
- name
-
getColumns
public ArrayList<DimensionSpec> getColumns()
-
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
-
makeDimensionSelector
public DimensionSelector makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory factory)
Description copied from interface:VirtualColumnBuild a selector corresponding to this virtual column. Also provides the name that the virtual column was referenced with (throughDimensionSpec.getDimension(), which is useful if this column uses dot notation. The virtual column is expected to apply any necessary decoration from the dimensionSpec.- Specified by:
makeDimensionSelectorin interfaceVirtualColumn
-
makeColumnValueSelector
public ColumnValueSelector<?> makeColumnValueSelector(String columnName, ColumnSelectorFactory factory)
Description copied from interface:VirtualColumnBuild aColumnValueSelectorcorresponding to this virtual column. Also provides the name that the virtual column was referenced with, which is useful if this column uses dot notation.- Specified by:
makeColumnValueSelectorin interfaceVirtualColumn
-
canVectorize
public boolean canVectorize(ColumnInspector inspector)
- Specified by:
canVectorizein interfaceVirtualColumn
-
makeSingleValueVectorDimensionSelector
public SingleValueDimensionVectorSelector makeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)
Description copied from interface:VirtualColumnBuild aSingleValueDimensionVectorSelectorcorresponding to this virtual column. Also provides the name that the virtual column was referenced with (throughDimensionSpec.getDimension(), which is useful if this column uses dot notation. The virtual column is expected to apply any necessary decoration from theDimensionSpec.- Specified by:
makeSingleValueVectorDimensionSelectorin interfaceVirtualColumn
-
makeMultiValueVectorDimensionSelector
public MultiValueDimensionVectorSelector makeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory)
Description copied from interface:VirtualColumnBuild aMultiValueDimensionVectorSelectorcorresponding to this virtual column. Also provides the name that the virtual column was referenced with (throughDimensionSpec.getDimension(), which is useful if this column uses dot notation. The virtual column is expected to apply any necessary decoration from theDimensionSpec.- Specified by:
makeMultiValueVectorDimensionSelectorin interfaceVirtualColumn
-
makeVectorValueSelector
public VectorValueSelector makeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory)
Description copied from interface:VirtualColumnBuild aVectorValueSelectorcorresponding to this virtual column. Also provides the name that the virtual column was referenced with, which is useful if this column uses dot notation.- Specified by:
makeVectorValueSelectorin interfaceVirtualColumn
-
makeVectorObjectSelector
public VectorObjectSelector makeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory)
Description copied from interface:VirtualColumnBuild aVectorObjectSelectorcorresponding to this virtual column. Also provides the name that the virtual column was referenced with, which is useful if this column uses dot notation.- Specified by:
makeVectorObjectSelectorin interfaceVirtualColumn
-
capabilities
public ColumnCapabilities capabilities(String columnName)
Description copied from interface:VirtualColumnThis method is deprecated in favor ofVirtualColumn.capabilities(ColumnInspector, String), which should be used whenever possible and can support virtual column implementations that need to inspect other columns as inputs. This is a fallback implementation to return the capabilities of this virtual column, which includes a type that corresponds to the best performing base selector supertype (e. g.BaseLongColumnValueSelector) of the object, returned fromVirtualColumn.makeColumnValueSelector(String, ColumnSelectorFactory). May vary based on columnName if this column uses dot notation.- Specified by:
capabilitiesin interfaceVirtualColumn- Parameters:
columnName- the name this virtual column was referenced with- Returns:
- capabilities, must not be null
-
capabilities
@Nullable public ColumnCapabilities capabilities(ColumnInspector inspector, String columnName)
Description copied from interface:VirtualColumnReturn theColumnCapabilitieswhich best describe the optimal selector to read from this virtual column.The
ColumnInspector(most likely corresponding to an underlyingColumnSelectorFactoryof a query) allows the virtual column to consider this information if necessary to compute its output type details.Examples of this include the
ExpressionVirtualColumn, which takes input from other columns and uses theColumnInspectorto infer the output type of expressions based on the types of the inputs.- Specified by:
capabilitiesin interfaceVirtualColumn- Parameters:
inspector- column inspector to provide additional information of other available columnscolumnName- the name this virtual column was referenced with- Returns:
- capabilities, must not be null
-
requiredColumns
public List<String> requiredColumns()
Description copied from interface:VirtualColumnReturns a list of columns that this virtual column will access. This may include the names of other virtual columns. May be empty if a virtual column doesn't access any underlying columns. Does not pass columnName because there is an assumption that the list of columns needed by a dot-notation supporting virtual column will not vary based on the columnName.- Specified by:
requiredColumnsin interfaceVirtualColumn- Returns:
- column names
-
usesDotNotation
public boolean usesDotNotation()
Description copied from interface:VirtualColumnIndicates that this virtual column can be referenced with dot notation. For example, a virtual column named "foo" could be referred to as "foo.bar" with the Cursor it is registered with. In that case, init will be called with columnName "foo.bar" rather than "foo".- Specified by:
usesDotNotationin interfaceVirtualColumn- Returns:
- whether to use dot notation
-
getIndexSupplier
@Nullable public ColumnIndexSupplier getIndexSupplier(String columnName, ColumnSelector columnSelector)
Description copied from interface:VirtualColumnGet theColumnIndexSupplierfor the specified virtual column, with the assistance of aColumnSelectorto allow reading things from segments. If the virtual column has no indexes, this method will 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.- Specified by:
getIndexSupplierin interfaceVirtualColumn
-
-