How ClickHouse Defines the Raw Data Contract
July 2026
For ClickHouse, raw data means the rows your chosen tables return over HTTP, or the explicit output of one query if you use query instead of tables.
Short Answer
The raw data contract for ClickHouse is the exact rowset returned from the tables you name in the selected database, or the exact output of the custom SQL query if you use query instead of tables. Skippr reads through the ClickHouse HTTP API, so the raw layer is whatever that endpoint returns for the objects you explicitly selected.
That means the contract is straightforward to explain. If the source config points at default.events, raw data is the rows in default.events, namespaced as clickhouse.default.events. If the config switches to a query that selects user_id, event_name, and occurred_at, the contract is now that projected row shape and not the full underlying table.
Why Teams Struggle with This
Teams usually get confused when they treat ClickHouse as if it were a low-level replication feed. The source connector is much simpler than that: it exposes a readable table or query boundary, and the raw contract only stays stable if that boundary stays explicit.
- The chosen
databaseandtableslist define the contract more than the connector name does. - A custom
queryoverridestables, so a column alias or filter in that query becomes part of the promised raw shape. - Read access to the selected database and tables is required before the row contract matters at all.
- If the team really needs change events or transaction ordering, ClickHouse table extraction is the wrong raw-data story to tell.
How Skippr Handles It
Skippr keeps the boundary visible in config: url, database, user, and either tables or query. That is useful because another engineer can review the source and see whether Skippr is reading a durable table contract or a one-off SQL projection.
The namespace pattern also helps explain lineage. A downstream raw table that came from clickhouse.default.metrics is easy to trace back to the exact ClickHouse database and table that produced it.
- Reads ClickHouse over the documented HTTP interface.
- Supports selected tables or one custom SQL query.
- Uses the visible namespace
clickhouse.{database}.{table}for table-based reads. - Keeps the password separate from the raw-data definition through environment interpolation.
What the First Useful Version Looks Like
The first useful version is one database, one table such as events, and one quick validation that the returned columns already look like the bronze table you want. That makes the contract concrete before you widen the source.
If the real contract is a query, document the projected columns and filters early. A query-defined raw layer can work well, but only if everyone understands that the query output, not the base table, is the thing Skippr is promising downstream.
