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

posted on 2024-03-27 08:00  荣锋亮  阅读(10)  评论(0编辑  收藏  举报

导航