Package org.apache.druid.segment
Interface VirtualColumn
- All Superinterfaces:
Cacheable
- All Known Implementing Classes:
ExpressionVirtualColumn,FallbackVirtualColumn,ListFilteredVirtualColumn,NestedFieldVirtualColumn,NestedMergeVirtualColumn,NestedObjectVirtualColumn,PrefixFilteredVirtualColumn,RegexFilteredVirtualColumn,SettableLongVirtualColumn,SpecializedExpressionVirtualColumn
Virtual columns are "views" created over a
ColumnSelectorFactory or ColumnSelector. They can
potentially draw from multiple underlying columns, although they always present themselves as if they were a single
column.
A virtual column object will be shared amongst threads and must be thread safe. The selectors returned
from the various makeXXXSelector methods need not be thread safe.-
Nested Class Summary
Nested Classes -
Method Summary
Modifier and TypeMethodDescriptiondefault booleancanVectorize(ColumnInspector inspector) capabilities(String columnName) Deprecated.default ColumnCapabilitiescapabilities(ColumnInspector inspector, String columnName) Return theColumnCapabilitieswhich best describe the optimal selector to read from this virtual column.default VirtualColumn.EquivalenceKeyReturns a key used for "equivalence" comparisons, for checking if some virtual column is equivalent to some other virtual column, regardless of the output name.default ColumnIndexSuppliergetIndexSupplier(String columnName, ColumnIndexSelector columnIndexSelector) Get theColumnIndexSupplierof the specified virtual column, with the assistance of aColumnSelectorto allow reading things from segments.Output name of this column.default ColumnValueSelector<?>makeColumnValueSelector(String columnName, ColumnSelectorFactory factory) Deprecated.default ColumnValueSelector<?>makeColumnValueSelector(String columnName, ColumnSelectorFactory columnSelectorFactory, ColumnSelector columnSelector, ReadableOffset offset) Builds a selector corresponding to this virtual column.default ColumnValueSelector<?>makeColumnValueSelector(String columnName, ColumnSelector columnSelector, ReadableOffset offset) default DimensionSelectormakeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory factory) default DimensionSelectormakeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory columnSelectorFactory, ColumnSelector columnSelector, ReadableOffset offset) Build a selector corresponding to this virtual column.default DimensionSelectormakeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableOffset offset) default GroupByVectorColumnSelectormakeGroupByVectorColumnSelector(String columnName, VectorColumnSelectorFactory factory, DeferExpressionDimensions deferExpressionDimensions) Returns a group-by selector.makeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset) makeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory) makeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column.makeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset) makeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory) makeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column.default VectorObjectSelectormakeVectorObjectSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset) default VectorObjectSelectormakeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory) default VectorObjectSelectormakeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column.default VectorValueSelectormakeVectorValueSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset) default VectorValueSelectormakeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory) default VectorValueSelectormakeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column.Returns a list of columns that this virtual column will access.default VirtualColumnrewriteRequiredColumns(Map<String, String> columnRewrites) Return a copy of this virtual column that is identical to this virtual column except that it operates on different columns, based on a renaming map where the key is the column to be renamed and the value is the new column.default booleanReturns true if the virtual column supportsrewriteRequiredColumns(Map)default SelectableColumntoSelectableColumn(ColumnIndexSelector columnSelector) Produces aSelectableColumnfrom this virtual column.default booleanIndicates that this virtual column can be referenced with dot notation.Methods inherited from interface org.apache.druid.java.util.common.Cacheable
getCacheKey
-
Method Details
-
getOutputName
String getOutputName()Output name of this column.- Returns:
- name
-
makeDimensionSelector
default DimensionSelector makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory columnSelectorFactory, @Nullable ColumnSelector columnSelector, @Nullable ReadableOffset offset) Build a selector corresponding to this virtual column. The virtual column is expected to apply any necessaryDimensionSpec.decorate(DimensionSelector)orDimensionSpec.getExtractionFn()from the dimensionSpec.- Parameters:
dimensionSpec- spec the column was referenced with. Also provides the name that the virtual column was referenced with, which is useful if this column uses dot notation.columnSelectorFactory- object for fetching underlying selectors.columnSelector- object for fetching underlying columns, if available. Generally only available for regular segments.offset- offset to use with underlying columns. Available only if columnSelector is available.
-
makeDimensionSelector
@Deprecated default DimensionSelector makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelectorFactory factory) -
makeDimensionSelector
@Deprecated @Nullable default DimensionSelector makeDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableOffset offset) -
makeColumnValueSelector
default ColumnValueSelector<?> makeColumnValueSelector(String columnName, ColumnSelectorFactory columnSelectorFactory, @Nullable ColumnSelector columnSelector, @Nullable ReadableOffset offset) Builds a selector corresponding to this virtual column.- Parameters:
columnName- name the column was referenced with, which is useful if this column uses dot notation.columnSelectorFactory- object for fetching underlying selectors.columnSelector- object for fetching underlying columns, if available. Generally only available for regular segments.offset- offset to use with underlying columns. Available only if columnSelector is available.
-
makeColumnValueSelector
@Deprecated default ColumnValueSelector<?> makeColumnValueSelector(String columnName, ColumnSelectorFactory factory) -
makeColumnValueSelector
@Deprecated @Nullable default ColumnValueSelector<?> makeColumnValueSelector(String columnName, ColumnSelector columnSelector, ReadableOffset offset) -
canVectorize
-
makeSingleValueVectorDimensionSelector
default SingleValueDimensionVectorSelector makeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column. The virtual column is expected to apply any necessaryDimensionSpec.decorate(DimensionSelector)orDimensionSpec.getExtractionFn()from the dimensionSpec.- Parameters:
dimensionSpec- spec the column was referenced with. Also provides the name that the virtual column was referenced with, which is useful if this column uses dot notation.factory- object for fetching underlying selectors.columnSelector- object for fetching underlying columns.offset- offset to use with underlying columns.
-
makeSingleValueVectorDimensionSelector
@Deprecated default SingleValueDimensionVectorSelector makeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory) -
makeSingleValueVectorDimensionSelector
@Deprecated @Nullable default SingleValueDimensionVectorSelector makeSingleValueVectorDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset) -
makeMultiValueVectorDimensionSelector
default MultiValueDimensionVectorSelector makeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column. The virtual column is expected to apply any necessaryDimensionSpec.decorate(DimensionSelector)orDimensionSpec.getExtractionFn()from the dimensionSpec.- Parameters:
dimensionSpec- spec the column was referenced with. Also provides the name that the virtual column was referenced with, which is useful if this column uses dot notation.factory- object for fetching underlying selectors.columnSelector- object for fetching underlying columns, if available. Generally only available for regular segments.offset- offset to use with underlying columns. Available only if columnSelector is available.
-
makeMultiValueVectorDimensionSelector
@Deprecated default MultiValueDimensionVectorSelector makeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, VectorColumnSelectorFactory factory) -
makeMultiValueVectorDimensionSelector
@Nullable @Deprecated default MultiValueDimensionVectorSelector makeMultiValueVectorDimensionSelector(DimensionSpec dimensionSpec, ColumnSelector columnSelector, ReadableVectorOffset offset) -
makeVectorValueSelector
default VectorValueSelector makeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column. The virtual column is expected to apply any necessaryDimensionSpec.decorate(DimensionSelector)orDimensionSpec.getExtractionFn()from the dimensionSpec.- Parameters:
columnName- name the column was referenced with, which is useful if this column uses dot notation.factory- object for fetching underlying selectors.columnSelector- object for fetching underlying columns.offset- offset to use with underlying columns.
-
makeVectorValueSelector
@Deprecated default VectorValueSelector makeVectorValueSelector(String columnName, VectorColumnSelectorFactory factory) -
makeVectorValueSelector
@Nullable @Deprecated default VectorValueSelector makeVectorValueSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset) -
makeVectorObjectSelector
default VectorObjectSelector makeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory, ColumnSelector columnSelector, ReadableVectorOffset offset) Build a selector corresponding to this virtual column. The virtual column is expected to apply any necessaryDimensionSpec.decorate(DimensionSelector)orDimensionSpec.getExtractionFn()from the dimensionSpec.- Parameters:
columnName- name the column was referenced with, which is useful if this column uses dot notation.factory- object for fetching underlying selectors.columnSelector- object for fetching underlying columns, if available. Generally only available for regular segments.offset- offset to use with underlying columns. Available only if columnSelector is available.
-
makeVectorObjectSelector
@Deprecated default VectorObjectSelector makeVectorObjectSelector(String columnName, VectorColumnSelectorFactory factory) -
makeVectorObjectSelector
@Nullable @Deprecated default VectorObjectSelector makeVectorObjectSelector(String columnName, ColumnSelector columnSelector, ReadableVectorOffset offset) -
makeGroupByVectorColumnSelector
@Nullable default GroupByVectorColumnSelector makeGroupByVectorColumnSelector(String columnName, VectorColumnSelectorFactory factory, DeferExpressionDimensions deferExpressionDimensions) Returns a group-by selector. Allows virtual columns to control their own grouping behavior.- Parameters:
columnName- column namefactory- column selector factorydeferExpressionDimensions- active value ofGroupByQueryConfig.CTX_KEY_DEFER_EXPRESSION_DIMENSIONS- Returns:
- selector, or null if this virtual column does not have a specialized one
-
capabilities
Deprecated.This method is deprecated in favor ofcapabilities(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 frommakeColumnValueSelector(String, ColumnSelectorFactory). May vary based on columnName if this column uses dot notation.- Parameters:
columnName- the name this virtual column was referenced with- Returns:
- capabilities, must not be null
-
capabilities
Return 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.- Parameters:
inspector- column inspector to provide additional information of other available columnscolumnName- the name this virtual column was referenced with- Returns:
- capabilities, or null if the column should be treated as if it doesn't exist.
-
requiredColumns
Returns 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.- Returns:
- column names
-
supportsRequiredRewrite
default boolean supportsRequiredRewrite()Returns true if the virtual column supportsrewriteRequiredColumns(Map) -
rewriteRequiredColumns
Return a copy of this virtual column that is identical to this virtual column except that it operates on different columns, based on a renaming map where the key is the column to be renamed and the value is the new column. Callers should checksupportsRequiredRewrite()first to ensure that this method is supported.- Parameters:
columnRewrites- Column rewrite map- Returns:
- Copy of this virtual column that operates on new columns based on the rewrite map
-
usesDotNotation
default boolean usesDotNotation()Indicates 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".- Returns:
- whether to use dot notation
-
toSelectableColumn
Produces aSelectableColumnfrom this virtual column. This allows the virtual column to offer specialized interfaces, such asNestedColumnTypeInspectororNestedColumnSelectorFactory. These interfaces may be used by query objects, including other virtual columns, to perform queries in a more efficient manner.- Parameters:
columnSelector- selector for underlying columns and indexes. Cannot be used during execution of this method, but can be stored for later usage.
-
getIndexSupplier
@Nullable default ColumnIndexSupplier getIndexSupplier(String columnName, ColumnIndexSelector columnIndexSelector) Get theColumnIndexSupplierof the specified virtual column, with the assistance of aColumnSelectorto allow reading things from segments. Returns null if the virtual column wants to act like a missing column. ReturnsNoIndexesColumnIndexSupplier.getInstance()if the virtual column does not support indexes and wants cursor-based filtering. -
getEquivalanceKey
Returns a key used for "equivalence" comparisons, for checking if some virtual column is equivalent to some other virtual column, regardless of the output name. If this method returns null, it does not participate in equivalence comparisons.
-
makeColumnValueSelector(String, ColumnSelectorFactory, ColumnSelector, ReadableOffset)