警告:2小时内产生 1.4 万美元的 BigQuery 费用
一位研究者在 Google 的 BigQuery 上针对公共 HTTP Archive 数据集进行查询,结果在两小时内意外产生了 1.4 万美元费用,引发了外界对云数据服务如何展示(或隐藏)成本的更广泛审视。评论者解释说,该数据集本身是免费的,但查询会按扫描的每 TB 数据计费,而且一个未优化、重复执行的查询很可能读取了数 PB 数据;不过,许多人认为 Google 的界面、缺乏硬性消费上限以及含糊的成本指示,让这类错误变得过于容易。另一些人则反驳说,BigQuery 的定价和警告都有文档说明,用户也有责任设置配额并理解计费;他们借此事件强调了对个人和小型初创公司而言,不透明、按使用量计费的云定价所带来的更广泛风险。
事件概述
- 一位用户在 BigQuery 中针对 HTTP Archive 公共数据集运行历史查询,约 2 小时内产生了约 1.4 万美元的费用。
- 该工作负载似乎反复对大型表进行了全表扫描(总扫描量大约达到数 PB),很可能是通过对许多月份/站点的循环查询实现的。
- 据称,最初的支持团队拒绝免除这笔账单;但在讨论后期,用户表示 Google 已开始协助解决此事。
BigQuery 定价如何运作(根据线程)
- 公共数据集的存储由 Google 承担;用户支付的是查询处理费用。
- 按需 BigQuery 定价按扫描的数据 TiB 计费,并有一个很小的免费额度。
- 界面会在运行查询前显示预估已处理字节数,但这一点很容易被忽略,而且显示的是 TB/PB,而不是美元。
责任与归因
- 一种观点认为这主要是用户错误:BigQuery 文档和 HTTP Archive 的“入门”指南都提到了按字节计费和免费额度限制。
- 另一种观点认为,尽管用户确实犯了错误(例如
SELECT *、LIKE过滤器、没有限制、循环查询),但系统设计让高昂错误变得过于容易发生,而且警告不足。
UI/UX 与成本透明度
- 多条评论批评 BigQuery 以“扫描了多少 TB”作为抽象表述,以及把成本指示做得很小、并不醒目,认为这对用户不友好,甚至接近“暗黑模式”。
- 也有人建议界面应明确显示美元预估,并在查询非常昂贵时给出阻断式警告(例如:“这可能花费 1.4 万美元——是否确认?”)。
配额、上限与防护措施
- BigQuery 支持自定义配额(例如每个查询/用户可扫描的最大 TB 数)和项目级限制,但这些设置并不显眼,也不是硬性消费上限。
- GCP 账单提醒和预算通知是存在的,但会延迟,且无法保证严格的美元上限。
- 许多评论者呼吁真正的硬性预算上限或预付费模式,尤其适用于个人、学生和业余用户。
建议与替代方案
- 实用建议:避免在大型列式表上使用
SELECT *,使用分区/聚簇,先筛选到更小的表,在样本上测试,并设置保守的配额。 - 也有人建议不要在大型云平台上绑定个人信用卡,或者使用 LLC、带预算上限的服务商,或自托管 / 开源替代方案。