【发布时间】:2017-11-22 22:04:00
【问题描述】:
我可以使用服务帐号从原生 BigQuery 表中获取数据。
但是,当我尝试使用同一服务帐户从 BigQuery 中基于 Google 表格的表中 select 时遇到错误。
from google.cloud import bigquery
client = bigquery.Client.from_service_account_json(
json_credentials_path='creds.json',
project='xxx',
)
# this works fine
print('test basic query: select 1')
job = client.run_sync_query('select 1')
job.run()
print('results:', list(job.fetch_data()))
print('-'*50)
# this breaks
print('attempting to fetch from sheets-based BQ table')
job2 = client.run_sync_query('select * from testing.asdf')
job2.run()
输出:
⚡ ~/Desktop ⚡ python3 bq_test.py
test basic query: select 1
results: [(1,)]
--------------------------------------------------
attempting to fetch from sheets-based BQ table
Traceback (most recent call last):
File "bq_test.py", line 16, in <module>
job2.run()
File "/usr/local/lib/python3.6/site-packages/google/cloud/bigquery/query.py", line 381, in run
method='POST', path=path, data=self._build_resource())
File "/usr/local/lib/python3.6/site-packages/google/cloud/_http.py", line 293, in api_request
raise exceptions.from_http_response(response)
google.cloud.exceptions.Forbidden: 403 POST https://www.googleapis.com/bigquery/v2/projects/warby-parker-1348/queries: Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.
我尝试使用oauth2client.service_account.ServiceAccountCredentials 显式定义scopes,包括drive 的范围,但尝试这样做时出现以下错误:
ValueError: This library only supports credentials from google-auth-library-python. See https://google-cloud-python.readthedocs.io/en/latest/core/auth.html for help on authentication with this library.
我的理解是,身份验证现在是通过 IAM 处理的,但我看不到任何角色可应用于此服务帐户与驱动器有任何关系。
如何使用 BigQuery python 客户端从工作表支持的表中进行选择?
【问题讨论】:
-
你有没有想过这个问题?我遇到了同样的问题。
标签: google-bigquery google-oauth google-cloud-iam