ClickHouse/ch2rs

Generate Rust structs from ClickHouse rows

56

stars

69

commits

Rust

primary language

Feb 5, 2026

updated

README

ch2rs

An auxiliary utility for generating Rust structures from ClickHouse DB schemas for the official clickhouse-rs crate.

Usage

cargo install ch2rs

The crate enables rustls-tls client feature by default, which allows to work with HTTPS URLs. If rustls-tls does not work in your use case, you can install the crate with native-tls instead:

cargo install ch2rs --features native-tls

Help

$ ch2rs --help
ch2rs 0.1.7

USAGE:
    ch2rs [FLAGS] [OPTIONS] <table>

FLAGS:
    -D               Generate `Deserialize` instances
    -h, --help       Prints help information
        --owned      Generate only owned types
    -S               Generate `Serialize` instances
    -V, --version    Prints version information

OPTIONS:
    -B <bytes>...              Add `#[serde(with = "serde_bytes")]` to the provided column
    -d <database>              A database where the table is placed in [default: default]
    -I <ignore>...             Ignore a specified column
    -O <overrides>...          Override the type of the provided column
    -p <password>
        --derive <trait>...    Add `#[derive(<trait>)]` to the generated types
    -T <types>...              Override the type, e.g. 'Decimal(18, 9)=fixnum::FixedPoint<i64, typenum::U9>'
    -U <url>                   ClickHouse server's URL [default: localhost:8123]
    --temporal <mode>          Temporal mapping: raw|time|chrono [default: raw]
    -u <user>

ARGS:
    <table>    The table's name

Temporal modes

  • raw (default): uses primitive Rust types:

    • Date → u16, Date32 → i32
    • DateTime → u32, DateTime64(_) → i64
    • Time → i32, Time64(_) → i64
  • time: uses the time crate types

    • Date/Date32: time::Date
    • DateTime/DateTime64: time::OffsetDateTime
    • Time/Time64: time::Duration
    • Requires in your project: time dependency and clickhouse feature time
      • clickhouse = { version = "…", features = ["time"] }
  • chrono: uses the chrono crate types

    • Date/Date32: chrono::NaiveDate
    • DateTime/DateTime64: chrono::DateTime<chrono::Utc>
    • Time/Time64: chrono::Duration
    • Requires in your project: chrono dependency and clickhouse feature chrono
      • clickhouse = { version = "…", features = ["chrono"] }

Select mode via --temporal {raw|time|chrono}.

Examples

See snapshots.

Contributors

loyd

61 commits

slvrtrn

3 commits

RGafiyatullin

2 commits

injecto

1 commits

ClickHouse/ch2rs

Generate Rust structs from ClickHouse rows

56

stars

69

commits

Rust

primary language

Feb 5, 2026

updated

README

ch2rs

An auxiliary utility for generating Rust structures from ClickHouse DB schemas for the official clickhouse-rs crate.

Usage

cargo install ch2rs

The crate enables rustls-tls client feature by default, which allows to work with HTTPS URLs. If rustls-tls does not work in your use case, you can install the crate with native-tls instead:

cargo install ch2rs --features native-tls

Help

$ ch2rs --help
ch2rs 0.1.7

USAGE:
    ch2rs [FLAGS] [OPTIONS] <table>

FLAGS:
    -D               Generate `Deserialize` instances
    -h, --help       Prints help information
        --owned      Generate only owned types
    -S               Generate `Serialize` instances
    -V, --version    Prints version information

OPTIONS:
    -B <bytes>...              Add `#[serde(with = "serde_bytes")]` to the provided column
    -d <database>              A database where the table is placed in [default: default]
    -I <ignore>...             Ignore a specified column
    -O <overrides>...          Override the type of the provided column
    -p <password>
        --derive <trait>...    Add `#[derive(<trait>)]` to the generated types
    -T <types>...              Override the type, e.g. 'Decimal(18, 9)=fixnum::FixedPoint<i64, typenum::U9>'
    -U <url>                   ClickHouse server's URL [default: localhost:8123]
    --temporal <mode>          Temporal mapping: raw|time|chrono [default: raw]
    -u <user>

ARGS:
    <table>    The table's name

Temporal modes

  • raw (default): uses primitive Rust types:

    • Date → u16, Date32 → i32
    • DateTime → u32, DateTime64(_) → i64
    • Time → i32, Time64(_) → i64
  • time: uses the time crate types

    • Date/Date32: time::Date
    • DateTime/DateTime64: time::OffsetDateTime
    • Time/Time64: time::Duration
    • Requires in your project: time dependency and clickhouse feature time
      • clickhouse = { version = "…", features = ["time"] }
  • chrono: uses the chrono crate types

    • Date/Date32: chrono::NaiveDate
    • DateTime/DateTime64: chrono::DateTime<chrono::Utc>
    • Time/Time64: chrono::Duration
    • Requires in your project: chrono dependency and clickhouse feature chrono
      • clickhouse = { version = "…", features = ["chrono"] }

Select mode via --temporal {raw|time|chrono}.

Examples

See snapshots.

Contributors

loyd

61 commits

slvrtrn

3 commits

RGafiyatullin

2 commits

injecto

1 commits

Languages

Rust

100.0%