首页 > 其他分享 >dremio singlestore arp 扩展

dremio singlestore arp 扩展

时间:2023-01-08 11:22:16浏览次数:55  
标签:arp dremio String DisplayMetadata label Tag singlestore public

此插件来自singlestore官方的,基于了dremio 23.1 版本开发

conf 配置类

@SourceType(value = "SINGLESTOREARP", label = "SingleStore", uiConfig = "singlestore-layout.json", externalQuerySupported = true)
public class SingleStoreConf extends AbstractArpConf<SingleStoreConf> {
 
  private static final String ARP_FILENAME = "arp/implementation/singlestore-arp.yaml";
  private static final ArpDialect ARP_DIALECT =
      AbstractArpConf.loadArpFile(ARP_FILENAME, (ArpDialect::new));
  private static final String DRIVER = "com.singlestore.jdbc.Driver";
 
  @NotBlank
  @Tag(1)
  @DisplayMetadata(label = "Host")
  public String host;
 
  @Tag(2)
  @DisplayMetadata(label = "Port")
  public int port = 3306;
 
  @NotBlank
  @Tag(3)
  @DisplayMetadata(label = "Database")
  public String database;
 
  @NotBlank
  @Tag(4)
  @DisplayMetadata(label = "Username")
  public String user;
 
  @NotBlank
  @Tag(5)
  @Secret
  @DisplayMetadata(label = "Password")
  public String password;
 
  @Tag(6)
  @DisplayMetadata(label = "Use SSL")
  public boolean useSsl;
 
  @Tag(7)
  @DisplayMetadata(label = "Server Certificate")
  public String serverSslCert;
 
  @Tag(8)
  @DisplayMetadata(label = "Record fetch size")
  @NotMetadataImpacting
  public int fetchSize = 200;
 
  @Tag(9)
  @DisplayMetadata(label = "Maximum idle connections")
  @NotMetadataImpacting
  public int maxIdleConns = 8;
 
  @Tag(10)
  @DisplayMetadata(label = "Connection idle time (s)")
  @NotMetadataImpacting
  public int idleTimeSec = 60;
 
  @Tag(11)
  public List<Property> propertyList;
 
  @VisibleForTesting
  public String toJdbcConnectionString() {
    String url =  String.format("jdbc:singlestore://%s:%s", host, port);
    boolean userProvided = false;
    if (database != null && !database.equals("")) {
      url += String.format("/%s", database);
    }
    if (user != null && !user.equals("")) {
      url += String.format("?user=%s", user);
      userProvided = true;
    }
    if (password != null && !password.equals("")) {
      url += String.format("%spassword=%s", userProvided ? "&" : "?", password);
    }
    if (useSsl) {
      url += "&useSsl=true";
    }
    if (serverSslCert != null && !serverSslCert.equals("")) {
      url += String.format("&serverSslCert=%s", serverSslCert);
    }
    if (this.propertyList != null) {
      for (Property p : this.propertyList) {
        url += String.format("&%s=%s", p.name, p.value);
      }
    }
 
    return url;
  }
 
  @Override
  @VisibleForTesting
  public JdbcPluginConfig buildPluginConfig(
          JdbcPluginConfig.Builder configBuilder,
          CredentialsService credentialsService,
          OptionManager optionManager
  ) {
    return configBuilder.withDialect(getDialect())
            .withDialect(getDialect())
            .withFetchSize(fetchSize)
            .withDatasourceFactory(this::newDataSource)
            .clearHiddenSchemas()
            .addHiddenSchema("SYSTEM")
            .build();
  }
 
  private CloseableDataSource newDataSource() {
    return DataSources.newGenericConnectionPoolDataSource(DRIVER,
      toJdbcConnectionString(), user, password, null, DataSources.CommitMode.DRIVER_SPECIFIED_COMMIT_MODE,
            maxIdleConns, idleTimeSec);
  }
 
  @Override
  public ArpDialect getDialect() {
    return ARP_DIALECT;
  }
 
  @VisibleForTesting
  public static ArpDialect getDialectSingleton() {
    return ARP_DIALECT;
  }
}

arp 配置

核心是类型映射,主要在src/main/resources/arp/implementation/singlestore-arp.yaml
主要禁用了catalog ,以及schema,其他部分可以参考实际内容

 
syntax:
  # Manually Configured Syntax Section.
  identifier_quote: '`'
  identifier_length_limit: 128
  allows_boolean_literal: true
  map_boolean_literal_to_bit: false
  supports_catalogs: false
  supports_schemas: false

说明

jdbc 驱动需要自己下载放到dremio 的classpath 路径下,通过singlestore 官方的dremio arp 扩展可以了解一些开发,实际上singlestore 的jdbc
是基于了mariadb-connector-j

参考资料

https://github.com/memsql/dremio-singlestore
https://github.com/memsql/S2-JDBC-Connector
https://github.com/mariadb-corporation/mariadb-connector-j

标签:arp,dremio,String,DisplayMetadata,label,Tag,singlestore,public
From: https://www.cnblogs.com/rongfengliang/p/17034294.html

相关文章

  • dremio 系统内部存储插件与自定义存储插件加载的区别
    dremio整体包含了两大类存储扩展,系统内部使用的,以及用户开发的,整体区别系统的目前是在dremio自己启动的时候就会注册以及使用的,比如加速反射的,home,元数据存储插件用......
  • dremio PrivilegeCatalog 接口简单说明
    PrivilegeCatalog实际是一个权限检查的能力,同时dremio的StoragePlugin也提供了一个安全check能力StoragePlugin安全检查booleanhasAccessPermission(Str......
  • dremio ManagedStoragePlugin 简单说明
    ManagedStoragePlugin从字面意思可以看出就是托管存储插件,从目前官方的设计来说就是将自己开发的存储扩展,包装为dremio可以管理的插件(统一模型以及统一处理)ManagedSto......
  • dremio SourceCatalog 服务说明
    SourceCatalog主要进行source的管理,包含了获取信息,创建,更新,删除,包含了不同的实现SourceCatalog服务定义/***Interfacetoperformactionsonsources.......
  • dremio DatasetSaver 服务说明
    我以前简单写过关于元数据处理的说明(基于jprofiler+arthas工具)会依赖namespace服务实际对于数据的操作都是通过SourceMetadataManager执行的DatasetSaver服务提供的......
  • dremio datastore简单说明
    datastore实际上是进行数据存储的实现(主要是配置以及元数据相关的)不少服务都使用到了此功能(namespace,catalog,user,job)实际上dremio官方对于dremio的部署(软件版,尤其......
  • scarpy架构组成和工作原理
     汽车之间案例:importscrapyclassCarSpider(scrapy.Spider):name='car'allowed_domains=['https://car.autohome.com.cn/price/brand-15.html']......
  • dremio 表函数简单说明
    dremio对于表函数的处理实际上还是基于了apcahecalcite,只是对于dremio来说,使用相对不是很多目前dremio比较多的就是外部查询,还有就是关于iceberg的一些支持函数参......
  • dremio 数据存储结构示例
    从dremio运行系统摘录一些存储结构,方便了解dremio分布式存储(主要以对象存储为主,当然nas也是可以使用的)部分,整体结构类似,但是文件夹名称可能会不要一样(反射内部的存储结......
  • dremio NamespaceService 简单说明一
    此处主要说明社区版dremionamspaceservice包含的一个能力,我们如果自己扩展下就可以实现简单的部分权限管理参加定义类图如下如可以看出namspaceservice提供的能力 ......