connecting…

Your query reads the whole table when it needed a fraction of it.

Most statements are far narrower than the table they run against. Strata reads the query, works out which layer of your data can answer it, and sends it there — the slice built for that filter instead of the whole thing. Less scanned, faster back, and nothing in your SQL has to change to get it.

Cost
A fraction of the scan

You pay for the data you read and the compute you burn. Read less of both and that part of the bill moves with it.

Speed
Less to read, sooner

The narrowed layer is usually the one already prepared for that filter, so the answer arrives with far less work done to find it.

Effort
Nothing to rewrite

Your statements, tools and habits stay as they are. Point them at Strata and the routing happens underneath.

The value, stated plainly

Here is the formula. Fill it in with your numbers.

A saving quoted from someone else's data is worth nothing to you, and it stops being true the moment anything underneath it changes. So the whole calculation is set out below, in full, and the terms you set are the ones only you know — how much of your traffic this can help, how narrow your filters really are, and what your scans cost today.

Monthly saving — every term defined below, nothing hidden in a footnote
saving = spend × coverage × (1 − selectivity) × efficiency
spend What scanning costs you today. The part of your bill that tracks data read — bytes scanned, warehouse seconds, whatever your platform charges per query. Your figure, not ours.
coverage How much of that traffic can be routed at all. Only statements that filter on something a layer is already split by can be narrowed. Everything else reads at full cost, and is not counted here.
selectivity How much of the table a typical routed query still needs. A filter matching a quarter of the rows reads a quarter of the data — so the saving is the rest. This is the term that decides everything, and the one only your data can answer.
efficiency How much of that reduction is really realised. Set below 100% for what resists perfect routing: uneven partitions, queries that fall back a layer, metadata overhead. It should be less than one until you have measured it.
$

The scanning part of the bill — not your whole infrastructure bill.

40%

Start here by looking at what your dashboards and jobs actually filter on.

35%

Lower means narrower filters and a bigger saving. An evenly split key gives a small number; a skewed one gives a large one.

80%

Kept below 100% on purpose. Raise it once you have measured your own traffic.

Estimated saving
$4,160
a month — from $20,000 down to $15,840 on scanning

What this formula does not count

  • Time saved. It only values the reduced scan. The speed gain is separate and real, but it is not a line on a bill, so it is left out rather than converted into a made-up figure.
  • Engineering saved. The queries nobody has to rewrite, and the partitioning nobody has to maintain by hand, are not priced here at all.
  • Anything you have already optimised. If your traffic is already routed by hand, or your filters are already narrow, your honest numbers will show that — and the saving will be small.
  • The distribution of your keys. A single selectivity term cannot capture a table where one key splits evenly and another is wildly skewed. Treat the result as a range, and check the real numbers on your own query before you commit to it.
In practice

The same statement, reading a fraction of the data

You write the query you were going to write. The only difference is how much of the table has to be touched to answer it.

strata · query · routed live
$ select region, count(*) as orders from your_table where key = 'value' group by 1
reading the whole table 100%

Every row fetched, filtered after the fact.

reading the layer built for this filter ~35%

Only what can match, read where it already sits.

one statement in, unchanged — the routing is a property of the data, not of how you wrote the query.
!

That 35% is the number from the calculator above, not a claim about your data. Move the slider and it moves. What a filter reads depends entirely on how evenly the key at hand splits your table — and on a skewed key, the honest answer is that the saving is small.

The speed

Reading less is also waiting less

A narrower read does less work, moves less data, and finishes sooner — and the layer that answers is typically the one prepared for that exact filter, sitting closer to where the query runs than the original source is. Both effects land on the same number: the time between asking and having an answer.

It shows up most on the queries that were quietly expensive. A filtered count over a large table is normally the worst offender — it reads everything to count a subset of it — and it is exactly the shape that routing helps most. Unlike the cost, no honest general figure can be put on the time: it depends on your engine, your storage and the distance between them. It is the one number worth measuring rather than modelling, and measuring it is a single command away.

1

Read the statement

Strata works out from the query itself which layers could answer it, including which key a filter is really testing. Only real identifiers count — a name inside a string is data, not a filter.

2

Rank the candidates

The narrowest layer that can answer goes first, with the broader ones behind it as a safety net. Nothing is probed or trialled — the order follows from the query and how the table is registered.

3

Answer, and say where from

The first layer that answers ends the run. Your result comes back, the timing is recorded, and the layer that produced it is named — so a slow-looking query has an explanation rather than a shrug.

The effort

Point your queries at it. Keep everything else.

This is the part that decides whether a saving is ever realised. A tool that needs every query rewritten, or a new way of naming tables, saves nothing — it just moves the cost onto whoever has to remember the rules.

What changes

  • Where your statements are sent.

That is the whole list. One thing, set once at the connection — not per query, not per table, and not per person.

What does not

  • Your SQL, as written.
  • The names you already use for tables.
  • The tools, dashboards and notebooks on the other end.
  • The shape of the results coming back.
  • Anything to keep in step by hand.
SELECT region, count(*) AS orders FROM your_table WHERE key = 'value' GROUP BY 1; − -- sent to: the table as it is stored + -- sent to: Strata

The statement is untouched, because the routing does not live in the statement. It is a property of the data and the registration around it — so it applies to every query anyone runs, including the ones written after you set it up, and including the ones written by people who have never heard of it.

Why you can check it

A saving you cannot see is a saving you cannot trust

Routing that happens invisibly is indistinguishable from routing that is not happening, and the formula above is only worth anything if the numbers going into it are real. So every run reports the layer that answered and how long it took, and the same statement can be run against every layer in turn and compared. That turns each term in the calculation into something you measured on your own data.

Every attempt is recorded, including the ones that failed and the ones fallen back from — which is how you find the query that has been reading far more than it needed to, long after the fact.

What else comes with it

Everything around the routing, so it holds up in use

→ narrower by itself

No hints to set

The choice comes from reading the statement, not from a setting someone has to remember to add — or to remove again when the data changes.

→ still answers

A safety net underneath

If the narrowest layer cannot be read, the next one answers and the failed attempt is reported rather than hidden, so a fallback never looks like a clean result.

→ timings

Numbers, not adjectives

Any layer can be timed on your own query, so "is this faster?" resolves to a measurement on your data rather than a claim from a page.

→ audit

A record of every attempt

Each run is logged with the statement as asked for and the statement as executed, so the difference between the two is visible and searchable.

→ any name

Whatever you call it

Naming the source, the export or a slice all resolve to the same table, so nobody has to remember which spelling points at which layer.

→ one registry

Nothing registered twice

It reads the same table registration the rest of the platform already maintains, so anything already described there is immediately usable here.

Put your own numbers in and see what comes out

Four terms, one multiplication, and nothing you cannot measure for yourself. If the figure is small, that is a real answer too.