费用分析3 分钟阅读
按频率排名的 BigQuery 热门查询
重复查询是 BigQuery 中隐藏的费用乘数。此查询对相同的查询文本进行分组,并计算每个查询执行了多少次,以及所有这些执行的累计费用。
为什么重要
每次执行费用 0.10 美元但每月运行 10,000 次的查询费用为 1,000 美元。频率分析通常会揭示低费用查询,由于纯粹的重复性而累积成显著的支出。这些都是缓存、计划物化或 BI Engine 加速的主要候选者。
工作原理
查询对每个唯一查询文本进行分组,然后按组计算出现次数和 total_bytes_billed 之和。结果显示每个唯一查询及其执行次数和累计按需费用。
SQL 查询
Fill in your details to get a ready-to-run query:
SQL
-- Find the most frequently repeated queries and their cumulative cost
DECLARE lookback_days INT64 DEFAULT 14;
WITH jobs AS (
SELECT
query,
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 query, bytes_billed FROM jobs WHERE rn = 1
),
grouped AS (
SELECT
query,
COUNT(*) AS exec_count,
SUM(bytes_billed) AS total_bytes
FROM deduplicated
GROUP BY query
)
SELECT
query,
exec_count,
ROUND(total_bytes / POW(1024, 3), 2) AS total_gib_scanned,
ROUND(total_bytes / POW(1024, 4) * 6.25, 2) AS cumulative_cost_usd
FROM grouped
...将 your-project 和 region-us 替换为您的 GCP 项目和数据集区域。
查询说明
作业首先按 job_id 去重,然后按查询文本分组。计数给出执行频率,计费字节数之和给出累计费用。这种方法有效地显示了大规模重复运行的查询。
关键洞察
每天运行 >100 次的查询几乎肯定是自动化的——检查它们是否可以使用缓存结果。
BigQuery 默认缓存结果 24 小时,但仅适用于具有确定性结果的相同查询。
带有 CURRENT_TIMESTAMP() 或 NOW() 的查询会绕过缓存——考虑使用日期截断代替。
扫描相同表的高频查询可能受益于物化视图或 BI Engine。
最佳实践
- 1
启用 BigQuery 结果缓存,避免使其失效的模式(CURRENT_TIMESTAMP、RAND 等)。
- 2
为前 5 个最常执行的分析查询创建物化视图。
- 3
将来自不同仪表板或服务的重复查询整合到单个计划查询中。
- 4
对为交互式仪表板提供服务的亚秒级查询使用 BI Engine。