Как запросить BigQuery программно с Python без взаимодействия с конечным пользователем?
Этот вопрос кажется, что он должен быть так прост в ответе, но после нескольких дней исследований и нескольких тупиков я не могу получить результаты запроса из BigQuery
, не настаивая на использовании OAuth для пользователей. Неужели кому-то повезло с этим? Я не использую Google AppEngine
для своего приложения, он размещен в EC2
. Вот точная ситуация:
User wants reporting data -->
Web server makes queries to BigQuery -->
Data is transformed for use in WebApp and returned to User.
Всякий раз, когда я следую примерам Google, я получаю всплывающий веб-браузер с просьбой выбрать учетную запись Google для аутентификации.
Ответы
Ответ 1
Извините, так сложно найти информацию. Вы ищете то, что называется Учетные записи служб, которые задокументированы в нашем авторизации доступа к API BigQuery с использованием OAuth 2.0 руководство.
Вот пример, используя клиентскую библиотеку Python , хотя вы захотите посмотреть документацию, на которую ссылается информация о приобретении соответствующих учетных данных:
import httplib2
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials
# REPLACE WITH YOUR Project ID
PROJECT_NUMBER = 'XXXXXXXXXXX'
# REPLACE WITH THE SERVICE ACCOUNT EMAIL FROM GOOGLE DEV CONSOLE
SERVICE_ACCOUNT_EMAIL = '[email protected]'
# OBTAIN THE KEY FROM THE GOOGLE APIs CONSOLE
# More instructions here: http://goo.gl/w0YA0
f = file('key.p12', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
SERVICE_ACCOUNT_EMAIL,
key,
scope='https://www.googleapis.com/auth/bigquery')
http = httplib2.Http()
http = credentials.authorize(http)
service = build('bigquery', 'v2')
datasets = service.datasets()
response = datasets.list(projectId=PROJECT_NUMBER).execute(http)
print 'Dataset list:'
for dataset in response['datasets']:
print '%s' % dataset['datasetReference']['datasetId']
Ответ 2
Если вы входите в систему локально с gcloud:
gcloud auth application-default login
Затем файл учетных данных будет храниться в ~/.config/gcloud/, который может быть загружен с помощью:
from oauth2client.client import GoogleCredentials
from apiclient.discovery import build
credentials = GoogleCredentials.get_application_default()
service = build('bigquery', 'v2')
Или вы можете просто загрузить файл ключа безопасности BQ напрямую:
from google.cloud import bigquery
client = bigquery.Client.from_service_account_json(path_to_key.json)
Ответ 3
У меня была такая же проблема. Возможно, это связано с тем, что у вас нет необходимых разрешений в проекте для ключа учетной записи службы, который вы используете.