2016-02-02 12 views
6

Sto provando a connettermi a Google BigQuery tramite l'API BigQuery, utilizzando Python.Impostazione di GOOGLE_APPLICATION_CREDENTIALS per la CLI BigQuery Python

che sto seguendo questa pagina qui: https://cloud.google.com/bigquery/bigquery-api-quickstart

Il mio codice è il seguente:

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) 

Tuttavia, quando si esegue questo codice attraverso il terminale, ottengo il seguente errore:

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. 

Come si può vedere nel codice, ho provato a impostare il GOOGLE_APPLICATION_CREDENTIALS come da collegamento nell'errore. Tuttavia, l'errore persiste. Qualcuno sa qual è il problema?

Grazie in anticipo.

risposta

1

Il collegamento fornito nel messaggio di errore, https://developers.google.com/identity/protocols/application-default-credentials, dice di impostare la variabile di ambiente in modo che punti al guasto che contiene le credenziali del servizio JSON. Sembra che tu abbia impostato una variabile Python. Prova a impostare la variabile di ambiente del terminale in modo che punti al file corretto.

Un'alternativa sarebbe utilizzare esplicitamente alcune altre credenziali quando non si esegue in un contenitore GCE, come oauth2client.client.SignedJwtAssertionCredentials e indirizzare direttamente al client segreto in modo da non dover indirettamente tramite una variabile di ambiente.

8

Cerca la variabile di ambiente nell'ambiente locale UNIX (o altro), non una variabile nel tuo script python.

quando si imposta che aprendo il terminale o Cygwin e fare una delle seguenti opzioni:

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

Type che nel vostro terminale per impostare la variabile solo per questa sessione

Aprite il vostro file .bashrc, in UNIX digitando nano ~/.bashrc e aggiungere questa riga ad essa sotto gli alias specifici dell'utente se si vede che intestazione:

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

Poi ricaricarlo digitando Sourc e ~/.bashrc e conferma che è impostato provando echo $GOOGLE_APPLICATION_CREDENTIALS. Se restituisce il percorso, sei bravo.

+0

grazie funziona. – geekidharsh

0

Cerca la variabile di ambiente. Ma sono stato in grado di risolvere questo problema sulla piattaforma Windows utilizzando le credenziali predefinite dell'applicazione.

passaggi che ho seguito:

  • installato Google SDK
  • Quindi eseguire gcloud init passi per specificare le mie credenziali e le impostazioni predefinite del progetto di default che è possibile modificare come e quando necessario. L'eseguibile gcloud può essere estratto nella directory bin in cui è stato scelto di installare Google SDK.
  • Dopo aver fornito correttamente le credenziali, è possibile effettuare il check-in nella posizione C:\Users\"yourusername"\AppData\Roaming\gcloud\legacy_credentials\"youremail" . Puoi trovare le credenziali archiviate nel formato JSON lì.

Mi ha aiutato a risolvere l'errore.

11

Prima - Grazie per il codice - questo ha fornito di essere molto utile. Ti suggerisco inoltre di aggiungere l'impostazione della variabile ambientale direttamente nel tuo codice, in quanto non devi impostarla per tutti gli ambienti su cui lavori. è possibile utilizzare il seguente codice:

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

ho trovato questo utile quando si passa da diversi progetti che richiedono credenziali diverse.

0

Se si desidera utilizzare diversi file di credenziali senza impostare la variabile d'ambiente, è possibile utilizzare il seguente codice:

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'])) 
3

io non sono sicuro di BigQuery, ma sto usando Google Data Store per il salvataggio. Se avete installato gcloud sdk nel vostro Mac, è possibile provare a eseguire questo comando

gcloud auth application-default login 
+0

Grazie! Questa è l'unica cosa che ha funzionato per me! – mountainclimber

0

GOOGLE_APPLICATION_CREDENTIALS errore non trovato soluzione per C#

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