Col*_*rdo 23 python google-bigquery
我正在尝试使用Python通过BigQuery API连接到Google BigQuery.
我在此处关注此页:https: //cloud.google.com/bigquery/bigquery-api-quickstart
我的代码如下:
import os
import argparse
from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.client import GoogleCredentials
GOOGLE_APPLICATION_CREDENTIALS = './Peepl-cb1dac99bdc0.json'
def main(project_id):
# Grab the application's default credentials from the environment.
credentials = GoogleCredentials.get_application_default()
print(credentials)
# Construct the service object for interacting with the BigQuery API.
bigquery_service = build('bigquery', 'v2', credentials=credentials)
try:
query_request = bigquery_service.jobs()
query_data = {
'query': (
'SELECT TOP(corpus, 10) as title, '
'COUNT(*) as unique_words '
'FROM [publicdata:samples.shakespeare];')
}
query_response = query_request.query(
projectId=project_id,
body=query_data).execute()
print('Query Results:')
for row in query_response['rows']:
print('\t'.join(field['v'] for field in row['f']))
except HttpError as err:
print('Error: {}'.format(err.content))
raise err
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('project_id', help='Your Google Cloud Project ID.')
args = parser.parse_args()
main(args.project_id)
Run Code Online (Sandbox Code Playgroud)
但是,当我通过终端运行此代码时,我收到以下错误:
oauth2client.client.ApplicationDefaultCredentialsError: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
Run Code Online (Sandbox Code Playgroud)
正如您在代码中看到的那样,我已尝试GOOGLE_APPLICATION_CREDENTIALS根据错误中的链接设置.但是,错误仍然存在.有谁知道这是什么问题?
先感谢您.
Roe*_*uar 43
首先 - 感谢您的代码 - 这提供非常有用.我还建议在代码中直接添加环境变量 - 而不是为你工作的每个环境设置环境变量.您可以使用以下代码:
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path_to_your_.json_credential_file"
Run Code Online (Sandbox Code Playgroud)
当在需要不同凭据的不同项目之间切换时,我发现这很有用.
小智 25
它正在本地UNIX(或其他)环境中查找环境变量,而不是python脚本中的变量.
您可以通过打开终端或cygwin并执行以下操作之一来设置:
export GOOGLE_APPLICATION_CREDENTIALS='/path/to/your/client_secret.json'
Run Code Online (Sandbox Code Playgroud)
在终端中键入该内容以仅为此会话设置变量
打开你的.bashrc文件,在UNIX中键入nano~/.bashrc并在用户特定的别名下面添加该行,如果你看到那个标题:
GOOGLE_APPLICATION_CREDENTIALS="/full/path/to/your/client_secret.json"
Run Code Online (Sandbox Code Playgroud)
然后键入source~/.bashrc重新加载它,并通过尝试确认它已设置echo $GOOGLE_APPLICATION_CREDENTIALS.如果它返回路径,那你很好.
art*_*mal 21
我不确定BigQuery,但我正在Google Data Store用于储蓄.如果已安装gcloud sdk在Mac中,则可以尝试运行此命令
gcloud auth application-default login
Run Code Online (Sandbox Code Playgroud)
注意:不建议GoogleCredentials.get_application_default()使用oauth2client,而不是可以使用google.auth.default()。首先安装软件包:
pip install google-auth
Run Code Online (Sandbox Code Playgroud)
在您的特定示例中,我看到您从代码中知道JSON文件的位置。您可以直接通过google.oauth2.service_account模块使用服务帐户来代替默认凭据(来自环境变量)。
credentials = google.oauth2.service_account.from_service_account_file(
'./Peepl-cb1dac99bdc0.json',
scopes=['https://www.googleapis.com/auth/cloud-platform'])
Run Code Online (Sandbox Code Playgroud)
您可以像现在一样使用此凭据文件,方法是将它们传递给googleapiclient.discovery.build;如果使用的是google-cloud-bigquery库,则将凭据传递给google.cloud.bigquery.Client构造函数。
除了使用GOOGLE_APPLICATION_CREDENTIALS(已经在一堆答案中描述)之外,还有一种方法可以将生成的 json 凭据设置为默认服务帐户:
gcloud auth activate-service-account --key-file=<path to your generated json file>
Run Code Online (Sandbox Code Playgroud)
这将激活默认帐户(并根据提供的json文件设置凭据)GOOGLE_APPLICATION_CREDENTIALS,而无需显式设置,并且在重新登录或重新启动后,它仍然会激活,而不修改.bashrc。
小智 6
这是ac#解决方案
System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS",@"C:\apikey.json");
string Pathsave = System.Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51418 次 |
| 最近记录: |