如何在没有最终用户交互的情况下以编程方式从Python查询BigQuery?

Jaw*_*ame 11 python google-bigquery

这个问题看起来应该很简单,但经过几天的研究和几个死胡同之后,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.
Run Code Online (Sandbox Code Playgroud)

每当我关注Google示例时,我最终都会弹出一个网络浏览器,要求我选择一个用于身份验证的Google帐户.

Rya*_*oyd 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']
Run Code Online (Sandbox Code Playgroud)