Expand description
§clickhouse-rs
Tokio based 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, Int8, Int16, Int32, Int64
- Nullable(T)
- Array(UInt/Int/String/Date/DateTime)
- IPv4/IPv6
- UUID
§DNS
schema://user:password@host[:port]/database?param1=value1&...¶mN=valueNparameters:
-
compression- Whether or not use compression (defaults tonone). Possible choices:nonelz4
-
readonly- Restricts permissions for read data, write data and change settings queries. (defaults tonone). Possible choices:0- All queries are allowed.1- Only read data queries are allowed.2- Read data and change settings queries are allowed.
-
connection_timeout- Timeout for connection (defaults to500 ms) -
keepalive- TCP keep alive timeout in milliseconds. -
nodelay- Whether to enableTCP_NODELAY(defaults totrue). -
pool_max- Lower bound of opened connections forPool(defaults to10). -
pool_min- 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. -
query_timeout- Timeout for queries (defaults to180 sec). -
query_block_timeout- Timeout for each block in a query (defaults to180 sec). -
insert_timeout- Timeout for inserts (defaults to180 sec). -
execute_timeout- Timeout for execute (defaults to180 sec).
SSL/TLS parameters:
secure- establish secure connection (defaults isfalse).skip_verify- skip certificate verification (defaults isfalse).
example:
tcp://user:password@host:9000/clicks?compression=lz4&ping_timeout=42ms§Example
use futures::Future;
use clickhouse_rs::{Pool, types::Block};
let ddl = "
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 done = pool
.get_handle()
.and_then(move |c| c.execute(ddl))
.and_then(move |c| c.insert("payment", block))
.and_then(move |c| c.query("SELECT * FROM payment").fetch_all())
.and_then(move |(_, block)| {
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(())
})
.map_err(|err| eprintln!("database error: {}", err));
tokio::run(done)Re-exports§
pub use crate::pool::Pool;
Modules§
Macros§
- row
- This macro is a convenient way to pass row into a block.
Structs§
- Client
Handle - Clickhouse client handle.