Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/suharev7/clickhouse-rs
Asynchronous ClickHouse client library for Rust programming language.
https://github.com/suharev7/clickhouse-rs
clickhouse clickhouse-client rust tokio
Last synced: about 1 month ago
JSON representation
Asynchronous ClickHouse client library for Rust programming language.
- Host: GitHub
- URL: https://github.com/suharev7/clickhouse-rs
- Owner: suharev7
- License: mit
- Created: 2018-11-25T16:03:52.000Z (about 6 years ago)
- Default Branch: async-await
- Last Pushed: 2024-07-16T18:33:44.000Z (5 months ago)
- Last Synced: 2024-11-06T10:40:53.085Z (about 1 month ago)
- Topics: clickhouse, clickhouse-client, rust, tokio
- Language: Rust
- Homepage:
- Size: 796 KB
- Stars: 324
- Watchers: 10
- Forks: 121
- Open Issues: 59
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-clickhouse - suharev7/clickhouse-rs - Asynchronous ClickHouse client library for Rust programming language. (Language bindings / Rust)
README
# Async ClickHouse Client
[![Build Status](https://travis-ci.com/suharev7/clickhouse-rs.svg?branch=master)](https://travis-ci.com/suharev7/clickhouse-rs)
[![Crate info](https://img.shields.io/crates/v/clickhouse-rs.svg)](https://crates.io/crates/clickhouse-rs)
[![Documentation](https://docs.rs/clickhouse-rs/badge.svg)](https://docs.rs/clickhouse-rs)
[![dependency status](https://deps.rs/repo/github/suharev7/clickhouse-rs/status.svg)](https://deps.rs/repo/github/suharev7/clickhouse-rs)
[![Coverage Status](https://coveralls.io/repos/github/suharev7/clickhouse-rs/badge.svg)](https://coveralls.io/github/suharev7/clickhouse-rs)Asynchronous [Yandex ClickHouse](https://clickhouse.yandex/) client library for rust programming language.
## Installation
Library hosted on [crates.io](https://crates.io/crates/clickhouse-rs/).
```toml
[dependencies]
clickhouse-rs = "*"
```## Supported data types
* Date
* DateTime
* Decimal(P, S)
* Float32, Float64
* String, FixedString(N)
* UInt8, UInt16, UInt32, UInt64, UInt128, Int8, Int16, Int32, Int64, Int128
* Nullable(T)
* Array(UInt/Int/Float/String/Date/DateTime)
* SimpleAggregateFunction(F, T)
* IPv4/IPv6
* UUID
* Bool## DNS
```url
schema://user:password@host[:port]/database?param1=value1&...¶mN=valueN
```parameters:
- `compression` - Whether or not use compression (defaults to `none`). Possible choices:
* `none`
* `lz4`- `connection_timeout` - Timeout for connection (defaults to `500 ms`)
- `query_timeout` - Timeout for queries (defaults to `180 sec`).
- `insert_timeout` - Timeout for inserts (defaults to `180 sec`).
- `execute_timeout` - Timeout for execute (defaults to `180 sec`).
- `keepalive` - TCP keep alive timeout in milliseconds.
- `nodelay` - Whether to enable `TCP_NODELAY` (defaults to `true`).
- `pool_min` - Lower bound of opened connections for `Pool` (defaults to `10`).
- `pool_max` - Upper bound of opened connections for `Pool` (defaults to `20`).- `ping_before_query` - Ping server every time before execute any query. (defaults to `true`).
- `send_retries` - Count of retry to send request to server. (defaults to `3`).
- `retry_timeout` - Amount of time to wait before next retry. (defaults to `5 sec`).
- `ping_timeout` - Timeout for ping (defaults to `500 ms`).- `alt_hosts` - Comma separated list of single address host for load-balancing.
example:
```url
tcp://user:password@host:9000/clicks?compression=lz4&ping_timeout=42ms
```## Optional features
`clickhouse-rs` puts some functionality behind optional features to optimize compile time
for the most common use cases. The following features are available.- `tokio_io` *(enabled by default)* — I/O based on [Tokio](https://tokio.rs/).
- `async_std` — I/O based on [async-std](https://async.rs/) (doesn't work together with `tokio_io`).
- `tls` — TLS support (allowed only with `tokio_io`).## Example
```rust
use clickhouse_rs::{Block, Pool};
use std::error::Error;#[tokio::main]
async fn main() -> Result<(), Box> {
let ddl = r"
CREATE TABLE IF NOT EXISTS payment (
customer_id UInt32,
amount UInt32,
account_name Nullable(FixedString(3))
) Engine=Memory";let block = Block::new()
.column("customer_id", vec![1_u32, 3, 5, 7, 9])
.column("amount", vec![2_u32, 4, 6, 8, 10])
.column("account_name", vec![Some("foo"), None, None, None, Some("bar")]);let pool = Pool::new(database_url);
let mut client = pool.get_handle().await?;
client.execute(ddl).await?;
client.insert("payment", block).await?;
let block = client.query("SELECT * FROM payment").fetch_all().await?;for row in block.rows() {
let id: u32 = row.get("customer_id")?;
let amount: u32 = row.get("amount")?;
let name: Option<&str> = row.get("account_name")?;
println!("Found payment {}: {} {:?}", id, amount, name);
}Ok(())
}
```