为BigQuery Python CLI设置GOOGLE_APPLICATION_CREDENTIALS

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)

当在需要不同凭据的不同项目之间切换时,我发现这很有用.

  • 太感谢了。对于新手,如果您使用的是 django,请在 django-project 设置文件中添加代码 `import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path_to_your_.json_credential_file"`。 (2认同)

小智 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.如果它返回路径,那你很好.

  • 添加一件事,可以通过 https://cloud.google.com/docs/authentication/getting-started 生成 GOOGLE_APPLICATION_CREDENTIALS json 文件(突出显示为“转到创建服务帐户密钥页面”) (2认同)

art*_*mal 21

我不确定BigQuery,但我正在Google Data Store用于储蓄.如果已安装gcloud sdk在Mac中,则可以尝试运行此命令

gcloud auth application-default login
Run Code Online (Sandbox Code Playgroud)


Tim*_*ast 7

注意:不建议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构造函数。


avt*_*ton 7

除了使用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)