Our engine never sees your warehouse password
datahashi

BlogGovernance & trust

Every query is metered

datahashi records what each query scanned, so "what did this tenant cost" is one endpoint away — not a data-warehouse billing archaeology project.

The datahashi team1 min read

When data access goes through a semantic layer, you get something that’s usually hard: a single, honest record of usage.

The summary endpoint

Every query the engine runs records its bytes scanned and row count against the principal that asked. GET /v1/tenants/{id}/usage/summary?from=… gives you the total over any window:

{
  "queries": 1284,
  "bytes_scanned": 41203847112
}

That’s it. No per-warehouse export, no reconciling three billing consoles.

Why it’s reliable here

The number is trustworthy because there’s no side channel. A member can’t drop to raw SQL to avoid the meter, and an agent on MCP is constrained to the same six tools as everyone else. None of them accept SQL. If a byte was scanned on your warehouse through datahashi, it’s in the summary.

What we do with it

Today: a limiter and a cache in front of the engine, both keyed off the same usage signal. The cache means a repeated question doesn’t re-scan; the limiter means one runaway notebook doesn’t take the warehouse down for the tenant.

Pre-aggregation has since shipped as rollups. A repeated question can be answered from Parquet on the engine instead of the warehouse. See Rollups: answer hot questions without the warehouse.

Product notes

An occasional email when we ship something or write something worth reading.