@Override public AggregatorFactory getCombiningFactory() { return new LongSumAggregatorFactory(name, name, null, macroTable); }
@Override public AggregatorFactory getCombiningFactory() { return new LongSumAggregatorFactory(name, name); }
@Override public AggregatorFactory getCombiningFactory() { return new LongSumAggregatorFactory(name, name); }
@Override public List<AggregatorFactory> getRequiredColumns() { return Collections.singletonList(new LongSumAggregatorFactory(fieldName, fieldName, expression, macroTable)); }
static AggregatorFactory createSumAggregatorFactory( final ValueType aggregationType, final String name, final String fieldName, final String expression, final ExprMacroTable macroTable ) { switch (aggregationType) { case LONG: return new LongSumAggregatorFactory(name, fieldName, expression, macroTable); case FLOAT: return new FloatSumAggregatorFactory(name, fieldName, expression, macroTable); case DOUBLE: return new DoubleSumAggregatorFactory(name, fieldName, expression, macroTable); default: throw new ISE("Cannot create aggregator factory for type[%s]", aggregationType); } } }
@SuppressWarnings("unchecked") public int countRows(String dataSource, String interval) { TimeseriesQuery query = Druids.newTimeseriesQueryBuilder() .dataSource(dataSource) .aggregators( ImmutableList.of( new LongSumAggregatorFactory("rows", "count") ) ) .granularity(Granularities.ALL) .intervals(interval) .build(); List<Map<String, Object>> results = queryClient.query(getQueryURL(broker), query); if (results.isEmpty()) { return 0; } else { Map<String, Object> map = (Map<String, Object>) results.get(0).get("result"); return (Integer) map.get("rows"); } }
private BufferArrayGrouper newGrouper( TestColumnSelectorFactory columnSelectorFactory, int bufferSize ) { final ByteBuffer buffer = ByteBuffer.allocate(bufferSize); final BufferArrayGrouper grouper = new BufferArrayGrouper( Suppliers.ofInstance(buffer), columnSelectorFactory, new AggregatorFactory[]{ new LongSumAggregatorFactory("valueSum", "value"), new CountAggregatorFactory("count") }, 1000 ); grouper.init(); return grouper; }
private StreamingMergeSortedGrouper<Integer> newGrouper( TestColumnSelectorFactory columnSelectorFactory, int bufferSize ) { final ByteBuffer buffer = ByteBuffer.allocate(bufferSize); final StreamingMergeSortedGrouper<Integer> grouper = new StreamingMergeSortedGrouper<>( Suppliers.ofInstance(buffer), GrouperTestUtil.intKeySerde(), columnSelectorFactory, new AggregatorFactory[]{ new LongSumAggregatorFactory("valueSum", "value"), new CountAggregatorFactory("count") }, System.currentTimeMillis() + 1000L ); grouper.init(); return grouper; } }
@Test public void testSerde() throws Exception { ObjectMapper jsonMapper = TestHelper.makeJsonMapper(); AggregatorFactory[] aggregators = new AggregatorFactory[] { new LongSumAggregatorFactory("out", "in") }; Metadata metadata = new Metadata( Collections.singletonMap("k", "v"), aggregators, null, Granularities.ALL, Boolean.FALSE ); Metadata other = jsonMapper.readValue( jsonMapper.writeValueAsString(metadata), Metadata.class ); Assert.assertEquals(metadata, other); }
public LongFilteringTest( String testName, IndexBuilder indexBuilder, Function<IndexBuilder, Pair<StorageAdapter, Closeable>> finisher, boolean cnf, boolean optimize ) { super( testName, ROWS, indexBuilder.schema( new IncrementalIndexSchema.Builder() .withMetrics(new LongSumAggregatorFactory(LONG_COLUMN, LONG_COLUMN)) .build() ), finisher, cnf, optimize ); }
@Test public void testRequiredBufferCapacity() { int[] cardinalityArray = new int[]{1, 10, Integer.MAX_VALUE - 1}; AggregatorFactory[] aggregatorFactories = new AggregatorFactory[]{ new LongSumAggregatorFactory("sum", "sum") }; long[] requiredSizes; if (NullHandling.sqlCompatible()) { // We need additional size to store nullability information. requiredSizes = new long[]{19, 101, 19058917368L}; } else { requiredSizes = new long[]{17, 90, 16911433721L}; } for (int i = 0; i < cardinalityArray.length; i++) { Assert.assertEquals(requiredSizes[i], BufferArrayGrouper.requiredBufferCapacity( cardinalityArray[i], aggregatorFactories )); } } }
@Test public void testComparator() { final TestLongColumnSelector selector = new TestLongColumnSelector(new long[]{18293L}); LongSumAggregator agg = new LongSumAggregator(selector); Object first = agg.get(); agg.aggregate(); Comparator comp = new LongSumAggregatorFactory("null", "null").getComparator(); Assert.assertEquals(-1, comp.compare(first, agg.get())); Assert.assertEquals(0, comp.compare(first, first)); Assert.assertEquals(0, comp.compare(agg.get(), agg.get())); Assert.assertEquals(1, comp.compare(agg.get(), first)); } }
@Nullable public Long sumMetric(final Task task, final DimFilter filter, final String metric) { // Do a query. TimeseriesQuery query = Druids.newTimeseriesQueryBuilder() .dataSource("test_ds") .filters(filter) .aggregators( ImmutableList.of( new LongSumAggregatorFactory(metric, metric) ) ).granularity(Granularities.ALL) .intervals("2000/3000") .build(); List<Result<TimeseriesResultValue>> results = task.getQueryRunner(query).run(QueryPlus.wrap(query), ImmutableMap.of()).toList(); if (results.isEmpty()) { return 0L; } else { return results.get(0).getValue().getLongMetric(metric); } }
@Test(expected = IllegalArgumentException.class) public void testMergeResultsWithNegativeLimit() { GroupByQuery.Builder builder = GroupByQuery .builder() .setDataSource(QueryRunnerTestHelper.dataSource) .setInterval("2011-04-02/2011-04-04") .setDimensions(new DefaultDimensionSpec("quality", "alias")) .setAggregatorSpecs(QueryRunnerTestHelper.rowsCount, new LongSumAggregatorFactory("idx", "index")) .setGranularity(new PeriodGranularity(new Period("P1M"), null, null)) .setLimit(-1); builder.build(); }
@Test public void testQueryDataSource() throws IOException { GroupByQuery query = GroupByQuery .builder() .setDataSource(QueryRunnerTestHelper.dataSource) .setQuerySegmentSpec(QueryRunnerTestHelper.firstToThird) .setDimensions(new DefaultDimensionSpec("quality", "alias")) .setAggregatorSpecs(QueryRunnerTestHelper.rowsCount, new LongSumAggregatorFactory("idx", "index")) .setGranularity(QueryRunnerTestHelper.dayGran) .build(); String dataSourceJSON = "{\"type\":\"query\", \"query\":" + jsonMapper.writeValueAsString(query) + "}"; DataSource dataSource = jsonMapper.readValue(dataSourceJSON, DataSource.class); Assert.assertEquals(new QueryDataSource(query), dataSource); }
@Test public void testSimpleGroupBy() { final GroupByQuery query = GroupByQuery .builder() .setDataSource(QueryRunnerTestHelper.dataSource) .setGranularity(Granularities.ALL) .setInterval(QueryRunnerTestHelper.firstToThird) .setAggregatorSpecs(new LongSumAggregatorFactory("rows", "rows")) .setContext(ImmutableMap.of(QueryContexts.TIMEOUT_KEY, TIMEOUT)) .build(); GroupByQueryRunnerTestHelper.runQuery(factory, runner, query); assertEquals(2, mergeBufferPool.getMinRemainBufferNum()); assertEquals(3, mergeBufferPool.getPoolSize()); }
@Test public void testGroupByWithExtractionDimFilterWhenSearchValueNotInTheMap() { Map<String, String> extractionMap = new HashMap<>(); MapLookupExtractor mapLookupExtractor = new MapLookupExtractor(extractionMap, false); LookupExtractionFn lookupExtractionFn = new LookupExtractionFn(mapLookupExtractor, false, null, true, false); GroupByQuery query = GroupByQuery.builder() .setDataSource(QueryRunnerTestHelper.dataSource) .setQuerySegmentSpec(QueryRunnerTestHelper.firstToThird) .setDimensions(new DefaultDimensionSpec("quality", "alias")) .setAggregatorSpecs( QueryRunnerTestHelper.rowsCount, new LongSumAggregatorFactory("idx", "index") ) .setGranularity(QueryRunnerTestHelper.dayGran) .setDimFilter( new ExtractionDimFilter("quality", "NOT_THERE", lookupExtractionFn, null) ) .build(); List<Row> expectedResults = Collections.emptyList(); Iterable<Row> results = GroupByQueryRunnerTestHelper.runQuery(factory, runner, query); TestHelper.assertExpectedObjects(expectedResults, results, "dim-extraction"); }
@Test public void testGroupByWithOutputNameCollisions() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("[alias] already defined"); GroupByQuery .builder() .setDataSource(QueryRunnerTestHelper.dataSource) .setQuerySegmentSpec(QueryRunnerTestHelper.firstToThird) .setDimensions(new DefaultDimensionSpec("quality", "alias")) .setAggregatorSpecs(QueryRunnerTestHelper.rowsCount, new LongSumAggregatorFactory("alias", "index")) .setGranularity(QueryRunnerTestHelper.dayGran) .build(); }
@Test public void testEmptySubquery() { GroupByQuery subquery = GroupByQuery .builder() .setDataSource(QueryRunnerTestHelper.dataSource) .setQuerySegmentSpec(QueryRunnerTestHelper.emptyInterval) .setDimensions(new DefaultDimensionSpec("quality", "alias")) .setAggregatorSpecs(QueryRunnerTestHelper.rowsCount, new LongSumAggregatorFactory("idx", "index")) .setGranularity(QueryRunnerTestHelper.dayGran) .build(); GroupByQuery query = GroupByQuery .builder() .setDataSource(subquery) .setQuerySegmentSpec(QueryRunnerTestHelper.firstToThird) .setAggregatorSpecs(new DoubleMaxAggregatorFactory("idx", "idx")) .setGranularity(QueryRunnerTestHelper.dayGran) .build(); Iterable<Row> results = GroupByQueryRunnerTestHelper.runQuery(factory, runner, query); Assert.assertFalse(results.iterator().hasNext()); }
@Test public void testSubqueryWithOuterVirtualColumns() { final GroupByQuery subquery = GroupByQuery .builder() .setDataSource(QueryRunnerTestHelper.dataSource) .setQuerySegmentSpec(QueryRunnerTestHelper.fullOnIntervalSpec) .setDimensions(new DefaultDimensionSpec("quality", "alias")) .setGranularity(QueryRunnerTestHelper.dayGran) .build(); final GroupByQuery query = GroupByQuery .builder() .setDataSource(subquery) .setQuerySegmentSpec(QueryRunnerTestHelper.firstToThird) .setVirtualColumns(new ExpressionVirtualColumn("expr", "1", ValueType.FLOAT, TestExprMacroTable.INSTANCE)) .setDimensions(new ArrayList<>()).setAggregatorSpecs(new LongSumAggregatorFactory("count", "expr")) .setGranularity(QueryRunnerTestHelper.allGran) .build(); List<Row> expectedResults = Collections.singletonList( GroupByQueryRunnerTestHelper.createExpectedRow("2011-04-01", "count", 18L) ); Iterable<Row> results = GroupByQueryRunnerTestHelper.runQuery(factory, runner, query); TestHelper.assertExpectedObjects(expectedResults, results, "subquery-virtual"); }