首页 > 其他分享 >dremio 存储插件之StoragePluginRulesFactory 类简单说明

dremio 存储插件之StoragePluginRulesFactory 类简单说明

时间:2022-10-21 13:01:46浏览次数:79  
标签:插件 java plugin rules StoragePluginRulesFactory context phase dremio

StoragePluginRulesFactory 是dremio 为了分离每个插件的规则,我们存储插件可以包含自己的规则工厂,具体使用到StoragePluginRulesFactory
的包含了CatalogServiceImpl,SqlHandlerConfig,实际都会到sql 执行的handler 中

系统内置实现

 

 

集成使用

主要是CatalogServiceImpl.java 中,其他执行部分通过间接引用

 
public RuleSet getStorageRules(OptimizerRulesContext context, PlannerPhase phase) {
    final ImmutableSet.Builder<RelOptRule> rules = ImmutableSet.builder();
    final Set<SourceType> types = new HashSet<>();
 
    try {
      for (ManagedStoragePlugin plugin : getPlugins().managed()) {
        // we want to check state without acquiring a read lock
        if (plugin.getState().getStatus() == SourceState.SourceStatus.bad) {
          // we shouldn't consider rules for misbehaving plugins.
          continue;
        }
 
        StoragePluginId pluginId;
        try {
          // getId has a check for plugin state
          pluginId = plugin.getId();
        } catch (UserException e) {
          if (e.getErrorType() == ErrorType.SOURCE_BAD_STATE) {
            // we shouldn't consider rules for misbehaving plugins.
            continue;
          }
          throw e;
        }
 
        StoragePluginRulesFactory factory = plugin.getRulesFactory();
        if(factory != null) {
          // add instance level rules.
          rules.addAll(factory.getRules(context, phase, pluginId));
 
          // add type level rules.
          if(types.add(pluginId.getType())) {
            rules.addAll(factory.getRules(context, phase, pluginId.getType()));
          }
        }
      }
    } catch (InstantiationException | IllegalAccessException e) {
      throw UserException.validationError(e).message("Failure getting plugin rules.").build(logger);
    }
 
    ImmutableSet<RelOptRule> rulesSet = rules.build();
    return RuleSets.ofList(rulesSet);
  }

SqlHandlerConfig 对于规则的使用 SqlHandlerConfig.java 间接也是通过执行上下文使用的CatalogService

 public RuleSet getRules(PlannerPhase phase) {
    return PlannerPhase.mergedRuleSets(
        context.getInjectedRules(phase),
        phase.getRules(context),
        context.getCatalogService().getStorageRules(context, phase));
  }

说明

dremio StoragePluginRulesFactory 还是比较强大的,扩展了dremio sql 处理能力,是一个很不错的扩展点 尤其我们需要开发自己的存储扩展的时候

参考资料

https://github.com/dremio/dremio-oss/blob/d41cb52143b6b0289fc8ed4d970bfcf410a669e8/sabot/kernel/src/main/java/com/dremio/exec/catalog/CatalogServiceImpl.java
https://github.com/dremio/dremio-oss/blob/d41cb52143b6b0289fc8ed4d970bfcf410a669e8/sabot/kernel/src/main/java/com/dremio/exec/planner/sql/handlers/SqlHandlerConfig.java
https://github.com/dremio/dremio-oss/blob/d41cb52143b6b0289fc8ed4d970bfcf410a669e8/sabot/kernel/src/main/java/com/dremio/exec/store/StoragePlugin.java

标签:插件,java,plugin,rules,StoragePluginRulesFactory,context,phase,dremio
From: https://www.cnblogs.com/rongfengliang/p/16813109.html

相关文章

  • 集成 CDT 插件至 Eclipse 全过程,并开发你第一个 Eclipse 下的 C/C++ 程序
    集成CDT插件至Eclipse全过程,并开发你第一个Eclipse下的C/C++程序本文示例用CDT插件已经上传,​​点击这里进入下载页面​​。       集成CDT插件至Ecl......
  • 插件遇到的问题
    1.ng2-dragula插入新数据之后再拖拽,数据总是显示在最上面https://stackoverflow.com/questions/63532041/ng2-dragula-after-adding-new-item-its-getting-displayed-at......
  • Webpack中的plugin插件机制
    大家有没有遇到过这些问题:webpack打包之后的文件没有压缩静态文件要手动拷贝到输出目录代码中写了很多环境判断的多余代码上一篇「webpack核心特性」loader说到......
  • Maven docker-maven-plugin 插件 Push 413 错误
    这个413错误有2个方面的,第一是nginx反向代理的问题。通常这个将包的大小设置到1024m都能解决。我们的坑我们的坑的错误是我们使用了cloudflare。cloudflare......
  • vue3使用echarts插件并实现点击下载图表功能
    接到一个新的需求,就是用vue3制作一幅世界地图,并实现点击下载按钮将图表转变为图片下载到本地。使用插件: html2canvasnpm安装: npminstallhtml2canvas组件引入: import......
  • dremio kernel 模块之DremioSqlDialect
    参考图实际上是继承自calcite的sql方言类  arp扩展的说明目前官方的arp主要是对于sql数据库类型的高级支持,当然需要依赖社区版的arp公共包dremio-ce-jdbc-pl......
  • 使用versions-maven-plugin插件批量修改pom.xml版本
    Java开发过程中,通常一个项目有多个子模块(项目结构如下),我们发布新版本后,需要创建新的分支并修改pom.xml中的版本号,如果模块过多,这是一个麻烦的事情,但我们有versions-maven-p......
  • idea Translate插件谷歌翻译失效
    原因:谷歌的翻译服务放弃了中国大陆市场解决:C:\Windows\System32\drivers\etc\hosts文件 添加如下内容203.208.41.98translate.google.com203.208.41.98translate.goo......
  • SpringBoot2 集成xJar插件 动态解密jar包,避免源码泄露或反编译
    一、集成1.官方介绍地址手动加密:https://github.com/core-lib/xjarmaven插件集成:https://github.com/core-lib/xjar-maven-plugin2.添加仓库和插件第一种(不推荐使用)......
  • 无需任何插件,教你影像如何精准导入CAD软件进行绘图?
    如果我的工程项目在杭州的某个地区,需要在CAD软件里面导入影像地图然后在CAD中描图,但是每次在CAD中导入影像,都要自己在调整匹配一遍,或者是在网上搜索各种付费插件实在......