Storage statistics
How much a project, dataset or table costs to keep (logical vs physical bytes, active vs long-term, time travel and fail-safe), and whether switching the dataset's billing model would save money. Per-column sampling shows which columns are worth shrinking.
Opening it
Right-click a project, dataset or table in the schema tree → Show Details, then the Storage sub-tab. Each level answers a different question.
- Project: totals across datasets, a dataset grid (tables, rows, logical/physical GB, average compression, cost columns) and a table grid.
- Dataset: a cost summary for the dataset’s billing model, and one row per table.
- Table: summary tiles, the storage breakdown above, and on-demand column analysis.
Numbers come from INFORMATION_SCHEMA.TABLE_STORAGE (dataset) or TABLE_STORAGE_BY_PROJECT (project), joined with TABLE_OPTIONS for partition expiration. A toggle switches between SQL (billed, fast — you see the dry-run estimate and confirm with Run) and API (free, slower on big datasets). For bigquery-public-data, whose INFORMATION_SCHEMA you can’t query, the app reads a nightly mirror maintained by Querylab.io.
Billing model comparison
The dataset view prices your storage under both models and tells you which is cheaper:
| Model | What’s billed | Free |
|---|---|---|
| Logical | Active + long-term logical bytes | Time travel, fail-safe |
| Physical | Active + long-term physical bytes, plus time travel and fail-safe at the active rate | — |
Prices are per region (us-central1: $0.023/$0.016 per GiB logical active/long-term, $0.04/$0.02 physical). Long-term means not modified for 90 days. Well-compressed tables usually win on physical; tables with heavy time-travel churn don’t.
Column analysis
On a table, expand Analysis Options and click Analyze. Logical bytes per column are exact; physical bytes and compression are estimated by sampling the table, so the grid marks them (est.).
The column grid has: Level, Column, Type, Compression, Logical (GB), % of Parent, Physical (GB), % of Parent, Cost (Logical), Cost (Physical), NULL %. % of Parent is relative to the enclosing STRUCT, so nested fields add up to their parent; filter by level to flatten deep schemas.
Shrinking UUID and hash columns
Columns holding UUIDs or hex hashes (MD5, SHA-256) as STRING get a recommendation with a priority: FARM_FINGERPRINT (INT64, roughly 80% smaller) or BYTES (16 bytes, roughly 60% smaller), each with the estimated saving, collision risk and a ready migration script. Columns where the change wouldn’t save more than 0.1 GB are left alone.
| Column⏷ | Type⏷ | Logical (GB)⏷ | NULL %⏷ | Recommendation⏷ | |
|---|---|---|---|---|---|
| 1 | vehicle_id | STRING | 5.21 | 0 | FARM_FINGERPRINT (INT64) · HIGH |
| 2 | session_hash | STRING | 2.04 | 3.1 | BYTES (16 bytes) · MEDIUM |
| 3 | make | STRING | 0.38 | 0 | — |
Column reports count against the free tier (N of M free reports this month) and are saved under Recent Reports so you can reopen one without resampling.