警告: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、带预算上限的服务商,或自托管 / 开源替代方案。