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}