2017-11-22 1 views
0

Ich kann Daten aus nativen BigQuery-Tabellen mithilfe eines Dienstkontos abrufen.Abfrage von Daten aus einer Google Tabellen-basierten Tabelle in BigQuery über API mit Dienstkonto

Ich erhalte jedoch einen Fehler beim Versuch, select aus einer Tabelle in Google Tabellen in BigQuery mit dem gleichen Dienstkonto.

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() 

Der Ausgang:

⚡ ~/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. 

Ich habe versucht oauth2client.service_account.ServiceAccountCredentials zu verwenden für scopes explizit definiert, einschließlich eines Bereichs für drive, aber ich bekomme die folgende Fehlermeldung, wenn Sie versuchen, dies zu tun:

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. 

Mein Verständnis ist, dass Auth jetzt über IAM behandelt wird, aber ich sehe keine Rollen auf dieses Dienstkonto anwenden, die haben irgendetwas mit dem Laufwerk zu tun.

Wie kann ich mithilfe des BigQuery-Python-Clients eine Tabelle auswählen, für die eine Tabelle erstellt wurde?

Antwort

0

Ich denke, Sie haben Recht, dass Sie den Umfang für gdrive bei der Authentifizierung übergeben müssen. Die Bereiche werden hier übergeben https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/core/google/cloud/client.py#L126 und es scheint, dass der BigQuery-Client diese Bereiche https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/bigquery/google/cloud/bigquery/client.py#L117 fehlt. Ich schlage vor, auf GitHub zu fragen und auch als Workaround können Sie versuchen, Client-Anmeldeinformationen einschließlich Gdrive-Bereich zu überschreiben, aber Sie müssen google.auth.credentials von GoogleCloudPlatform/google-auth-Bibliothek-Python anstelle von oauth2client, als Fehlermeldung verwenden schlägt vor.

Verwandte Themen