BigQuery Analysis (on-demand)
The on-demand BigQuery compute charge: you pay for the bytes your queries read, not for time or rows. Because storage is columnar, the bill is driven by which columns you touch and how many partitions you scan — which is why two queries returning the same answer can differ in cost by two orders of magnitude.
Billed: Per tebibyte of data scanned, with the first tebibyte each month free. Billed on logical (uncompressed) bytes.
What triggers this charge
- Every query that is not served from cache, billed on the logical size of the columns it reads.
- SELECT * on a wide table, which reads every column regardless of how many rows come back.
- Any query against a partitioned table with no filter on the partition column, which reads all of it.
- A minimum of 10 MB per table referenced, which is the entire cost for queries joining many small lookup tables.
How to reduce it
Name your columns and filter your partitions
These two account for most avoidable BigQuery spend. Setting require_partition_filter on large tables makes the second one impossible to forget.
Check whether Editions would be cheaper
Above a certain steady volume, slot-based pricing beats per-byte pricing. The crossover depends on workload shape, not just spend.
Materialize repeated work
A query on a 15-minute schedule runs 2,880 times a month. If several of those read the same expensive intermediate, compute it once.
Rates
Related charges
Now find out how much of this you are actually paying.
Finitizer breaks your Google Cloud bill down to the SKU, shows how each one has moved since last week, and separates rate changes from usage changes — so you know whether to talk to engineering or to procurement.