@Override public void numMetrics(TopNQuery query) { setDimension("numMetrics", String.valueOf(query.getAggregatorSpecs().size())); }
@Override public void numComplexMetrics(TopNQuery query) { int numComplexAggs = DruidMetrics.findNumComplexAggs(query.getAggregatorSpecs()); setDimension("numComplexMetrics", String.valueOf(numComplexAggs)); }
@Override protected BufferAggregator[] makeDimValAggregateStore(PooledTopNParams params) { return makeBufferAggregators(params.getCursor(), query.getAggregatorSpecs()); }
private final AggregatorFactory[] aggregatorFactories = query.getAggregatorSpecs() .toArray(new AggregatorFactory[0]); private final String[] aggFactoryNames = extractFactoryName(query.getAggregatorSpecs());
private final AggregatorFactory[] aggregatorFactories = query.getAggregatorSpecs() .toArray(new AggregatorFactory[0]); private final String[] aggFactoryNames = extractFactoryName(query.getAggregatorSpecs()); private final PostAggregator[] postAggregators = query.getPostAggregatorSpecs().toArray(new PostAggregator[0]);
dimensions.addAll(extractFieldsFromAggregations(q.getAggregatorSpecs())); dimensions.add(q.getDimensionSpec().getDimension()); } else if (query instanceof TimeseriesQuery) {
final int[] aggregatorSizes = new int[query.getAggregatorSpecs().size()]; int numBytesPerRecord = 0; for (int i = 0; i < query.getAggregatorSpecs().size(); ++i) { aggregatorSizes[i] = query.getAggregatorSpecs().get(i).getMaxIntermediateSizeWithNulls(); numBytesPerRecord += aggregatorSizes[i];
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() ); } }
theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = BaseTopNAlgorithm.makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators);
private long dimExtractionScanAndAggregateWithCardinalityUnknown( TopNQuery query, Cursor cursor, DimensionSelector selector, Map<Comparable<?>, Aggregator[]> aggregatesStore ) { long processedRows = 0; while (!cursor.isDone()) { final IndexedInts dimValues = selector.getRow(); for (int i = 0, size = dimValues.size(); i < size; ++i) { final int dimIndex = dimValues.get(i); final Comparable<?> key = dimensionValueConverter.apply(selector.lookupName(dimIndex)); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = BaseTopNAlgorithm.makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } } cursor.advance(); processedRows++; } return processedRows; } }
@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; }
static long floatDimExtractionScanAndAggregate( TopNQuery query, BaseFloatColumnValueSelector selector, Cursor cursor, Int2ObjectMap<Aggregator[]> aggregatesStore ) { long processedRows = 0; while (!cursor.isDone()) { int key = Float.floatToIntBits(selector.getFloat()); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = BaseTopNAlgorithm.makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } cursor.advance(); processedRows++; } return processedRows; }
static long doubleDimExtractionScanAndAggregate( TopNQuery query, BaseDoubleColumnValueSelector selector, Cursor cursor, Long2ObjectMap<Aggregator[]> aggregatesStore ) { long processedRows = 0; while (!cursor.isDone()) { long key = Double.doubleToLongBits(selector.getDouble()); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = BaseTopNAlgorithm.makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } cursor.advance(); processedRows++; } return processedRows; }
@Override protected BinaryFn<Result<TopNResultValue>, Result<TopNResultValue>, Result<TopNResultValue>> createMergeFn( Query<Result<TopNResultValue>> input ) { TopNQuery query = (TopNQuery) input; return new TopNBinaryFn( query.getGranularity(), query.getDimensionSpec(), query.getTopNMetricSpec(), query.getThreshold(), query.getAggregatorSpecs(), query.getPostAggregatorSpecs() ); } };
private final List<AggregatorFactory> aggs = Lists.newArrayList(query.getAggregatorSpecs()); private final List<PostAggregator> postAggs = AggregatorUtil.pruneDependentPostAgg( query.getPostAggregatorSpecs(),
static long longDimExtractionScanAndAggregate( TopNQuery query, BaseLongColumnValueSelector selector, Cursor cursor, Long2ObjectMap<Aggregator[]> aggregatesStore ) { long processedRows = 0; while (!cursor.isDone()) { long key = selector.getLong(); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = BaseTopNAlgorithm.makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } cursor.advance(); processedRows++; } return processedRows; }
public TopNQueryBuilder(final TopNQuery query) { this.dataSource = query.getDataSource(); this.virtualColumns = query.getVirtualColumns(); this.dimensionSpec = query.getDimensionSpec(); this.topNMetricSpec = query.getTopNMetricSpec(); this.threshold = query.getThreshold(); this.querySegmentSpec = query.getQuerySegmentSpec(); this.dimFilter = query.getDimensionsFilter(); this.granularity = query.getGranularity(); this.aggregatorSpecs = query.getAggregatorSpecs(); this.postAggregatorSpecs = query.getPostAggregatorSpecs(); this.context = query.getContext(); }
@Override public byte[] computeCacheKey(TopNQuery query) { final CacheKeyBuilder builder = new CacheKeyBuilder(TOPN_QUERY) .appendCacheable(query.getDimensionSpec()) .appendCacheable(query.getTopNMetricSpec()) .appendInt(query.getThreshold()) .appendCacheable(query.getGranularity()) .appendCacheable(query.getDimensionsFilter()) .appendCacheables(query.getAggregatorSpecs()) .appendCacheable(query.getVirtualColumns()); final List<PostAggregator> postAggregators = prunePostAggregators(query); if (!postAggregators.isEmpty()) { // Append post aggregators only when they are used as sort keys. // Note that appending an empty list produces a different cache key from not appending it. builder.appendCacheablesIgnoringOrder(postAggregators); } return builder.build(); }
AggregatorUtil.condensedAggregators(query.getAggregatorSpecs(), query.getPostAggregatorSpecs(), metric);
for (AggregatorFactory aggregatorFactory : query.getAggregatorSpecs()) { numBytesPerRecord += aggregatorFactory.getMaxIntermediateSizeWithNulls();