按费用排名的 BigQuery 热门查询
这是 BigQuery 费用优化中最有价值的查询。它返回按按需费用排名的每次查询执行,向您展示项目中哪些 SQL 语句消耗最多资源。
为什么重要
在大多数 BigQuery 项目中,帕累托原则适用:20% 的查询占 80% 的费用。找到并优化这些顶级查询可以提供最高的 ROI。没有这种可见性,团队就会在几乎没有影响的查询上浪费时间。
工作原理
查询从 INFORMATION_SCHEMA.JOBS_BY_PROJECT 读取作业元数据,按 job_id 去重,并按按需费用降序排序。费用根据 $6.25/TiB 的 total_bytes_billed 估算。还计算每次查询的估算槽位使用情况。
SQL 查询
Fill in your details to get a ready-to-run query:
-- Most expensive queries ranked by on-demand cost
DECLARE lookback_days INT64 DEFAULT 14;
WITH jobs AS (
SELECT
user_email,
query,
job_id,
project_id,
start_time,
end_time,
COALESCE(total_bytes_billed, 0) AS bytes_billed,
total_slot_ms,
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
)
SELECT
user_email,
query,
project_id,
start_time,
end_time,
ROUND(bytes_billed / POW(1024, 4), 4) AS tib_scanned,
ROUND(bytes_billed / POW(1024, 4) * 6.25, 2) AS on_demand_cost_usd,
ROUND(SAFE_DIVIDE(total_slot_ms,
TIMESTAMP_DIFF(end_time, start_time, MILLISECOND)), 0) AS avg_slots
FROM jobs
...查询说明
INFORMATION_SCHEMA.JOBS_BY_PROJECT 过滤到回溯窗口内已完成的查询作业。ROW_NUMBER() 在 job_id 上去重。按需费用计算为 total_bytes_billed / 1024^4 * $6.25。估算槽位数显示计算密集度:total_slot_ms / execution_time_ms。
关键洞察
前 10 个最昂贵的查询通常占项目总费用的 50-80%。
在顶部结果中多次出现的查询是物化或缓存的候选者。
费用高但槽位少的查询扫描了太多数据——添加分区过滤器或选择更少的列。
费用高且槽位多的查询受计算限制——简化 JOIN、减少 DISTINCT 操作或使用近似函数。
最佳实践
- 1
每周审查前 10 个查询,并为每个查询创建优化工单。
- 2
在时间分区表上添加分区过滤器以消除全表扫描。
- 3
用明确的列列表替换 SELECT * 以减少扫描的字节数。
- 4
使用 BigQuery 的查询计划说明来识别处理最多数据的阶段。
相关指南
按复杂度排名的 BigQuery 热门查询
按槽位使用情况找出计算密集度最高的 BigQuery 查询。识别消耗不成比例计算资源的查询。
阅读指南按持续时间排名的 BigQuery 热门查询
找出运行时间最长的 BigQuery 查询。识别阻塞资源并影响用户体验的慢查询。
阅读指南按频率排名的 BigQuery 热门查询
识别最常执行的 BigQuery 查询。找出适合缓存、物化视图或整合的重复查询。
阅读指南按用户分析 BigQuery 费用
找出哪些用户产生了最多的 BigQuery 支出。查询 INFORMATION_SCHEMA,按按需费用对用户排名并识别优化目标。
阅读指南