3 releases
Uses old Rust 2015
0.1.2 | Jun 9, 2020 |
---|---|
0.1.1 | Dec 26, 2018 |
0.1.0 | Dec 9, 2018 |
#1670 in Database interfaces
18,569 downloads per month
Used in 18 crates
(7 directly)
18KB
397 lines
Async ClickHouse Client
Asynchronous Yandex ClickHouse client library for rust programming language.
Installation
Library hosted on crates.io.
[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
schema://user:password@host[:port]/database?param1=value1&...¶mN=valueN
parameters:
-
compression
- Whether or not use compression (defaults tonone
). Possible choices:none
lz4
-
connection_timeout
- Timeout for connection (defaults to500 ms
) -
query_timeout
- Timeout for queries (defaults to180 sec
). -
insert_timeout
- Timeout for inserts (defaults to180 sec
). -
execute_timeout
- Timeout for execute (defaults to180 sec
). -
keepalive
- TCP keep alive timeout in milliseconds. -
nodelay
- Whether to enableTCP_NODELAY
(defaults totrue
). -
pool_min
- Lower bound of opened connections forPool
(defaults to10
). -
pool_max
- Upper bound of opened connections forPool
(defaults to20
). -
ping_before_query
- Ping server every time before execute any query. (defaults totrue
). -
send_retries
- Count of retry to send request to server. (defaults to3
). -
retry_timeout
- Amount of time to wait before next retry. (defaults to5 sec
). -
ping_timeout
- Timeout for ping (defaults to500 ms
). -
alt_hosts
- Comma separated list of single address host for load-balancing.
example:
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.async_std
— I/O based on async-std (doesn't work together withtokio_io
).tls
— TLS support (allowed only withtokio_io
).
Example
use clickhouse_rs::{Block, Pool};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
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(())
}
Dependencies
~0–275KB