首页 > 数据库 >dremio kernel 模块之DremioSqlDialect

dremio kernel 模块之DremioSqlDialect

时间:2022-10-24 10:07:37浏览次数:280  
标签:kernel dremio java exec RelShuttleImpl DremioSqlDialect calcite com

参考图

实际上是继承自calcite 的sql 方言类

dremio  kernel 模块之DremioSqlDialect_sql

 

 

arp 扩展的说明

目前官方的arp 主要是对于sql 数据库类型的高级支持,当然需要依赖社区版的arp 公共包dremio-ce-jdbc-plugin

  • arp 扩展提供的能力
public abstract class AbstractDremioSqlDialect extends DremioSqlDialect {
protected AbstractDremioSqlDialect(String databaseProductName, String identifierQuoteString, NullCollation nullCollation) {
super(databaseProductName, identifierQuoteString, nullCollation);
}

public abstract JdbcSchemaFetcher newSchemaFetcher(JdbcPluginConfig var1);
}
基本实现

public class JdbcDremioSqlDialect extends AbstractDremioSqlDialect {
public static final JdbcDremioSqlDialect DERBY;
// RelToSqlConverter
public JdbcDremioRelToSqlConverter getConverter() {
return new JdbcDremioRelToSqlConverterBase(this);
}

protected JdbcDremioSqlDialect(String databaseProductName, String identifierQuoteString, NullCollation nullCollation) {
super(databaseProductName, identifierQuoteString, nullCollation);
}
// schema 处理
public JdbcSchemaFetcher newSchemaFetcher(JdbcPluginConfig config) {
return new JdbcSchemaFetcherImpl(config);
}
// TypeMapper
public TypeMapper getDataTypeMapper(JdbcPluginConfig config) {
return AutomaticTypeMapper.INSTANCE;
}

public boolean supportsNullReturnType() {
return true;
}

static {
DERBY = new JdbcDremioSqlDialect(DatabaseProduct.DERBY.name(), "\"", NullCollation.HIGH);
}
}
  • ArpDialect 实现


子类

dremio  kernel 模块之DremioSqlDialect_java_02

 

 

 

DremioRelToSqlConverter调用链

stack  com.dremio.exec.store.jdbc.rel2sql.MySQLRelToSqlConverter visit
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 4) cost in 171 ms, listenerId: 7
ts=2022-10-19 15:15:48;thread_name=1cafeb5b-fcd9-c5b8-8228-17c2d9ebcc00/0:foreman-planning;id=176;is_daemon=true;priority=10;TCCL=sun.misc.Launcher$AppClassLoader@18b4aac2
@com.dremio.exec.store.jdbc.rel2sql.MySQLRelToSqlConverter.visit()
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:524)
at com.dremio.common.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:113)
at com.dremio.common.rel2sql.RelToSqlConverter.visitChild(RelToSqlConverter.java:120)
at com.dremio.exec.store.jdbc.rel.JdbcPrel.<init>(JdbcPrel.java:187)
at com.dremio.exec.store.jdbc.rel.JdbcIntermediatePrel.finalizeRel(JdbcIntermediatePrel.java:64)
at com.dremio.exec.planner.sql.handlers.PrelFinalizer.visit(PrelFinalizer.java:31)
at org.apache.calcite.rel.AbstractRelNode.accept(AbstractRelNode.java:232)
at com.dremio.exec.planner.StatelessRelShuttleImpl.visitChild(StatelessRelShuttleImpl.java:37)
at org.apache.calcite.rel.RelShuttleImpl.visitChildren(RelShuttleImpl.java:61)
at org.apache.calcite.rel.RelShuttleImpl.visit(RelShuttleImpl.java:123)
at com.dremio.exec.planner.sql.handlers.PrelFinalizer.visit(PrelFinalizer.java:33)
at org.apache.calcite.rel.AbstractRelNode.accept(AbstractRelNode.java:232)
at com.dremio.exec.planner.StatelessRelShuttleImpl.visitChild(StatelessRelShuttleImpl.java:37)
at org.apache.calcite.rel.RelShuttleImpl.visitChildren(RelShuttleImpl.java:61)
at org.apache.calcite.rel.RelShuttleImpl.visit(RelShuttleImpl.java:123)
at com.dremio.exec.planner.sql.handlers.PrelFinalizer.visit(PrelFinalizer.java:33)
at org.apache.calcite.rel.AbstractRelNode.accept(AbstractRelNode.java:232)
at com.dremio.exec.planner.StatelessRelShuttleImpl.visitChild(StatelessRelShuttleImpl.java:37)
at org.apache.calcite.rel.RelShuttleImpl.visitChildren(RelShuttleImpl.java:61)
at org.apache.calcite.rel.RelShuttleImpl.visit(RelShuttleImpl.java:123)
at com.dremio.exec.planner.sql.handlers.PrelFinalizer.visit(PrelFinalizer.java:33)
at org.apache.calcite.rel.AbstractRelNode.accept(AbstractRelNode.java:232)
at com.dremio.exec.planner.StatelessRelShuttleImpl.visitChild(StatelessRelShuttleImpl.java:37)
at org.apache.calcite.rel.RelShuttleImpl.visitChildren(RelShuttleImpl.java:61)
at org.apache.calcite.rel.RelShuttleImpl.visit(RelShuttleImpl.java:123)
at com.dremio.exec.planner.sql.handlers.PrelFinalizer.visit(PrelFinalizer.java:33)
at org.apache.calcite.rel.AbstractRelNode.accept(AbstractRelNode.java:232)
at com.dremio.exec.planner.sql.handlers.PrelTransformer.convertToPrel(PrelTransformer.java:678)
at com.dremio.exec.planner.sql.handlers.query.NormalHandler.getPlan(NormalHandler.java:83)
at com.dremio.exec.planner.sql.handlers.commands.HandlerToExec.plan(HandlerToExec.java:59)
at com.dremio.exec.work.foreman.AttemptManager.plan(AttemptManager.java:494)
at com.dremio.exec.work.foreman.AttemptManager.lambda$run$4(AttemptManager.java:392)
at com.dremio.service.commandpool.ReleasableBoundCommandPool.lambda$getWrappedCommand$3(ReleasableBoundCommandPool.java:138)
at com.dremio.service.commandpool.CommandWrapper.run(CommandWrapper.java:62)
at com.dremio.context.RequestContext.run(RequestContext.java:95)
at com.dremio.common.concurrent.ContextMigratingExecutorService.lambda$decorate$3(ContextMigratingExecutorService.java:199)
at com.dremio.common.concurrent.ContextMigratingExecutorService$ComparableRunnable.run(ContextMigratingExecutorService.java:180)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)

