2015-05-19 107 views
3

我想使用Python访问本地Linux机器上的BigQuery数据。 来自Google帮助https://cloud.google.com/bigquery/authorization#service-accounts-server的代码正常工作,给了我数据集列表。但通过查询服务库尝试使用Python查询Google BigQuery时出现“需要登录”错误

SELECT id, name FROM [test_articles.countries] LIMIT 100 

失败,出现 “需要登录” 发送消息:

googleapiclient.errors.HttpError: <HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/myproject/queries?alt=json returned "Login Required"> 

BigQuery中的Web UI中查询工作正常。对于身份验证,我使用Google开发控制台中的“Google APIs服务帐户”,并且拥有“可以修改”权限。

这里是整个代码

import httplib2 

from apiclient.discovery import build 
from oauth2client.client import SignedJwtAssertionCredentials 

# REPLACE WITH YOUR Project ID 
PROJECT_ID = "xxxxxx" 
# REPLACE WITH THE SERVICE ACCOUNT EMAIL FROM GOOGLE DEV CONSOLE 
SERVICE_ACCOUNT_EMAIL = '[email protected]' 

f = file('xxxxx.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_ID).execute(http) 

print('Dataset list:\n') 
for dataset in response['datasets']: 
    print("%s\n" % dataset['id']) 


# SELECT data 

query_data = {'query':' 
    SELECT id, name FROM [test_articles.countries] LIMIT 100; 
'} 
query_request = service.jobs() 
query_response = query_request.query(projectId=PROJECT_ID, 
    body=query_data).execute() 
pp.pprint(query_response) 

回答

1

相反的:

service = build('bigquery', 'v2') 
datasets = service.datasets() 
response = datasets.list(projectId=PROJECT_ID).execute(http) 

尝试:

service = build('bigquery', 'v2', http=http) 
datasets = service.datasets() 
response = datasets.list(projectId=PROJECT_ID).execute() 

(构建服务时使用的身份验证的HTTP连接)

0

确保lo g通过终端输入您的gcloud帐户:

gcloud auth application-default login 
相关问题