clickhouse-cpp 是 ClickHouse 官方 C++ 客户端库,使用其原生二进制协议为 ClickHouse 提供快速且类型安全的接口。
构建说明、使用示例及更多文档可在该项目的
GitHub 仓库中找到:https://github.com/ClickHouse/clickhouse-cpp。
该库仍在积极开发中。尽管它已经支持 ClickHouse 的核心功能,
但某些功能和数据类型可能尚未完全实现或支持。您的反馈非常宝贵,有助于我们确定新功能和
改进的优先级。如果您遇到限制、功能缺失或异常行为,请
通过 issue 跟踪器提交您的观察或功能请求:
https://github.com/ClickHouse/clickhouse-cpp/issues
将该库纳入你的项目
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。
创建表并执行不返回数据的查询
Execute 方法。
同样的方法也适用于其他语句,例如 ALTER TABLE、DROP 等。
插入数据
Block,并用与表 schema 相匹配的列对象填充它。数据会按列依次追加,然后通过 Insert 方法一次性插入;该方法针对高效批次写入进行了优化。
选择数据
Select 方法,并提供一个回调用于处理结果。查询结果会以 Block 对象的形式返回,这体现了 ClickHouse 原生的列式数据表示。
支持的数据类型
UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64UInt128,Int128Decimal32,Decimal64,Decimal128Float32,Float64DateDateTime,DateTime64DateTime([timezone]),DateTime64(N, [timezone])UUIDEnum8,Enum16StringFixedString(N)LowCardinality(String)和LowCardinality(FixedString(N))Nullable(T)Array(T)TupleMapIPv4,IPv6Point,Ring,Polygon,MultiPolygon