TypeMapper 提供的能力

jdbc arp 扩展插件的实现,子类如下,主要实现了类型映射处理,同时扩展了一个支持基于yaml 定义的模版比较方便,我们一般arp 类型映射也是基于此的

dremio  kernel 模块之DremioSqlDialect_apache_03

 

 

 

说明

以上是一个简单的说明,实际上DremioSqlDialect 还是比较复杂的,依赖不少东西,如果比较熟悉apache calcite 会比较方便学习

参考资料

​https://www.dremio.com/resources/tutorials/how-to-create-an-arp-connector/​​​
​​​https://github.com/dremio-hub/dremio-sqllite-connector​

标签:kernel,dremio,java,exec,RelShuttleImpl,DremioSqlDialect,calcite,com
From: https://blog.51cto.com/rongfengliang/5788569

相关文章

  • dremio 社区模块的一些说明
    我以前简单说明过dremio依赖的一些社区版的包(木有开源的)以下做一个简单的总结说明社区版模式的开发模式基于独立包进行扩展扩展使用了配置动态加载或者直接引用模式,比如sch......
  • dremio 存储插件之StoragePluginRulesFactory 类简单说明
    StoragePluginRulesFactory是dremio为了分离每个插件的规则,我们存储插件可以包含自己的规则工厂,具体使用到StoragePluginRulesFactory的包含了CatalogServiceImpl,SqlHan......
  • dremio 21 版本之后反射No File System scheme matches 问题解决
    实际属于一个老问题了,整理下,方便使用,主要是我们在使用反射的时候碰到的问题问题如下UnknownFormatConversionException:Conversion='Unknownformat(pdfs)conversio......
  • dremio 23 s3 插件默认ssl 配置问题
    问题描述如下图  操作一般我们会按照(注意需要开启s3兼容模式),以上问题说明是依赖ssl,但是我们已经声明了不使用ssl  或者endpoint带上http如下,数据桶可......
  • dremio 23 版本docker 镜像jdk 说明
    实际上dremio官方在232版本的relasenote中已经说明了关于jdk的处理,在看了最新docker镜像也可以印证此说明参考处理22版本的  23版本的  说明目......
  • dremio 23 社区版发布提供了
    目前dremio23社区版本源码已经开放了同时也提供了docker镜像以及二进制文件,大家可以试用了参考资料https://download.dremio.com/https://github.com/dremio/dremio-o......
  • 深度学习模型训练的过程理解(训练集、验证集、测试集、batch、iteration、epoch、单步
    呜呜呜呜,感谢大佬学弟给我讲干货.本来是讨论项目的,后面就跑偏讲论文模型了. 解答了我一直以来的疑问:数据放模型里训练的过程. 假设我们有一个数据集26304条数据,假设设置模......
  • dremio 社区模块的一些说明
    我以前简单说明过dremio依赖的一些社区版的包(木有开源的)以下做一个简单的总结说明社区版模式的开发模式基于独立包进行扩展扩展使用了配置动态加载或者直接引用模式,比......
  • dremio 存储插件之StoragePluginRulesFactory 类简单说明
    StoragePluginRulesFactory是dremio为了分离每个插件的规则,我们存储插件可以包含自己的规则工厂,具体使用到StoragePluginRulesFactory的包含了CatalogServiceImpl,SqlHa......
  • dremio kernel 模块之DremioSqlDialect
    参考图实际上是继承自calcite的sql方言类  arp扩展的说明目前官方的arp主要是对于sql数据库类型的高级支持,当然需要依赖社区版的arp公共包dremio-ce-jdbc-pl......