/v1/telemetry/data-views) is just a saved SQL SELECT.
Views are per-organization, run by name, and re-validated on every run — never cached as a compiled
plan. A view that references a column that no longer exists fails closed with an invalid_argument
error rather than returning a stale or wrong result.
There is no point-and-click query builder — you author the SQL with the API, CLI, or SDK shown below.
Data views
Create or replace a data view by name (upsert). The stored SQL is an organization-agnosticSELECT — the
gateway AND-s your organization predicate in at execution. It’s validated when you store it and again on
every run. --sql takes the SQL inline, from a file (@view.sql), or from stdin (-):
run_id filter, the view is reusable across
every run — add a WHERE run_id = '…' if you want it pinned to one.
A view resolves as a table, so you read it back with an ordinary query:
- or other non-identifier characters are still runnable by name via
POST /v1/telemetry/data-views/{name}:run.)
hiloop data-views list shows your views; hiloop data-views delete <name> removes one. Every
view is yours — there are no built-in views, only recipes you create (below).
Derive views from captured payloads
Captured request/response bodies are stored out-of-line in a content-addressed blob store; an event carries only a digest. A set of derivation functions lets a view reach the content and parse it — entirely at query time, from the raw events alone:
The example recipes —
otel_genai_calls (one OTel-GenAI-shaped row per LLM exchange),
shell_transcript, metric_series, agent_tree, wandb_metrics — are ordinary views you create
this way; nothing about them is built in. For instance:
How saved SQL stays safe
A view’s SQL runs through the same per-organization gateway as an ad-hoc query, in a locked-down session:- It sees only the
eventstable and your own SQL views — noinformation_schema, only an allowlist of scalar functions. - Every scan of
eventsis automatically constrained to your organization from the request’s verified identity — you can’t widen it. - DDL, DML, and multi-statement SQL are rejected; the planner is verified before execution.
- Each query gets a fresh session, an injected
LIMIT, a memory ceiling, and a hard timeout.
POST /v1/telemetry/sql — the same safe path, just not
stored.
Next
- Query telemetry — the ad-hoc SQL a data view saves.
- Annotations — save a query over your eval annotations as a view.