使用pandas-gbq 0.15.0读取BigQuery视图报403权限错误如何解决?
问题修复方案
你的credentials参数用法完全符合pandas-gbq 0.15.0+版本的规范,报错和参数替换本身无关,可按照以下步骤排查修复:
- 修正SQL语法错误
你当前的查询语句中FROM BQ_VIEW,末尾多了一个多余的逗号,会导致SQL解析异常,先删除该逗号,保证查询语法合法。 - 排查权限配置
*Forbidden: 403 Access Denied: BigQuery BigQuery: Permission denied while globbing file pattern*报错本质是服务账号缺少必要资源的访问权限,根据你的场景补充对应权限即可:- 基础权限:给服务账号授予目标数据集的
BigQuery Data Viewer角色,以及所属项目的BigQuery Job User角色,保证可以正常发起BQ查询、读取视图数据。 - 新增Storage API权限:pandas-gbq 0.15.0版本默认启用BigQuery Storage API加速数据读取,需要给服务账号补充
BigQuery Read Session User角色。 - 外部表关联权限:如果你的BQ视图依赖了基于GCS文件构建的外部表,需要额外给服务账号授予对应GCS桶的
Storage Object Viewer角色,允许服务账号读取GCS上的底层文件。
- 基础权限:给服务账号授予目标数据集的
- 临时兼容验证
如果暂时不想调整权限,可以在read_gbq方法中添加use_bqstorage_api=False参数,禁用BigQuery Storage API,回退到老版本的读取逻辑,验证功能是否正常,修改后的代码示例如下:
import pandas as pd from google.oauth2 import service_account credentials = service_account.Credentials.from_service_account_file(PATH_TO_JSON) pd.read_gbq(""" SELECT * FROM BQ_VIEW """, project_id="PROJECT_ID", dialect="standard", credentials=credentials, use_bqstorage_api=False )
此外可以额外确认服务账号密钥文件路径是否正确、密钥本身是否对应该项目的有效服务账号,排除凭证本身的问题。
内容的提问来源于stack exchange,提问作者soph020420
相关产品推荐
相关产品推荐

