dremio QueryContext 简单说明
QueryContext 包含了查询相关的一些信息,官方代码注释说应该重名为PlanningContext,主要是在fragment contexts 中使用
接口扩展
如下图,实现了ResourceSchedulingContext以及OptimizerRulesContext
主要实例化的地方
- Foremand
实际sql 执行部分,AttemptManager 创建
protected AttemptManager newAttemptManager(AttemptId attemptId, UserRequest queryRequest,
AttemptObserver observer, UserSession session, OptionProvider options,
Cache<Long, PreparedPlan> preparedPlans, PlanCache planCache,
Predicate<DatasetConfig> datasetValidityChecker, CommandPool commandPool, PartitionStatsCache partitionStatsCache) {
final QueryContext queryContext = new QueryContext(session, sabotContext, attemptId.toQueryId(),
queryRequest.getPriority(), queryRequest.getMaxAllocation(), datasetValidityChecker, planCache, partitionStatsCache);
return new AttemptManager(sabotContext, attemptId, queryRequest, observer, options, preparedPlans,
queryContext, commandPool, maestroService, jobTelemetryClient, ruleBasedEngineSelector,
queryRequest.runInSameThread());
}
- 反射服务
ReflectionServiceImpl (使用的系统用户),主要在系统进行的反射任务执行的时候使用
this.queryContext = new Supplier<QueryContext>() {
@Override
public QueryContext get() {
final UserSession session = systemSession(getOptionManager(), isNeverPromote);
return new QueryContext(session, sabotContext.get(), new AttemptId().toQueryId());
}
};
- QueryParser 解析
获取查询元数据信息,属于一个工具类
@Deprecated
public static QueryMetadata extract(SqlQuery query, SabotContext context) {
QueryParser parser = new QueryParser(context);
// extract 部分需要进行QueryContext的创建
return parser.extract(query);
}
实现的地方
- 使用的类
- 一些sql 相关的使用
基本都是关于sql 操作相关的, 目前看有不少企业版特性使用到,因为QueryContext 包含了不少相关查询执行需要的信息
说明
QueryContext主要是进行fragment 相关处理使用到,QueryContext提供了关于调度以及优化相关一些东西,整体算是一个方便的工具context
参考资料
sabot/kernel/src/main/java/com/dremio/exec/ops/QueryContext.java
sabot/kernel/src/main/java/com/dremio/exec/work/protector/Foreman.java
services/accelerator/src/main/java/com/dremio/service/reflection/ReflectionServiceImpl.java
sabot/kernel/src/main/java/com/dremio/exec/util/QueryVersionUtils.java
dac/backend/src/main/java/com/dremio/dac/explore/QueryParser.java