使用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
相关产品推荐
相关产品推荐

