Class FrameBasedInlineDataSource
- java.lang.Object
-
- org.apache.druid.query.FrameBasedInlineDataSource
-
- All Implemented Interfaces:
DataSource
public class FrameBasedInlineDataSource extends Object implements DataSource
Represents an inline datasource where the rows are embedded within the DataSource object itself.The rows are backed by a sequence of
FrameSignaturePair, which contain the Frame representation of the rows represented by the datasource.Note that the signature of the datasource can be different from the signatures of the constituent frames that it consists of. While fetching the iterables, it is the job of this class to make sure that the rows correspond to the
rowSignature. For frames that donot contain the columns present in therowSignature, they are populated withnull.
-
-
Constructor Summary
Constructors Constructor Description FrameBasedInlineDataSource(List<FrameSignaturePair> frames, RowSignature rowSignature)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Function<SegmentReference,SegmentReference>createSegmentMapFunction(Query query, AtomicLong cpuTimeAcc)Returns a segment function on to how to segment should be modified.DataSourceAnalysisgetAnalysis()Get the analysis for a data sourcebyte[]getCacheKey()Compute a cache key prefix for a data source.List<DataSource>getChildren()Returns datasources that this datasource depends on.List<FrameSignaturePair>getFrames()Sequence<Object[]>getRowsAsSequence()RowSignaturegetRowSignature()Set<String>getTableNames()Returns the names of all table datasources involved in this query.booleanisCacheable(boolean isBroker)Returns true if queries on this dataSource are cacheable at both the result level and per-segment level.booleanisConcrete()Returns true if this datasource can be the base datasource of query processing.booleanisGlobal()Returns true if all servers have a full copy of this datasource.DataSourcewithChildren(List<DataSource> children)Return a new DataSource, identical to this one, with different children.DataSourcewithUpdatedDataSource(DataSource newSource)Returns an updated datasource based on the specified new source.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.druid.query.DataSource
withPolicies
-
-
-
-
Constructor Detail
-
FrameBasedInlineDataSource
public FrameBasedInlineDataSource(List<FrameSignaturePair> frames, RowSignature rowSignature)
-
-
Method Detail
-
getFrames
public List<FrameSignaturePair> getFrames()
-
getRowSignature
public RowSignature getRowSignature()
-
getTableNames
public Set<String> getTableNames()
Description copied from interface:DataSourceReturns the names of all table datasources involved in this query. Does not include names for non-tables, like lookups or inline datasources.- Specified by:
getTableNamesin interfaceDataSource
-
getChildren
public List<DataSource> getChildren()
Description copied from interface:DataSourceReturns datasources that this datasource depends on. Will be empty for leaf datasources like 'table'.- Specified by:
getChildrenin interfaceDataSource
-
withChildren
public DataSource withChildren(List<DataSource> children)
Description copied from interface:DataSourceReturn a new DataSource, identical to this one, with different children. The number of children must be equal to the number of children that this datasource already has.- Specified by:
withChildrenin interfaceDataSource
-
isCacheable
public boolean isCacheable(boolean isBroker)
Description copied from interface:DataSourceReturns true if queries on this dataSource are cacheable at both the result level and per-segment level. Currently, dataSources that do not actually reference segments (like 'inline'), are not cacheable since cache keys are always based on segment identifiers.- Specified by:
isCacheablein interfaceDataSource
-
isGlobal
public boolean isGlobal()
Description copied from interface:DataSourceReturns true if all servers have a full copy of this datasource. True for things like inline, lookup, etc, or for queries of those.Currently this is coupled with joinability - if this returns true then the query engine expects there exists a
JoinableFactorywhich might build aJoinablefor this datasource directly. If a subquery 'inline' join is required to join this datasource on the right hand side, then this value must be false for now.In the future, instead of directly using this method, the query planner and engine should consider
JoinableFactory.isDirectlyJoinable(DataSource)when determining if the right hand side is directly joinable, which would allow decoupling this property from joins.- Specified by:
isGlobalin interfaceDataSource
-
isConcrete
public boolean isConcrete()
Description copied from interface:DataSourceReturns true if this datasource can be the base datasource of query processing.Base datasources drive query processing. If the base datasource is
TableDataSource, for example, queries are processed in parallel on data servers. If the base datasource isInlineDataSource, queries are processed on the Broker. SeeDataSourceAnalysis.getBaseDataSource()for further discussion.Datasources that are *not* concrete must be pre-processed in some way before they can be processed by the main query stack. For example,
QueryDataSourcemust be executed first and substituted with its results.- Specified by:
isConcretein interfaceDataSource- See Also:
which uses this,which uses this
-
createSegmentMapFunction
public Function<SegmentReference,SegmentReference> createSegmentMapFunction(Query query, AtomicLong cpuTimeAcc)
Description copied from interface:DataSourceReturns a segment function on to how to segment should be modified.- Specified by:
createSegmentMapFunctionin interfaceDataSource- Parameters:
query- the input querycpuTimeAcc- the cpu time accumulator- Returns:
- the segment function
-
withUpdatedDataSource
public DataSource withUpdatedDataSource(DataSource newSource)
Description copied from interface:DataSourceReturns an updated datasource based on the specified new source.- Specified by:
withUpdatedDataSourcein interfaceDataSource- Parameters:
newSource- the new datasource to be used to update an existing query- Returns:
- the updated datasource to be used
-
getCacheKey
public byte[] getCacheKey()
Description copied from interface:DataSourceCompute a cache key prefix for a data source. This includes the data sources that participate in the RHS of a join as well as any query specific constructs associated with join data source such as base table filter. This key prefix can be used in segment level cache or result level cache. The function can return following - Non-empty byte array - If there is join datasource involved and caching is possible. The result includes join condition expression, join type and cache key returned by joinable factory for eachPreJoinableClause- NULL - There is a join but caching is not possible. It may happen if one of the participating datasource in the JOIN is not cacheable.- Specified by:
getCacheKeyin interfaceDataSource- Returns:
- the cache key to be used as part of query cache key
-
getAnalysis
public DataSourceAnalysis getAnalysis()
Description copied from interface:DataSourceGet the analysis for a data source- Specified by:
getAnalysisin interfaceDataSource- Returns:
- The
DataSourceAnalysisobject for the callee data source
-
-