2017-11-22 1 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 파이썬 클라이언트를 사용하여 시트 기반 테이블에서 어떻게 선택할 수 있습니까?

답변

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를 사용해야합니다. 제안.

관련 문제