按用户分析 BigQuery 费用
了解哪些用户产生最多的 BigQuery 费用是控制云账单的第一步。此查询在可配置的时间窗口内按总按需费用对每个用户进行排名,让您快速找到最大的消耗者。
为什么重要
没有用户级别的费用归因,企业往往难以识别谁对意外的账单峰值负责。单个运行未优化的临时查询的用户可能轻易占项目总支出的 30-50%。通过显示每用户费用,您可以进行有针对性的对话、设置预算并优先考虑培训。
工作原理
BigQuery 的 INFORMATION_SCHEMA.JOBS_BY_PROJECT 视图包含项目中每个作业的元数据,包括用户电子邮件、总计费字节数和槽位使用情况。此查询按用户汇总 total_bytes_billed,并使用 Google 当前每 TiB 6.25 美元的定价将其转换为估算的按需费用。
SQL 查询
Fill in your details to get a ready-to-run query:
-- Rank users by estimated on-demand cost
DECLARE lookback_days INT64 DEFAULT 30;
WITH jobs AS (
SELECT
user_email,
job_id,
COALESCE(total_bytes_billed, 0) AS bytes_billed,
ROW_NUMBER() OVER (PARTITION BY job_id ORDER BY end_time DESC) AS rn
FROM `your-project`.`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL lookback_days DAY)
AND job_type = 'QUERY'
AND state = 'DONE'
AND total_slot_ms IS NOT NULL
),
deduplicated AS (
SELECT user_email, bytes_billed FROM jobs WHERE rn = 1
)
SELECT
user_email,
COUNT(*) AS query_count,
ROUND(SUM(bytes_billed) / POW(1024, 4), 4) AS tib_scanned,
ROUND(SUM(bytes_billed) / POW(1024, 4) * 6.25, 2) AS estimated_cost_usd
FROM deduplicated
GROUP BY user_email
ORDER BY estimated_cost_usd DESC查询说明
查询从 INFORMATION_SCHEMA.JOBS_BY_PROJECT 中收集回溯窗口内每个已完成的查询作业。使用按 job_id 分区的 ROW_NUMBER() 对作业进行去重(BigQuery 可能多次记录同一作业)。然后按 user_email 分组,对 total_bytes_billed 求和,并将字节转换为 TiB(除以 1024^4),再乘以 $6.25/TiB 的按需价格。
关键洞察
少数用户通常占大多数费用——检查前 3 名用户是否占总支出的 50% 以上。
服务账户(dbt、Looker、Airflow)经常名列前茅,因为它们大规模运行计划查询。
费用高但查询数量少的用户可能正在运行扫描大量数据的未优化查询。
逐周比较用户费用以检测行为的突然变化。
最佳实践
- 1
设置 BigQuery 自定义费用控制,以限制每个用户每天计费的字节数。
- 2
对交互式/临时查询要求 LIMIT 子句或分区过滤器。
- 3
在计划查询作业上使用标签,以便将自动化费用与人工驱动的费用分开。
- 4
与工程主管分享此报告,以便他们能够指导团队成员掌握查询最佳实践。
相关指南
按项目分析 BigQuery 费用
跨 GCP 项目跟踪 BigQuery 费用。使用 INFORMATION_SCHEMA 比较项目级支出,找出组织中最昂贵的项目。
阅读指南按标签分析 BigQuery 费用
按作业标签分解 BigQuery 费用。使用作业上的键值对将支出归因于团队、管道或功能。
阅读指南按费用排名的 BigQuery 热门查询
按按需费用找出最昂贵的 BigQuery 查询。按总计费字节数对查询排名,识别项目中最大的费用驱动因素。
阅读指南按查询分析 BigQuery 费用
分析每个查询的费用、槽位使用情况和执行时间。获取每次查询执行的按需费用详细分解。
阅读指南