#clickhouse #ethereum #tokio #database-driver #driver #database

clickhouse-readonly

支持 TLS 和基本 Ethereum 类型的 Clickhouse 数据库只读 TCP 轻客户端

1 个不稳定版本

0.1.2 2023 年 4 月 2 日
0.1.1 2023 年 4 月 2 日
0.1.0 2023 年 4 月 2 日

#33#clickhouse

32 每月下载量

MIT/Apache

200KB
6K SLoC

CLICKHOUSE-READONLY

异步 TCP 连接到 Clickhouse 数据库,具有只读权限(例如,您只能执行查询,但不能对 Cmd::DATA 调用 PacketStream)。

  • 不支持 Date 或其他日期类型。
  • ethnum::I256 提供的 Int256 只能解析为 ethereum_types::U256
  • FixedString(42) 可以解析为 ethereum_types::Address

支持类型

pub enum SqlType {
    UInt8,
    UInt16,
    UInt32,
    UInt64,
    Int8,
    Int16,
    Int32,
    Int64,
    Int256,
    String,
    FixedString,
    Float32,
    Float64,
    Nullable,
    Array,
}

<!> 库计划不更新,可以按现有状态使用。

示例

cargo run --package clickhouse-readonly --example query_stream 
use clickhouse_readonly::{ClickhouseResult, Pool, PoolConfig};

use futures_util::StreamExt;

#[tokio::main]
async fn main() -> ClickhouseResult<()> {
    std::env::set_var("RUST_LOG", "clickhouse_readonly=trace");
    env_logger::init();

    let config = PoolConfig::new(
        "127.0.0.1".parse().unwrap(),
        "default".to_string(),
        "username".to_string(),
        "password".to_string(),
        true,
    ).build();
    
    let pool = Pool::new(config);
    let mut handle = pool.get_handle().await?;

    let mut stream = handle.query("SELECT * FROM default.some_table").stream();

    while let Some(row) = stream.next().await {
        let row = row?;
        let asset: ethereum_types::Address = row.get("asset")?;
        let ticker: String = row.get("asset_symbol")?;
        let rate: ethereum_types::U256 = row.get("deposit")?;
        eprintln!("Found {ticker}: {asset:?} / rate: {rate:?}");
    }

    Ok(())
}

依赖项

~10–21MB
~315K SLoC