跳到主要内容
跳到主要内容

title: '客户端 (0.7.x 及更早版本)' sidebar_label: '客户端 (0.7.x 及更早版本)' keywords: ['Java', '客户端', 'ClickHouse'] description: '与数据库服务器通过其协议进行通信的 Java 客户端库。'

客户端 (0.7.x 及更早版本)

Java 客户端库,通过其协议与数据库服务器通信。当前实现仅支持 HTTP 接口。该库提供了自己的 API,以向服务器发送请求。

弃用

该库将很快被弃用。对于新项目,请使用最新的 Java 客户端

设置

自版本 0.5.0 起,驱动程序使用一个新的客户端 HTTP 库,需要作为依赖添加。

初始化

连接 URL 格式: protocol://host[:port][/database][?param[=value][&param[=value]][#tag[,tag]],例如:

连接到单个节点:

连接到多个节点的集群:

查询 API

流式查询 API

请参阅 完整的代码示例仓库

插入 API

请参阅 完整的代码示例仓库

RowBinary 编码

RowBinary 格式在其 页面 中描述。

有关 代码示例

特性

压缩

客户端默认使用 LZ4 压缩,需要此依赖:

您可以选择通过在连接 URL 中设置 compress_algorithm=gzip 来使用 gzip。

或者,您可以通过几种方式禁用压缩。

  1. 通过在连接 URL 中设置 compress=0 禁用: http://localhost:8123/default?compress=0
  2. 通过客户端配置禁用:

请参阅 压缩文档 以了解有关不同压缩选项的更多信息。

多个查询

在同一个会话中在工作线程依次执行多个查询:

命名参数

您可以按名称传递参数,而不必仅依赖参数列表中的位置。此功能可以通过 params 函数使用。

参数

所有涉及 String 类型 (String, String[], Map<String, String>) 的 params 签名假定传递的键为有效的 ClickHouse SQL 字符串。例如:

如果您不想手动将字符串对象解析为 ClickHouse SQL,您可以使用位于 com.clickhouse.data 的辅助函数 ClickHouseValues.convertToSqlExpression

在上述示例中,ClickHouseValues.convertToSqlExpression 将转义内单引号,并用有效的单引号括起来。

其他类型,例如 IntegerUUIDArrayEnum 将在 params 中自动转换。

节点发现

Java 客户端提供自动发现 ClickHouse 节点的能力。自动发现默认情况下是禁用的。要手动启用它,请将 auto_discovery 设置为 true

或在连接 URL 中:

如果启用自动发现,则不必在连接 URL 中指定所有 ClickHouse 节点。URL 中指定的节点将被视为种子,Java 客户端将自动从系统表和/或 clickhouse-keeper 或 zookeeper 发现更多节点。

以下选项负责自动发现配置:

属性默认描述
auto_discoveryfalse客户端是否应从系统表和/或 clickhouse-keeper/zookeeper 中发现更多节点。
node_discovery_interval0节点发现间隔(以毫秒为单位),零或负值表示一次性发现。
node_discovery_limit100一次最大可发现的节点数量;零或负值表示无限制。

负载均衡

Java 客户端根据负载均衡策略选择要发送请求的 ClickHouse 节点。一般来说,负载均衡策略负责以下内容:

  1. 从受管理的节点列表中获取一个节点。
  2. 管理节点的状态。
  3. 可选地调度后台进程进行节点发现(如果启用了自动发现)并运行健康检查。

以下是配置负载均衡的选项列表:

属性默认描述
load_balancing_policy""负载均衡策略可以是以下之一:
  • firstAlive - 请求发送到受管理节点列表中的第一个健康节点
  • random - 请求发送到受管理节点列表中的随机节点
  • roundRobin - 请求依次发送到受管理节点列表中的每个节点
  • 完整的类名,实现了 ClickHouseLoadBalancingPolicy - 自定义负载均衡策略
  • 如果未指定,请求将发送到受管理节点列表中的第一个节点
    load_balancing_tags""用于过滤节点的负载均衡标签。请求仅发送到具有指定标签的节点
    health_check_interval0健康检查间隔(以毫秒为单位),零或负值表示一次性。
    health_check_methodClickHouseHealthCheckMethod.SELECT_ONE健康检查方法。可以是以下之一:
  • ClickHouseHealthCheckMethod.SELECT_ONE - 使用 select 1 查询进行检查
  • ClickHouseHealthCheckMethod.PING - 协议特定检查,通常更快
  • node_check_interval0节点检查间隔(以毫秒为单位),负数视为零。如果自上次检查以来已过指定时间,则检查节点状态。
    health_check_intervalnode_check_interval 之间的区别在于 health_check_interval 选项调度了一个后台作业,该作业检查节点的状态(所有或故障节点),但 node_check_interval 指定自上次检查以来过去的时间
    check_all_nodesfalse是否对所有节点或仅对故障节点执行健康检查。

    故障转移和重试

    Java 客户端提供配置选项,用于设置失败查询的故障转移和重试行为:

    属性默认描述
    failover0请求的最大故障转移次数。零或负值表示不进行故障转移。故障转移将失败的请求发送到另一个节点(根据负载均衡策略),以便从故障中恢复。
    retry0请求的最大重试次数。零或负值表示不重试。重试将请求发送到同一节点,仅当 ClickHouse 服务器返回NETWORK_ERROR 错误代码时。
    repeat_on_session_locktrue会话锁定时是否重复执行,直到超时(根据 session_timeoutconnect_timeout)。如果 ClickHouse 服务器返回SESSION_IS_LOCKED 错误代码,则会重复失败请求。

    添加自定义 HTTP 头

    Java 客户端支持 HTTP/S 传输层,以便在请求中添加自定义 HTTP 头。 我们应该使用 custom_http_headers 属性,且头部需要使用 , 分隔。头部的键/值应通过 = 分隔。

    Java 客户端支持

    JDBC 驱动