ServicesAboutNotesContact Get in touch →
EN FR
Note

BigQuery On-Demand Billing Mechanics

How BigQuery on-demand pricing actually charges you — columnar billing, the LIMIT clause trap, 10 MB minimums, caching, the free tier, and cross-cloud pricing.

Planted
bigquerygcpcost optimization

On-demand pricing charges $6.25 per TiB of data scanned, with the first 1 TiB free monthly per billing account. Several mechanics significantly affect the actual bill beyond this headline rate.

You Pay for Columns, Not Rows

BigQuery uses columnar storage, so you’re charged only for the columns referenced in your SELECT statement, not the entire table. A query running SELECT user_id, created_at FROM events scans only those two columns, even if the table has fifty.

Column selection is an effective cost lever: selecting only necessary columns can reduce costs by 90% or more on wide tables. SELECT * from a 50-column table costs 50x more than selecting a single column of the same data type and size. The cost model follows directly from the architecture — columnar storage means columnar billing.

Any query using SELECT * against wide event tables is a candidate for cost reduction.

The LIMIT Clause Does Not Reduce Costs

Running SELECT * FROM events LIMIT 10 still scans the entire table. BigQuery reads all data before identifying which rows to return — the limit applies after the scan, not before it.

There’s an exception: on tables with clustering, BigQuery can use block-level pruning to skip irrelevant data blocks based on filter predicates. But on non-clustered tables, LIMIT provides zero cost savings. The mental model to hold: you pay for what BigQuery reads from disk, not what it hands back to you.

Adding LIMIT 1000 to an exploratory query does not reduce cost on non-clustered tables.

The 10 MB Minimum Billing Threshold

BigQuery has a minimum billing threshold of 10 MB per table referenced and 10 MB per query overall. Running thousands of tiny queries against small tables still accumulates meaningful costs, because each query is billed as if it processed at least 10 MB.

In practice, this matters most for:

  • Metadata queries against small dimension tables
  • Validation queries checking a handful of rows
  • API-driven micro-queries that hit BigQuery at high frequency

If you’re running thousands of short queries daily against small tables — common in dashboard tools polling for fresh data — the 10 MB minimum compounds quickly.

Cached Results Are Free

Query results are cached for 24 hours when the underlying tables haven’t changed. Identical queries (same SQL, same table state) served from cache incur no charge. This makes caching one of the few genuinely free BigQuery optimizations.

Important nuances:

  • Cache is per user and per project, not shared across the organization
  • Parameterized queries with different variable values are treated as different queries
  • Queries using non-deterministic functions like CURRENT_TIMESTAMP() or RAND() bypass cache
  • Results cached from one project aren’t accessible from another

For BI tools running identical dashboard queries repeatedly throughout the day, caching provides substantial savings without any code changes. Looker Studio, for instance, uses BigQuery caching aggressively for report refreshes.

The Free Tier

The free allocation resets monthly per billing account, not per project:

  • 1 TiB of queries processed free monthly
  • 10 GiB of active storage free monthly
  • 2 TiB of Storage Write API ingestion free monthly
  • Batch loading via the shared slot pool is always free

Per billing account, not per project — this matters. If you have ten projects under one billing account, they share the same 1 TiB free allocation. Separate billing accounts each get their own allocation.

BigQuery Sandbox provides the same limits without requiring a credit card, though tables expire after 60 days and streaming ingestion is disabled. For learning and proof-of-concept work, Sandbox removes the billing barrier entirely.

Cross-Cloud Pricing (BigQuery Omni)

Standard on-demand pricing remains consistent at $6.25/TiB across US, EU, and most Asia-Pacific regions. BigQuery Omni — which queries data residing in AWS S3 or Azure Blob Storage — costs $9.125/TiB, a 46% premium for cross-cloud analytics.

That premium exists because BigQuery Omni must transfer data across cloud boundaries and run compute in a foreign environment. If you’re using Omni extensively, this pricing difference should factor into your data residency decisions. Moving data into native BigQuery storage removes the Omni premium and may save money depending on data volume and query frequency.

Note that BigQuery Omni is not available in Enterprise Plus edition — if you need cross-cloud queries and want slot-based pricing, Enterprise Edition is your only option.

Errors Don’t Cost You, Cached Results Don’t Either

Two guardrails worth knowing: queries that return errors aren’t billed (BigQuery doesn’t charge for failed work), and cached query results incur no charge. Both are genuinely free in the billing sense, not just “you don’t pay for the data returned” — there’s no compute charge at all.

When On-Demand Beats Editions

On-demand is economical for sporadic, exploratory, and low-volume workloads. No capacity planning is required, billing is per query, and the 1 TiB free tier makes it the default starting point for new BigQuery projects.

The breakeven calculation gives the quantitative crossover. As a qualitative guide: if queries are ad-hoc, run unpredictably, and monthly volume stays under 10 TiB, on-demand is likely cheaper. The 60-second minimum billing window makes Editions expensive for sporadic patterns regardless of theoretical slot-hour costs.