datahashi sits between your warehouse and everything that queries it — LLMs, BI tools, embedded apps, internal services — so nobody recomputes the same metric a different way.
"metrics": ["average_order_value"],
"dimensions": ["customer.region"],
"grain": "month"
SELECT date_trunc('month', o.order_date),
c.region, SUM(o.amount)/COUNT(o.id)
FROM rollup_orders o
JOIN dim_customer c ON ...
-- served from a rollup, not the warehouse SQL sprawls across dashboards, notebooks, and app code. Definitions drift, LLMs invent joins and return confidently-wrong figures, and the warehouse bill keeps climbing. datahashi puts one governed model in the middle — and pushes the hard parts down to where they belong.
Name the metrics you want. You never write a join or an aggregation by hand.
Fan-out-safe SQL and governed metrics — the same number everywhere.
Answered from pre-aggregated rollups. p99 ≤ 14ms, never touching the warehouse.
Processing happens in the database. The layer stays thin; the source does the work.
Sign up, connect a warehouse, publish a model, query. No restarts, no YAML deploys — a runtime control plane.
Sign in with an email magic code and register your warehouse. Credentials are sealed with AES-256-GCM behind an SSRF-safe egress policy.
We profile the source — cardinality, nullability, FK candidates — and propose a draft Semantic Model in native YAML for you to bless in the UI.
Promote governed Metrics on top of your Measures, set per-tenant RLS and cost policy, and we pre-build the rollups your registered queries need.
Mint a data-plane API key and query via REST or MCP. Hits are served sub-second from tenant-partitioned rollups; misses fall back to a live run.
One thesis, carried by every module: compile a structured query to SQL, push execution down, and serve the hot path from pre-aggregated data.
Entities, Dimensions, Measures, and Metrics map your physical tables to business vocabulary — independent of any storage dialect.
Semantic ModelName the metrics and dimensions you want. The compiler traverses the Join Graph and generates fan-out-safe SQL — correct even across one-to-many.
Join GraphEmbedded and BI queries are served from pre-aggregated rollups by DuckDB over Parquet. Benchmarked p99 ≤ 14ms.
Rollups · p99 ≤ 14msAgents call MCP tools that emit a structured Semantic Query — never raw SQL. No hallucinated joins, no wrong numbers.
MCPEvery tenant brings its own warehouse connection. Secrets are AES-256-GCM sealed; rollups are physically tenant-partitioned; RLS rides every read.
Isolation by designSnowflake, BigQuery, Postgres, MySQL, DuckDB — each a renderer behind a single closed Dialect port. We generate SQL, never parse it.
Multi-dialectA Semantic Query is a structured object — metrics × dimensions × filters × grain. Every consumer emits the same shape; the compiler turns it into correct, dialect-specific SQL.
"metrics": ["average_order_value"],
"dimensions": ["customer.region"],
"grain": "month",
"filters": [
"field": "order.status",
"op": "=", "value": "paid"
],
"order": ["month"],
"limit": 100
// no joins. no aggregation.
// no dialect. no rollup names. -- fan-out-safe · Join Graph resolved
-- served from a covering rollup
SELECT
date_trunc('month', o.order_date) AS month,
c.region,
SUM(o.amount) / NULLIF(COUNT(o.id),0)
AS average_order_value
FROM rollup_orders o
JOIN dim_customer c
ON o.customer_key = c.customer_key
WHERE o.status = 'paid'
GROUP BY 1, 2
ORDER BY 1
LIMIT 100; average_order_value is a Metric — a ratio of two Measures computed after aggregation, not avg(amount). region lives on Customer; the compiler walks Order → Customer to reach it. You just listed them.
datahashi is a control plane that compiles a Semantic Query to SQL and pushes execution down. The hot path never waits on the warehouse.
User-facing queries are answered from pre-aggregated rollups by an embedded DuckDB engine over Parquet — no warehouse token, no round-trip.
Rollups are built and refreshed by durable jobs that do hit the warehouse — poll + push webhook + backstop keep them fresh. No user is waiting.
Connect a warehouse, bless a model, and start serving sub-second, governed numbers to your LLMs, dashboards, and apps.
No credit card · Bring your own warehouse · Self-serve onboarding