default <R> Sequence<R> flatMerge( Function<? super T, ? extends Sequence<? extends R>> mapper, Ordering<? super R> ordering ) { return new MergeSequence<>(ordering, this.map(mapper)); }
default <R> Sequence<R> flatMap(Function<? super T, ? extends Sequence<? extends R>> mapper) { return new ConcatSequence<>(this.map(mapper)); }
null .map(cursor -> new BaseSequence<>( new BaseSequence.IteratorMaker<ScanResultValue, Iterator<ScanResultValue>>()
@Override public Sequence<Cursor> makeCursors( @Nullable final Filter filter, final Interval interval, final VirtualColumns virtualColumns, final Granularity gran, final boolean descending, @Nullable QueryMetrics<?> queryMetrics ) { if (index.isEmpty()) { return Sequences.empty(); } final Interval dataInterval = new Interval(getMinTime(), gran.bucketEnd(getMaxTime())); if (!interval.overlaps(dataInterval)) { return Sequences.empty(); } final Interval actualInterval = interval.overlap(dataInterval); Iterable<Interval> intervals = gran.getIterable(actualInterval); if (descending) { intervals = Lists.reverse(ImmutableList.copyOf(intervals)); } return Sequences .simple(intervals) .map(i -> new IncrementalIndexCursor(virtualColumns, descending, filter, i, actualInterval, gran)); }
@SuppressWarnings("unchecked") private Sequence<T> getBySegmentServerResults( final QueryRunner serverRunner, final MultipleSpecificSegmentSpec segmentsOfServerSpec, long maxQueuedBytesPerServer ) { Sequence<Result<BySegmentResultValueClass<T>>> resultsBySegments = serverRunner .run( queryPlus.withQuerySegmentSpec(segmentsOfServerSpec).withMaxQueuedBytes(maxQueuedBytesPerServer), responseContext ); // bySegment results need to be de-serialized, see DirectDruidClient.run() return (Sequence<T>) resultsBySegments .map(result -> result.map( resultsOfSegment -> resultsOfSegment.mapResults( toolChest.makePreComputeManipulatorFn(query, MetricManipulatorFns.deserializing())::apply ) )); }
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 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 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 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); }
.map(result -> { final BySegmentResultValueClass<T> resultsOfSegment = result.getValue(); final Cache.NamedKey cachePopulatorKey = res = cachePopulator.wrap(res, cacheFn::apply, cache, cachePopulatorKey); return res.map( toolChest.makePreComputeManipulatorFn(downstreamQuery, MetricManipulatorFns.deserializing())::apply );
.map(cursor -> { final DimensionSelector selector = cursor.getColumnSelectorFactory().makeDimensionSelector( DefaultDimensionSpec.of("v")
.map(cursor -> { final DimensionSelector selector = cursor .getColumnSelectorFactory()
@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 List<Integer> hashes = cursorSequence .map(cursor -> { final DimensionSelector selector = cursor.getColumnSelectorFactory() .makeDimensionSelector(new DefaultDimensionSpec("dim", "dim"));
); List<Result<BySegmentTopNResultValue>> resultList = results .map((Result<TopNResultValue> input) -> {
default <R> Sequence<R> flatMerge( Function<? super T, ? extends Sequence<? extends R>> mapper, Ordering<? super R> ordering ) { return new MergeSequence<>(ordering, this.map(mapper)); }