You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python在PyCharm查询BigQuery公开数据集时权限报错求助

解决BigQuery公开数据集查询的权限报错问题

这个报错的核心原因很明确:你把查询作业提交到了bigquery-public-data这个Google官方的公开项目里,但这个项目你没有权限创建作业——所有查询作业必须提交到你自己的GCP项目中,哪怕你查询的是公开数据集。

具体解决方案步骤:

  • 替换项目ID为你自己的GCP项目
    你的服务账号sajith-sudhi@adroit-marking-183823.iam.gserviceaccount.com属于项目adroit-marking-183823,所以代码里的project_id应该设为这个项目,而不是bigquery-public-data。

  • 确保服务账号拥有必要权限
    在你自己的GCP项目adroit-marking-183823中,给这个服务账号授予BigQuery Job User(roles/bigquery.jobUser)权限,这个权限允许账号在项目中创建查询作业。如果后续涉及私有数据集的读取,还可以补充BigQuery Data Viewer(roles/bigquery.dataViewer)权限,不过公开数据集默认允许读取,这一步可选。

  • 确认你的GCP项目已启用BigQuery API
    登录GCP控制台,找到你的项目,搜索"BigQuery API",确保它已经被启用(如果没启用,直接点击启用按钮即可)。

修改后的代码示例:

from google.cloud import bigquery
from google.oauth2 import service_account

# 替换为你自己的GCP项目ID
project_id = 'adroit-marking-183823'
credentials = service_account.Credentials.from_service_account_file(
    'NYCTaxi-c81bd00c9864.json'
)

# 客户端指向自己的项目,查询时指定公开数据集的项目和表
client = bigquery.Client(credentials=credentials, project=project_id)

# 查询语句中明确用反引号包裹完整表路径:`公开项目ID.数据集.表名`
query_job = client.query("""
    SELECT * FROM `bigquery-public-data.new_york.tlc_yellow_trips_2016` LIMIT 1000
""")

results = query_job.result()  # 等待作业完成
for row in results:
    print(row)

关键说明:

  • 查询语句里的表名必须用反引号包裹,明确指定公开数据集所属的项目bigquery-public-data,这样BigQuery才知道要从哪个数据源读取数据。
  • 作业的计费、权限校验都是基于你自己的GCP项目,公开数据集本身不需要额外的访问授权。

内容的提问来源于stack exchange,提问作者Sajith Sudhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:29:51