복붙노트

[PYTHON] BigQuery Python CLI에 GOOGLE_APPLICATION_CREDENTIALS 설정하기

PYTHON

BigQuery Python CLI에 GOOGLE_APPLICATION_CREDENTIALS 설정하기

파이썬을 사용하여 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)

그러나 터미널을 통해이 코드를 실행하면 다음과 같은 오류가 발생합니다.

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.

코드에서 알 수 있듯이 오류의 링크 당 GOOGLE_APPLICATION_CREDENTIALS을 (를) 설정하려고했습니다. 그러나 오류가 계속됩니다. 아무도 그 문제가 뭔지 알고 있습니까?

미리 감사드립니다.

해결법

  1. ==============================

    1.Python 스크립트의 변수가 아니라 로컬 UNIX (또는 기타) 환경에서 환경 변수를 찾고 있습니다.

    Python 스크립트의 변수가 아니라 로컬 UNIX (또는 기타) 환경에서 환경 변수를 찾고 있습니다.

    터미널 또는 cygwin을 열고 다음 중 하나를 수행하여 설정합니다.

    export GOOGLE_APPLICATION_CREDENTIALS='/path/to/your/client_secret.json'
    

    이 세션에 대한 변수를 설정하려면 터미널에 입력하십시오.

    nano ~ / .bashrc를 입력하여 UNIX에서 .bashrc 파일을 열고 해당 행이 표시되면 사용자 별명 아래에이 행을 추가하십시오.

    GOOGLE_APPLICATION_CREDENTIALS="/full/path/to/your/client_secret.json"
    

    그런 다음 source ~ / .bashrc를 입력하여 다시로드하고 echo $ GOOGLE_APPLICATION_CREDENTIALS를 시도하여 설정이 올바른지 확인하십시오. 그것이 경로를 반환하면, 당신은 좋다.

  2. ==============================

    2.첫째 - 코드를 보내 주셔서 감사합니다. 이것은 매우 유용합니다. 또한 환경 변수를 직접 코드에 추가하는 방법을 제안합니다. 작업하는 모든 환경에 환경 변수를 설정하지 않는 것이 좋습니다. 다음 코드를 사용할 수 있습니다.

    첫째 - 코드를 보내 주셔서 감사합니다. 이것은 매우 유용합니다. 또한 환경 변수를 직접 코드에 추가하는 방법을 제안합니다. 작업하는 모든 환경에 환경 변수를 설정하지 않는 것이 좋습니다. 다음 코드를 사용할 수 있습니다.

    import os
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path_to_your_.json_credential_file"
    

    다른 자격 증명이 필요한 다른 프로젝트로 전환 할 때 유용합니다.

  3. ==============================

    3.BigQuery에 대해 잘 모르겠지만 저장을 위해 Google Data Store를 사용하고 있습니다. Mac에 gcloud SDK를 설치했다면이 명령을 실행 해보십시오.

    BigQuery에 대해 잘 모르겠지만 저장을 위해 Google Data Store를 사용하고 있습니다. Mac에 gcloud SDK를 설치했다면이 명령을 실행 해보십시오.

    gcloud auth application-default login
    
  4. ==============================

    4.오류 메시지 (https://developers.google.com/identity/protocols/application-default-credentials)에 제공된 링크는 JSON 서비스 자격 증명이 포함 된 오류를 가리 키도록 환경 변수를 설정합니다. 파이썬 변수를 설정 한 것 같습니다. 터미널의 환경 변수가 올바른 파일을 가리 키도록 설정하십시오.

    오류 메시지 (https://developers.google.com/identity/protocols/application-default-credentials)에 제공된 링크는 JSON 서비스 자격 증명이 포함 된 오류를 가리 키도록 환경 변수를 설정합니다. 파이썬 변수를 설정 한 것 같습니다. 터미널의 환경 변수가 올바른 파일을 가리 키도록 설정하십시오.

    다른 방법으로는 oauth2client.client.SignedJwtAssertionCredentials와 같이 GCE 컨테이너에서 실행하지 않을 때 다른 인증 정보를 명시 적으로 사용하고 클라이언트 비밀 번호를 직접 지정하여 환경 변수를 통해 간접적으로 처리 할 필요가 없습니다.

  5. ==============================

    5.참고 : oauth2client는 GoogleCredentials.get_application_default () 대신 google.auth.default ()를 사용할 수 있습니다. 먼저 다음과 같이 패키지를 설치하십시오.

    참고 : oauth2client는 GoogleCredentials.get_application_default () 대신 google.auth.default ()를 사용할 수 있습니다. 먼저 다음과 같이 패키지를 설치하십시오.

    pip install google-auth
    

    귀하의 특정 예제에서 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'])
    

    이 자격 증명 파일은 현재와 같이 googleapiclient.discovery.build에 전달하거나 google-cloud-bigquery 라이브러리를 사용하는 경우 google.cloud.bigquery.Client 생성자에 자격 증명을 전달할 수 있습니다.

  6. ==============================

    6.그것은 환경 변수를 찾고 있습니다. 하지만 응용 프로그램 기본 자격 증명을 사용하여 Windows 플랫폼에서이 문제를 해결할 수있었습니다.

    그것은 환경 변수를 찾고 있습니다. 하지만 응용 프로그램 기본 자격 증명을 사용하여 Windows 플랫폼에서이 문제를 해결할 수있었습니다.

    내가 따라야 할 단계 :

    오류를 해결하는 데 도움이되었습니다.

  7. ==============================

    7.GOOGLE_APPLICATION_CREDENTIALS C #의 오류 해결책이 없습니다.

    GOOGLE_APPLICATION_CREDENTIALS C #의 오류 해결책이 없습니다.

    System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS",@"C:\apikey.json");
    string Pathsave = System.Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");
    
  8. ==============================

    8.환경 변수를 설정하지 않고 다른 자격 증명 파일을 사용하려면 다음 코드를 사용할 수 있습니다.

    환경 변수를 설정하지 않고 다른 자격 증명 파일을 사용하려면 다음 코드를 사용할 수 있습니다.

    from oauth2client import service_account
    from apiclient.discovery import build
    import json
    
    client_credentials = json.load(open("<path to .json credentials>"))
    
    credentials_token = service_account._JWTAccessCredentials.from_json_keyfile_dict(client_credentials)
    
    bigquery_service = build('bigquery', 'v2', credentials=credentials_token)
    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']))
    
  9. from https://stackoverflow.com/questions/35159967/setting-google-application-credentials-for-bigquery-python-cli by cc-by-sa and MIT license