Arrow Flight SQL JDBC 驱动程序#

Flight SQL JDBC 驱动程序是一个 JDBC 驱动程序实现,它在底层使用Flight SQL 协议。此驱动程序可用于任何实现 Flight SQL 的数据库。

安装和要求#

该驱动程序与 JDK 11+ 兼容。请注意,需要以下 JVM 参数

java --add-opens=java.base/java.nio=ALL-UNNAMED ...

要通过 Maven 添加依赖项,请使用如下 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <arrow.version>18.1.0</arrow.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.apache.arrow</groupId>
      <artifactId>flight-sql-jdbc-driver</artifactId>
      <version>${arrow.version}</version>
    </dependency>
  </dependencies>
</project>

连接到数据库#

URI 格式如下

jdbc:arrow-flight-sql://HOSTNAME:PORT[/?param1=val1&param2=val2&...]

例如,以下 URI

jdbc:arrow-flight-sql://:12345/?username=admin&password=pass&useEncryption=1

这将连接到在端口 12345 上运行于 localhost 的 Flight SQL 服务。它将创建一个安全的加密连接,并使用用户名 admin 和密码 pass 进行身份验证。

URI 的组件如下。

  • URI 方案必须是 jdbc:arrow-flight-sql://

  • HOSTNAME 是 Flight SQL 服务的主机名。

  • PORT 是 Flight SQL 服务的端口。

可以通过查询参数传递其他选项。参数名称区分大小写。支持的参数有

参数

默认

描述

disableCertificateVerification

false

启用 TLS 时,是否验证服务器证书

password

空 (null)

用户/密码身份验证的密码

threadPoolSize

1

内部线程池的大小

token

空 (null)

用于令牌身份验证的令牌

trustStore

空 (null)

启用 TLS 时,证书存储的路径

trustStorePassword

空 (null)

启用 TLS 时,证书存储的密码

tlsRootCerts

空 (null)

PEM 编码的 TLS 根证书路径 - 作为 trustStore 的替代方案

clientCertificate

空 (null)

当 Flight SQL 服务器需要客户端验证时,PEM 编码的客户端 mTLS 证书路径。

clientKey

空 (null)

当 Flight SQL 服务器需要客户端验证时,PEM 编码的客户端 mTLS 密钥路径。

useEncryption

true

是否使用 TLS(默认是加密连接)

user

空 (null)

用户/密码身份验证的用户名

useSystemTrustStore

true

启用 TLS 时,是否使用系统证书存储

retainCookies

true

当从单独的端点检索流时,是否在后续内部连接中使用初始连接中的 cookie。

retainAuth

true

当从单独的端点检索流时,是否在用于检索流的后续内部连接中使用从初始连接获得的持有者令牌。

请注意,如果 URI 值包含 !, @, $ 等字符,则必须对其进行 URI 编码。

驱动程序未处理的任何 URI 参数都将作为 gRPC 头部传递给 Flight SQL 服务。例如,以下 URI

jdbc:arrow-flight-sql://:12345/?useEncryption=0&database=mydb

这将连接到在端口 12345 上运行于 localhost 的 Flight SQL 服务,不进行身份验证或加密。每个请求还将包含一个 database=mydb gRPC 头部。

使用 JDBC 驱动程序管理器连接时,也可以使用 Properties 对象提供连接参数。使用 Properties 对象提供时,值不应进行 URI 编码。

URI 指定的参数优先于 Properties 对象提供的参数。调用 DriverManager#getConnection() 的用户/密码重载时,URI 上提供的用户名和密码优先于函数调用的用户名和密码参数。