2017-11-22 35 views
0

サービスアカウントを使用して、ネイティブのBigQueryテーブルからデータを取得できます。サービスアカウントを使用してAPIを介してBigQueryのGoogleスプレッドシートのデータをクエリする

ただし、同じサービスアカウントを使用して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. 

私はdriveのスコープを含め、明示的scopesを定義するためのoauth2client.service_account.ServiceAccountCredentialsを使用しようとしましたが、そうしようとしたとき、私は次のエラーを取得する:

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クライアントを使用してシートバックテーブルから選択するにはどうすればよいですか?

答えて

0

認証時にgdriveのスコープを渡す必要があると思います。スコープはここではhttps://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/core/google/cloud/client.py#L126に渡され、BigQueryクライアントにはこれらのスコープがないようです。https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/bigquery/google/cloud/bigquery/client.py#L117私はgithubについて尋ねることをお勧めします。また、回避策として、gdriveスコープを含むクライアントの認証情報を無効にすることもできますが、oauth2clientの代わりにGoogleCloudPlatform/google-auth-library-pythonのgoogle.auth.credentialsをエラーメッセージとして使用する必要があります示唆している。

関連する問題