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)
ただし、このコードを端末から実行すると、次のエラーが表示されます。
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
を設定しようとしました。ただし、エラーは引き続き発生します。誰が問題が何であるか知っていますか?
前もって感謝します。
最初に-コードをありがとう-これは非常に有用であることが提供されました。また、作業中のすべての環境に設定しないように、環境変数の設定をコードに直接追加することをお勧めします。次のコードを使用できます。
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path_to_your_.json_credential_file"
これは、異なる資格情報を必要とする異なるプロジェクト間で切り替えるときに役立ちます。
pythonスクリプト内の変数ではなく、ローカルUNIX(または他の)環境内の環境変数を探しています。
端末またはcygwinを開き、次のいずれかを実行して設定します。
export GOOGLE_APPLICATION_CREDENTIALS='/path/to/your/client_secret.json'
これを端末に入力して、このセッションだけの変数を設定します
UNIXでnano〜/ .bashrcと入力して.bashrcファイルを開き、そのヘッダーが表示されたら、ユーザー固有のエイリアスの下に次の行を追加します。
GOOGLE_APPLICATION_CREDENTIALS="/full/path/to/your/client_secret.json"
次に、source〜/ .bashrcと入力してリロードし、echo $GOOGLE_APPLICATION_CREDENTIALS
を試して設定されていることを確認します。それがパスを返す場合、あなたは大丈夫です。
BigQuery
についてはわかりませんが、保存にGoogle Data Store
を使用しています。 Macにgcloud sdk
をインストールした場合、このコマンドを実行してみてください。
gcloud auth application-default login
注: 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
library 、資格情報を google.cloud.bigquery.Client コンストラクターに渡します。
エラーメッセージで提供されているリンク https://developers.google.com/identity/protocols/application-default-credentials は、環境変数を設定するよう指示していますJSONサービス資格情報を含む失敗を指すようにします。 Python変数を設定しているようです。正しいファイルを指すように端末の環境変数を設定してみてください。
別の方法として、GCEコンテナで実行していないときに、oauth2client.client.SignedJwtAssertionCredentials
とクライアントシークレットを直接ポイントするので、環境変数を介して間接的に行う必要はありません。
環境変数を設定せずに異なる資格情報ファイルを使用する場合は、次のコードを使用できます。
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']))
環境変数を探しています。しかし、Windowsプラットフォームでは、アプリケーションの既定の資格情報を使用してこの問題を解決できました。
私が従った手順:
gcloud init
ステップを実行して、必要に応じて変更できるデフォルトの資格情報とデフォルトのプロジェクトを指定します。 gcloud
実行可能ファイルは、Google SDKのインストールを選択したbin
ディレクトリに配置できます。C:\Users\"yourusername"\AppData\Roaming\gcloud\legacy_credentials\"youremail"
でチェックインできます。そこにJSON形式で保存された資格情報があります。エラーの解決に役立ちました。
GOOGLE_APPLICATION_CREDENTIALSが見つかりませんC#のエラーソリューション
System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS",@"C:\apikey.json");
string Pathsave = System.Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");