@Override public long scanAndAggregate( TopNParams params, Aggregator[][] rowSelector, Map<Comparable, Aggregator[]> aggregatesStore ) { final Cursor cursor = params.getCursor(); final ColumnSelectorPlus<TopNColumnSelectorStrategy> selectorPlus = params.getSelectorPlus(); return selectorPlus.getColumnSelectorStrategy().dimExtractionScanAndAggregate( query, selectorPlus.getSelector(), cursor, rowSelector, aggregatesStore ); }
@Override protected long scanAndAggregate(TopNParams params, int[] dimValSelector, Map<String, Aggregator[]> aggregatesStore) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } final Cursor cursor = params.getCursor(); final DimensionSelector dimSelector = params.getDimSelector(); long processedRows = 0; while (!cursor.isDone()) { final String key = dimSelector.lookupName(dimSelector.getRow().get(0)); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } cursor.advance(); processedRows++; } return processedRows; }
/** * This function currently handles TopNs on long and float columns, which do not provide cardinality or an ID lookup. * When cardinality is unknown, process everything in one pass. * Existing implementations of makeDimValSelector() require cardinality as well, so the DimValSelector is not used. * * @param params TopN parameters from run() * @param resultBuilder Result builder from run() */ private void runWithCardinalityUnknown( Parameters params, TopNResultBuilder resultBuilder, @Nullable TopNQueryMetrics queryMetrics ) { DimValAggregateStore aggregatesStore = makeDimValAggregateStore(params); if (queryMetrics != null) { queryMetrics.startRecordingScanTime(); } long processedRows = scanAndAggregate(params, null, aggregatesStore); updateResults(params, null, aggregatesStore, resultBuilder); closeAggregators(aggregatesStore); params.getCursor().reset(); if (queryMetrics != null) { queryMetrics.addProcessedRows(processedRows); queryMetrics.stopRecordingScanTime(); } }
params.getCursor().reset();
public static TopNResultBuilder makeResultBuilder(TopNParams params, TopNQuery query) { final Comparator comparator = query.getTopNMetricSpec() .getComparator(query.getAggregatorSpecs(), query.getPostAggregatorSpecs()); return query.getTopNMetricSpec().getResultBuilder( params.getCursor().getTime(), query.getDimensionSpec(), query.getThreshold(), comparator, query.getAggregatorSpecs(), query.getPostAggregatorSpecs() ); } }
int[] dimValSelector; try { singleMetricParam = singleMetricAlgo.makeInitParams(params.getSelectorPlus(), params.getCursor()); singleMetricAlgo.run( singleMetricParam, try { allMetricsParam = allMetricAlgo.makeInitParams(params.getSelectorPlus(), params.getCursor()); allMetricAlgo.run( allMetricsParam,
@Override public long scanAndAggregate( TopNParams params, Aggregator[][] rowSelector, Map<Comparable, Aggregator[]> aggregatesStore ) { final Cursor cursor = params.getCursor(); final ColumnSelectorPlus<TopNColumnSelectorStrategy> selectorPlus = params.getSelectorPlus(); return selectorPlus.getColumnSelectorStrategy().dimExtractionScanAndAggregate( query, selectorPlus.getSelector(), cursor, rowSelector, aggregatesStore ); }
@Override protected long scanAndAggregate( TopNParams params, int[] dimValSelector, Map<String, Aggregator[]> aggregatesStore ) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } final Cursor cursor = params.getCursor(); final DimensionSelector dimSelector = params.getDimSelector(); long processedRows = 0; while (!cursor.isDone()) { final String key = dimSelector.lookupName(dimSelector.getRow().get(0)); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } cursor.advance(); processedRows++; } return processedRows; }
/** * This function currently handles TopNs on long and float columns, which do not provide cardinality or an ID lookup. * When cardinality is unknown, process everything in one pass. * Existing implementations of makeDimValSelector() require cardinality as well, so the DimValSelector is not used. * * @param params TopN parameters from run() * @param resultBuilder Result builder from run() */ private void runWithCardinalityUnknown( Parameters params, TopNResultBuilder resultBuilder, @Nullable TopNQueryMetrics queryMetrics ) { DimValAggregateStore aggregatesStore = makeDimValAggregateStore(params); if (queryMetrics != null) { queryMetrics.startRecordingScanTime(); } long processedRows = scanAndAggregate(params, null, aggregatesStore); updateResults(params, null, aggregatesStore, resultBuilder); closeAggregators(aggregatesStore); params.getCursor().reset(); if (queryMetrics != null) { queryMetrics.addProcessedRows(processedRows); queryMetrics.stopRecordingScanTime(); } }
public static TopNResultBuilder makeResultBuilder(TopNParams params, TopNQuery query) { final Comparator comparator = query.getTopNMetricSpec() .getComparator(query.getAggregatorSpecs(), query.getPostAggregatorSpecs()); return query.getTopNMetricSpec().getResultBuilder( params.getCursor().getTime(), query.getDimensionSpec(), query.getThreshold(), comparator, query.getAggregatorSpecs(), query.getPostAggregatorSpecs() ); } }
params.getCursor().reset();
int[] dimValSelector = null; try { singleMetricParam = singleMetricAlgo.makeInitParams(params.getSelectorPlus(), params.getCursor()); singleMetricAlgo.run( singleMetricParam, try { allMetricsParam = allMetricAlgo.makeInitParams(params.getSelectorPlus(), params.getCursor()); allMetricAlgo.run( allMetricsParam,