@Override public String getName() { return delegate.getName(); }
@Override public List<String> requiredFields() { return delegate.requiredFields(); }
/** * Returns an AggregatorFactory that can be used to merge the output of aggregators from this factory and * other factory. * This method is relevant only for AggregatorFactory which can be used at ingestion time. * * @return a new Factory that can be used for merging the output of aggregators from this factory and other. */ public AggregatorFactory getMergingFactory(AggregatorFactory other) throws AggregatorFactoryNotMergeableException { final AggregatorFactory combiningFactory = this.getCombiningFactory(); if (other.getName().equals(this.getName()) && combiningFactory.equals(other.getCombiningFactory())) { return combiningFactory; } else { throw new AggregatorFactoryNotMergeableException(this, other); } }
private static String getType(String metric, AggregatorFactory[] aggs, int i) { if (aggs[i].getName().equals(metric)) { return aggs[i].getTypeName(); } log.warn("Aggs disordered, fall backs to loop."); for (AggregatorFactory agg : aggs) { if (agg.getName().equals(metric)) { return agg.getTypeName(); } } return null; }
private void factorizeAggs( AggregatorFactory[] metrics, Aggregator[] aggs, ThreadLocal<InputRow> rowContainer, InputRow row ) { rowContainer.set(row); for (int i = 0; i < metrics.length; i++) { final AggregatorFactory agg = metrics[i]; aggs[i] = agg.factorize(selectors.get(agg.getName())); } rowContainer.set(null); }
dimensionExclusions.addAll(aggregator.requiredFields()); dimensionExclusions.add(aggregator.getName()); final Set<String> metSet = new HashSet<>(); for (AggregatorFactory aggregator : aggregators) { metSet.add(aggregator.getName());
WritableUtils.writeVInt(out, aggs.length); for (AggregatorFactory aggFactory : aggs) { String k = aggFactory.getName(); writeString(k, out); try (Aggregator agg = aggFactory.factorize( IncrementalIndex.makeColumnSelectorFactory(VirtualColumns.EMPTY, aggFactory, supplier, true) )) { String t = aggFactory.getTypeName(); if (agg.isNull()) { out.writeByte(NullHandling.IS_NULL_BYTE);
if (aggregatorFactories != null) { final AggregatorFactory[] combiningFactories = new AggregatorFactory[aggregatorFactories.length]; Arrays.setAll(combiningFactories, i -> aggregatorFactories[i].getCombiningFactory()); return combiningFactories; } else { String name = aggregator.getName(); if (mergedAggregators.containsKey(name)) { AggregatorFactory other = mergedAggregators.get(name); mergedAggregators.put(name, aggregator.getMergingFactory(other));
if (merged != null) { try { merged = merged.getMergingFactory(aggregator); .toArray(new AggregatorFactory[0]) : null; final AggregatorFactory[] merged = AggregatorFactory.mergeAggregators(Arrays.asList(aggs1, aggs2)); if (merged != null) { for (AggregatorFactory aggregator : merged) { aggregators.put(aggregator.getName(), aggregator);
@Override public AggregatorFactory getCombiningFactory() { return delegate.getCombiningFactory(); }
@Override public String getTypeName() { return delegate.getTypeName(); }
@Override public Aggregator factorize(ColumnSelectorFactory metricFactory) { return new SuppressedAggregator(delegate.factorize(metricFactory)); }
@Override public AggregateCombiner makeAggregateCombiner() { return delegate.makeAggregateCombiner(); }
@Test public void makeAggregateCombiner() { AggregatorFactory aggregatorFactory = new ArrayOfDoublesSketchAggregatorFactory("", "", null, null, null); AggregatorFactory combiningFactory = aggregatorFactory.getCombiningFactory(); AggregateCombiner<ArrayOfDoublesSketch> combiner = combiningFactory.makeAggregateCombiner(); ArrayOfDoublesUpdatableSketch sketch1 = new ArrayOfDoublesUpdatableSketchBuilder().build(); sketch1.update("a", new double[] {1}); ArrayOfDoublesUpdatableSketch sketch2 = new ArrayOfDoublesUpdatableSketchBuilder().build(); sketch2.update("b", new double[] {1}); sketch2.update("c", new double[] {1}); TestObjectColumnSelector<ArrayOfDoublesSketch> selector = new TestObjectColumnSelector<ArrayOfDoublesSketch>(new ArrayOfDoublesSketch[] {sketch1, sketch2}); combiner.reset(selector); Assert.assertEquals(1, combiner.getObject().getEstimate(), 0); selector.increment(); combiner.fold(selector); Assert.assertEquals(3, combiner.getObject().getEstimate(), 0); }
private static AggregatorFactory[] createMetricsSpec( List<Pair<QueryableIndex, DataSegment>> queryableIndexAndSegments ) { final List<AggregatorFactory[]> aggregatorFactories = queryableIndexAndSegments .stream() .map(pair -> pair.lhs.getMetadata().getAggregators()) // We have already done null check on index.getMetadata() .collect(Collectors.toList()); final AggregatorFactory[] mergedAggregators = AggregatorFactory.mergeAggregators(aggregatorFactories); if (mergedAggregators == null) { throw new ISE("Failed to merge aggregators[%s]", aggregatorFactories); } return mergedAggregators; }
public MetricDesc(int index, AggregatorFactory factory) { this.index = index; this.name = factory.getName(); String typeInfo = factory.getTypeName(); this.capabilities = new ColumnCapabilitiesImpl(); if ("float".equalsIgnoreCase(typeInfo)) { capabilities.setType(ValueType.FLOAT); this.type = typeInfo; } else if ("long".equalsIgnoreCase(typeInfo)) { capabilities.setType(ValueType.LONG); this.type = typeInfo; } else if ("double".equalsIgnoreCase(typeInfo)) { capabilities.setType(ValueType.DOUBLE); this.type = typeInfo; } else { capabilities.setType(ValueType.COMPLEX); this.type = ComplexMetrics.getSerdeForType(typeInfo).getTypeName(); } }
private Result<TimeseriesResultValue> getNullTimeseriesResultValue(TimeseriesQuery query) { List<AggregatorFactory> aggregatorSpecs = query.getAggregatorSpecs(); Aggregator[] aggregators = new Aggregator[aggregatorSpecs.size()]; String[] aggregatorNames = new String[aggregatorSpecs.size()]; for (int i = 0; i < aggregatorSpecs.size(); i++) { aggregators[i] = aggregatorSpecs.get(i) .factorize(RowBasedColumnSelectorFactory.create(() -> new MapBasedRow( null, null ), null)); aggregatorNames[i] = aggregatorSpecs.get(i).getName(); } final DateTime start = query.getIntervals().isEmpty() ? DateTimes.EPOCH : query.getIntervals().get(0).getStart(); TimeseriesResultBuilder bob = new TimeseriesResultBuilder(start); for (int i = 0; i < aggregatorSpecs.size(); i++) { bob.addMetric(aggregatorNames[i], aggregators[i]); aggregators[i].close(); } return bob.build(); }
if (useNewAggs) { for (AggregatorFactory col : cols) { metrics.addAll(col.requiredFields()); metrics.add(col.getName());
WritableUtils.writeVInt(out, aggs.length); for (AggregatorFactory aggFactory : aggs) { String k = aggFactory.getName(); writeString(k, out); try (Aggregator agg = aggFactory.factorize( IncrementalIndex.makeColumnSelectorFactory(VirtualColumns.EMPTY, aggFactory, supplier, true) )) { String t = aggFactory.getTypeName(); if (agg.isNull()) { out.writeByte(NullHandling.IS_NULL_BYTE);
if (merged != null) { try { merged = merged.getMergingFactory(aggregator); .toArray(new AggregatorFactory[0]) : null; final AggregatorFactory[] merged = AggregatorFactory.mergeAggregators(Arrays.asList(aggs1, aggs2)); if (merged != null) { for (AggregatorFactory aggregator : merged) { aggregators.put(aggregator.getName(), aggregator);