Java 客户端
用于通过协议与数据库服务器通信的 Java 客户端库。当前实现仅支持 HTTP 接口。 该库提供了自己的 API 用于向服务器发送请求。该库还提供了用于处理不同二进制数据格式(RowBinary* & Native*)的工具。
设置
- Maven Central(项目页面):https://mvnrepository.com/artifact/com.clickhouse/client-v2
- 每夜构建版本(仓库链接):https://central.sonatype.com/repository/maven-snapshots/
- 旧版 Nightly 构建仓库(仓库链接):https://s01.oss.sonatype.org/content/repositories/snapshots/
- Maven
- Gradle(Kotlin)
- Gradle
初始化
Client 对象通过 com.clickhouse.client.api.Client.Builder#build() 进行初始化。每个客户端都有自己的上下文,客户端之间不共享对象。
Builder 提供了配置方法以便于进行设置。
示例:
Client 实现了 AutoCloseable 接口,不再需要时应将其关闭。
身份验证
身份验证在初始化阶段针对每个客户端进行配置。支持三种身份验证方式:密码、访问令牌、SSL 客户端证书。
使用密码进行身份验证需要通过调用 setUsername(String) 和 setPassword(String) 方法来设置用户名和密码:
使用访问令牌进行身份验证需要通过调用 setAccessToken(String) 设置访问令牌:
通过 SSL 客户端证书进行身份验证需要设置用户名、启用 SSL 身份验证、设置客户端证书和客户端密钥,方法是分别调用 setUsername(String)、useSSLAuthentication(boolean)、setClientCertificate(String) 和 setClientKey(String):
SSL 身份验证在生产环境中可能难以排查,因为 SSL 库返回的许多错误信息不够详细。例如,如果客户端证书与密钥不匹配,服务器会立即终止连接(对于 HTTP 而言,这发生在连接初始化阶段,此时尚未发送任何 HTTP 请求,因此也不会返回任何响应)。
请使用 openssl 等工具验证证书和密钥:
- 检查密钥完整性:
openssl rsa -in [key-file.key] -check -noout - 检查客户端证书中的 CN 是否与某个 USER 匹配:
- 从用户证书中获取 CN -
openssl x509 -noout -subject -in [user.cert] - 确认数据库中已设置相同的值:
select name, auth_type, auth_params from system.users where auth_type = 'ssl_certificate'(查询结果中的auth_params字段类似于{"common_names":["some_user"]})
- 从用户证书中获取 CN -
配置
所有设置均通过实例方法(即配置方法)定义,使每个值的作用域和上下文清晰明确。 主要配置参数在单一作用域(客户端或操作)中定义,互不覆盖。
配置在创建客户端时定义。请参阅 com.clickhouse.client.api.Client.Builder。
客户端配置
- 连接与端点
- 认证
- 超时与重试
- 套接字选项
- 压缩
- SSL/安全
- 代理
- HTTP 与头部
- 服务器配置
- 时区
- 高级
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
addEndpoint(String endpoint) | endpoint - URL 格式的服务器地址 | 将服务器端点添加到可用服务器列表。目前仅支持一个端点。 | none | none |
addEndpoint(Protocol protocol, String host, int port, boolean secure) | protocol - 连接协议host - IP 或主机名secure - 使用 HTTPS | 将服务器端点添加到可用服务器列表。目前仅支持一个端点。 | none | none |
enableConnectionPool(boolean enable) | enable - 启用/禁用标志 | 设置是否启用连接池 | true | connection_pool_enabled |
setMaxConnections(int maxConnections) | maxConnections - 连接数量 | 设置客户端对每个服务器端点最多可以打开的连接数。 | 10 | max_open_connections |
setConnectionTTL(long timeout, ChronoUnit unit) | timeout - 超时值unit - 时间单位 | 设置连接的生存时间 (TTL),超过该时间后连接将被视为不再活动 | -1 | connection_ttl |
setKeepAliveTimeout(long timeout, ChronoUnit unit) | timeout - 超时值unit - 时间单位 | 设置 HTTP 连接的 Keep-Alive 超时时间。设置为 0 以禁用 Keep-Alive。 | - | http_keep_alive_timeout |
setConnectionReuseStrategy(ConnectionReuseStrategy strategy) | strategy - LIFO 或 FIFO | 选择连接池应使用的连接复用策略 | FIFO | connection_reuse_strategy |
setDefaultDatabase(String database) | database - 数据库名称 | 设置默认数据库 | default | database |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setUsername(String username) | username - 用于认证的用户名 | 为将通过后续配置选定的认证方式设置用户名 | default | user |
setPassword(String password) | password - 机密值 | 为密码认证设置机密值,并将密码认证实际选为认证方式 | - | password |
setAccessToken(String accessToken) | accessToken - 访问令牌字符串 | 设置访问令牌,以使用相应的认证方式进行认证 | - | access_token |
useSSLAuthentication(boolean useSSLAuthentication) | useSSLAuthentication - 启用 SSL 认证的标志 | 将 SSL 客户端证书设置为一种认证方式。 | - | ssl_authentication |
useHTTPBasicAuth(boolean useBasicAuth) | useBasicAuth - 启用/禁用的标志 | 设置在用户密码认证中是否应使用基本 HTTP 认证。可解决包含特殊字符的密码所导致的问题。 | true | http_use_basic_auth |
useBearerTokenAuth(String bearerToken) | bearerToken - 编码后的 Bearer 令牌 | 指定是否使用 Bearer 认证以及要使用的令牌。令牌将按原样发送。 | - | bearer_token |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setConnectTimeout(long timeout, ChronoUnit unit) | timeout - 超时时间值unit - 时间单位 | 设置所有出站连接在建立连接时的超时时间。 | - | connection_timeout |
setConnectionRequestTimeout(long timeout, ChronoUnit unit) | timeout - 超时时间值unit - 时间单位 | 设置连接请求超时时间。仅在从连接池获取连接时生效。 | 10000 | connection_request_timeout |
setSocketTimeout(long timeout, ChronoUnit unit) | timeout - 超时时间值unit - 时间单位 | 设置用于读写操作的 socket 超时时间。 | 0 | socket_timeout |
setExecutionTimeout(long timeout, ChronoUnit timeUnit) | timeout - 超时时间值timeUnit - 时间单位 | 设置查询的最大执行超时时间。 | 0 | max_execution_time |
retryOnFailures(ClientFaultCause ...causes) | causes - ClientFaultCause 的枚举常量 | 设置可恢复/可重试的故障类型。 | NoHttpResponse ConnectTimeout ConnectionRequestTimeout | client_retry_on_failures |
setMaxRetries(int maxRetries) | maxRetries - 重试次数 | 设置针对由 retryOnFailures 定义的故障的最大重试次数。 | 3 | retry |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setSocketRcvbuf(long size) | size - 以字节为单位的大小 | 设置 TCP socket 接收缓冲区。该缓冲区位于 JVM 内存之外(堆外内存)。 | 8196 | socket_rcvbuf |
setSocketSndbuf(long size) | size - 以字节为单位的大小 | 设置 TCP socket 发送缓冲区。该缓冲区位于 JVM 内存之外(堆外内存)。 | 8196 | socket_sndbuf |
setSocketKeepAlive(boolean value) | value - 启用/禁用的标志 | 为每个 TCP socket 设置 SO_KEEPALIVE 选项。TCP Keep Alive 启用用于检查连接是否存活的机制。 | - | socket_keepalive |
setSocketTcpNodelay(boolean value) | value - 启用/禁用的标志 | 为每个 TCP socket 设置 SO_NODELAY 选项。该 TCP 选项会使 socket 尽可能立即发送数据。 | - | socket_tcp_nodelay |
setSocketLinger(int secondsToWait) | secondsToWait - 秒数 | 为客户端创建的每个 TCP socket 设置延迟关闭时间(linger time)。 | - | socket_linger |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
compressServerResponse(boolean enabled) | enabled - 启用/禁用标志 | 设置服务器是否应压缩响应。 | true | compress |
compressClientRequest(boolean enabled) | enabled - 启用/禁用标志 | 设置客户端是否应压缩请求。 | false | decompress |
useHttpCompression(boolean enabled) | enabled - 启用/禁用标志 | 设置在相应选项启用时,客户端与服务器通信是否应使用 HTTP 压缩。 | - | - |
appCompressedData(boolean enabled) | enabled - 启用/禁用标志 | 告知客户端压缩由应用程序负责处理。 | false | app_compressed_data |
setLZ4UncompressedBufferSize(int size) | size - 以字节为单位的大小 | 设置用于接收数据流未压缩部分的缓冲区大小(字节数)。 | 65536 | compression.lz4.uncompressed_buffer_size |
disableNativeCompression | disable - 禁用标志 | 禁用原生压缩。如果设为 true,则会禁用原生压缩。 | false | disable_native_compression |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setSSLTrustStore(String path) | path - 本地系统上的文件路径 | 配置客户端是否使用 SSL truststore 来对服务器主机进行验证。 | - | trust_store |
setSSLTrustStorePassword(String password) | password - 机密值 | 设置用于解锁由 setSSLTrustStore 指定的 SSL truststore 的密码。 | - | key_store_password |
setSSLTrustStoreType(String type) | type - truststore 类型名称 | 设置由 setSSLTrustStore 指定的 truststore 类型。 | - | key_store_type |
setRootCertificate(String path) | path - 本地系统上的文件路径 | 配置客户端是否使用指定的根 (CA) 证书来验证服务器主机。 | - | sslrootcert |
setClientCertificate(String path) | path - 本地系统上的文件路径 | 设置在发起 SSL 连接以及进行 SSL 认证时要使用的客户端证书路径。 | - | sslcert |
setClientKey(String path) | path - 本地系统上的文件路径 | 设置用于与服务器进行 SSL 加密通信的客户端私钥。 | - | ssl_key |
sslSocketSNI(String sni) | sni - 服务器名称字符串 | 设置在 SSL/TLS 连接中用于 SNI(Server Name Indication,服务器名称指示)的服务器名称。 | - | ssl_socket_sni |
| 方法 | 参数 | 描述 | 默认值 | 键 |
|---|---|---|---|---|
addProxy(ProxyType type, String host, int port) | type - 代理类型host - 代理主机名或 IPport - 代理端口 | 设置用于与服务器通信的代理。 | - | proxy_type, proxy_host, proxy_port |
setProxyCredentials(String user, String pass) | user - 代理用户名pass - 密码 | 设置用于代理认证的用户凭据。 | - | proxy_user, proxy_password |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setHttpCookiesEnabled(boolean enabled) | enabled - 用于启用/禁用的标志位 | 设置是否应记住 HTTP cookie 并将其发送回服务器。 | - | - |
httpHeader(String key, String value) | key - HTTP 头键value - 字符串值 | 为单个 HTTP 头设置值。先前的值会被覆盖。 | none | none |
httpHeader(String key, Collection values) | key - HTTP 头键values - 字符串值列表 | 为单个 HTTP 头设置多个值。先前的值会被覆盖。 | none | none |
httpHeaders(Map headers) | headers - 包含 HTTP 头的映射 | 一次性设置多个 HTTP 头的值。 | none | none |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
serverSetting(String name, String value) | name - 设置名称value - 设置值 | 设置随每个查询一起发送到服务器的设置。单次操作的设置可以覆盖它。设置列表 | none | none |
serverSetting(String name, Collection values) | name - 设置名称values - 设置值集合 | 设置随每个查询一起发送到服务器的、包含多个值的设置,例如 roles | none | none |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
useServerTimeZone(boolean useServerTimeZone) | useServerTimeZone - 启用/禁用开关 | 设置在解码 DateTime 和 Date 列值时客户端是否应使用服务器时区。 | true | use_server_time_zone |
useTimeZone(String timeZone) | timeZone - 有效的 Java 时区 ID | 设置在解码 DateTime 和 Date 列值时是否使用指定的时区。将覆盖服务器时区。 | - | use_time_zone |
setServerTimeZone(String timeZone) | timeZone - 有效的 Java 时区 ID | 设置服务器端时区。默认将使用 UTC 时区。 | UTC | server_time_zone |
| Method | Arguments | Description | Default | Key |
|---|---|---|---|---|
setOption(String key, String value) | key - 配置选项键value - 选项值 | 设置客户端选项的原始值。适用于从属性配置文件读取配置的场景。 | - | - |
useAsyncRequests(boolean async) | async - 启用/禁用标志 | 设置客户端是否应在单独线程中执行请求。默认禁用,因为应用程序更清楚如何组织多线程任务。 | false | async |
setSharedOperationExecutor(ExecutorService executorService) | executorService - ExecutorService 实例 | 为操作任务设置 ExecutorService。 | none | none |
setClientNetworkBufferSize(int size) | size - 以字节为单位的大小 | 设置应用程序内存空间中缓冲区的大小,该缓冲区用于在 socket 与应用程序之间复制数据。 | 300000 | client_network_buffer_size |
allowBinaryReaderToReuseBuffers(boolean reuse) | reuse - 启用/禁用标志 | 如果启用,读取器将使用预分配的缓冲区执行数值转码。可降低数值数据的 GC 压力。 | - | - |
columnToMethodMatchingStrategy(ColumnToMethodMatchingStrategy strategy) | strategy - 匹配策略实现 | 设置在注册 DTO 时用于匹配 DTO 类字段和数据库列的自定义策略。 | none | none |
setClientName(String clientName) | clientName - 应用程序名称字符串 | 设置关于调用方应用程序的附加信息。该信息将作为 User-Agent 头传递。 | - | client_name |
registerClientMetrics(Object registry, String name) | registry - Micrometer registry 实例name - 指标组名称 | 向 Micrometer (https://micrometer.io/) registry 实例注册指标采集器。 | - | - |
setServerVersion(String version) | version - 服务器版本字符串 | 设置服务器版本以避免版本自动检测。 | - | server_version |
typeHintMapping(Map typeHintMapping) | typeHintMapping - 类型提示映射 | 为 ClickHouse 类型设置类型提示映射。例如,使多维数组可以以 Java 容器的形式呈现。 | - | type_hint_mapping |
服务器设置
服务器端设置可以在创建客户端时设置一次(参见 Builder 的 serverSetting 方法),也可以在操作级别设置(参见操作设置类的 serverSetting)。
⚠️ 当通过 setOption 方法设置选项时(无论是 Client.Builder 还是操作设置类),服务器设置名称都应添加 clickhouse_setting_ 前缀。此时,com.clickhouse.client.api.ClientConfigProperties#serverSetting() 方法会很有用。
自定义 HTTP 请求头
可以为所有操作(客户端级别)或单个操作(操作级别)设置自定义 HTTP 头。
当通过 setOption 方法设置选项时(无论是 Client.Builder 还是操作设置类),自定义请求头名称应以 http_header_ 为前缀。此时,可以使用 com.clickhouse.client.api.ClientConfigProperties#httpHeader() 方法。
通用定义
ClickHouseFormat
支持的格式的枚举,包含 ClickHouse 支持的所有格式。
raw- 用户需要对原始数据进行转码full- 客户端可以自行对数据进行转码,并能接收原始数据流-- ClickHouse 不支持对该格式执行此操作
此客户端版本支持:
插入 API
insert(String tableName, InputStream data, ClickHouseFormat format)
接受指定格式的字节 InputStream 数据。要求 data 使用 format 编码。
签名
参数
tableName - 目标表名。
data - 已编码数据的输入流。
format - 数据编码所使用的格式。
settings - 请求设置。
返回值
InsertResponse 类型的 Future - 操作结果及服务器端指标等附加信息。
示例
insert(String tableName, List<?> data, InsertSettings settings)
向数据库发送写入请求。对象列表将被转换为高效格式,然后发送到服务器。列表项的类应事先使用 register(Class, TableSchema) 方法进行注册。
签名
参数
tableName - 目标表名称。
data - DTO(数据传输对象)集合对象。
settings - 请求设置。
返回值
InsertResponse 类型的 Future - 包含操作结果以及服务器端指标等附加信息。
示例
InsertSettings
插入操作的配置选项。
配置方式
| 方法 | 说明 |
|---|---|
setQueryId(String queryId) | 设置要分配给该操作的查询 ID。默认值:null。 |
setDeduplicationToken(String token) | 设置去重令牌。该令牌将被发送到服务器,可用于标识该查询。默认值:null。 |
setInputStreamCopyBufferSize(int size) | 复制缓冲区大小。该缓冲区在写入操作期间用于将数据从用户提供的输入流复制到输出流。默认值:8196。 |
serverSetting(String name, String value) | 为一次操作设置单个服务器参数。 |
serverSetting(String name, Collection values) | 为某个操作设置一个可包含多个值的服务器配置项。集合中的元素必须是 String 类型的值。 |
setDBRoles(Collection dbRoles) | 设置在执行操作前生效的 DB 角色。集合中的元素应为 String 类型的值。 |
setOption(String option, Object value) | 以原始格式设置配置选项。这不是服务器级设置。 |
InsertResponse
响应对象,保存插入操作的结果。仅在客户端收到服务器响应时可用。
应尽快关闭此对象以释放连接,因为只有在完全读取上一个响应的所有数据后,连接才能被重用。
| 方法 | 说明 |
|---|---|
OperationMetrics getMetrics() | 返回一个包含操作指标的对象。 |
String getQueryId() | 返回为该操作分配的查询 ID,该 ID 由应用程序(通过操作设置)或服务器指定。 |
查询 API
query(String sqlQuery)
按原样发送 sqlQuery。响应格式由查询设置决定。QueryResponse 将持有对响应流的引用,该响应流应由支持相应格式的读取器消费。
签名
参数
sqlQuery - 单个 SQL 语句。该查询将按原样发送到服务器。
settings - 请求设置。
返回值
QueryResponse 类型的 Future - 包含结果数据集和附加信息(如服务器端指标)。使用完数据集后应关闭 Response 对象。
示例
query(String sqlQuery, Map<String, Object> queryParams, QuerySettings settings)
按原样发送 sqlQuery。此外还会发送查询参数,以便服务器编译 SQL 表达式。
签名
参数
sqlQuery - 带有占位符 {} 的 SQL 表达式。
queryParams - 用于在服务器上完成 SQL 表达式的变量映射表。
settings - 请求设置。
返回值
QueryResponse 类型的 Future - 包含结果数据集和附加信息(如服务器端指标)。使用完数据集后应关闭 Response 对象。
示例
queryAll(String sqlQuery)
以 RowBinaryWithNamesAndTypes 格式查询数据。将结果作为集合返回。读取性能与 reader 相同,但需要更多内存来保存整个数据集。
签名
参数
sqlQuery - 用于从服务器查询数据的 SQL 表达式。
返回值
完整数据集由 GenericRecord 对象列表表示,这些对象以行形式提供对结果数据的访问。
示例
QuerySettings
查询操作的配置选项。
配置方式
| 方法 | 说明 |
|---|---|
setQueryId(String queryId) | 设置要分配给该操作的查询 ID。 |
setFormat(ClickHouseFormat format) | 设置响应格式。完整列表请参见 RowBinaryWithNamesAndTypes。 |
setMaxExecutionTime(Integer maxExecutionTime) | 在服务器端设置操作的最大执行时间。不会影响读取超时设置。 |
waitEndOfQuery(Boolean waitEndOfQuery) | 请求服务器在发送响应前等待查询完成。 |
setUseServerTimeZone(Boolean useServerTimeZone) | 服务器时区(参见客户端配置)将用于解析操作结果中的日期/时间类型。默认值为 false。 |
setUseTimeZone(String timeZone) | 请求服务器使用 timeZone 进行时间转换。参见 session_timezone。 |
serverSetting(String name, String value) | 为一次操作设置单个服务器配置项。 |
serverSetting(String name, Collection values) | 为某个操作设置可包含多个值的单个服务器配置项。集合中的各项应为 String 值。 |
setDBRoles(Collection dbRoles) | 设置在执行操作前要应用的数据库角色。集合中的元素应为 String 值。 |
setOption(String option, Object value) | 以原始格式设置配置选项。这不是服务器级别的设置。 |
QueryResponse
用于保存查询执行结果的响应对象。仅在客户端从服务器收到响应时可用。
应尽快关闭此对象以释放连接,因为只有在完全读取上一个响应的所有数据后,连接才能被重用。
| 方法 | 说明 |
|---|---|
ClickHouseFormat getFormat() | 返回用于对响应数据进行编码的格式。 |
InputStream getInputStream() | 返回采用指定格式的未压缩数据字节流。 |
OperationMetrics getMetrics() | 返回一个包含该操作各项指标的对象。 |
String getQueryId() | 返回为该操作分配的查询 ID,该 ID 由应用程序(通过操作设置)或由服务器生成。 |
TimeZone getTimeZone() | 返回用于处理响应中 Date/DateTime 类型的时区。 |
示例
通用 API
getTableSchema(String table)
获取 table 的表架构。
签名
参数
table - 要获取模式数据的表名。
database - 目标表所在的数据库。
返回值
返回包含表列列表的 TableSchema 对象。
getTableSchemaFromQuery(String sql)
从 SQL 语句中获取模式(schema)。
签名
参数
sql - 需要返回其模式(schema)的 "SELECT" SQL 语句。
返回值
返回一个 TableSchema 对象,其列与 sql 表达式相匹配。
TableSchema
register(Class<?> clazz, TableSchema schema)
为 Java 类编译序列化和反序列化层,以便使用 schema 进行数据的写入和读取。该方法将为 getter/setter 方法对及其对应的列创建序列化器和反序列化器。
列匹配通过从方法名称中提取列名来实现。例如,getFirstName 方法将对应于列 first_name 或 firstname。
签名
参数
clazz - 表示用于读写数据的 POJO 类。
schema - 用于与 POJO 属性进行匹配的数据架构。
示例
使用示例
完整的示例代码存储在代码仓库的 example 文件夹中:
- client-v2 - 主要示例集合。
- demo-service - 在 Spring Boot 应用程序中使用客户端的示例。
- demo-kotlin-service - 在 Ktor(Kotlin)应用中使用该客户端的示例。
迁移指南
旧版客户端(V1)使用 com.clickhouse.client.ClickHouseClient#builder 作为入口点。新版客户端(V2)采用类似的模式,使用 com.clickhouse.client.api.Client.Builder。主要差异如下:
- 这里不会使用 service loader 来获取具体实现。
com.clickhouse.client.api.Client是一个外观类,作为未来各种实现的统一入口。 - 配置来源更少:一个由构建器提供,另一个来自操作设置(
QuerySettings、InsertSettings)。先前的版本在每个节点上都有配置,并且在某些情况下会从环境变量中加载。
配置参数匹配
V1 中有 3 个与配置相关的枚举类:
com.clickhouse.client.config.ClickHouseDefaults- 在大多数使用场景下通常需要设置的配置参数,例如USER和PASSWORD。com.clickhouse.client.config.ClickHouseClientOption- 客户端特定的配置参数,例如HEALTH_CHECK_INTERVAL。com.clickhouse.client.http.config.ClickHouseHttpOption- 特定于 HTTP 接口的配置参数,例如RECEIVE_QUERY_PROGRESS。
它们的设计目的是对参数进行分组并提供清晰的分离。但在某些情况下会导致混淆(例如 com.clickhouse.client.config.ClickHouseDefaults#ASYNC 和 com.clickhouse.client.config.ClickHouseClientOption#ASYNC 之间是否存在差异)。 新的 V2 客户端使用 com.clickhouse.client.api.Client.Builder 作为所有可能客户端配置选项的单一字典。所有配置参数名称列在 com.clickhouse.client.api.ClientConfigProperties 中。
下表列出了新客户端支持的旧选项及其新含义。
图例: ✔ = 支持,✗ = 已弃用
- 连接与认证
- SSL 与安全
- 套接字选项
- 压缩
- 代理
- 超时和重试
- 时区
- 缓冲机制与性能
- 线程与异步
- HTTP 与请求头
- 格式和查询
- 节点发现与负载均衡
- 其他
| V1 配置项 | V2 构建器方法 | 备注 |
|---|---|---|
ClickHouseDefaults#HOST | Client.Builder#addEndpoint | |
ClickHouseDefaults#PROTOCOL | ✗ | V2 中仅支持 HTTP |
ClickHouseDefaults#DATABASEClickHouseClientOption#DATABASE | Client.Builder#setDefaultDatabase | |
ClickHouseDefaults#USER | Client.Builder#setUsername | |
ClickHouseDefaults#PASSWORD | Client.Builder#setPassword | |
ClickHouseClientOption#CONNECTION_TIMEOUT | Client.Builder#setConnectTimeout | |
ClickHouseClientOption#CONNECTION_TTL | Client.Builder#setConnectionTTL | |
ClickHouseHttpOption#MAX_OPEN_CONNECTIONS | Client.Builder#setMaxConnections | |
ClickHouseHttpOption#KEEP_ALIVEClickHouseHttpOption#KEEP_ALIVE_TIMEOUT | Client.Builder#setKeepAliveTimeout | |
ClickHouseHttpOption#CONNECTION_REUSE_STRATEGY | Client.Builder#setConnectionReuseStrategy | |
ClickHouseHttpOption#USE_BASIC_AUTHENTICATION | Client.Builder#useHTTPBasicAuth |
| V1 配置 | V2 Builder 方法 | 注释 |
|---|---|---|
ClickHouseDefaults#SSL_CERTIFICATE_TYPE | ✗ | |
ClickHouseDefaults#SSL_KEY_ALGORITHM | ✗ | |
ClickHouseDefaults#SSL_PROTOCOL | ✗ | |
ClickHouseClientOption#SSL | ✗ | 请参见 Client.Builder#addEndpoint |
ClickHouseClientOption#SSL_MODE | ✗ | |
ClickHouseClientOption#SSL_ROOT_CERTIFICATE | Client.Builder#setRootCertificate | 应通过 useSSLAuthentication 启用 SSL 身份验证 |
ClickHouseClientOption#SSL_CERTIFICATE | Client.Builder#setClientCertificate | |
ClickHouseClientOption#SSL_KEY | Client.Builder#setClientKey | |
ClickHouseClientOption#KEY_STORE_TYPE | Client.Builder#setSSLTrustStoreType | |
ClickHouseClientOption#TRUST_STORE | Client.Builder#setSSLTrustStore | |
ClickHouseClientOption#KEY_STORE_PASSWORD | Client.Builder#setSSLTrustStorePassword | |
ClickHouseClientOption#SSL_SOCKET_SNI | Client.Builder#sslSocketSNI | |
ClickHouseClientOption#CUSTOM_SOCKET_FACTORY | ✗ | |
ClickHouseClientOption#CUSTOM_SOCKET_FACTORY_OPTIONS | ✗ | 请参见 Client.Builder#sslSocketSNI 以设置 SNI |
| V1 配置 | V2 构建器方法 | 说明 |
|---|---|---|
ClickHouseClientOption#SOCKET_TIMEOUT | Client.Builder#setSocketTimeout | |
ClickHouseClientOption#SOCKET_REUSEADDR | Client.Builder#setSocketReuseAddress | |
ClickHouseClientOption#SOCKET_KEEPALIVE | Client.Builder#setSocketKeepAlive | |
ClickHouseClientOption#SOCKET_LINGER | Client.Builder#setSocketLinger | |
ClickHouseClientOption#SOCKET_IP_TOS | ✗ | |
ClickHouseClientOption#SOCKET_TCP_NODELAY | Client.Builder#setSocketTcpNodelay | |
ClickHouseClientOption#SOCKET_RCVBUF | Client.Builder#setSocketRcvbuf | |
ClickHouseClientOption#SOCKET_SNDBUF | Client.Builder#setSocketSndbuf |
| V1 配置 | V2 Builder 方法 | 说明 |
|---|---|---|
ClickHouseClientOption#COMPRESS | Client.Builder#compressServerResponse | 另见 useHttpCompression |
ClickHouseClientOption#DECOMPRESS | Client.Builder#compressClientRequest | 另见 useHttpCompression |
ClickHouseClientOption#COMPRESS_ALGORITHM | ✗ | 非 HTTP 使用 LZ4;HTTP 使用 Accept-Encoding |
ClickHouseClientOption#DECOMPRESS_ALGORITHM | ✗ | 非 HTTP 使用 LZ4;HTTP 使用 Content-Encoding |
ClickHouseClientOption#COMPRESS_LEVEL | ✗ | |
ClickHouseClientOption#DECOMPRESS_LEVEL | ✗ |
| V1 配置 | V2 构建器方法 | 备注 |
|---|---|---|
ClickHouseClientOption#PROXY_TYPE | Client.Builder#addProxy | |
ClickHouseClientOption#PROXY_HOST | Client.Builder#addProxy | |
ClickHouseClientOption#PROXY_PORT | Client.Builder#addProxy | |
ClickHouseClientOption#PROXY_USERNAME | Client.Builder#setProxyCredentials | |
ClickHouseClientOption#PROXY_PASSWORD | Client.Builder#setProxyCredentials |
| V1 配置 | V2 Builder 方法 | 备注 |
|---|---|---|
ClickHouseClientOption#MAX_EXECUTION_TIME | Client.Builder#setExecutionTimeout | |
ClickHouseClientOption#RETRY | Client.Builder#setMaxRetries | 另请参见 retryOnFailures |
ClickHouseHttpOption#AHC_RETRY_ON_FAILURE | Client.Builder#retryOnFailures | |
ClickHouseClientOption#FAILOVER | ✗ | |
ClickHouseClientOption#REPEAT_ON_SESSION_LOCK | ✗ | |
ClickHouseClientOption#SESSION_ID | ✗ | |
ClickHouseClientOption#SESSION_CHECK | ✗ | |
ClickHouseClientOption#SESSION_TIMEOUT | ✗ |
| V1 配置 | V2 构建器方法 | 说明 |
|---|---|---|
ClickHouseDefaults#SERVER_TIME_ZONEClickHouseClientOption#SERVER_TIME_ZONE | Client.Builder#setServerTimeZone | |
ClickHouseClientOption#USE_SERVER_TIME_ZONE | Client.Builder#useServerTimeZone | |
ClickHouseClientOption#USE_SERVER_TIME_ZONE_FOR_DATES | ||
ClickHouseClientOption#USE_TIME_ZONE | Client.Builder#useTimeZone |
| V1 配置 | V2 构建器方法 | 备注 |
|---|---|---|
ClickHouseClientOption#BUFFER_SIZE | Client.Builder#setClientNetworkBufferSize | |
ClickHouseClientOption#BUFFER_QUEUE_VARIATION | ✗ | |
ClickHouseClientOption#READ_BUFFER_SIZE | ✗ | |
ClickHouseClientOption#WRITE_BUFFER_SIZE | ✗ | |
ClickHouseClientOption#REQUEST_CHUNK_SIZE | ✗ | |
ClickHouseClientOption#REQUEST_BUFFERING | ✗ | |
ClickHouseClientOption#RESPONSE_BUFFERING | ✗ | |
ClickHouseClientOption#MAX_BUFFER_SIZE | ✗ | |
ClickHouseClientOption#MAX_QUEUED_BUFFERS | ✗ | |
ClickHouseClientOption#MAX_QUEUED_REQUESTS | ✗ | |
ClickHouseClientOption#REUSE_VALUE_WRAPPER | ✗ |
| V1 配置 | V2 Builder 方法 | 备注 |
|---|---|---|
ClickHouseDefaults#ASYNCClickHouseClientOption#ASYNC | Client.Builder#useAsyncRequests | |
ClickHouseDefaults#MAX_SCHEDULER_THREADS | ✗ | 请参见 setSharedOperationExecutor |
ClickHouseDefaults#MAX_THREADS | ✗ | 请参见 setSharedOperationExecutor |
ClickHouseDefaults#THREAD_KEEPALIVE_TIMEOUT | 请参见 setSharedOperationExecutor | |
ClickHouseClientOption#MAX_THREADS_PER_CLIENT | ✗ | |
ClickHouseClientOption#MAX_CORE_THREAD_TTL | ✗ |
| V1 配置 | V2 构建器方法 | 备注 |
|---|---|---|
ClickHouseHttpOption#CUSTOM_HEADERS | Client.Builder#httpHeaders | |
ClickHouseHttpOption#CUSTOM_PARAMS | ✗ | 参见 Client.Builder#serverSetting |
ClickHouseClientOption#CLIENT_NAME | Client.Builder#setClientName | |
ClickHouseHttpOption#CONNECTION_PROVIDER | ✗ | |
ClickHouseHttpOption#DEFAULT_RESPONSE | ✗ | |
ClickHouseHttpOption#SEND_HTTP_CLIENT_ID | ✗ | |
ClickHouseHttpOption#AHC_VALIDATE_AFTER_INACTIVITY | ✗ | 使用 Apache Http Client 时始终启用 |
| V1 配置 | V2 构建器方法 | 说明 |
|---|---|---|
ClickHouseDefaults#FORMATClickHouseClientOption#FORMAT | ✗ | 已移动到操作级设置(QuerySettings 和 InsertSettings) |
ClickHouseClientOption#QUERY_ID | ✗ | 参见 QuerySettings 和 InsertSettings |
ClickHouseClientOption#LOG_LEADING_COMMENT | ✗ | 参见 QuerySettings#logComment 和 InsertSettings#logComment |
ClickHouseClientOption#MAX_RESULT_ROWS | ✗ | 是服务端设置 |
ClickHouseClientOption#RESULT_OVERFLOW_MODE | ✗ | 是服务端设置 |
ClickHouseHttpOption#RECEIVE_QUERY_PROGRESS | ✗ | 是服务端设置 |
ClickHouseHttpOption#WAIT_END_OF_QUERY | ✗ | 是服务端设置 |
ClickHouseHttpOption#REMEMBER_LAST_SET_ROLES | Client#setDBRoles | 现为运行时配置。另见 QuerySettings#setDBRoles 和 InsertSettings#setDBRoles |
| V1 配置 | V2 构建器方法 | 说明 |
|---|---|---|
ClickHouseClientOption#AUTO_DISCOVERY | ✗ | |
ClickHouseClientOption#LOAD_BALANCING_POLICY | ✗ | |
ClickHouseClientOption#LOAD_BALANCING_TAGS | ✗ | |
ClickHouseClientOption#HEALTH_CHECK_INTERVAL | ✗ | |
ClickHouseClientOption#HEALTH_CHECK_METHOD | ✗ | |
ClickHouseClientOption#NODE_DISCOVERY_INTERVAL | ✗ | |
ClickHouseClientOption#NODE_DISCOVERY_LIMIT | ✗ | |
ClickHouseClientOption#NODE_CHECK_INTERVAL | ✗ | |
ClickHouseClientOption#NODE_GROUP_SIZE | ✗ | |
ClickHouseClientOption#CHECK_ALL_NODES | ✗ |
| V1 配置 | V2 Builder 方法 | 备注 |
|---|---|---|
ClickHouseDefaults#AUTO_SESSION | ✗ | 会话支持将会重新评估 |
ClickHouseDefaults#BUFFERING | ✗ | |
ClickHouseDefaults#MAX_REQUESTS | ✗ | |
ClickHouseDefaults#ROUNDING_MODE | ||
ClickHouseDefaults#SERVER_VERSIONClickHouseClientOption#SERVER_VERSION | Client.Builder#setServerVersion | |
ClickHouseDefaults#SRV_RESOLVE | ✗ | |
ClickHouseClientOption#CUSTOM_SETTINGS | ||
ClickHouseClientOption#PRODUCT_NAME | ✗ | 使用客户端名称 |
ClickHouseClientOption#RENAME_RESPONSE_COLUMN | ✗ | |
ClickHouseClientOption#SERVER_REVISION | ✗ | |
ClickHouseClientOption#TRANSACTION_TIMEOUT | ✗ | |
ClickHouseClientOption#WIDEN_UNSIGNED_TYPES | ✗ | |
ClickHouseClientOption#USE_BINARY_STRING | ✗ | |
ClickHouseClientOption#USE_BLOCKING_QUEUE | ✗ | |
ClickHouseClientOption#USE_COMPILATION | ✗ | |
ClickHouseClientOption#USE_OBJECTS_IN_ARRAYS | ✗ | |
ClickHouseClientOption#MAX_MAPPER_CACHE | ✗ | |
ClickHouseClientOption#MEASURE_REQUEST_TIME | ✗ |
通用差异
- Client V2 使用更少的自定义类以提高可移植性。例如,V2 可以与任何
java.io.InputStream的实现配合使用,将数据写入服务器。 - Client V2 的
async配置默认为off。这意味着不会额外创建线程,并让应用程序对客户端拥有更多控制权。对于大多数使用场景,此配置都应保持为off。启用async会为请求创建一个单独的线程。仅在使用由应用程序控制的 executor 时才有意义(参见com.clickhouse.client.api.Client.Builder#setSharedOperationExecutor)。
写入数据
- 可以使用任何
java.io.InputStream的实现。支持 V1com.clickhouse.data.ClickHouseInputStream,但不推荐使用。 - 一旦检测到输入流已结束,就会进行相应处理。在此之前,应先关闭该请求的输出流。
V1 插入 TSV 格式的数据。
V2 插入 TSV 格式的数据。
- 只需要调用一个方法,无需创建额外的请求对象。
- 当所有数据复制完成后,请求体数据流会自动关闭。
- 现已提供新的低级 API:
com.clickhouse.client.api.Client#insert(java.lang.String, java.util.List<java.lang.String>, com.clickhouse.client.api.DataStreamWriter, com.clickhouse.data.ClickHouseFormat, com.clickhouse.client.api.insert.InsertSettings)。com.clickhouse.client.api.DataStreamWriter专为实现自定义数据写入逻辑而设计,例如从队列中读取数据。
读取数据
- 默认情况下,数据以
RowBinaryWithNamesAndTypes格式读取。目前在需要进行数据绑定时,仅支持此格式。 - 可以使用
List<GenericRecord> com.clickhouse.client.api.Client#queryAll(java.lang.String)方法将数据读取为一组记录。该方法会将数据读取到内存中并释放连接,无需额外处理。GenericRecord提供对数据的访问能力,并实现了一些类型转换。