Google BigQuery Transfer权限报错求助:无Google Drive OAuth令牌
解决方案:BigQuery Scheduled Transfer 关联Google Sheet视图权限报错及表自动删除问题
一、解决「PERMISSION_DENIED: No OAuth token with Google Drive scope was found」报错
这个报错的核心原因很明确:你的Scheduled Transfer任务默认没有请求Google Drive的OAuth权限,而关联Google Sheet的外部表/视图需要访问Drive资源,所以必须手动补全权限配置:
- 进入BigQuery控制台,找到你的Scheduled Query Transfer任务,点击「编辑」按钮
- 滚动到「高级选项」区域,找到「OAuth scopes」设置项
- 添加
https://www.googleapis.com/auth/drive这个权限范围(如果已有其他范围,直接追加即可) - 保存配置后,重新触发Transfer任务测试
同时别忘了给Transfer的服务账号授权访问目标Sheet:
- 在Transfer任务详情页,找到「服务账号」字段(格式类似
xxx@xxx.iam.gserviceaccount.com) - 打开你关联的Google Sheet,把这个服务账号邮箱添加到共享列表,至少赋予「查看」权限
二、解决复制表被自动删除的问题
你遇到的自动删除大概率是因为误创建了临时表(BigQuery临时表会在会话结束后自动清理),正确的做法是创建永久物化表来存储视图的结果:
- 运行以下SQL创建永久表,把视图的结果物化到永久表中:
CREATE OR REPLACE TABLE `your-project-id.your-dataset-id.permanent_sheet_data` AS SELECT * FROM `your-project-id.your-dataset-id.your-view`;
- 确认这个表是「永久表」(在BigQuery数据集列表里能看到,类型标注为「永久」而非「临时」)
- 后续的Scheduled Transfer任务直接查询这个永久表,而不是原来关联Sheet的视图
这样既避免了每次Transfer都需要访问Drive的权限依赖,也彻底解决了表被自动删除的问题。
补充排查点
如果还是有问题,检查以下细节:
- 确认Google Sheet的共享设置没有限制外部账号访问(比如设置了「仅限组织内访问」但服务账号不在你的组织内)
- 确保Scheduled Transfer的服务账号拥有
BigQuery Data Editor或更高权限,能正常读写目标数据集
内容的提问来源于stack exchange,提问作者dataEngineer
相关产品推荐
相关产品推荐

