Interface TopNColumnAggregatesProcessor<ValueSelectorType>
-
- All Superinterfaces:
ColumnSelectorStrategy
- All Known Implementing Classes:
DoubleTopNColumnAggregatesProcessor,FloatTopNColumnAggregatesProcessor,LongTopNColumnAggregatesProcessor,NullableNumericTopNColumnAggregatesProcessor,StringTopNColumnAggregatesProcessor
public interface TopNColumnAggregatesProcessor<ValueSelectorType> extends ColumnSelectorStrategy
ThisColumnSelectorStrategyis used by allTopNAlgorithmto provide selector value cardinality toTopNParams(perhaps unecessarily, but that is another matter), but is primarily used byHeapBasedTopNAlgorithmto serve as its value aggregates store. Given a query, column value selector, and cursor to process, the aggregates store is populated by callingscanAndAggregate(org.apache.druid.query.topn.TopNQuery, ValueSelectorType, org.apache.druid.segment.Cursor, org.apache.druid.query.aggregation.Aggregator[][])and can be applied toTopNResultBuilderthroughupdateResults(org.apache.druid.query.topn.TopNResultBuilder).
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description voidcloseAggregators()Closes all on heapAggregatorassociated with the aggregates processorintgetCardinality(ValueSelectorType selector)Get value cardinality of underlyingColumnValueSelectorAggregator[][]getRowSelector(TopNQuery query, TopNParams params, StorageAdapter storageAdapter)Used byHeapBasedTopNAlgorithm.voidinitAggregateStore()Initializes the underlying aggregates store to something nice and seleector type appropriatelongscanAndAggregate(TopNQuery query, ValueSelectorType selector, Cursor cursor, Aggregator[][] rowSelector)Used byHeapBasedTopNAlgorithm.voidupdateResults(TopNResultBuilder resultBuilder)Used byHeapBasedTopNAlgorithm.
-
-
-
Method Detail
-
getCardinality
int getCardinality(ValueSelectorType selector)
Get value cardinality of underlyingColumnValueSelector
-
getRowSelector
@Nullable Aggregator[][] getRowSelector(TopNQuery query, TopNParams params, StorageAdapter storageAdapter)
Used byHeapBasedTopNAlgorithm. Create an Aggregator[][] usingBaseTopNAlgorithm.AggregatorArrayProviderand 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.- Parameters:
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 not- Returns:
- an Aggregator[][] for integer-valued dimensions, null otherwise
-
scanAndAggregate
long scanAndAggregate(TopNQuery query, ValueSelectorType selector, Cursor cursor, Aggregator[][] rowSelector)
Used byHeapBasedTopNAlgorithm. The contract of this method requires callinginitAggregateStore()prior to calling this method. Iterate through theCursor, 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[] usingBaseTopNAlgorithm.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. CallAggregator.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.- Parameters:
query- The TopN query being served.selector- Dimension value selectorcursor- Cursor for the segment being queriedrowSelector- Integer lookup containing aggregators- Returns:
- the number of processed rows (after postFilters are applied inside the cursor being processed)
-
updateResults
void updateResults(TopNResultBuilder resultBuilder)
Used byHeapBasedTopNAlgorithm. Read entries from the aggregates store, adding the keys and associated values to the resultBuilder, applying the valueTransformer to the keys if present- Parameters:
resultBuilder- TopN result builder
-
initAggregateStore
void initAggregateStore()
Initializes the underlying aggregates store to something nice and seleector type appropriate
-
closeAggregators
void closeAggregators()
Closes all on heapAggregatorassociated with the aggregates processor
-
-