@Override public void numMetrics(GroupByQuery query) { setDimension("numMetrics", String.valueOf(query.getAggregatorSpecs().size())); }
@Override protected IntGrouper newGrouper() { return new BufferArrayGrouper( Suppliers.ofInstance(buffer), cursor.getColumnSelectorFactory(), query.getAggregatorSpecs() .toArray(new AggregatorFactory[query.getAggregatorSpecs().size()]), cardinality ); }
@Override public void numComplexMetrics(GroupByQuery query) { int numComplexAggs = DruidMetrics.findNumComplexAggs(query.getAggregatorSpecs()); setDimension("numComplexMetrics", String.valueOf(numComplexAggs)); }
@Override protected Grouper<ByteBuffer> newGrouper() { return new BufferHashGrouper<>( Suppliers.ofInstance(buffer), keySerde, cursor.getColumnSelectorFactory(), query.getAggregatorSpecs() .toArray(new AggregatorFactory[query.getAggregatorSpecs().size()]), querySpecificConfig.getBufferGrouperMaxSize(), querySpecificConfig.getBufferGrouperMaxLoadFactor(), querySpecificConfig.getBufferGrouperInitialBuckets(), true ); }
public RowIterator(GroupByQuery query, Cursor cursor, ByteBuffer metricsBuffer, GroupByQueryConfig config) { this.query = query; this.cursor = cursor; this.metricsBuffer = metricsBuffer; this.config = config; unprocessedKeys = null; delegate = Iterators.emptyIterator(); dimensionSpecs = query.getDimensions(); dimensions = Lists.newArrayListWithExpectedSize(dimensionSpecs.size()); dimNames = Lists.newArrayListWithExpectedSize(dimensionSpecs.size()); for (int i = 0; i < dimensionSpecs.size(); ++i) { final DimensionSpec dimSpec = dimensionSpecs.get(i); final DimensionSelector selector = cursor.makeDimensionSelector(dimSpec.getDimension()); if (selector != null) { dimensions.add(selector); dimNames.add(dimSpec.getOutputName()); } } aggregatorSpecs = query.getAggregatorSpecs(); aggregators = new BufferAggregator[aggregatorSpecs.size()]; metricNames = new String[aggregatorSpecs.size()]; sizesRequired = new int[aggregatorSpecs.size()]; for (int i = 0; i < aggregatorSpecs.size(); ++i) { AggregatorFactory aggregatorSpec = aggregatorSpecs.get(i); aggregators[i] = aggregatorSpec.factorizeBuffered(cursor); metricNames[i] = aggregatorSpec.getName(); sizesRequired[i] = aggregatorSpec.getMaxIntermediateSize(); } }
private final List<AggregatorFactory> aggs = query.getAggregatorSpecs(); private final List<DimensionSpec> dims = query.getDimensions();
@Override public Row apply(Row input) { if (input instanceof MapBasedRow) { final MapBasedRow inputRow = (MapBasedRow) input; final Map<String, Object> values = Maps.newHashMap(inputRow.getEvent()); for (AggregatorFactory agg : query.getAggregatorSpecs()) { values.put(agg.getName(), fn.manipulate(agg, inputRow.getEvent().get(agg.getName()))); } return new MapBasedRow(inputRow.getTimestamp(), values); } return input; } };
@Override public Row apply(Row input) { if (input instanceof MapBasedRow) { final MapBasedRow inputRow = (MapBasedRow) input; final Map<String, Object> values = Maps.newHashMap(((MapBasedRow) input).getEvent()); for (AggregatorFactory agg : query.getAggregatorSpecs()) { values.put(agg.getName(), fn.manipulate(agg, inputRow.getEvent().get(agg.getName()))); } return new MapBasedRow(inputRow.getTimestamp(), values); } return input; } };
@Override public ServiceMetricEvent.Builder makeMetricBuilder(GroupByQuery query) { int numMinutes = 0; for (Interval interval : query.getIntervals()) { numMinutes += Minutes.minutesIn(interval).getMinutes(); } return new ServiceMetricEvent.Builder() .setUser2(query.getDataSource().toString()) .setUser3(String.format("%,d dims", query.getDimensions().size())) .setUser4("groupBy") .setUser5(Joiner.on(",").join(query.getIntervals())) .setUser6(String.valueOf(query.hasFilters())) .setUser7(String.format("%,d aggs", query.getAggregatorSpecs().size())) .setUser9(Minutes.minutes(numMinutes).toString()); }
&& cardinality > 0) { final AggregatorFactory[] aggregatorFactories = query .getAggregatorSpecs() .toArray(new AggregatorFactory[query.getAggregatorSpecs().size()]); final long requiredBufferCapacity = BufferArrayGrouper.requiredBufferCapacity( cardinality,
aggregatorSpecs = query.getAggregatorSpecs(); aggregators = new BufferAggregator[aggregatorSpecs.size()]; metricNames = new String[aggregatorSpecs.size()];
query.getAggregatorSpecs(), new Function<AggregatorFactory, AggregatorFactory>()
for (AggregatorFactory aggregatorFactory : query.getAggregatorSpecs()) { final String typeName = aggregatorFactory.getTypeName(); final ValueType valueType;
@Override public Row apply(final Row arg1, final Row arg2) { if (arg1 == null) { return arg2; } else if (arg2 == null) { return arg1; } final Map<String, Object> newMap = Maps.newHashMapWithExpectedSize( query.getDimensions().size() + query.getAggregatorSpecs().size() ); // Add dimensions for (DimensionSpec dimension : query.getDimensions()) { newMap.put(dimension.getOutputName(), arg1.getRaw(dimension.getOutputName())); } // Add aggregations for (AggregatorFactory aggregatorFactory : query.getAggregatorSpecs()) { newMap.put( aggregatorFactory.getName(), aggregatorFactory.combine( arg1.getRaw(aggregatorFactory.getName()), arg2.getRaw(aggregatorFactory.getName()) ) ); } return new MapBasedRow(adjustTimestamp(arg1), newMap); }
private CloseableGrouperIterator<KeyType, Row> initNewDelegate() { final Grouper<KeyType> grouper = newGrouper(); grouper.init(); if (allSingleValueDims) { aggregateSingleValueDims(grouper); } else { aggregateMultiValueDims(grouper); } return new CloseableGrouperIterator<>( grouper, false, entry -> { Map<String, Object> theMap = Maps.newLinkedHashMap(); // Add dimensions. putToMap(entry.getKey(), theMap); convertRowTypesToOutputTypes(query.getDimensions(), theMap); // Add aggregations. for (int i = 0; i < entry.getValues().length; i++) { theMap.put(query.getAggregatorSpecs().get(i).getName(), entry.getValues()[i]); } return new MapBasedRow(timestamp, theMap); }, grouper ); }
public Builder(GroupByQuery query) { dataSource = query.getDataSource(); querySegmentSpec = query.getQuerySegmentSpec(); virtualColumns = query.getVirtualColumns(); dimFilter = query.getDimFilter(); granularity = query.getGranularity(); dimensions = query.getDimensions(); aggregatorSpecs = query.getAggregatorSpecs(); postAggregatorSpecs = query.getPostAggregatorSpecs(); havingSpec = query.getHavingSpec(); limitSpec = query.getLimitSpec(); postProcessingFn = query.postProcessingFn; context = query.getContext(); }
dimensionNames.add(dimension.getOutputName()); for (AggregatorFactory aggregatorFactory : query.getAggregatorSpecs()) { for (final AggregatorFactory transferAgg : aggregatorFactory.getRequiredColumns()) { if (dimensionNames.contains(transferAgg.getName())) {
@Override public byte[] computeCacheKey(GroupByQuery query) { return new CacheKeyBuilder(GROUPBY_QUERY) .appendByte(CACHE_STRATEGY_VERSION) .appendCacheable(query.getGranularity()) .appendCacheable(query.getDimFilter()) .appendCacheables(query.getAggregatorSpecs()) .appendCacheables(query.getDimensions()) .appendCacheable(query.getVirtualColumns()) .build(); }
if (combine) { aggs = Lists.transform( query.getAggregatorSpecs(), new Function<AggregatorFactory, AggregatorFactory>() aggs = query.getAggregatorSpecs();
query.getGranularity(), query.getDimensions(), query.getAggregatorSpecs(), query.getPostAggregatorSpecs(),