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?