Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Union in Decoupled planning #17354

Open
wants to merge 159 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
1792656
Support UNNEST in decoupled mode
kgyrtkirk Sep 30, 2024
be298b7
cleanup
kgyrtkirk Sep 30, 2024
726eec6
some stuff
kgyrtkirk Oct 1, 2024
fadaa32
add stuff
kgyrtkirk Oct 1, 2024
6daa7d4
updates
kgyrtkirk Oct 1, 2024
1dc39ea
add debug result
kgyrtkirk Oct 2, 2024
87fc449
Merge remote-tracking branch 'apache/master' into decouple-unnest
kgyrtkirk Oct 2, 2024
d8f440d
Merge branch 'decouple-unnest' into decouple-union
kgyrtkirk Oct 2, 2024
df44cb5
add cast
kgyrtkirk Oct 2, 2024
8f9b808
x
kgyrtkirk Oct 2, 2024
932d61d
return emptylist
kgyrtkirk Oct 3, 2024
d62e993
Revert "return emptylist"
kgyrtkirk Oct 3, 2024
d5ecc0c
undo empty
kgyrtkirk Oct 3, 2024
4f382e5
use UnionResult for now
kgyrtkirk Oct 3, 2024
44ea85e
add some stuff
kgyrtkirk Oct 3, 2024
24ae912
make method non-static
kgyrtkirk Oct 3, 2024
6035164
make non-static more
kgyrtkirk Oct 3, 2024
9ef426f
make getToolChest method
kgyrtkirk Oct 3, 2024
2f78fd3
setwarehouse
kgyrtkirk Oct 3, 2024
cae132a
make union work
kgyrtkirk Oct 3, 2024
63caf06
foxes
kgyrtkirk Oct 3, 2024
dc25d2f
fix serialization
kgyrtkirk Oct 3, 2024
60d0408
re-add
kgyrtkirk Oct 3, 2024
43ae60d
undo emptylit
kgyrtkirk Oct 3, 2024
8f58d49
x
kgyrtkirk Oct 3, 2024
2a4ab81
cant be fixed?
kgyrtkirk Oct 3, 2024
f96969d
mods
kgyrtkirk Oct 9, 2024
b36e9eb
minimalize change
kgyrtkirk Oct 9, 2024
27c80e8
canMaterializeQuery
kgyrtkirk Oct 10, 2024
5284ad8
Revert "canMaterializeQuery"
kgyrtkirk Oct 10, 2024
ec5a350
mx
kgyrtkirk Oct 10, 2024
b5471e0
fix
kgyrtkirk Oct 10, 2024
94093b3
add some interface
kgyrtkirk Oct 11, 2024
ad00767
updates
kgyrtkirk Oct 11, 2024
4dd587e
defaultconglomerate.of
kgyrtkirk Oct 11, 2024
fa4e598
ConglomerateBackedQueryToolChestWarehouse
kgyrtkirk Oct 11, 2024
870de00
extract
kgyrtkirk Oct 11, 2024
e346500
make mintopnthresholdsupplier history
kgyrtkirk Oct 11, 2024
3644b16
inline twice
kgyrtkirk Oct 11, 2024
b8138b8
cleanup method; mergebuffercount==0 no more make minTopNThreshold irr…
kgyrtkirk Oct 11, 2024
763e1a0
one less method
kgyrtkirk Oct 11, 2024
fc8a1f1
use non-closer related method
kgyrtkirk Oct 11, 2024
dcab034
push it out even more
kgyrtkirk Oct 11, 2024
98034b1
make testbuffersomethiung arrive via injector
kgyrtkirk Oct 11, 2024
7fc3331
inline/etc
kgyrtkirk Oct 11, 2024
8fe0331
compile fix
kgyrtkirk Oct 11, 2024
8628e6d
Revert "defaultconglomerate.of"
kgyrtkirk Oct 11, 2024
bc4c881
rename/etc
kgyrtkirk Oct 11, 2024
b3c8ceb
rename/etc
kgyrtkirk Oct 11, 2024
02b126c
cleanup
kgyrtkirk Oct 11, 2024
451d29d
split basequery in two
kgyrtkirk Oct 11, 2024
523d82d
use abstract
kgyrtkirk Oct 11, 2024
13abfb2
undo basequery split
kgyrtkirk Oct 11, 2024
2503974
rename/etc
kgyrtkirk Oct 11, 2024
ae21921
na jo
kgyrtkirk Oct 11, 2024
5d2f088
cleamp
kgyrtkirk Oct 11, 2024
ae40a8b
fix
kgyrtkirk Oct 11, 2024
ab03132
add Named
kgyrtkirk Oct 11, 2024
bba4f57
move class
kgyrtkirk Oct 11, 2024
95aa746
enabling access to override factories
kgyrtkirk Oct 14, 2024
d4055ac
dead end
kgyrtkirk Oct 14, 2024
8786707
Revert "dead end"
kgyrtkirk Oct 14, 2024
00129b2
this may actually work
kgyrtkirk Oct 14, 2024
b5063db
simpler
kgyrtkirk Oct 14, 2024
84545f5
cleanup via abstract delegate
kgyrtkirk Oct 15, 2024
25fa778
make abstract
kgyrtkirk Oct 15, 2024
949118f
cleanup
kgyrtkirk Oct 15, 2024
b59771c
cleanup/etc
kgyrtkirk Oct 15, 2024
01cc4f5
cleanup/etc
kgyrtkirk Oct 15, 2024
362bd18
remove createConglomerate
kgyrtkirk Oct 15, 2024
94ece7a
fix style
kgyrtkirk Oct 15, 2024
078f7c9
add wrapConglomerate
kgyrtkirk Oct 15, 2024
d0cbaf5
add closer
kgyrtkirk Oct 15, 2024
031f9de
fix conflict
kgyrtkirk Oct 15, 2024
d38aa5e
normalize
kgyrtkirk Oct 15, 2024
8b1d3a1
Merge branch 'createconglomerate-inject1' into decouple-union2
kgyrtkirk Oct 15, 2024
55d87d8
remove class
kgyrtkirk Oct 15, 2024
2fb6794
updates
kgyrtkirk Oct 15, 2024
6533e61
change signature
kgyrtkirk Oct 15, 2024
a1d8748
update
kgyrtkirk Oct 15, 2024
787a332
cleanup/move/etc
kgyrtkirk Oct 15, 2024
c78c935
cleanup
kgyrtkirk Oct 15, 2024
0d99b61
cleanup
kgyrtkirk Oct 15, 2024
874438f
rename/etc
kgyrtkirk Oct 15, 2024
29756bc
rename/etc
kgyrtkirk Oct 15, 2024
97c3749
x
kgyrtkirk Oct 15, 2024
f9ff96c
x
kgyrtkirk Oct 15, 2024
5e6eda1
x
kgyrtkirk Oct 15, 2024
22bdd3c
x
kgyrtkirk Oct 15, 2024
0f36ec6
x
kgyrtkirk Oct 15, 2024
4eae978
x
kgyrtkirk Oct 15, 2024
52d5fda
warehouseprovider-try
kgyrtkirk Oct 15, 2024
4a2c095
Revert "warehouseprovider-try"
kgyrtkirk Oct 15, 2024
e6ae62b
updates
kgyrtkirk Oct 15, 2024
ede7c68
undo indent change
kgyrtkirk Oct 15, 2024
b9e4b93
add annotation
kgyrtkirk Oct 15, 2024
bd7eacc
add
kgyrtkirk Oct 15, 2024
0bc2635
better errors
kgyrtkirk Oct 15, 2024
cedc6de
cosmetic
kgyrtkirk Oct 15, 2024
a57fae8
cleanup
kgyrtkirk Oct 15, 2024
a05e363
executioncontext
kgyrtkirk Oct 15, 2024
89e06b2
Revert "executioncontext"
kgyrtkirk Oct 15, 2024
e7debd2
fix
kgyrtkirk Oct 15, 2024
b47d92b
cleanup/etc
kgyrtkirk Oct 15, 2024
eebb276
update message
kgyrtkirk Oct 15, 2024
6e47463
remove NYS enum value
kgyrtkirk Oct 15, 2024
68a7a70
minify failure
kgyrtkirk Oct 16, 2024
1b1bbda
fix typo
kgyrtkirk Oct 16, 2024
150477e
undo temp changes
kgyrtkirk Oct 16, 2024
c3e6ffe
Merge branch 'createconglomerate-inject1' into decouple-union2
kgyrtkirk Oct 17, 2024
64853c4
update
kgyrtkirk Oct 17, 2024
8e8a2e3
remove method
kgyrtkirk Oct 17, 2024
371f863
cleanup
kgyrtkirk Oct 17, 2024
5b18b8a
x
kgyrtkirk Oct 17, 2024
9c1e2a1
x
kgyrtkirk Oct 17, 2024
15d1b25
test not added befgore
kgyrtkirk Oct 17, 2024
6bf5cb9
make some stuff
kgyrtkirk Oct 17, 2024
5327b1c
add test for resultsasframes
kgyrtkirk Oct 17, 2024
9aaefc4
tesdt isglobal
kgyrtkirk Oct 17, 2024
f45787a
rename
kgyrtkirk Oct 17, 2024
eb5666e
fix intellij
kgyrtkirk Oct 17, 2024
ff5aadb
Merge remote-tracking branch 'apache/master' into decouple-union2
kgyrtkirk Oct 17, 2024
518a455
Merge remote-tracking branch 'apache/master' into createconglomerate-…
kgyrtkirk Oct 17, 2024
2700444
Merge branch 'createconglomerate-inject1' into decouple-union2
kgyrtkirk Oct 17, 2024
1b22d22
add conglomerate is warehouse
kgyrtkirk Oct 17, 2024
b494861
remove CongBackedToolchestWH
kgyrtkirk Oct 17, 2024
5bc29e3
Enhance injector usage during conglomerate builds in tests
kgyrtkirk Oct 17, 2024
1f7bd09
Merge branch 'createconglomerate-inject1' into createconglomerate-inj…
kgyrtkirk Oct 17, 2024
d605166
fix more
kgyrtkirk Oct 17, 2024
19583f8
apidoc
kgyrtkirk Oct 17, 2024
835fcb4
cleanup
kgyrtkirk Oct 17, 2024
33aa8c3
notes
kgyrtkirk Oct 17, 2024
e2aa507
add test
kgyrtkirk Oct 17, 2024
113f13d
Revert "add test"
kgyrtkirk Oct 17, 2024
b27511f
add congl methods/etc
kgyrtkirk Oct 17, 2024
8c08649
get access to the conglomerate instead of warehouse
kgyrtkirk Oct 17, 2024
574b337
use conglomerate.getQueryExecutor
kgyrtkirk Oct 17, 2024
c17a3ef
use executor
kgyrtkirk Oct 17, 2024
4a76077
undo
kgyrtkirk Oct 17, 2024
15b6987
cleanup
kgyrtkirk Oct 17, 2024
51bbf55
remove SupportRowSignature
kgyrtkirk Oct 17, 2024
a3f8445
make unionqueryrunnerfactory not necessatry
kgyrtkirk Oct 17, 2024
069e700
fix compile
kgyrtkirk Oct 17, 2024
66736dd
fix style
kgyrtkirk Oct 17, 2024
98cb67a
fix
kgyrtkirk Oct 17, 2024
7fbc842
add test
kgyrtkirk Oct 17, 2024
ab21c40
service ToolChestWarehouse with DefaultQueryRunnerFactoryConglomerate
kgyrtkirk Oct 17, 2024
1bdcc4f
remove invalid file
kgyrtkirk Oct 18, 2024
863b947
add factory method
kgyrtkirk Oct 23, 2024
61ab951
rename method
kgyrtkirk Oct 23, 2024
633adc1
remove getDataSources from Query interface
kgyrtkirk Oct 23, 2024
de4c2df
remove field
kgyrtkirk Oct 23, 2024
f4d16a6
update message
kgyrtkirk Oct 23, 2024
d4c9877
simpler exception
kgyrtkirk Oct 23, 2024
862493e
transform results in the runner
kgyrtkirk Oct 23, 2024
689b5b5
cleanup/fix style
kgyrtkirk Oct 23, 2024
3cd56c9
move inlined subquery eval for querylogic
kgyrtkirk Oct 23, 2024
43c1078
typo
kgyrtkirk Oct 23, 2024
515d064
rename
kgyrtkirk Oct 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -258,39 +258,37 @@ public int getNumThreads()
}
};

