dremio SupportsExternalQuery 简单说明

dremio 的外部查询实际上就是让我们可以通过sql 直接查询source 而不是通过复杂的处理,可以解决一些sql 函数不能使用的问题
对于实现了SupportsExternalQuery 接口的存储扩展就可以实现此功能,比如jdbc 的(属于ce 扩展)

参考语法

SELECT * FROM table(my_oracle.external_query('select  * from app.demo'))

SupportsExternalQuery 包含的方法

如下图getExternalQueryFunction&isExternalQuery 属于静态方法,主要是一个帮助功能类,核心需要实现的是getExternalQueryPhysicalOperator

jdbc 的实现

反编译的代码

  • 参考代码
public PhysicalOperator getExternalQueryPhysicalOperator(PhysicalPlanCreator creator, ExternalQueryScanPrel prel, BatchSchema schema, String sql) {
      SchemaBuilder schemaBuilder = BatchSchema.newBuilder();
      com.google.common.collect.ImmutableSet.Builder<String> skippedColumnsBuilder = new com.google.common.collect.ImmutableSet.Builder();
      this.filterBatchSchema(schema, schemaBuilder, skippedColumnsBuilder);
      BatchSchema filteredSchema = schemaBuilder.build();
      ImmutableSet<String> skippedColumns = skippedColumnsBuilder.build();
      //  实际使用的JdbcGroupScan 这个物理操作器
      return new JdbcGroupScan(creator.props(prel, "$dremio$", schema, JdbcPrel.RESERVE, JdbcPrel.LIMIT), sql, (List)filteredSchema.getFields().stream().map((f) -> {
         return SchemaPath.getSimplePath(f.getName());
      }).collect(ImmutableList.toImmutableList()), this.getPluginId(), filteredSchema, skippedColumns);
}

dremio 内部处理

dremio 内部对于外部查询包含了自己的规则处理,包含了在逻辑计划, 以及物理计划中,还有元数据处理,当然反射的替换处理中也会使用到
这个和dremio 对于其他的处理规则类似,等后边详细介绍dremio 计划规则的时候介绍下,下边一些代码可以参考

参考资料

sabot/kernel/src/main/java/com/dremio/exec/store/SupportsExternalQuery.java
sabot/kernel/src/main/java/com/dremio/exec/tablefunctions/ExternalQueryScanPrel.java
sabot/kernel/src/main/java/com/dremio/exec/tablefunctions/ExternalQueryRelBase.java
services/jobs/src/main/java/com/dremio/service/jobs/metadata/QueryMetadata.java
sabot/kernel/src/main/java/com/dremio/exec/tablefunctions/ExternalQuery.java
sabot/kernel/src/main/java/com/dremio/exec/tablefunctions/ExternalQueryScanCrel.java
sabot/kernel/src/main/java/com/dremio/exec/tablefunctions/ExternalQueryScanDrel.java
sabot/kernel/src/main/java/com/dremio/exec/planner/acceleration/substitution/SubstitutionUtils.java
sabot/kernel/src/main/java/com/dremio/exec/tablefunctions/ExternalQueryTranslatableTable.java

posted on   荣锋亮  阅读(14)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-02-22 使用tmpfs 进行nginx proxy_cache 加速
2023-02-22 nodejs error:03000086:digital envelope routines::initialization error 问题
2022-02-22 几款开源git server ssh 协议forced command 参考格式
2022-02-22 基于golang+openssh 服务实现一个简单的git over ssh 服务
2021-02-22 dremio sql server 查询中文的问题
2021-02-22 规避dremio数据查询限制的一些方法
2020-02-22 docker 几个不错的镜像加速地址

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示