return new FilteredAggregatorFactory( delegate, new IntervalDimFilter(
final FilteredAggregatorFactory filteredAgg = (FilteredAggregatorFactory) agg; newAggregators.add( new FilteredAggregatorFactory( filteredAgg.getAggregator(), Filtration.create(new AndDimFilter(ImmutableList.of(filteredAgg.getFilter(), baseOptimizedFilter))) .optimizeFilterOnly(sourceRowSignature) .getDimFilter() newAggregators.add(new FilteredAggregatorFactory(agg, baseOptimizedFilter));
@Test public void testAggregate() { final float[] values = {0.15f, 0.27f}; final TestFloatColumnSelector selector = new TestFloatColumnSelector(values); FilteredAggregatorFactory factory = new FilteredAggregatorFactory( new DoubleSumAggregatorFactory("billy", "value"), new SelectorDimFilter("dim", "a", null) ); FilteredAggregator agg = (FilteredAggregator) factory.factorize(makeColumnSelector(selector)); double expectedFirst = new Float(values[0]).doubleValue(); double expectedSecond = new Float(values[1]).doubleValue() + expectedFirst; double expectedThird = expectedSecond; assertValues(agg, selector, expectedFirst, expectedSecond, expectedThird); }
final boolean doesMatch = existingAggregation.getAggregatorFactories().stream().allMatch( factory -> factory instanceof FilteredAggregatorFactory && ((FilteredAggregatorFactory) factory).getFilter().equals(filter) ); existingAggregation.getVirtualColumns(), existingAggregation.getAggregatorFactories().stream() .map(factory -> ((FilteredAggregatorFactory) factory).getAggregator()) .collect(Collectors.toList()), existingAggregation.getPostAggregator()
@Test public void testFilteredAggregatorDontOptimizeOnNonTimeColumn() { // Filter is not on __time, so no optimizations should be made. LongSumAggregatorFactory longSumAggregatorFactory = new LongSumAggregatorFactory("test", "test"); FilteredAggregatorFactory aggregatorFactory = new FilteredAggregatorFactory( longSumAggregatorFactory, new IntervalDimFilter( "not_time", Collections.singletonList(Intervals.utc(1000, 2000)), null ) ); Interval exclude = Intervals.utc(2000, 3000); Interval include = Intervals.utc(1500, 1600); Interval partial = Intervals.utc(1500, 2500); AggregatorFactory excludedAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(exclude)); Assert.assertEquals(aggregatorFactory, excludedAgg); AggregatorFactory includedAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(include)); Assert.assertEquals(aggregatorFactory, includedAgg); AggregatorFactory partialAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(partial)); Assert.assertEquals(aggregatorFactory, partialAgg); }
@Test public void testSimpleNaming() { Assert.assertEquals("overrideName", new FilteredAggregatorFactory( new CountAggregatorFactory("foo"), new TrueDimFilter(), "overrideName" ).getName()); Assert.assertEquals("delegateName", new FilteredAggregatorFactory( new CountAggregatorFactory("delegateName"), new TrueDimFilter(), "" ).getName()); Assert.assertEquals("delegateName", new FilteredAggregatorFactory( new CountAggregatorFactory("delegateName"), new TrueDimFilter(), null ).getName()); } }
private static Set<String> extractFieldsFromAggregations(List<AggregatorFactory> aggs) { Set<String> ret = new HashSet<>(); for (AggregatorFactory agg : aggs) { if (agg instanceof FilteredAggregatorFactory) { FilteredAggregatorFactory fagg = (FilteredAggregatorFactory) agg; ret.addAll(fagg.getFilter().getRequiredColumns()); } ret.addAll(agg.requiredFields()); } return ret; }
private void validateFilteredAggs( FilteredAggregatorFactory factory, float[] values, TestFloatColumnSelector selector ) { FilteredAggregator agg = (FilteredAggregator) factory.factorize( makeColumnSelector(selector) ); double expectedFirst = new Float(values[0]).doubleValue(); double expectedSecond = new Float(values[1]).doubleValue() + expectedFirst; double expectedThird = expectedSecond; assertValues(agg, selector, expectedFirst, expectedSecond, expectedThird); } }
FilteredAggregatorFactory aggregatorFactory = new FilteredAggregatorFactory( longSumAggregatorFactory, new IntervalDimFilter( Interval partial = Intervals.utc(1500, 2500); AggregatorFactory excludedAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(exclude)); AggregatorFactory expectedSuppressedAgg = new SuppressedAggregatorFactory(longSumAggregatorFactory); Assert.assertEquals(expectedSuppressedAgg, excludedAgg); AggregatorFactory includedAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(include)); Assert.assertEquals(longSumAggregatorFactory, includedAgg); AggregatorFactory partialAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(partial)); AggregatorFactory expectedPartialFilteredAgg = new FilteredAggregatorFactory( longSumAggregatorFactory, new IntervalDimFilter(
final boolean doesMatch = existingAggregation.getAggregatorFactories().stream().allMatch( factory -> factory instanceof FilteredAggregatorFactory && ((FilteredAggregatorFactory) factory).getFilter().equals(filter) ); existingAggregation.getVirtualColumns(), existingAggregation.getAggregatorFactories().stream() .map(factory -> ((FilteredAggregatorFactory) factory).getAggregator()) .collect(Collectors.toList()), existingAggregation.getPostAggregator()
BoundDimFilter timeFilter = new BoundDimFilter(ColumnHolder.TIME_COLUMN_NAME, "200000", "300000", false, false, null, null, StringComparators.NUMERIC); queryAggs.add(new FilteredAggregatorFactory(lsaf, timeFilter)); BoundDimFilter timeFilter = new BoundDimFilter(ColumnHolder.TIME_COLUMN_NAME, "200000", "300000", false, false, null, null, StringComparators.ALPHANUMERIC); queryAggs.add(new FilteredAggregatorFactory(lsaf, timeFilter));
final FilteredAggregatorFactory filteredAgg = (FilteredAggregatorFactory) agg; newAggregators.add( new FilteredAggregatorFactory( filteredAgg.getAggregator(), Filtration.create(new AndDimFilter(ImmutableList.of(filteredAgg.getFilter(), baseOptimizedFilter))) .optimizeFilterOnly(sourceRowSignature) .getDimFilter() newAggregators.add(new FilteredAggregatorFactory(agg, baseOptimizedFilter));
@Override public Aggregator apply(Cursor input) { Aggregator agg = new FilteredAggregatorFactory( new CountAggregatorFactory("count"), maybeOptimize(filter) ).factorize(input.getColumnSelectorFactory()); for (; !input.isDone(); input.advance()) { agg.aggregate(); } return agg; } }
new FilteredAggregatorFactory( new FilteredAggregatorFactory( new LongSumAggregatorFactory("_cmp_sumLongSequential", "sumLongSequential"), new IntervalDimFilter( new FilteredAggregatorFactory( new LongSumAggregatorFactory( "sumLongSequential", "sumLongSequential" new FilteredAggregatorFactory( new LongSumAggregatorFactory( "_cmp_sumLongSequential", "sumLongSequential"
@Test public void testAggregateWithOrFilter() { final float[] values = {0.15f, 0.27f, 0.14f}; final TestFloatColumnSelector selector = new TestFloatColumnSelector(values); FilteredAggregatorFactory factory = new FilteredAggregatorFactory( new DoubleSumAggregatorFactory("billy", "value"), new OrDimFilter(Lists.newArrayList(new SelectorDimFilter("dim", "a", null), new SelectorDimFilter("dim", "b", null))) ); FilteredAggregator agg = (FilteredAggregator) factory.factorize( makeColumnSelector(selector) ); double expectedFirst = new Float(values[0]).doubleValue(); double expectedSecond = new Float(values[1]).doubleValue() + expectedFirst; double expectedThird = expectedSecond + new Float(values[2]).doubleValue(); assertValues(agg, selector, expectedFirst, expectedSecond, expectedThird); }
.intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .aggregators(Lists.newArrayList(Iterables.concat(commonAggregators, Lists.newArrayList( new FilteredAggregatorFactory(new DoubleMaxAggregatorFactory("maxIndex", "index"), extractionFilter),
commonAggregators, Lists.newArrayList( new FilteredAggregatorFactory( new DoubleMaxAggregatorFactory("maxIndex", "index"), extractionFilter
filteredMetrics[0] = new FilteredAggregatorFactory(new CountAggregatorFactory("rows"), filter); incIndexFilteredAgg = makeIncIndex(filteredMetrics);
Arrays.asList( new CountAggregatorFactory("rows"), new FilteredAggregatorFactory( new LongSumAggregatorFactory("valFiltered", "val"), new SpatialDimFilter(
.granularity(Granularities.ALL) .aggregators(AGGS( new FilteredAggregatorFactory( new LongSumAggregatorFactory("a0", "cnt"), BOUND( new FilteredAggregatorFactory( new LongSumAggregatorFactory("a1", "cnt"), BOUND(