clickhouse.rs

 1use serde::Serialize;
 2
 3/// Writes the given rows to the specified Clickhouse table.
 4pub async fn write_to_table<T: clickhouse::Row + Serialize + std::fmt::Debug>(
 5    table: &str,
 6    rows: &[T],
 7    clickhouse_client: &clickhouse::Client,
 8) -> anyhow::Result<()> {
 9    if rows.is_empty() {
10        return Ok(());
11    }
12
13    let mut insert = clickhouse_client.insert(table)?;
14
15    for event in rows {
16        insert.write(event).await?;
17    }
18
19    insert.end().await?;
20
21    let event_count = rows.len();
22    log::info!(
23        "wrote {event_count} {event_specifier} to '{table}'",
24        event_specifier = if event_count == 1 { "event" } else { "events" }
25    );
26
27    Ok(())
28}