// the find
ClickHouse/clickhouse-rs
Official pure Rust typed client for ClickHouse DB
The official Rust client for ClickHouse, maintained by the ClickHouse team itself. Uses HTTP transport with the RowBinary format and serde for row encoding — you define a struct, derive Row, and the client handles serialization. For teams running ClickHouse and writing Rust services that need to stream data in or out at volume.
Schema validation via RowBinaryWithNamesAndTypes catches struct/table mismatches at runtime with useful error messages rather than silent corruption. The Inserter abstraction handles batching correctly — it commits on time, byte count, or row count thresholds and spaces parallel inserters with period bias to avoid insert storms. Test mocking is a first-class feature with its own test-util feature flag, which is the right call for a database client. OpenTelemetry context propagation is built in, so CH query traces show up in your existing spans without extra wiring.
HTTP-only for now; TCP/Native protocol is listed as a plan but not implemented, which means you're paying HTTP overhead for every insert batch even when both sides are in the same datacenter. The Variant type mapping requires fields ordered alphabetically by ClickHouse's internal sort — not by your code — which is a correctness trap that will bite someone who reorders their ClickHouse Variant definition. Dynamic type support is absent entirely, so columns with heterogeneous type inference from ClickHouse's new JSON type fall back to a string blob. The crate is still pre-1.0 (0.14.x), meaning breaking API changes are possible between minor versions.