当我在查询中使用 "with" 和 "join" 语句时,BigQuery 错误 403 权限被拒绝
BigQuery error 403 permission denied when i use "with" and "join" statements in query
我正在使用 python3 和 BigQuery 开发一个项目,我在 google-cloud-bigquery 库中遇到了一个奇怪的行为。
当我执行像这样的简单查询时:
select * from my.project where field1="foo" and field2="bar"
程序 运行 很好,但是当我尝试使用更“复杂”的查询时,例如:
with a as (...),b as(...)
select * from a as a_el
select * from b as b_el
join b_el on a_el.field1 = b_el.field1 ...
程序崩溃:
google.api_core.exceptions.PermissionDenied: 403 request failed: the user does not have 'bigquery.readsession.create' permission
所以,我知道这是一个权限问题,但我的问题是:背后有什么区别?为什么需要额外的许可?这些表在同一个项目中,所以问题在哪里?
我使用 query() 方法执行查询
google-cloud-bigquery
python 库利用 BigQuery Storage read api 来更快地下载查询结果。这些权限是 roles/bigquery.user
预定义角色的一部分。您可能在项目中拥有一个自定义角色,该角色排除了读取会话权限,这些权限是特定于 BigQuery 存储的权限 API。这听起来像是第一个查询的结果小到无法创建存储 API 会话的情况。
可以在 access control 页面上找到有关权限的更多信息。
我正在使用 python3 和 BigQuery 开发一个项目,我在 google-cloud-bigquery 库中遇到了一个奇怪的行为。 当我执行像这样的简单查询时:
select * from my.project where field1="foo" and field2="bar"
程序 运行 很好,但是当我尝试使用更“复杂”的查询时,例如:
with a as (...),b as(...)
select * from a as a_el
select * from b as b_el
join b_el on a_el.field1 = b_el.field1 ...
程序崩溃:
google.api_core.exceptions.PermissionDenied: 403 request failed: the user does not have 'bigquery.readsession.create' permission
所以,我知道这是一个权限问题,但我的问题是:背后有什么区别?为什么需要额外的许可?这些表在同一个项目中,所以问题在哪里?
我使用 query() 方法执行查询
google-cloud-bigquery
python 库利用 BigQuery Storage read api 来更快地下载查询结果。这些权限是 roles/bigquery.user
预定义角色的一部分。您可能在项目中拥有一个自定义角色,该角色排除了读取会话权限,这些权限是特定于 BigQuery 存储的权限 API。这听起来像是第一个查询的结果小到无法创建存储 API 会话的情况。
可以在 access control 页面上找到有关权限的更多信息。