public class GroupByVectorColumnProcessorFactory extends Object implements VectorColumnProcessorFactory<GroupByVectorColumnSelector>
public static GroupByVectorColumnProcessorFactory instance()
public GroupByVectorColumnSelector makeSingleValueDimensionProcessor(ColumnCapabilities capabilities, SingleValueDimensionVectorSelector selector)
VectorColumnProcessorFactoryColumnCapabilities.getType() is STRING and the underlying column always has a single value
per row.
Note that for STRING-typed columns where the dictionary does not exist or is not expected to be useful,
VectorColumnProcessorFactory.makeObjectProcessor(org.apache.druid.segment.column.ColumnCapabilities, org.apache.druid.segment.vector.VectorObjectSelector) may be called instead. To handle all string inputs properly, processors must implement
all three methods (single-value, multi-value, object).makeSingleValueDimensionProcessor in interface VectorColumnProcessorFactory<GroupByVectorColumnSelector>public GroupByVectorColumnSelector makeMultiValueDimensionProcessor(ColumnCapabilities capabilities, MultiValueDimensionVectorSelector selector)
VectorColumnProcessorFactoryColumnCapabilities.getType() is STRING and the underlying column may have multiple values
per row.
Note that for STRING-typed columns where the dictionary does not exist or is not expected to be useful,
VectorColumnProcessorFactory.makeObjectProcessor(org.apache.druid.segment.column.ColumnCapabilities, org.apache.druid.segment.vector.VectorObjectSelector) may be called instead. To handle all string inputs properly, processors must implement
all three methods (single-value, multi-value, object).makeMultiValueDimensionProcessor in interface VectorColumnProcessorFactory<GroupByVectorColumnSelector>public GroupByVectorColumnSelector makeFloatProcessor(ColumnCapabilities capabilities, VectorValueSelector selector)
VectorColumnProcessorFactoryColumnCapabilities.getType() is FLOAT.makeFloatProcessor in interface VectorColumnProcessorFactory<GroupByVectorColumnSelector>public GroupByVectorColumnSelector makeDoubleProcessor(ColumnCapabilities capabilities, VectorValueSelector selector)
VectorColumnProcessorFactoryColumnCapabilities.getType() is DOUBLE.makeDoubleProcessor in interface VectorColumnProcessorFactory<GroupByVectorColumnSelector>public GroupByVectorColumnSelector makeLongProcessor(ColumnCapabilities capabilities, VectorValueSelector selector)
VectorColumnProcessorFactoryColumnCapabilities.getType() is LONG.makeLongProcessor in interface VectorColumnProcessorFactory<GroupByVectorColumnSelector>public GroupByVectorColumnSelector makeObjectProcessor(ColumnCapabilities capabilities, VectorObjectSelector selector)
VectorColumnProcessorFactoryColumnCapabilities.getType() is COMPLEX. May also be called for STRING typed columns in
cases where the dictionary does not exist or is not expected to be useful.makeObjectProcessor in interface VectorColumnProcessorFactory<GroupByVectorColumnSelector>public boolean useDictionaryEncodedSelector(ColumnCapabilities capabilities)
VectorColumnProcessorFactory implementations.
Basically, if a valid dictionary exists, we will use it to group on dictionary ids (so that we can use
SingleValueStringGroupByVectorColumnSelector whenever possible instead of
DictionaryBuildingSingleValueStringGroupByVectorColumnSelector).
We do this even for things like virtual columns that have a single string input, because it allows deferring
accessing any of the actual string values, which involves at minimum reading utf8 byte values and converting
them to string form (if not already cached), and in the case of expressions, computing the expression output for
the string input.useDictionaryEncodedSelector in interface VectorColumnProcessorFactory<GroupByVectorColumnSelector>Copyright © 2011–2022 The Apache Software Foundation. All rights reserved.