跳转到主要内容
clickhouse-cpp 是 ClickHouse 官方 C++ 客户端库,使用其原生二进制协议为 ClickHouse 提供快速且类型安全的接口。 构建说明、用法示例及更多文档可在该项目的 GitHub 仓库中找到:https://github.com/ClickHouse/clickhouse-cpp
该库仍在积极开发中。虽然它已经支持 ClickHouse 的核心功能, 但某些功能和数据类型可能尚未得到完整实现或支持。您的反馈非常宝贵,这将有助于我们确定新功能和改进的优先级。如果您遇到限制、功能缺失或非预期行为,请通过 issue 跟踪器分享您的观察或功能请求:  https://github.com/ClickHouse/clickhouse-cpp/issues

将该库集成到你的项目中

将该库集成到项目中的最简单方式,是使用 CMake 的 FetchContent 模块。这样你就可以锁定特定的库版本,并将其作为常规 CMake 工作流的一部分进行构建。
WITH_OPENSSL 选项会为库启用 TLS 支持,并且在连接到 ClickHouse Cloud 或其他启用了 SSL 的 ClickHouse 部署时是必需的。虽然对于非 TLS 连接可以省略,但通常仍建议启用。 构建带有 SSL 支持的版本需要先安装 OpenSSL 开发包。对于 Debian、Ubuntu 及其衍生版,请安装 libssl-dev;对于 Fedora、Red Hat,请安装 openssl-devel;对于 macOS,请使用 Homebrew 安装 openssl 在该依赖可用后,将你的目标链接到导出的库目标:

示例

设置客户端对象

创建一个 Client 实例,以建立与 ClickHouse 的连接。以下示例 展示了如何连接到本地 ClickHouse 实例,此场景下无需密码,且未 启用 SSL。
在更复杂的设置中,需要进行额外配置。以下示例演示了 如何使用多个附加参数连接到 ClickHouse Cloud 实例:

创建表并执行不返回数据的查询

要执行不返回任何数据的查询 (例如创建表) ,请使用 Execute 方法。 同样的方法也适用于 ALTER TABLEDROP 等其他语句。

插入数据

要将数据插入表中,请构造一个 Block,并用与 表 schema 匹配的列对象填充它。数据会按列依次追加,然后通过 Insert 方法一次性插入,该方法针对高效批次写入进行了优化。

选择数据

要执行会返回数据的查询,请使用 Select 方法,并提供一个回调来处理结果。查询结果会以 Block 对象的形式返回,这体现了 ClickHouse 原生的列式数据表示。

支持的数据类型

  • UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64
  • UInt128, Int128
  • Decimal32, Decimal64, Decimal128
  • Float32, Float64
  • Date
  • DateTime, DateTime64
  • DateTime([timezone]), DateTime64(N, [timezone])
  • UUID
  • Enum8, Enum16
  • String
  • FixedString(N)
  • LowCardinality(String)LowCardinality(FixedString(N))
  • Nullable(T)
  • Array(T)
  • Tuple
  • Map
  • IPv4, IPv6
  • Point, Ring, Polygon, MultiPolygon
最后修改于 2026年7月2日