Search in sources :

Example 1 with GroupByStrategy

use of org.apache.druid.query.groupby.strategy.GroupByStrategy in project druid by druid-io.

the class NestedQueryPushDownTest method runNestedQueryWithForcePushDown.

private Sequence<ResultRow> runNestedQueryWithForcePushDown(GroupByQuery nestedQuery) {
    ResponseContext context = ResponseContext.createEmpty();
    QueryToolChest<ResultRow, GroupByQuery> toolChest = groupByFactory.getToolchest();
    GroupByQuery pushDownQuery = nestedQuery;
    QueryRunner<ResultRow> segment1Runner = new FinalizeResultsQueryRunner<ResultRow>(toolChest.mergeResults(groupByFactory.mergeRunners(executorService, getQueryRunnerForSegment1())), (QueryToolChest) toolChest);
    QueryRunner<ResultRow> segment2Runner = new FinalizeResultsQueryRunner<ResultRow>(toolChest.mergeResults(groupByFactory2.mergeRunners(executorService, getQueryRunnerForSegment2())), (QueryToolChest) toolChest);
    QueryRunner<ResultRow> queryRunnerForSegments = new FinalizeResultsQueryRunner<>(toolChest.mergeResults((queryPlus, responseContext) -> Sequences.simple(ImmutableList.of(Sequences.map(segment1Runner.run(queryPlus, responseContext), toolChest.makePreComputeManipulatorFn((GroupByQuery) queryPlus.getQuery(), MetricManipulatorFns.deserializing())), Sequences.map(segment2Runner.run(queryPlus, responseContext), toolChest.makePreComputeManipulatorFn((GroupByQuery) queryPlus.getQuery(), MetricManipulatorFns.deserializing())))).flatMerge(Function.identity(), queryPlus.getQuery().getResultOrdering())), (QueryToolChest) toolChest);
    GroupByStrategy strategy = ((GroupByQueryRunnerFactory) groupByFactory).getStrategySelector().strategize(nestedQuery);
    // Historicals execute the query with force push down flag as false
    GroupByQuery queryWithPushDownDisabled = pushDownQuery.withOverriddenContext(ImmutableMap.of(GroupByQueryConfig.CTX_KEY_FORCE_PUSH_DOWN_NESTED_QUERY, false));
    Sequence<ResultRow> pushDownQueryResults = strategy.mergeResults(queryRunnerForSegments, queryWithPushDownDisabled, context);
    return toolChest.mergeResults((queryPlus, responseContext) -> pushDownQueryResults).run(QueryPlus.wrap(nestedQuery), context);
}
Also used : QueryPlus(org.apache.druid.query.QueryPlus) Arrays(java.util.Arrays) LongDimensionSchema(org.apache.druid.data.input.impl.LongDimensionSchema) StupidPool(org.apache.druid.collections.StupidPool) IndexSpec(org.apache.druid.segment.IndexSpec) DefaultBlockingPool(org.apache.druid.collections.DefaultBlockingPool) ByteBuffer(java.nio.ByteBuffer) DefaultDimensionSpec(org.apache.druid.query.dimension.DefaultDimensionSpec) LongSumAggregatorFactory(org.apache.druid.query.aggregation.LongSumAggregatorFactory) QueryWatcher(org.apache.druid.query.QueryWatcher) After(org.junit.After) Map(java.util.Map) QueryRunner(org.apache.druid.query.QueryRunner) GroupByStrategySelector(org.apache.druid.query.groupby.strategy.GroupByStrategySelector) ExtractionDimensionSpec(org.apache.druid.query.dimension.ExtractionDimensionSpec) FileUtils(org.apache.druid.java.util.common.FileUtils) OffHeapMemorySegmentWriteOutMediumFactory(org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory) GroupByStrategy(org.apache.druid.query.groupby.strategy.GroupByStrategy) Sequence(org.apache.druid.java.util.common.guava.Sequence) FinalizeResultsQueryRunner(org.apache.druid.query.FinalizeResultsQueryRunner) Execs(org.apache.druid.java.util.common.concurrent.Execs) ImmutableMap(com.google.common.collect.ImmutableMap) QueryableIndex(org.apache.druid.segment.QueryableIndex) DruidProcessingConfig(org.apache.druid.query.DruidProcessingConfig) RegexDimExtractionFn(org.apache.druid.query.extraction.RegexDimExtractionFn) StringDimensionSchema(org.apache.druid.data.input.impl.StringDimensionSchema) BySegmentQueryRunner(org.apache.druid.query.BySegmentQueryRunner) QuerySegmentSpec(org.apache.druid.query.spec.QuerySegmentSpec) IncrementalIndexSchema(org.apache.druid.segment.incremental.IncrementalIndexSchema) ExprMacroTable(org.apache.druid.math.expr.ExprMacroTable) InputRow(org.apache.druid.data.input.InputRow) BlockingPool(org.apache.druid.collections.BlockingPool) List(java.util.List) SegmentId(org.apache.druid.timeline.SegmentId) QueryableIndexSegment(org.apache.druid.segment.QueryableIndexSegment) Logger(org.apache.druid.java.util.common.logger.Logger) InjectableValues(com.fasterxml.jackson.databind.InjectableValues) NonBlockingPool(org.apache.druid.collections.NonBlockingPool) Intervals(org.apache.druid.java.util.common.Intervals) Supplier(com.google.common.base.Supplier) MetricManipulatorFns(org.apache.druid.query.aggregation.MetricManipulatorFns) MapBasedInputRow(org.apache.druid.data.input.MapBasedInputRow) HashMap(java.util.HashMap) Function(java.util.function.Function) JavaScriptConfig(org.apache.druid.js.JavaScriptConfig) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) Query(org.apache.druid.query.Query) IncrementalIndex(org.apache.druid.segment.incremental.IncrementalIndex) Suppliers(com.google.common.base.Suppliers) MultipleIntervalSegmentSpec(org.apache.druid.query.spec.MultipleIntervalSegmentSpec) IndexMergerV9(org.apache.druid.segment.IndexMergerV9) OnheapIncrementalIndex(org.apache.druid.segment.incremental.OnheapIncrementalIndex) Sequences(org.apache.druid.java.util.common.guava.Sequences) ExecutorService(java.util.concurrent.ExecutorService) Before(org.junit.Before) Segment(org.apache.druid.segment.Segment) GroupByStrategyV2(org.apache.druid.query.groupby.strategy.GroupByStrategyV2) ResponseContext(org.apache.druid.query.context.ResponseContext) GroupByStrategyV1(org.apache.druid.query.groupby.strategy.GroupByStrategyV1) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) QueryToolChest(org.apache.druid.query.QueryToolChest) DimensionsSpec(org.apache.druid.data.input.impl.DimensionsSpec) Test(org.junit.Test) GreaterThanHavingSpec(org.apache.druid.query.groupby.having.GreaterThanHavingSpec) SmileFactory(com.fasterxml.jackson.dataformat.smile.SmileFactory) File(java.io.File) DefaultObjectMapper(org.apache.druid.jackson.DefaultObjectMapper) Granularities(org.apache.druid.java.util.common.granularity.Granularities) LongMaxAggregatorFactory(org.apache.druid.query.aggregation.LongMaxAggregatorFactory) AtomicLong(java.util.concurrent.atomic.AtomicLong) QueryRunnerFactory(org.apache.druid.query.QueryRunnerFactory) Assert(org.junit.Assert) IndexIO(org.apache.druid.segment.IndexIO) Collections(java.util.Collections) JavaScriptDimFilter(org.apache.druid.query.filter.JavaScriptDimFilter) FinalizeResultsQueryRunner(org.apache.druid.query.FinalizeResultsQueryRunner) ResponseContext(org.apache.druid.query.context.ResponseContext) GroupByStrategy(org.apache.druid.query.groupby.strategy.GroupByStrategy)

