Google BigQuery 提示 Billing has not been enabled
结论
这类错误通常与 load 命令或表结构无关。问题往往出在 BigQuery 作业所属的 Google Cloud 项目没有关联有效的结算账号。
填写了银行卡,并不代表结算已经启用。银行卡验证失败、结算账号被暂停,或结算配置尚未生效时,BigQuery 仍会返回:
Billing has not been enabled for this project.
本例的原因是信用卡被拒。更换有效银行卡后,控制台显示以下状态,才表示结算已正常启用:
Billing is enabled for all active, billable services
排查步骤
1. 确认实际执行作业的项目
先检查 bq 当前使用的项目:
gcloud config get-value project
也可以显式指定项目,以免默认配置指向另一个未启用结算的项目:
bq --project_id=PROJECT_ID load \
ct.ads \
/tmp/data.csv \
'id:INTEGER,source:STRING,clicks:INTEGER'
将 PROJECT_ID 替换为已启用 BigQuery 和结算的项目 ID。
数据集所在的项目不一定是提交作业时使用的项目。报错通常指向承担该作业费用的项目。
2. 检查项目是否关联有效的结算账号
如果已经安装并登录 Google Cloud CLI,可以查看项目的结算状态:
gcloud billing projects describe PROJECT_ID
正常情况下,项目应已启用结算,并关联一个有效的 billing account。还可以列出当前账号有权访问的结算账号:
gcloud billing accounts list
如果结算账号尚未关联,或已被关闭、暂停,需要前往 Google Cloud Console 的“结算”页面重新关联或恢复。
3. 检查付款方式是否验证成功
如果控制台一直提示“结算信息可能需要几分钟更新”,不要只确认信用卡是否已经填写,还要检查:
- 银行卡是否被发卡行拒绝;
- 是否需要完成额外的身份或交易验证;
- 结算账号是否处于暂停、关闭或待验证状态;
- 是否还有未解决的付款问题;
- 当前项目是否关联了刚配置的结算账号。
付款方式验证失败后,控制台有时仍会保留已填写的结算信息,但项目并不能正常使用结算功能。更换有效的付款方式后,需要等待控制台明确显示结算已启用。
4. 等待配置同步后重新提交
刚关联结算账号或更换付款方式时,状态可能不会立即同步到 BigQuery。确认控制台中的状态正常后,稍等片刻,再重新运行:
bq --project_id=PROJECT_ID load \
ct.ads \
/tmp/data.csv \
'id:INTEGER,source:STRING,clicks:INTEGER'
如果仍然报错,可以重新登录,并确认 CLI 当前使用的账号和配置:
gcloud auth list
gcloud config list
其他需要区分的问题
以下情况也可能造成加载失败,但通常会出现不同的错误:
- BigQuery API 未启用;
- 当前账号没有创建作业或写入表的权限;
- 数据集位于其他项目,而当前账号无权访问;
- 表结构与 CSV 数据不匹配;
- 项目受到组织政策或结算预算策略限制。
如果错误信息明确为 Billing has not been enabled,应先检查项目、结算账号和付款方式,不必急着修改 CSV 文件或 schema。
Google Cloud Console 的界面和状态文案可能会有变化,但判断标准始终一样:项目必须关联一个状态有效的结算账号,付款方式也必须通过验证。
备注:内容仅供参考。
