快速入门
连接详情
你的 ClickHouse Cloud 服务的详细信息可在 ClickHouse Cloud 控制台中查看。
选择要连接的服务,然后点击 Connect:
选择 Native,即可在示例
clickhouse-client 命令中看到详细信息。
如果你使用的是自管理 ClickHouse,连接详细信息由你的 ClickHouse 管理员设置。
初始化模块
复制示例代码
clickhouse-golang-example 目录下,并保存为 main.go。
main.go
执行 go mod tidy
设置连接信息
main.go 的 connect() 函数中进行设置:
运行示例
了解更多
概述
- clickhouse-go - 高级语言客户端,支持 Go 标准
database/sql接口或原生 ClickHouse API。 - ch-go - 底层客户端。仅支持原生接口。
四种连接方式
选择 API: 如果你追求最高性能和完整功能集 (进度回调、列式插入、丰富的类型支持) ,请选择 ClickHouse API。如果需要与 ORM 或依赖标准 Go 数据库接口的工具集成,请选择
database/sql。
选择传输方式: TCP 更快,也是默认选项。当你的基础设施要求使用 HTTP 时,可切换到 HTTP——例如,需要通过 HTTP 负载均衡器或代理连接,或者需要 HTTP 特有功能时,如带临时表的会话,或额外的压缩算法 (gzip、deflate、br) 。
无论使用哪种传输方式,这两种 API 都使用原生二进制编码,因此 HTTP 不会带来额外的序列化开销。
选择客户端
interface{} (any) 类型,从而简化了使用方式。
对于以聚合查询为主的工作负载,或者插入吞吐量较低的工作负载,clickhouse-go 提供了熟悉的 database/sql 接口以及更直观的行语义。你还可以选择使用 HTTP 作为传输协议,并借助辅助函数在行与结构体之间进行编组和反编组。
安装
require github.com/ClickHouse/clickhouse-go/v2 main
或者,克隆该仓库:
版本说明
ClickHouse 兼容性
- 此处列出的所有当前仍受支持的 ClickHouse 版本。一旦某个 ClickHouse 版本停止支持,也将不再针对客户端发行版对其进行主动测试。
- 客户端发布之日前后 2 年内的所有 ClickHouse 版本。请注意,只有 LTS 版本会被主动测试。
Golang 兼容性
最佳实践
- 尽可能使用 ClickHouse API,尤其是在处理基本类型时。这样可以避免大量的反射和间接调用。
- 如果要读取大型数据集,请考虑调整
BlockBufferSize。这会增加内存占用,但也意味着在迭代行时可以并行解码更多块。默认值 2 相对保守,可尽量减少内存开销。值越高,内存中保留的块就越多。这需要根据实际情况测试,因为不同查询产生的块大小可能不同。因此,也可以通过 Context 在查询级别进行设置。 - 写入数据时,请尽量明确指定类型。虽然客户端力求灵活,例如允许将字符串解析为 UUID 或 IP,但这需要进行数据校验,并会在写入时带来额外开销。
- 尽可能使用按列插入。同样,这类插入也应使用强类型,以避免客户端转换你的值。
- 遵循 ClickHouse 的建议,以获得最佳插入性能。
后续步骤
- 配置 — 连接设置、TLS、身份验证、日志、压缩
- ClickHouse API — 用于查询和插入操作的原生 Go API
- 数据库/SQL API — 标准
database/sql接口 - 数据类型 — Go 类型映射和复杂类型支持