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

R版BigQuery查询正常运行,Python版报bigquery.readsessions.create权限缺失错误求助

R版BigQuery查询正常运行,Python版报bigquery.readsessions.create权限缺失错误求助

我太懂这种同一个服务账号在R里跑顺风顺水,到Python就踩权限坑的郁闷了!咱们来捋清楚问题出在哪,怎么解决:

问题根源

你的R代码用的bigrquery包,在获取查询结果时默认没用到BigQuery的「读取会话(Read Session)」机制,所以不需要bigquery.readsessions.create权限;但Python的google-cloud-bigquery客户端,在调用to_dataframe()时默认会创建读取会话来优化大数据集的读取流程,这就触发了权限检查,而你的服务账号刚好没这个权限,所以报错。

两种解决办法

办法一:给服务账号补全权限

这是最稳妥的长期解决方案:

  1. 登录Google Cloud控制台,找到你的项目project_name;
  2. 进入「IAM与管理员」→「IAM」页面;
  3. 找到你的服务账号(就是JSON密钥对应的那个账号);
  4. 点击编辑按钮,添加以下角色二选一:
    • 直接加BigQuery Data Viewer:这个角色包含了查询数据、创建读取会话的所有必要权限,一步到位;
    • 精细化权限:如果不想给太宽的权限,可以加BigQuery Session User(专门管读取会话创建),同时确保服务账号已有BigQuery Job User和BigQuery Data Viewer的基础权限;
  5. 保存后等个几分钟让权限生效,再重新跑Python代码就行。

办法二:修改Python代码,禁用读取会话

如果暂时没法调整权限,可以让客户端跳过读取会话的创建,直接获取结果:
把你原来的结果导出代码:

query_job = client.query(query)
results = query_job.result()
df = results.to_dataframe()

改成:

# 直接禁用读取会话,获取结果
df = client.query(query).to_dataframe(create_read_session=False)

这样客户端就不会触发bigquery.readsessions.create的权限检查了,和R的逻辑更接近。

额外提醒:代码里的小细节

你代码里的项目ID、表名前后有多余空格(比如project_id = " project_name "、FROM project_name.angel.info ``),虽然这次报错是权限问题,但这些空格可能导致后续其他奇怪的问题,建议赶紧去掉哦!

备注:内容来源于stack exchange,提问作者jwatki8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:33:10