C++ 客户端库
clickhouse-cpp 是 ClickHouse 的官方 C++ 客户端库,基于其原生二进制协议为 ClickHouse 提供快速且类型安全的接口。
构建说明、使用示例以及更多文档可在项目的 GitHub 仓库中获取:https://github.com/ClickHouse/clickhouse-cpp。
该库仍在积极开发中。虽然它已经支持 ClickHouse 的核心功能,但某些特性和数据类型可能尚未完全实现或支持。
您的反馈非常宝贵,有助于确定新特性和改进的优先级。如果您遇到限制、缺失的功能或意外行为,请通过问题跟踪器提交您的观察或功能请求: 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 TABLE、DROP 等。
插入数据
要向表中插入数据,先构造一个 Block,并使用与表结构匹配的列对象来填充它。数据会按列追加,然后通过一次操作,使用经过优化的 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