public interface TopNColumnAggregatesProcessor<ValueSelectorType> extends ColumnSelectorStrategy
ColumnSelectorStrategy is used by all TopNAlgorithm to provide
selector value cardinality to TopNParams (perhaps unecessarily, but that is another matter), but is primarily
used by HeapBasedTopNAlgorithm to serve as its value aggregates store.
Given a query, column value selector, and cursor to process, the aggregates store is populated by calling
scanAndAggregate(org.apache.druid.query.topn.TopNQuery, ValueSelectorType, org.apache.druid.segment.Cursor, org.apache.druid.query.aggregation.Aggregator[][]) and can be applied to TopNResultBuilder through updateResults(org.apache.druid.query.topn.TopNResultBuilder).| Modifier and Type | Method and Description |
|---|---|
void |
closeAggregators()
Closes all on heap
Aggregator associated withe the aggregates processor |
int |
getCardinality(ValueSelectorType selector)
Get value cardinality of underlying
ColumnValueSelector |
Aggregator[][] |
getRowSelector(TopNQuery query,
TopNParams params,
StorageAdapter storageAdapter)
Used by
HeapBasedTopNAlgorithm. |
void |
initAggregateStore()
Initializes the underlying aggregates store to something nice and seleector type appropriate
|
long |
scanAndAggregate(TopNQuery query,
ValueSelectorType selector,
Cursor cursor,
Aggregator[][] rowSelector)
Used by
HeapBasedTopNAlgorithm. |
void |
updateResults(TopNResultBuilder resultBuilder)
Used by
HeapBasedTopNAlgorithm. |
int getCardinality(ValueSelectorType selector)
ColumnValueSelector@Nullable Aggregator[][] getRowSelector(TopNQuery query, TopNParams params, StorageAdapter storageAdapter)
HeapBasedTopNAlgorithm.
Create an Aggregator[][] using BaseTopNAlgorithm.AggregatorArrayProvider and
the given parameters.
As the Aggregator[][] is used as an integer-based lookup, this method is only applicable for dimension types
that use integer row values, e.g. string columns where the value cardinality is known.
A dimension type that does not have integer values should return null.query - The TopN query being servedparams - Parameters for the TopN query being servedstorageAdapter - Column storage adapter, to provide information about the column that can be used for
query optimization, e.g. whether dimension values are sorted or notlong scanAndAggregate(TopNQuery query, ValueSelectorType selector, Cursor cursor, Aggregator[][] rowSelector)
HeapBasedTopNAlgorithm. The contract of this method requires calling initAggregateStore()
prior to calling this method.
Iterate through the Cursor, reading the current row from a dimension value selector, and for each row
value:
1. Retrieve the Aggregator[] for the row value from rowSelector (fast integer lookup), usable if value cardinality
is known, or from aggregatesStore (slower map).
2. If the rowSelector/aggregatesStore did not have an entry for a particular row value, this function
should retrieve the current Aggregator[] using
BaseTopNAlgorithm.makeAggregators(org.apache.druid.segment.Cursor, java.util.List<org.apache.druid.query.aggregation.AggregatorFactory>) and the provided cursor and query,
storing them in rowSelector/aggregatesStore
3. Call Aggregator.aggregate() on each of the aggregators.
If a dimension type doesn't have integer values, it should ignore rowSelector and use the aggregatesStore map only.query - The TopN query being served.selector - Dimension value selectorcursor - Cursor for the segment being queriedrowSelector - Integer lookup containing aggregatorsvoid updateResults(TopNResultBuilder resultBuilder)
HeapBasedTopNAlgorithm.
Read entries from the aggregates store, adding the keys and associated values to the resultBuilder, applying the
valueTransformer to the keys if presentresultBuilder - TopN result buildervoid initAggregateStore()
void closeAggregators()
Aggregator associated withe the aggregates processorCopyright © 2011–2020 The Apache Software Foundation. All rights reserved.