BigQuery FinOps Query Pack

Who is spending the most in BigQuery?

Cost by user and service account over the last 30 days, with a daily trend.

Free to run — INFORMATION_SCHEMA scans no billable bytesChecked 4 Aug 2026

JOBS and TABLE_STORAGE are region-scoped.

-- Spend by principal. Service accounts usually dominate; that is fine,
-- what matters is which ones and whether the trend is flat.
SELECT
  user_email,
  COUNT(*)                                                  AS jobs,
  ROUND(SUM(total_bytes_billed) / POW(1024, 4), 2)          AS tib_billed,
  ROUND(SUM(total_bytes_billed) / POW(1024, 4) * 6.25, 2)   AS est_on_demand_usd,
  ROUND(SUM(total_slot_ms) / 1000 / 3600, 1)                AS slot_hours,
  ROUND(COUNTIF(cache_hit) / COUNT(*), 3)                   AS cache_hit_rate
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND job_type = 'QUERY'
  AND state = 'DONE'
GROUP BY user_email
ORDER BY est_on_demand_usd DESC;

What it returns

user_email
Human user or service account that submitted the job.
cache_hit_rate
Fraction of that principal's jobs served from cache.

How to read it

  • Publish this, do not weaponise it. The reliable outcome of a cost leaderboard used for blame is that people stop using BigQuery, which is more expensive than the queries were.
  • A service account at the top is normal — it is a pipeline. The question is whether the pipeline's cost is proportionate to what it produces.
  • A near-zero cache_hit_rate on an interactive user often means a BI tool that appends a timestamp to every query.

Run this once, or have it run every day.

Finitizer evaluates this class of question continuously against your live BigQuery estate, tracks how each number moves between runs, and turns findings into assigned tasks. Read-only and keyless.