当在运行在AppEngine上的应用上启动查询(使用App Engine默认服务帐户凭据{{1})时,我的云功能CF(使用服务帐户凭据sudo apt-get install php-xml
)无法获取BQ查询结果。 })
api_request中的文件“ /env/local/lib/python3.7/site-packages/google/cloud/_http.py”,第293行引发异常。from_http_response(response)google.api_core.exceptions.Forbidden:403 GET https://www.googleapis.com/bigquery/v2/projects/[PROJECT]/queries/[BQ-JOB-ID]?maxResults=0:拒绝访问:数据集[TEMP-DATASET-ID-STORING-QUERY-RESULTS]:用户[SERVICE-ACCOUNT-EMAIL]没有访问其他用户作业结果的权限。 ```
整个过程分为两部分(使用PY3.x客户库的所有内容)
PART A :在AppEng Flexible环境中运行。 (Py3.x)启动BQ查询SERVICE-ACCOUNT@PROJECT-ID.iam.gserviceaccount.com
。该请求通过将该job_id发布到Pubsub主题而结束。
PART B :一个Cloud函数(python37运行时,在此Pubsub事件上触发):
PROJECT-ID@appspot.gserviceaccount.com
job.insert
在STEP4上,我遇到上述错误(获得了rrom Stackdriver Logging)
即使
我也承认PubsubMessage
job.done
是不同的,但是两个Google帐户电子邮件都具有项目编辑级别权限,因此希望CF能够访问查询作业结果!更重要的是,当CF(使用服务帐户凭据)能够通过STEP2(job.get,轮询作业状态直到完成)时,只有查询结果的检索(STEP4)才会引发错误
任何指导都是高度可取的!
答案 0 :(得分:3)
如果您正在运行作业并使用具有不同标识的结果,则将结果保存到命名的目标表中。您可以使用短TTL设置指定的数据集,以便在此时间后自动删除表。默认情况下,缓存/匿名结果仅限于查询创建者。
使用目标表can be found in the BigQuery docs构建查询的示例。