Class NullableNumericAggregatorFactory<T extends BaseNullableColumnValueSelector>
- java.lang.Object
-
- org.apache.druid.query.aggregation.AggregatorFactory
-
- org.apache.druid.query.aggregation.NullableNumericAggregatorFactory<T>
-
- All Implemented Interfaces:
Cacheable
- Direct Known Subclasses:
SimpleDoubleAggregatorFactory,SimpleFloatAggregatorFactory,SimpleLongAggregatorFactory
public abstract class NullableNumericAggregatorFactory<T extends BaseNullableColumnValueSelector> extends AggregatorFactory
Abstract superclass for null-aware numeric aggregators. Includes functionality to wrapAggregator,BufferAggregator,VectorAggregator, andAggregateCombinerto support nullable aggregations. The result of this aggregator will be null if all the values to be aggregated are null values, or if no values are aggregated at all. If any of the values are non-null, the result will be the aggregated value of the non-null values. Aggregators that useBaseObjectColumnValueSelector.getObject()must overrideuseGetObject(ColumnSelectorFactory). Otherwise, the logic in this class is not correct for non-numeric selectors.
-
-
Constructor Summary
Constructors Constructor Description NullableNumericAggregatorFactory()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description Aggregatorfactorize(ColumnSelectorFactory columnSelectorFactory)protected abstract Aggregatorfactorize(ColumnSelectorFactory columnSelectorFactory, T selector)Creates anAggregatorto aggregate values from several rows, by using the provided selector.BufferAggregatorfactorizeBuffered(ColumnSelectorFactory columnSelectorFactory)protected abstract BufferAggregatorfactorizeBuffered(ColumnSelectorFactory columnSelectorFactory, T selector)Creates anBufferAggregatorto aggregate values from several rows into a ByteBuffer.VectorAggregatorfactorizeVector(VectorColumnSelectorFactory columnSelectorFactory)Create a VectorAggregator based on the provided column selector factory.protected VectorAggregatorfactorizeVector(VectorColumnSelectorFactory columnSelectorFactory, VectorValueSelector selector)Creates aVectorAggregatorto aggregate values from several rows into a ByteBuffer.intgetMaxIntermediateSizeWithNulls()Returns the maximum size that this aggregator will require in bytes for intermediate storage of results.ColumnTypegetResultType()Get theColumnTypefor the final form of this aggregator, i.e.AggregateCombinermakeNullableAggregateCombiner()Creates anAggregateCombinerwhich supports nullability.protected abstract Tselector(ColumnSelectorFactory columnSelectorFactory)Creates aColumnValueSelectorfor the aggregated column.protected booleanuseGetObject(ColumnSelectorFactory columnSelectorFactory)Returns whether the selector created byselector(ColumnSelectorFactory)for the givenColumnSelectorFactoryprefersBaseObjectColumnValueSelector.getObject().protected VectorValueSelectorvectorSelector(VectorColumnSelectorFactory columnSelectorFactory)Creates aVectorValueSelectorfor the aggregated column.-
Methods inherited from class org.apache.druid.query.aggregation.AggregatorFactory
canVectorize, combine, deserialize, factorizeWithSize, finalizeComputation, getCombiningFactory, getComparator, getComplexTypeName, getFinalizedType, getIntermediateType, getMaxIntermediateSize, getMergingFactory, getName, getRequiredColumns, getType, guessAggregatorHeapFootprint, makeAggregateCombiner, mergeAggregators, optimizeForSegment, requiredFields, substituteCombiningFactory, withName
-
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.java.util.common.Cacheable
getCacheKey
-
-
-
-
Method Detail
-
factorize
public final Aggregator factorize(ColumnSelectorFactory columnSelectorFactory)
- Specified by:
factorizein classAggregatorFactory
-
factorizeBuffered
public final BufferAggregator factorizeBuffered(ColumnSelectorFactory columnSelectorFactory)
- Specified by:
factorizeBufferedin classAggregatorFactory
-
factorizeVector
public final VectorAggregator factorizeVector(VectorColumnSelectorFactory columnSelectorFactory)
Description copied from class:AggregatorFactoryCreate a VectorAggregator based on the provided column selector factory. Will throw an exception if this aggregation class does not support vectorization: check "canVectorize" first.- Overrides:
factorizeVectorin classAggregatorFactory
-
makeNullableAggregateCombiner
public final AggregateCombiner makeNullableAggregateCombiner()
Description copied from class:AggregatorFactoryCreates anAggregateCombinerwhich supports nullability. Implementations ofAggregatorFactorywhich need to Support Nullable Aggregations are encouraged to extendNullableNumericAggregatorFactoryinstead of overriding this method. Default implementation callsAggregatorFactory.makeAggregateCombiner()for backwards compatibility.- Overrides:
makeNullableAggregateCombinerin classAggregatorFactory- See Also:
AggregateCombiner,NullableNumericAggregatorFactory
-
getMaxIntermediateSizeWithNulls
public final int getMaxIntermediateSizeWithNulls()
Description copied from class:AggregatorFactoryReturns the maximum size that this aggregator will require in bytes for intermediate storage of results. Implementations ofAggregatorFactorywhich need to Support Nullable Aggregations are encouraged to extendNullableNumericAggregatorFactoryinstead of overriding this method. Default implementation callsAggregatorFactory.makeAggregateCombiner()for backwards compatibility.- Overrides:
getMaxIntermediateSizeWithNullsin classAggregatorFactory- Returns:
- the maximum number of bytes that an aggregator of this type will require for intermediate result storage.
-
selector
protected abstract T selector(ColumnSelectorFactory columnSelectorFactory)
Creates aColumnValueSelectorfor the aggregated column.- See Also:
ColumnValueSelector
-
useGetObject
protected boolean useGetObject(ColumnSelectorFactory columnSelectorFactory)
Returns whether the selector created byselector(ColumnSelectorFactory)for the givenColumnSelectorFactoryprefersBaseObjectColumnValueSelector.getObject(). For backwards compatibilty with older extensions, this is a non-abstract method.
-
vectorSelector
protected VectorValueSelector vectorSelector(VectorColumnSelectorFactory columnSelectorFactory)
Creates aVectorValueSelectorfor the aggregated column.- See Also:
VectorValueSelector
-
factorize
protected abstract Aggregator factorize(ColumnSelectorFactory columnSelectorFactory, T selector)
Creates anAggregatorto aggregate values from several rows, by using the provided selector.- Parameters:
columnSelectorFactory- metricFactoryselector-ColumnValueSelectorfor the column to aggregate.- See Also:
Aggregator
-
factorizeBuffered
protected abstract BufferAggregator factorizeBuffered(ColumnSelectorFactory columnSelectorFactory, T selector)
Creates anBufferAggregatorto aggregate values from several rows into a ByteBuffer.- Parameters:
columnSelectorFactory- columnSelectorFactory in case any other columns are needed.selector-ColumnValueSelectorfor the column to aggregate.- See Also:
BufferAggregator
-
factorizeVector
protected VectorAggregator factorizeVector(VectorColumnSelectorFactory columnSelectorFactory, VectorValueSelector selector)
Creates aVectorAggregatorto aggregate values from several rows into a ByteBuffer.- Parameters:
columnSelectorFactory- columnSelectorFactory in case any other columns are needed.selector-VectorValueSelectorfor the column to aggregate.- See Also:
BufferAggregator
-
getResultType
public ColumnType getResultType()
Description copied from class:AggregatorFactoryGet theColumnTypefor the final form of this aggregator, i.e. the type of the value returned byAggregatorFactory.finalizeComputation(java.lang.Object). This may be the same as or different than the types expected inAggregatorFactory.deserialize(java.lang.Object)andAggregatorFactory.combine(java.lang.Object, java.lang.Object). Refer to theColumnTypejavadocs for details on the implications of choosing a type.- Overrides:
getResultTypein classAggregatorFactory
-
-