suharev7 / Clickhouse Rs
Programming Languages
Labels
Projects that are alternatives of or similar to Clickhouse Rs
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, Int8, Int16, Int32, Int64
- Nullable(T)
- Array(UInt/Int/Float/String/Date/DateTime)
- IPv4/IPv6
- UUID
DNS
schema://user:[email protected][:port]/database?param1=value1&...¶mN=valueN
parameters:
-
compression
- Whether or not use compression (defaults tonone
). Possible choices:none
lz4
-
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
) -
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:[email protected]: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(())
}