通过AppScript运行BigQuery查询时的权限问题
解决BigQuery插入外部Sheet数据源时的Drive权限错误
问题核心
你遇到的Permission denied while getting Drive credentials错误,本质是BigQuery服务账号无权限访问外部表table_two对应的Google Sheet。尽管AppScript已添加Drive服务,但BigQuery执行查询时会使用自身的服务账号读取Drive中的Sheet数据,而非AppScript的运行账号。
解决步骤
定位BigQuery默认服务账号
打开Google Cloud控制台的BigQuery项目设置,找到默认服务账号,格式通常为[项目编号]@bigquery-cloud.google.com;也可在BigQuery控制台执行SELECT CURRENT_USER();,返回结果即为执行查询的服务账号。给服务账号授予Sheet访问权限
打开table_two对应的Google Sheet,点击右上角「分享」,输入上述服务账号邮箱,授予查看者权限(仅需读取数据权限即可)。验证权限配置
先在BigQuery控制台手动运行你的INSERT语句:insert into `project.table_one` select * from `project.table_two` where Date is not null;若能成功执行,说明权限配置生效,再回到Google Sheet的AppScript菜单执行操作。
可选:调整AppScript查询请求
若仍有问题,可在请求中指定使用当前用户身份运行查询(需确保该用户同时拥有BigQuery写入权限和目标Sheet读取权限),修改runQuery函数的request配置:const request = { query: 'insert into `project.table_one` select * from `project.table_two` where Date is not null;', useLegacySql: false, useUserCredentials: true // 新增:使用当前用户身份执行查询 };
注意事项
- 确认
table_two的外部表定义中,数据源Sheet的共享设置已正确开放给BigQuery服务账号。 - 使用
useUserCredentials: true时,需保证运行AppScript的用户同时具备BigQuery写入权限和目标Sheet的读取权限。
内容的提问来源于stack exchange,提问作者Nodi
相关产品推荐
相关产品推荐

