private Sequence<Row> mergeGroupByResults(final GroupByQuery query, QueryRunner<Row> runner) { Sequence<Row> result; // If there's a subquery, merge subquery results and then apply the aggregator DataSource dataSource = query.getDataSource(); if (dataSource instanceof QueryDataSource) { GroupByQuery subquery; try { subquery = (GroupByQuery) ((QueryDataSource) dataSource).getQuery(); } catch (ClassCastException e) { throw new UnsupportedOperationException("Subqueries must be of type 'group by'"); } Sequence<Row> subqueryResult = mergeGroupByResults(subquery, runner); IncrementalIndexStorageAdapter adapter = new IncrementalIndexStorageAdapter(makeIncrementalIndex(subquery, subqueryResult)); result = engine.process(query, adapter); } else { result = runner.run(query); } return postAggregate(query, makeIncrementalIndex(query, result)); }
extractionsToRewrite(query), new Function<DimensionSpec, String>() final Function<Row, Row> preCompute = makePreComputeManipulatorFn(query, fn); if (optimizedDims.isEmpty()) { return preCompute;
final Sequence<Row> subqueryResult = mergeGroupByResults( groupByStrategy, subquery.withOverriddenContext( finalizingResults = new MappedSequence<>( subqueryResult, makePreComputeManipulatorFn( subquery, MetricManipulatorFns.finalizing()
private Sequence<Row> initAndMergeGroupByResults( final GroupByQuery query, QueryRunner<Row> runner, Map<String, Object> context ) { final GroupByStrategy groupByStrategy = strategySelector.strategize(query); final GroupByQueryResource resource = groupByStrategy.prepareResource(query, false); return Sequences.withBaggage( mergeGroupByResults( groupByStrategy, query, resource, runner, context ), resource ); }
private static GroupByQueryRunnerFactory getGroupByQueryRunnerFactory() { ObjectMapper mapper = new DefaultObjectMapper(); GroupByQueryConfig config = new GroupByQueryConfig(); config.setMaxIntermediateRows(10000); Supplier<GroupByQueryConfig> configSupplier = Suppliers.ofInstance(config); GroupByQueryEngine engine = new GroupByQueryEngine(configSupplier, Utils.getBufferPool()); GroupByQueryRunnerFactory factory = new GroupByQueryRunnerFactory(engine, Utils.NOOP_QUERYWATCHER, configSupplier, new GroupByQueryQueryToolChest(configSupplier, mapper, engine, Utils.getBufferPool(), Utils.NoopIntervalChunkingQueryRunnerDecorator()), Utils.getBufferPool()); return factory; }
Set<String> optimizedDimensions = ImmutableSet.copyOf( Iterables.transform( extractionsToRewrite(delegateGroupByQuery), new Function<DimensionSpec, String>()