Class StringTopNColumnAggregatesProcessor
java.lang.Object
org.apache.druid.query.topn.types.StringTopNColumnAggregatesProcessor
- All Implemented Interfaces:
ColumnSelectorStrategy,TopNColumnAggregatesProcessor<DimensionSelector>
public class StringTopNColumnAggregatesProcessor
extends Object
implements TopNColumnAggregatesProcessor<DimensionSelector>
-
Constructor Summary
ConstructorsConstructorDescriptionStringTopNColumnAggregatesProcessor(ColumnCapabilities capabilities, ColumnType dimensionType) -
Method Summary
Modifier and TypeMethodDescriptionvoidCloses all on heapAggregatorassociated with the aggregates processorintgetCardinality(DimensionSelector 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, DimensionSelector selector, Cursor cursor, CursorGranularizer granularizer, Aggregator[][] rowSelector) Used byHeapBasedTopNAlgorithm.voidupdateResults(TopNResultBuilder resultBuilder) Used byHeapBasedTopNAlgorithm.
-
Constructor Details
-
StringTopNColumnAggregatesProcessor
public StringTopNColumnAggregatesProcessor(ColumnCapabilities capabilities, ColumnType dimensionType)
-
-
Method Details
-
getCardinality
Description copied from interface:TopNColumnAggregatesProcessorGet value cardinality of underlyingColumnValueSelector- Specified by:
getCardinalityin interfaceTopNColumnAggregatesProcessor<DimensionSelector>
-
getRowSelector
public Aggregator[][] getRowSelector(TopNQuery query, TopNParams params, TopNCursorInspector cursorInspector) Description copied from interface:TopNColumnAggregatesProcessorUsed 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.- Specified by:
getRowSelectorin interfaceTopNColumnAggregatesProcessor<DimensionSelector>- 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
-
updateResults
Description copied from interface:TopNColumnAggregatesProcessorUsed byHeapBasedTopNAlgorithm. Read entries from the aggregates store, adding the keys and associated values to the resultBuilder, applying the valueTransformer to the keys if present- Specified by:
updateResultsin interfaceTopNColumnAggregatesProcessor<DimensionSelector>- Parameters:
resultBuilder- TopN result builder
-
closeAggregators
public void closeAggregators()Description copied from interface:TopNColumnAggregatesProcessorCloses all on heapAggregatorassociated with the aggregates processor- Specified by:
closeAggregatorsin interfaceTopNColumnAggregatesProcessor<DimensionSelector>
-
scanAndAggregate
public long scanAndAggregate(TopNQuery query, DimensionSelector selector, Cursor cursor, CursorGranularizer granularizer, Aggregator[][] rowSelector) Description copied from interface:TopNColumnAggregatesProcessorUsed byHeapBasedTopNAlgorithm. The contract of this method requires callingTopNColumnAggregatesProcessor.initAggregateStore()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.- Specified by:
scanAndAggregatein interfaceTopNColumnAggregatesProcessor<DimensionSelector>- 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)
-
initAggregateStore
public void initAggregateStore()Description copied from interface:TopNColumnAggregatesProcessorInitializes the underlying aggregates store to something nice and seleector type appropriate- Specified by:
initAggregateStorein interfaceTopNColumnAggregatesProcessor<DimensionSelector>
-