Rewriting a table resets it to active storage pricing
Data untouched for 90 days drops to roughly half price automatically. Any write to the table puts all of it back at full price.
What it is
BigQuery applies long-term storage pricing to table data not modified for 90 consecutive days. The clock is per table (or per partition on a partitioned table), and modifying it restarts the clock.
Why it costs money
- A daily full-refresh pipeline guarantees the table never qualifies, so you pay full price on history forever.
- The saving is automatic and needs no purchase or configuration — it is pure lost money, not a missed optimisation.
- Rewrites also generate time-travel storage, so the same habit costs twice.
Worked example
Expensive
-- Daily: WRITE_TRUNCATE the whole 40 TiB tableCheaper
-- Daily: write only the new partition, leaving history untouchedThe arithmetic. On 40 TiB of history at US multi-region list prices, the difference between active and long-term logical storage is roughly $400 a month for data that is never read.
How to fix it
- 1Load incrementally into partitions rather than truncating the table.
- 2On a partitioned table, long-term pricing applies per partition, so old partitions age into the discount on their own.
- 3Shorten the time-travel window on heavily rewritten staging datasets.
No single query reveals this one. It shows up across job history instead — the query pack has recipes that find it.
Fixing one query is satisfying. Fixing the pattern is the win.
Finitizer finds every instance of this across your BigQuery job history, ranks them by what they actually cost, and keeps checking after you have fixed them.