Cloud Waste Hunter
GCP BigQuery Storage

BigQuery Storage Billing Model Mismatch

BigQuery storage billing model mismatch creates avoidable cost when a dataset stays on the wrong billing model for its churn, compression, and retention pattern. Teams often miss it because query cost gets reviewed more often than dataset storage behavior.

This detector sits inside the GCP Storage Cost Optimization category guide for broader cleanup planning.

Potential savings

$150 to $3,000 / month

$1,800 to $36,000 / year

Detector ID
gcp-bigquery-storage-billing-model-mismatch
Full detector name
BigQuery Dataset Storage Billing Model Mismatch
Service
BigQuery
Category
Storage
Published
Mar 18, 2026
Updated
Mar 27, 2026

The problem

BigQuery defaults to logical storage billing, but the most cost-efficient model depends on dataset behavior. Some datasets remain on logical billing even when compression and stability would make physical billing cheaper. Others use physical billing despite high churn, retention overhead, or historical storage that increases cost. The issue is a mismatch between billing model and dataset behavior.

Why it happens

  • BigQuery uses logical billing by default, and teams rarely revisit the billing model as datasets evolve.
  • Compression benefits of physical billing are not evaluated against real dataset characteristics.
  • Time-travel retention, fail-safe storage, and historical physical bytes are often overlooked in cost estimates.
  • Storage optimization efforts focus on query cost instead of billing model efficiency.

What this means for cost

Estimated monthly

$150 to $3,000/mo

Estimated annual

$1,800 to $36,000/yr

This waste pattern often shows up as $150 to $3,000/mo in recurring monthly cost, or roughly $1,800 to $36,000/yr if it sits untouched for a year.

How to detect BigQuery storage billing model mismatch

The key signal is a dataset whose forecasted monthly storage cost is materially lower under the alternate billing model than under the one it uses today.

Start by collecting the current dataset billing model and the storage metrics the detector actually uses.

SELECT
  table_schema,
  SUM(active_logical_bytes) AS active_logical_bytes,
  SUM(long_term_logical_bytes) AS long_term_logical_bytes,
  SUM(active_physical_bytes) AS active_physical_bytes,
  SUM(long_term_physical_bytes) AS long_term_physical_bytes,
  SUM(time_travel_physical_bytes) AS time_travel_physical_bytes,
  SUM(fail_safe_physical_bytes) AS fail_safe_physical_bytes
FROM `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
GROUP BY table_schema;

Then compare those totals against the current regional storage rates for logical and physical billing. The detector logic is intentionally simple and transparent:

  • logical forecast uses active_logical_bytes and long_term_logical_bytes
  • physical forecast uses active_physical_bytes, long_term_physical_bytes, and fail_safe_physical_bytes
  • a finding appears only when the alternate billing model is materially cheaper than the active one

If you also need to confirm the active model, inspect the dataset metadata directly:

bq show --format=prettyjson my-project:my_dataset | jq '.storageBillingModel'

What this detector actually checks

This page is about billing-model fit, not generic BigQuery cleanup. Cloud Waste Hunter looks at the current billing model, dataset-level storage metrics, and forecasted cost under both models. It does not decide that physical billing is always better, and it does not treat stale tables alone as sufficient evidence.

That distinction matters because the best model can flip over time. A compressible, stable dataset can favor physical billing, while heavy rewrites, time-travel retention, or historical physical storage can make logical billing the better choice.

How to fix BigQuery storage billing model mismatch

Use the detector as a review queue, not an auto-flip rule:

  1. confirm the current billing model and dataset location
  2. validate that recent churn and retention behavior are representative rather than temporary
  3. switch billing models only when the cheaper path is likely to stay cheaper
  4. reduce stale tables, duplicate outputs, or excessive retention when those are the real cost drivers

Caveats and overlap boundaries

This detector uses modeled storage forecasts rather than direct billing-export attribution, so it is best for prioritization and review. It also excludes the free storage tier because that allowance cannot be assigned cleanly to one dataset.

If the bigger problem is abandoned derived tables or stale marts, that is adjacent to but different from a billing-model mismatch. The storage-billing question is “is this dataset on the right model?” The stale-table question is “should these tables exist at all?”

How Cloud Waste Hunter helps

Cloud Waste Hunter compares forecasted logical and physical dataset storage cost, shows which model looks cheaper from current storage characteristics, and gives operators enough context to decide whether the mismatch is durable or just temporary churn. For the broader storage review, continue into the GCP Storage Cost Optimization guide.

FAQ

Is physical storage billing always cheaper?

No. Physical billing is cheaper when datasets are stable and compress well, but can be more expensive when churn, time-travel retention, or historical storage is high.

Why do most datasets stay on logical billing?

Logical billing is the default in BigQuery, and teams often do not revisit the billing model as datasets evolve.

What factors determine the best billing model?

The key factors are compression ratio, data churn, time-travel retention, and the amount of historical or fail-safe storage retained.

Related Detectors

Related detectors

These detectors cover similar resource families or cost behaviors and make good follow-on reviews during cleanup.