Class HistogramAggregatorFactory
- java.lang.Object
-
- org.apache.druid.query.aggregation.AggregatorFactory
-
- org.apache.druid.query.aggregation.HistogramAggregatorFactory
-
- All Implemented Interfaces:
Cacheable
public class HistogramAggregatorFactory extends AggregatorFactory
-
-
Field Summary
Fields Modifier and Type Field Description static ColumnType
TYPE
static ColumnType
TYPE_VISUAL
-
Constructor Summary
Constructors Constructor Description HistogramAggregatorFactory(String name, String fieldName, List<Float> breaksList)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Object
combine(Object lhs, Object rhs)
A method that knows how to combine the outputs ofAggregator.get()
produced viaAggregatorFactory.factorize(org.apache.druid.segment.ColumnSelectorFactory)
orBufferAggregator.get(java.nio.ByteBuffer, int)
produced viaAggregatorFactory.factorizeBuffered(org.apache.druid.segment.ColumnSelectorFactory)
.Object
deserialize(Object object)
A method that knows how to "deserialize" the object from whatever form it might have been put into in order to transfer via JSON.boolean
equals(Object o)
Aggregator
factorize(ColumnSelectorFactory metricFactory)
BufferAggregator
factorizeBuffered(ColumnSelectorFactory metricFactory)
Object
finalizeComputation(Object object)
"Finalizes" the computation of an object.List<Float>
getBreaks()
byte[]
getCacheKey()
Get a byte array used as a cache key.AggregatorFactory
getCombiningFactory()
Returns an AggregatorFactory that can be used to combine the output of aggregators from this factory.Comparator
getComparator()
String
getFieldName()
ColumnType
getIntermediateType()
actual type isHistogram
int
getMaxIntermediateSize()
Returns the maximum size that this aggregator will require in bytes for intermediate storage of results.String
getName()
ColumnType
getResultType()
actual type isHistogramVisual
int
hashCode()
AggregateCombiner
makeAggregateCombiner()
Creates an AggregateCombiner to fold rollup aggregation results from serveral "rows" of different indexes during index merging.List<String>
requiredFields()
Get a list of fields that aggregators built by this factory will need to read.String
toString()
AggregatorFactory
withName(String newName)
Used in cases where we want to change the output name of the aggregator to something else.-
Methods inherited from class org.apache.druid.query.aggregation.AggregatorFactory
canVectorize, factorizeVector, factorizeWithSize, getComplexTypeName, getFinalizedType, getMaxIntermediateSizeWithNulls, getMergingFactory, getRequiredColumns, getType, guessAggregatorHeapFootprint, makeNullableAggregateCombiner, mergeAggregators, optimizeForSegment
-
-
-
-
Field Detail
-
TYPE
public static final ColumnType TYPE
-
TYPE_VISUAL
public static final ColumnType TYPE_VISUAL
-
-
Method Detail
-
factorize
public Aggregator factorize(ColumnSelectorFactory metricFactory)
- Specified by:
factorize
in classAggregatorFactory
-
factorizeBuffered
public BufferAggregator factorizeBuffered(ColumnSelectorFactory metricFactory)
- Specified by:
factorizeBuffered
in classAggregatorFactory
-
getComparator
public Comparator getComparator()
- Specified by:
getComparator
in classAggregatorFactory
-
combine
public Object combine(Object lhs, Object rhs)
Description copied from class:AggregatorFactory
A method that knows how to combine the outputs ofAggregator.get()
produced viaAggregatorFactory.factorize(org.apache.druid.segment.ColumnSelectorFactory)
orBufferAggregator.get(java.nio.ByteBuffer, int)
produced viaAggregatorFactory.factorizeBuffered(org.apache.druid.segment.ColumnSelectorFactory)
. Note, even though this method is called "combine", this method's contract *does* allow for mutation of the input objects. Thus, any use of lhs or rhs after calling this method is highly discouraged.- Specified by:
combine
in classAggregatorFactory
- Parameters:
lhs
- The left hand side of the combinerhs
- The right hand side of the combine- Returns:
- an object representing the combination of lhs and rhs, this can be a new object or a mutation of the inputs
-
makeAggregateCombiner
public AggregateCombiner makeAggregateCombiner()
Description copied from class:AggregatorFactory
Creates an AggregateCombiner to fold rollup aggregation results from serveral "rows" of different indexes during index merging. AggregateCombiner implements the same logic asAggregatorFactory.combine(java.lang.Object, java.lang.Object)
, with the difference that it usesColumnValueSelector
and it's subinterfaces to get inputs and implementsColumnValueSelector
to provide output.- Overrides:
makeAggregateCombiner
in classAggregatorFactory
- See Also:
AggregateCombiner
,IndexMerger
-
getCombiningFactory
public AggregatorFactory getCombiningFactory()
Description copied from class:AggregatorFactory
Returns an AggregatorFactory that can be used to combine the output of aggregators from this factory. It is used when we know we have some values that were produced with this aggregator factory, and want to do some additional combining of them. This happens, for example, when merging query results from two different segments, or two different servers. For simple aggregators, the combining factory may be computed by simply creating a new factory that is the same as the current, except with its input column renamed to the same as the output column. For example, this aggregator: {"type": "longSum", "fieldName": "foo", "name": "bar"} Would become: {"type": "longSum", "fieldName": "bar", "name": "bar"} Sometimes, the type or other parameters of the combining aggregator will be different from the original aggregator. For example, theCountAggregatorFactory
getCombiningFactory method will return aLongSumAggregatorFactory
, because counts are combined by summing. No matter what, `foo.getCombiningFactory()` and `foo.getCombiningFactory().getCombiningFactory()` should return the same result.- Specified by:
getCombiningFactory
in classAggregatorFactory
- Returns:
- a new Factory that can be used for operations on top of data output from the current factory.
-
deserialize
public Object deserialize(Object object)
Description copied from class:AggregatorFactory
A method that knows how to "deserialize" the object from whatever form it might have been put into in order to transfer via JSON.- Specified by:
deserialize
in classAggregatorFactory
- Parameters:
object
- the object to deserialize- Returns:
- the deserialized object
-
finalizeComputation
@Nullable public Object finalizeComputation(@Nullable Object object)
Description copied from class:AggregatorFactory
"Finalizes" the computation of an object. Primarily useful for complex types that have a different mergeable intermediate format than their final resultant output.- Specified by:
finalizeComputation
in classAggregatorFactory
- Parameters:
object
- the object to be finalized- Returns:
- the finalized value that should be returned for the initial query
-
getName
public String getName()
- Specified by:
getName
in classAggregatorFactory
- Returns:
- output name of the aggregator column.
-
getFieldName
public String getFieldName()
-
requiredFields
public List<String> requiredFields()
Description copied from class:AggregatorFactory
Get a list of fields that aggregators built by this factory will need to read.- Specified by:
requiredFields
in classAggregatorFactory
-
getCacheKey
public byte[] getCacheKey()
Description copied from interface:Cacheable
Get a byte array used as a cache key.- Returns:
- a cache key
-
getIntermediateType
public ColumnType getIntermediateType()
actual type isHistogram
- Overrides:
getIntermediateType
in classAggregatorFactory
-
getResultType
public ColumnType getResultType()
actual type isHistogramVisual
- Overrides:
getResultType
in classAggregatorFactory
-
getMaxIntermediateSize
public int getMaxIntermediateSize()
Description copied from class:AggregatorFactory
Returns the maximum size that this aggregator will require in bytes for intermediate storage of results.- Specified by:
getMaxIntermediateSize
in classAggregatorFactory
- Returns:
- the maximum number of bytes that an aggregator of this type will require for intermediate result storage.
-
withName
public AggregatorFactory withName(String newName)
Description copied from class:AggregatorFactory
Used in cases where we want to change the output name of the aggregator to something else. For eg: if we have a query `select a, sum(b) as total group by a from table` the aggregator returned from the native group by query is "a0" set inorg.apache.druid.sql.calcite.rel.DruidQuery#computeAggregations
. We can use withName("total") to set the output name of the aggregator to "total".As all implementations of this interface method may not exist, callers of this method are advised to handle such a case.
- Overrides:
withName
in classAggregatorFactory
- Parameters:
newName
- newName of the output for aggregator factory- Returns:
- AggregatorFactory with the output name set as the input param.
-
-