conglomerate = new DefaultQueryRunnerFactoryConglomerate(
ImmutableMap.<Class<? extends Query>, QueryRunnerFactory>builder()
.put(
TimeseriesQuery.class,
new TimeseriesQueryRunnerFactory(
new TimeseriesQueryQueryToolChest(),
new TimeseriesQueryEngine(),
QueryRunnerTestHelper.NOOP_QUERYWATCHER
)
conglomerate = DefaultQueryRunnerFactoryConglomerate.buildFromQueryRunnerFactories(ImmutableMap.<Class<? extends Query>, QueryRunnerFactory>builder()
.put(
TimeseriesQuery.class,
new TimeseriesQueryRunnerFactory(
new TimeseriesQueryQueryToolChest(),
new TimeseriesQueryEngine(),
QueryRunnerTestHelper.NOOP_QUERYWATCHER
)
.put(
TopNQuery.class,
new TopNQueryRunnerFactory(
new StupidPool<>(
"TopNQueryRunnerFactory-bufferPool",
() -> ByteBuffer.allocate(PROCESSING_BUFFER_SIZE)
),
new TopNQueryQueryToolChest(new TopNQueryConfig()),
QueryRunnerTestHelper.NOOP_QUERYWATCHER
)
)
.put(
TopNQuery.class,
new TopNQueryRunnerFactory(
new StupidPool<>(
"TopNQueryRunnerFactory-bufferPool",
() -> ByteBuffer.allocate(PROCESSING_BUFFER_SIZE)
),
new TopNQueryQueryToolChest(new TopNQueryConfig()),
QueryRunnerTestHelper.NOOP_QUERYWATCHER
)
.put(
GroupByQuery.class,
makeGroupByQueryRunnerFactory(
GroupByQueryRunnerTest.DEFAULT_MAPPER,
new GroupByQueryConfig()
{
},
processingConfig
)
)
.put(
GroupByQuery.class,
makeGroupByQueryRunnerFactory(
GroupByQueryRunnerTest.DEFAULT_MAPPER,
new GroupByQueryConfig()
{
},
processingConfig
)
.build()
);
)
.build());

toolChestWarehouse = new QueryToolChestWarehouse()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@
import org.apache.druid.query.Query;
import org.apache.druid.query.QueryPlus;
import org.apache.druid.query.QueryRunner;
import org.apache.druid.query.QueryRunnerFactoryConglomerate;
import org.apache.druid.query.QuerySegmentWalker;
import org.apache.druid.query.QueryToolChestWarehouse;
import org.apache.druid.query.Result;
import org.apache.druid.query.RetryQueryRunnerConfig;
import org.apache.druid.query.SegmentDescriptor;
Expand Down Expand Up @@ -104,7 +104,7 @@
public class MovingAverageQueryTest extends InitializedNullHandlingTest
{
private final ObjectMapper jsonMapper;
private final QueryToolChestWarehouse warehouse;
private final QueryRunnerFactoryConglomerate conglomerate;
private final RetryQueryRunnerConfig retryConfig;
private final ServerConfig serverConfig;

Expand Down Expand Up @@ -167,7 +167,7 @@ public <T> QueryRunner<T> getQueryRunnerForSegments(Query<T> query, Iterable<Seg
Injector injector = Initialization.makeInjectorWithModules(baseInjector, modules);

jsonMapper = injector.getInstance(ObjectMapper.class);
warehouse = injector.getInstance(QueryToolChestWarehouse.class);
conglomerate = injector.getInstance(QueryRunnerFactoryConglomerate.class);
retryConfig = injector.getInstance(RetryQueryRunnerConfig.class);
serverConfig = injector.getInstance(ServerConfig.class);

Expand Down Expand Up @@ -321,7 +321,7 @@ public long getMaxQueuedBytes()
};

CachingClusteredClient baseClient = new CachingClusteredClient(
warehouse,
conglomerate,
new TimelineServerView()
{
@Override
Expand Down Expand Up @@ -375,7 +375,7 @@ public void registerServerRemovedCallback(Executor exec, ServerRemovedCallback c
new NoopServiceEmitter(),
baseClient,
null /* local client; unused in this test, so pass in null */,
warehouse,
conglomerate,
new MapJoinableFactory(ImmutableSet.of(), ImmutableMap.of()),
retryConfig,
jsonMapper,
Expand All @@ -392,7 +392,7 @@ public void registerServerRemovedCallback(Executor exec, ServerRemovedCallback c
final Sequence<?> res = query.getRunner(walker).run(queryPlus);

List actualResults = new ArrayList();
actualResults = (List<MapBasedRow>) res.accumulate(actualResults, Accumulators.list());
actualResults = res.accumulate(actualResults, Accumulators.list());

expectedResults = consistentTypeCasting(expectedResults);
actualResults = consistentTypeCasting(actualResults);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2891,28 +2891,26 @@ private static DataSchema cloneDataSchema(final DataSchema dataSchema)
@Override
protected QueryRunnerFactoryConglomerate makeQueryRunnerConglomerate()
{
return new DefaultQueryRunnerFactoryConglomerate(
ImmutableMap.<Class<? extends Query>, QueryRunnerFactory>builder()
.put(
TimeseriesQuery.class,
new TimeseriesQueryRunnerFactory(
new TimeseriesQueryQueryToolChest(),
new TimeseriesQueryEngine(),
(query, future) -> {
// do nothing
}
)
return DefaultQueryRunnerFactoryConglomerate.buildFromQueryRunnerFactories(ImmutableMap.<Class<? extends Query>, QueryRunnerFactory>builder()
.put(
TimeseriesQuery.class,
new TimeseriesQueryRunnerFactory(
new TimeseriesQueryQueryToolChest(),
new TimeseriesQueryEngine(),
(query, future) -> {
// do nothing
}
)
.put(
ScanQuery.class,
new ScanQueryRunnerFactory(
new ScanQueryQueryToolChest(DefaultGenericQueryMetricsFactory.instance()),
new ScanQueryEngine(),
new ScanQueryConfig()
)
)
.put(
ScanQuery.class,
new ScanQueryRunnerFactory(
new ScanQueryQueryToolChest(DefaultGenericQueryMetricsFactory.instance()),
new ScanQueryEngine(),
new ScanQueryConfig()
)
.build()
);
)
.build());
}

private void makeToolboxFactory() throws IOException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2418,18 +2418,16 @@ private static DataSchema cloneDataSchema(final DataSchema dataSchema)
@Override
protected QueryRunnerFactoryConglomerate makeQueryRunnerConglomerate()
{
return new DefaultQueryRunnerFactoryConglomerate(
ImmutableMap.of(
TimeseriesQuery.class,
new TimeseriesQueryRunnerFactory(
new TimeseriesQueryQueryToolChest(),
new TimeseriesQueryEngine(),
(query, future) -> {
// do nothing
}
)
return DefaultQueryRunnerFactoryConglomerate.buildFromQueryRunnerFactories(ImmutableMap.of(
TimeseriesQuery.class,
new TimeseriesQueryRunnerFactory(
new TimeseriesQueryQueryToolChest(),
new TimeseriesQueryEngine(),
(query, future) -> {
// do nothing
}
)
);
));
}

private void makeToolboxFactory() throws IOException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -524,4 +524,8 @@ public String getErrorCode()
protected abstract DruidException makeException(DruidExceptionBuilder bob);
}

public static DruidException methodNotSupported()
{
return defensive("Method Not supported.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
*/
public class ArenaMemoryAllocatorFactory implements MemoryAllocatorFactory
{
private static final int FRAME_SIZE = 8_000_000;

private final int capacity;

public ArenaMemoryAllocatorFactory(final int capacity)
Expand All @@ -42,4 +44,9 @@ public long allocatorCapacity()
{
return capacity;
}

public static MemoryAllocatorFactory makeDefault()
{
return new ArenaMemoryAllocatorFactory(FRAME_SIZE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;

import java.io.Closeable;
import java.util.Arrays;
import java.util.Collections;
Expand Down Expand Up @@ -147,4 +146,9 @@ public <OutType> Yielder<OutType> toYielder(OutType initValue, YieldingAccumulat
return Yielders.done(initValue, null);
}
}

public static <T> Sequence<T> of(T... values)
{
return simple(Arrays.asList(values));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,52 @@

package org.apache.druid.query;

import com.google.common.collect.Maps;
import com.google.inject.Inject;

import java.util.IdentityHashMap;
import java.util.Map;

/**
*/
public class DefaultQueryRunnerFactoryConglomerate implements QueryRunnerFactoryConglomerate
{
private final Map<Class<? extends Query>, QueryRunnerFactory> factories;
private final Map<Class<? extends Query>, QueryToolChest> toolchests;

public static DefaultQueryRunnerFactoryConglomerate buildFromQueryRunnerFactories(
Map<Class<? extends Query>, QueryRunnerFactory> factories)
{
return new DefaultQueryRunnerFactoryConglomerate(factories, Maps.transformValues(factories, f -> f.getToolchest()));
}

@Inject
public DefaultQueryRunnerFactoryConglomerate(Map<Class<? extends Query>, QueryRunnerFactory> factories)
public DefaultQueryRunnerFactoryConglomerate(Map<Class<? extends Query>, QueryRunnerFactory> factories,
Map<Class<? extends Query>, QueryToolChest> toolchests)
{
// Accesses to IdentityHashMap should be faster than to HashMap or ImmutableMap.
// Class doesn't override Object.equals().
this.factories = new IdentityHashMap<>(factories);
this.toolchests = new IdentityHashMap<>(toolchests);
}

@Override
@SuppressWarnings("unchecked")
public <T, QueryType extends Query<T>> QueryRunnerFactory<T, QueryType> findFactory(QueryType query)
{
return (QueryRunnerFactory<T, QueryType>) factories.get(query.getClass());
return factories.get(query.getClass());
}

@Override
@SuppressWarnings("unchecked")
public <T, QueryType extends Query<T>> QueryToolChest<T, QueryType> getToolChest(QueryType query)
{
return toolchests.get(query.getClass());
}

@Override
@SuppressWarnings("unchecked")
public <T, QueryType extends Query<T>> QueryLogic<T> getQueryExecutor(QueryType query)
{
QueryToolChest<T, QueryType> toolchest = getToolChest(query);
if (toolchest instanceof QueryLogic) {
return (QueryLogic<T>) toolchest;
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public FluentQueryRunner<T> applyPostMergeDecoration()

public FluentQueryRunner<T> applyPreMergeDecoration()
{
return from(new UnionQueryRunner<>(toolChest.preMergeQueryDecoration(baseRunner)));
return from(new UnionDataSourceQueryRunner<>(toolChest.preMergeQueryDecoration(baseRunner)));
}

public FluentQueryRunner<T> emitCPUTimeMetric(ServiceEmitter emitter)
Expand Down
15 changes: 15 additions & 0 deletions processing/src/main/java/org/apache/druid/query/Query.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,18 @@
import org.apache.druid.query.groupby.GroupByQuery;
import org.apache.druid.query.metadata.metadata.SegmentMetadataQuery;
import org.apache.druid.query.operator.WindowOperatorQuery;
import org.apache.druid.query.planning.DataSourceAnalysis;
import org.apache.druid.query.scan.ScanQuery;
import org.apache.druid.query.search.SearchQuery;
import org.apache.druid.query.select.SelectQuery;
import org.apache.druid.query.spec.QuerySegmentSpec;
import org.apache.druid.query.timeboundary.TimeBoundaryQuery;
import org.apache.druid.query.timeseries.TimeseriesQuery;
import org.apache.druid.query.topn.TopNQuery;
import org.apache.druid.query.union.UnionQuery;
import org.apache.druid.segment.Segment;
import org.apache.druid.segment.VirtualColumns;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.utils.CollectionUtils;
import org.joda.time.DateTimeZone;
import org.joda.time.Duration;
Expand All @@ -66,6 +69,7 @@
@JsonSubTypes.Type(name = Query.TIMESERIES, value = TimeseriesQuery.class),
@JsonSubTypes.Type(name = Query.TOPN, value = TopNQuery.class),
@JsonSubTypes.Type(name = Query.WINDOW_OPERATOR, value = WindowOperatorQuery.class),
@JsonSubTypes.Type(name = Query.UNION_QUERY, value = UnionQuery.class),
})
public interface Query<T>
{
Expand All @@ -79,6 +83,7 @@ public interface Query<T>
String TIMESERIES = "timeseries";
String TOPN = "topN";
String WINDOW_OPERATOR = "windowOperator";
String UNION_QUERY = "union";

DataSource getDataSource();

Expand Down Expand Up @@ -285,4 +290,14 @@ default Interval getSingleInterval()
)
);
}

default DataSourceAnalysis getDataSourceAnalysis()
{
return getDataSource().getAnalysis().maybeWithBaseQuery(this);
}

default RowSignature getResultRowSignature(RowSignature.Finalization finalization)
{
return null;
}
}
Loading
Loading