Définition de GOOGLE_APPLICATION_CREDENTIALS pour la CLI BigQuery Python
Je suis en train d'essayer de se connecter à Google BigQuery par le biais de la BigQuery de l'API, à l'aide de Python.
Je suis la suite de cette page ici:
https://cloud.google.com/bigquery/bigquery-api-quickstart
Mon code est comme suit:
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)
Cependant, lorsque j'exécute ce code dans le terminal, j'obtiens l'erreur suivante:
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.
Comme vous pouvez le voir dans le code, j'ai essayé de définir le GOOGLE_APPLICATION_CREDENTIALS
que par le lien dans le message d'erreur. Cependant, l'erreur persiste. Personne ne sait ce qu'est la question?
Vous en remercie d'avance.
source d'informationauteur Colin
Vous devez vous connecter pour publier un commentaire.
Il est à la recherche de la variable d'environnement dans votre local UNIX (ou autres) de l'environnement, et non pas une variable dans votre script python.
Vous devez mettre la valeur que par l'ouverture de votre terminal ou cygwin et en effectuant l'une des opérations suivantes:
Tapez dans votre terminal pour définir la variable est uniquement pour cette session
Ouvrir votre .bashrc fichier sous UNIX en tapant dans les nano ~/.bashrc et ajouter cette ligne en dessous spécifique à l'utilisateur, alias si vous voyez que l'en-tête:
Puis rechargez-la en tapant source ~/.bashrc et confirmer que c'est en essayant
echo $GOOGLE_APPLICATION_CREDENTIALS
. Si elle renvoie le chemin d'accès, vous êtes bon.Premier - Merci pour le code fourni pour être très utile.
Je vous suggère aussi d'ajouter définissant la variable d'environnement directement dans votre code - de ne pas le définir pour chaque environnement de travail.
vous pouvez utiliser le code suivant:
J'ai trouvé ce utile lors de la commutation entre les différents projets qui nécessitent des informations d'identification différentes.
Je ne suis pas sûr
BigQuery
mais je suis en utilisantGoogle Data Store
pour l'enregistrement. Si vous avez installégcloud sdk
dans votre mac, vous pouvez essayer d'exécuter cette commandeLe lien fourni dans le message d'erreur, https://developers.google.com/identity/protocols/application-default-credentialsindique définir la variable d'environnement à point à l'échec qui contient le JSON informations d'identification du service. Il semble que vous définissez une variable Python. Essayez de régler votre terminal est variable d'environnement pour pointer sur le fichier correct.
Une alternative serait d'utiliser de manière explicite certaines autres informations d'identification lorsque vous n'êtes pas en cours d'exécution dans un GCE conteneur, comme
oauth2client.client.SignedJwtAssertionCredentials
et de pointer directement à votre client de secrets, de sorte que vous n'avez pas à indirects par le biais d'une variable d'environnement.Il est à la recherche de la variable d'environnement. Mais j'ai été en mesure de résoudre ce problème sur la plate-forme Windows en utilisant l'Application informations d'Identification par Défaut.
Étapes que j'ai suivi:
gcloud init
suit pour spécifier mes valeurs par défaut des informations d'identification et de projet par défaut que vous pouvez modifier en cas de besoin.gcloud
exécutable peut être située dans lebin
répertoire où vous avez choisi d'installer Google SDK.C:\Users\"yourusername"\AppData\Roaming\gcloud\legacy_credentials\"youremail"
. Vous pouvez trouver les informations d'identification stockées dans le format JSON.
Il m'a aidé à résoudre l'erreur.
Remarque: oauth2client est obsolèteau lieu de
GoogleCredentials.get_application_default()
vous pouvez utiliser google.auth.par défaut(). Installer le package d'abord avec:Dans votre exemple, je vois que vous savez où le fichier JSON est situé à partir de votre code. Au lieu des informations d'identification par défaut (à partir de variables d'environnement), vous pouvez utiliser un compte de service directement avec le google.oauth2.service_account module.
Vous pouvez utiliser ces références de fichier que vous êtes en train de faire, donc en passant à googleapiclient.de la découverte.construire ou si vous utilisez le
google-cloud-bigquery
de la bibliothèquetransmettre les informations d'identification de la google.le cloud.bigquery.Client constructeur.Si vous souhaitez utiliser différents fichiers d'informations d'identification, sans réglage de la variable d'environnement, vous pouvez utiliser le code suivant:
GOOGLE_APPLICATION_CREDENTIALS PAS TROUVÉ D'ERREUR SOLUTION POUR C#