11

这个问题看起来应该很容易回答,但是经过几天的研究和几个死胡同,如果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 示例进行操作时,最终都会弹出一个 Web 浏览器,要求我选择一个 Google 帐户用于身份验证。

4

3 回答 3

16

抱歉,查找信息是如此具有挑战性。您正在寻找我们的使用 OAuth 2.0指南授权访问 BigQuery API中记录的所谓服务帐户。

这是一个使用 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 = 'XXXXX@developer.gserviceaccount.com'

# 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']
于 2012-11-03T23:37:01.967 回答
4

如果您使用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)
于 2016-12-13T07:51:01.103 回答
0

我遇到过同样的问题。这可能是因为您在项目中没有您正在使用的服务帐户密钥的必要权限。

于 2016-02-29T22:09:59.640 回答