@Override public Object finalizeComputation(Object object) { return delegate.finalizeComputation(object); }
@Override public Object finalizeComputation(Object object) { return delegate.finalizeComputation(object); }
@Override public Object manipulate(final AggregatorFactory factory, final Object object) { return factory.finalizeComputation(object); } };
@Override public RowFunction getRowFunction() { return row -> aggregator.finalizeComputation(row.getRaw(name)); } }
@Override public Object compute(Map<String, Object> combinedAggregators) { final Object collector = combinedAggregators.get(fieldName); if (aggregatorFactory == null) { // This didn't come directly from an aggregator. Maybe it came through a FieldAccessPostAggregator or // something like that. Hope it's a HyperLogLogCollector, and estimate it without rounding. return HyperUniquesAggregatorFactory.estimateCardinality(collector, false); } else { // Delegate to the aggregator factory to get the user-specified rounding behavior. return aggregatorFactory.finalizeComputation(collector); } }
metricValueObj = aggregators.get(aggregationName).finalizeComputation(metricValueObj);
EasyMock.expect(aggFactory.finalizeComputation("test_val1")) .andReturn(new Long(10L)) .times(1); EasyMock.expect(aggFactory.finalizeComputation("test_val2")) .andReturn(new Long(21)) .times(1); EasyMock.expect(aggFactory.finalizeComputation("test_val3")) .andReturn(new Long(3)) .times(1); EasyMock.expect(aggFactory.finalizeComputation("test_val4")) .andReturn(null) .times(1);
@Test public void testComputedWithFinalizing() { String aggName = "biily"; AggregatorFactory aggFactory = EasyMock.createMock(AggregatorFactory.class); EasyMock.expect(aggFactory.getComparator()).andReturn(Comparators.naturalNullsFirst()).once(); EasyMock.expect(aggFactory.finalizeComputation("test")).andReturn(3L).once(); EasyMock.replay(aggFactory); FinalizingFieldAccessPostAggregator postAgg = buildDecorated( "final_billy", aggName, ImmutableMap.of(aggName, aggFactory) ); // Check that the class matches exactly; see https://github.com/apache/incubator-druid/issues/6063 Assert.assertEquals(FinalizingFieldAccessPostAggregator.class, postAgg.getClass()); Map<String, Object> metricValues = new HashMap<>(); metricValues.put(aggName, "test"); Assert.assertEquals(new Long(3L), postAgg.compute(metricValues)); EasyMock.verify(aggFactory); }
@Test public void testComputedInArithmeticPostAggregator() { String aggName = "billy"; AggregatorFactory aggFactory = EasyMock.createMock(AggregatorFactory.class); EasyMock.expect(aggFactory.getComparator()).andReturn(Comparators.naturalNullsFirst()).once(); EasyMock.expect(aggFactory.finalizeComputation("test")).andReturn(3L).once(); EasyMock.replay(aggFactory); FinalizingFieldAccessPostAggregator postAgg = buildDecorated( "final_billy", aggName, ImmutableMap.of(aggName, aggFactory) ); Map<String, Object> metricValues = new HashMap<>(); metricValues.put(aggName, "test"); List<PostAggregator> postAggsList = Lists.newArrayList( new ConstantPostAggregator("roku", 6), postAgg); ArithmeticPostAggregator arithmeticPostAggregator = new ArithmeticPostAggregator("add", "+", postAggsList); Assert.assertEquals(new Double(9.0f), arithmeticPostAggregator.compute(metricValues)); EasyMock.verify(); }
@Override public Object finalizeComputation(Object object) { return delegate.finalizeComputation(object); }
@Override public Object manipulate(final AggregatorFactory factory, final Object object) { return factory.finalizeComputation(object); } };
@Override public Object finalizeComputation(Object object) { return delegate.finalizeComputation(object); }
@Override public RowFunction getRowFunction() { return row -> aggregator.finalizeComputation(row.getRaw(name)); } }
@Override public Object compute(Map<String, Object> combinedAggregators) { final Object collector = combinedAggregators.get(fieldName); if (aggregatorFactory == null) { // This didn't come directly from an aggregator. Maybe it came through a FieldAccessPostAggregator or // something like that. Hope it's a HyperLogLogCollector, and estimate it without rounding. return HyperUniquesAggregatorFactory.estimateCardinality(collector, false); } else { // Delegate to the aggregator factory to get the user-specified rounding behavior. return aggregatorFactory.finalizeComputation(collector); } }
metricValueObj = aggregators.get(aggregationName).finalizeComputation(metricValueObj);