#clickhouse #sql-database #sql #tokio

klickhouse

Klickhouse is a pure Rust SDK for working with Clickhouse with the native protocol in async environments with minimal boilerplate and maximal performance

42 releases

new 0.13.2 Nov 14, 2024
0.13.0 May 8, 2024
0.11.2 Feb 28, 2024
0.10.2 Oct 28, 2023
0.2.1 May 31, 2021

#499 in Database interfaces

Download history 507/week @ 2024-07-25 305/week @ 2024-08-01 209/week @ 2024-08-08 243/week @ 2024-08-15 167/week @ 2024-08-22 294/week @ 2024-08-29 241/week @ 2024-09-05 267/week @ 2024-09-12 605/week @ 2024-09-19 414/week @ 2024-09-26 234/week @ 2024-10-03 320/week @ 2024-10-10 185/week @ 2024-10-17 111/week @ 2024-10-24 117/week @ 2024-10-31 94/week @ 2024-11-07

559 downloads per month

MIT/Apache

325KB
8K SLoC

Klickhouse

Klickhouse is a pure Rust SDK for working with Clickhouse with the native protocol in async environments with minimal boilerplate and maximal performance.

Example Usage

See example usage.

Unsupported Features

  • Clickhouse Enum8 and Enum16 types -- use LowCardinality instead.

Running the tests

A Clickhouse server is required to run the integration tests. One can be started easily in a Docker container:

$ docker run  --rm --name clickhouse -p 19000:9000 --ulimit nofile=262144:262144 clickhouse
$ export KLICKHOUSE_TEST_ADDR=127.0.0.1:19000
$ # export KLICKHOUSE_TEST_USER=default
$ # export KLICKHOUSE_TEST_PASSWORD=default
$ # export KLICKHOUSE_TEST_DATABASE=default
$ cargo nextest run

(running the tests simultaneously with cargo test is currently not suported, due to loggers initializations.)

Feature flags

  • derive: Enable [klickhouse_derive], providing a derive macro for the [Row] trait. Default.
  • compression: lz4 compression for client/server communication. Default.
  • serde: Derivation of serde::Serialize and serde::Deserialize on various objects, and JSON support. Default.
  • tls: TLS support via tokio-rustls.
  • refinery: Migrations via refinery.
  • geo-types: Conversion of geo types to/from the geo-types crate.
  • bb8: Enables a ConnectionManager managed by bb8

Credit

klickhouse_derive was made by copy/paste/simplify of serde_derive to get maximal functionality and performance at lowest time-cost. In a prototype, serde was directly used, but this was abandoned due to lock-in of serde's data model.

Dependencies

~9–21MB
~303K SLoC