Interface TopNColumnAggregatesProcessor<ValueSelectorType>
- All Superinterfaces:
ColumnSelectorStrategy
- All Known Implementing Classes:
DoubleTopNColumnAggregatesProcessor,FloatTopNColumnAggregatesProcessor,LongTopNColumnAggregatesProcessor,NullableNumericTopNColumnAggregatesProcessor,StringTopNColumnAggregatesProcessor
This
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.CursorGranularizer, org.apache.druid.query.aggregation.Aggregator[][]) and can be applied to TopNResultBuilder through updateResults(org.apache.druid.query.topn.TopNResultBuilder).-
Method Summary
Modifier and TypeMethodDescriptionvoidCloses all on heapAggregatorassociated with the aggregates processorintgetCardinality(ValueSelectorType selector) Get value cardinality of underlyingColumnValueSelectorAggregator[][]getRowSelector(TopNQuery query, TopNParams params, TopNCursorInspector cursorInspector) Used byHeapBasedTopNAlgorithm.voidInitializes the underlying aggregates store to something nice and seleector type appropriatelongscanAndAggregate(TopNQuery query, ValueSelectorType selector, Cursor cursor, CursorGranularizer granularizer, Aggregator[][] rowSelector) Used byHeapBasedTopNAlgorithm.voidupdateResults(TopNResultBuilder resultBuilder) Used byHeapBasedTopNAlgorithm.
-
Method Details
-
getCardinality
Get value cardinality of underlyingColumnValueSelector -
getRowSelector
@Nullable Aggregator[][] getRowSelector(TopNQuery query, TopNParams params, TopNCursorInspector cursorInspector) 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 servedcursorInspector- provide information about the cursor 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, CursorGranularizer granularizer, 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
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
-