Example 2 with GroupByStrategy

use of org.apache.druid.query.groupby.strategy.GroupByStrategy in project druid by druid-io.

the class GroupByQueryQueryToolChest method initAndMergeGroupByResults.

private Sequence<ResultRow> initAndMergeGroupByResults(final GroupByQuery query, QueryRunner<ResultRow> runner, ResponseContext context) {
    final GroupByStrategy groupByStrategy = strategySelector.strategize(query);
    final GroupByQueryResource resource = groupByStrategy.prepareResource(query);
    try {
        final Sequence<ResultRow> mergedSequence = mergeGroupByResults(groupByStrategy, query, resource, runner, context);
        return Sequences.withBaggage(mergedSequence, resource);
    } catch (Exception e) {
        // Error creating the Sequence; release resources.
        resource.close();
        throw e;
    }
}
Also used : GroupByStrategy(org.apache.druid.query.groupby.strategy.GroupByStrategy) IOException(java.io.IOException) GroupByQueryResource(org.apache.druid.query.groupby.resource.GroupByQueryResource)

Aggregations

GroupByStrategy (org.apache.druid.query.groupby.strategy.GroupByStrategy)2 InjectableValues (com.fasterxml.jackson.databind.InjectableValues)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 SmileFactory (com.fasterxml.jackson.dataformat.smile.SmileFactory)1 Supplier (com.google.common.base.Supplier)1 Suppliers (com.google.common.base.Suppliers)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 File (java.io.File)1 IOException (java.io.IOException)1 ByteBuffer (java.nio.ByteBuffer)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 ExecutorService (java.util.concurrent.ExecutorService)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 Function (java.util.function.Function)1