BigQuery Query Cost Analyzer
Paste a query and get the structural findings that drive its cost: columns read, partition pruning that works and pruning that only looks like it does, and the 10 MB-per-table floor. Add your schema or a dry-run figure and it prices the query exactly. No login, nothing uploaded.
Your query
Your SQL is analysed in this browser tab. This page has no backend, so there is nothing to send it to — and nothing is written to the URL either.
Why there are three modes
BigQuery’s own cost estimate comes from a dry run, and a dry run needs credentials. This page deliberately has no backend and holds no credentials, which means it cannot produce that number by itself. Rather than assume a table size and present the result as a calculation, it separates what it can know from what it cannot:
- Structure only — findings and ratios from the SQL alone. Deliberately no dollar figure.
- I have the bytes — you supply the dry-run figure, we do exact pricing arithmetic against real regional rates.
- Add my schema — an INFORMATION_SCHEMA extract lets us model bytes per table: fixed-width columns exactly, variable-width columns calibrated against the table’s real logical size rather than guessed.
Clustering is never modelled, because block pruning cannot be predicted before a query runs — even a dry run returns an upper bound on a clustered table. Where a partition filter cannot be turned into a partition count, the estimate assumes a full scan and says so, which overstates cost rather than flattering it.
What it looks for
11 detectable anti-patterns, each with its own page explaining the mechanism and the fix.
Frequently asked questions
How do I estimate the cost of a BigQuery query before running it?
The authoritative answer is a dry run: paste the query into the BigQuery console and read the validator message, or run bq query --dry_run. That returns exact bytes processed. This tool takes that figure and prices it, and separately finds the structural reasons the number is as large as it is — which the dry run does not tell you.
Why does this tool not just tell me the cost from my SQL?
Because it cannot honestly. Bytes processed depend on how much data sits in the columns your query touches, which is not in the SQL. Any tool that prints a dollar figure from SQL alone has assumed a table size, and that assumption is doing all the work. Give it your schema or your dry-run figure and it will do real arithmetic.
Does LIMIT reduce BigQuery cost?
No, not on a non-clustered table. LIMIT truncates the result after BigQuery has read the data it needs, so bytes billed are identical with and without it. To look at a sample cheaply, use table preview or bq head, which read no billable bytes.
How much does SELECT * cost in BigQuery?
It costs the total logical size of every column in the table, per run, regardless of how many rows you get back. On a wide table where you need four columns out of two hundred, that is roughly fifty times what the query needs to cost.
Why is my partition filter not reducing the bytes scanned?
Pruning happens at planning time, so the filter value has to be resolvable before any data is read. Literals and functions of literals qualify. A value coming from a subquery, a join, or a correlated reference does not, so every partition is read and the filter is applied afterwards. Resolve the value into a scripting variable or a query parameter first.
Is it safe to paste my SQL here?
This page has no backend. The analysis runs in your browser, nothing is uploaded, and no part of your query is written into the URL. You can confirm all of that in the network tab.
One query at a time is a slow way to find them all.
Finitizer ranks every query in your project by cost, groups them by shape so you see the repeated ones, and rewrites the expensive ones with an AI optimizer that shows the cheaper version side by side. Read-only and keyless.