首页 > 其他分享 >dremio SupportsExternalQuery 简单说明

dremio SupportsExternalQuery 简单说明

时间:2024-02-22 09:04:59浏览次数:23  
标签:src dremio java kernel SupportsExternalQuery 简单 main com

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

标签:src,dremio,java,kernel,SupportsExternalQuery,简单,main,com
From: https://www.cnblogs.com/rongfengliang/p/18014133

相关文章

  • 1.2 Python安装与简单使用
    Python3.6.8安装Python官网:https://www.python.org/Python3.6.8官网:https://www.python.org/downloads/release/python-368/按照提示安装即可,安装完成后,按win+R打开命令行,输入python-V,出现版本号,说明安装成功在开始菜单中选择IDLE(PythonGUI)即可启动Python解释器......
  • 最简单的深拷贝和浅拷贝(原理)
    拷贝:其实就是一个对象复制给另外一整个对象,让对象相互不影响。对象的拷贝又分为浅拷贝和深拷贝对象的浅拷贝:浅拷贝是指只复制对象的第一层属性,如果对象的属性值是引用类型(如对象、数组等),则复制的是引用,而不是真正的拷贝。对象的深拷贝:深拷贝是指在复制对象时,不仅复制对象本身,还......
  • dremio FileDatasetHandle 简单说明
    FileDatasetHandle是DatasetHandle的扩展,核心是对于文件系统类的处理(dremio对于文件系统的支持主要是基于hdfs)同时支持对于不同表格式的处理(deltalake,iceber,parquet),单独说明FileDatasetHandle主要是因为此实现比较重要dremio不少文件的处理都和此有关联FileDatasetHandle的一......
  • P5057 [CQOI2006] 简单题
    原题链接题解区间修改+单点查询对于一个点,查询的时候翻转的次数如果是奇数,是1,如果是偶数,是0所以题目转变成对区间上的点加一,然后求单点的奇偶性树状数组对一串序列加1,相当于对其差分序列的\([l]++,[r+1]--\)code#include<bits/stdc++.h>usingnamespacestd;inta[10000......
  • [设计模式]创建型模式-简单工厂模式
    简介简单工厂模式又称为静态工厂模式,属于创建型模式,但不属于GOF23设计模式。由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。简单工厂适用场景:工厂类负责创建的对象比较少;客户端只需要知道传入工厂......
  • LInux下wc命令简单使用
    前言利用wc指令我们可以计算文件的Byte数、字数、或列数,如果不指定文件名称,或者所给予的文件名为"-",则wc指令会从标准输入设备读取数据。使用语法如下wc[-clw][--help][--version][文件...]参数如下-c或--bytes或--chars只显示Bytes数。-l或--lines显示行数。-w或--w......
  • Android 《ViewPagerStrip》简单应用
    布局文件activity_pager_tab_strip.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"......
  • 前端部署真的不简单
    原文地址:https://mp.weixin.qq.com/s/MUP0cAT8FbtE0sRX3ohptw现在大部分的中小型公司部署前端代码都是比较简单的,主要步骤如下:首先,通过脚手架提供的命令npmrunbuild打包前端代码,生成dist文件夹;最后,将dist文件夹丢给后台开发人员放在他们的工程里面,随后台一起部署;现在普遍是......
  • Android 《ViewPager》简单应用
    布局文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://sche......
  • Docker-Compose简单入门使用
    Dockercompose使用DockerCompose官方文档:https://docs.docker.com/compose/一、DockerCompose安装如果安装使用DockerDesktop默认就安装了DockerCompose,dockerCompose安装参考:https://www.cnblogs.com/morang/p/devops-docker24-composev2-install.htmlhttps://blog......