final DimFilter filter = filterJson != null ? objectMapper.readValue(filterJson, DimFilter.class) : null; final Sequence<Cursor> cursors = adapter.makeCursors( Filters.toFilter(filter), index.getDataInterval().withChronology(ISOChronology.getInstanceUTC()),
private double compute(final Function<ColumnSelectorFactory, BufferAggregator> aggregatorFactory) { final QueryableIndexStorageAdapter adapter = new QueryableIndexStorageAdapter(index); final Sequence<Cursor> cursors = adapter.makeCursors( null, index.getDataInterval(), VirtualColumns.EMPTY, Granularities.ALL, false, null ); final List<Double> results = cursors .map(cursor -> { final BufferAggregator bufferAggregator = aggregatorFactory.apply(cursor.getColumnSelectorFactory()); bufferAggregator.init(aggregationBuffer, 0); while (!cursor.isDone()) { bufferAggregator.aggregate(aggregationBuffer, 0); cursor.advance(); } final Double dbl = (Double) bufferAggregator.get(aggregationBuffer, 0); bufferAggregator.close(); return dbl; }) .toList(); return Iterables.getOnlyElement(results); }
@Benchmark public void strlenUsingExpressionAsLong(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "strlen(s)", ValueType.STRING, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void timeFloorUsingCursor(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.EMPTY, Granularities.HOUR, false, null ); final List<Long> results = cursors .map(cursor -> { long count = 0L; while (!cursor.isDone()) { count++; cursor.advance(); } return count; }) .toList(); long count = 0L; for (Long result : results) { count += result; } blackhole.consume(count); }
@Benchmark public void arithmeticOnLong(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "n + 1", ValueType.LONG, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void timeFloorUsingExpression(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "timestamp_floor(__time, 'PT1H')", ValueType.LONG, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void stringConcatAndCompareOnLong(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "concat(n, ' is my favorite number') == '3 is my favorite number'", ValueType.LONG, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void strlenUsingExpressionAsString(Blackhole blackhole) final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(),
@Benchmark public void timeFormatUsingExpression(Blackhole blackhole) final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(),
@Benchmark public void strlenUsingExtractionFn(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.EMPTY, Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final DimensionSelector selector = cursor .getColumnSelectorFactory() .makeDimensionSelector(new ExtractionDimensionSpec("x", "v", StrlenExtractionFn.instance())); consumeDimension(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void timeFloorUsingExtractionFn(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.EMPTY, Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final DimensionSelector selector = cursor .getColumnSelectorFactory() .makeDimensionSelector( new ExtractionDimensionSpec( ColumnHolder.TIME_COLUMN_NAME, "v", new TimeFormatExtractionFn(null, null, null, Granularities.HOUR, true) ) ); consumeDimension(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void timeFormatUsingExtractionFn(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.EMPTY, Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final DimensionSelector selector = cursor .getColumnSelectorFactory() .makeDimensionSelector( new ExtractionDimensionSpec( ColumnHolder.TIME_COLUMN_NAME, "v", new TimeFormatExtractionFn("yyyy-MM-dd", null, null, null, false) ) ); consumeDimension(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
final DimFilter filter = filterJson != null ? objectMapper.readValue(filterJson, DimFilter.class) : null; final Sequence<Cursor> cursors = adapter.makeCursors( Filters.toFilter(filter), index.getDataInterval().withChronology(ISOChronology.getInstanceUTC()),