-1

テーブルにデータを挿入するためにBigQueryのinsert APIを呼び出したPythonスクリプトを作成しました。 OAuth認証のサービスアカウントを使用します。数日間は正常に機能しましたが、今はLogin Requiredエラー(401)が表示されます。され、次のコード:ログインサービスアカウントを使用してエラーが発生しましたGoogle BigQuery API

scopes = ['https://www.googleapis.com/auth/bigquery'] 

credentials =ServiceAccountCredentials.from_json_keyfile_name('/home/ubuntu/aha/udofy.json', scopes=scopes) 

service = discovery.build('bigquery', 'v2', credentials=credentials) 

job_body = { } #Body JSON 

request = service.jobs().insert(projectId=projectId, body=job_body) 

response = request.execute() 

私はUI上のジョブログをチェックしたときに、私は次のエラーを参照してください。

{ 

"error": { 

"errors": [ 
    { 

    "domain": "global", 
    "reason": "required", 
    "message": "Login Required", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 

    "code": 401, 

    "message": "Login Required" 

} 

} 

APIレスポンス

{u'configuration': {u'query': {u'createDisposition': u'CREATE_IF_NEEDED', 
           u'destinationTable': {u'datasetId': u'co_gradeup_android_ANDROID', 
                u'projectId': u'udofy-1021', 
                u'tableId': u'user_answer_attempts'}, 
           u'query': u' SELECT user_dim.user_id as user_id, event_dim.params.value.string_value as post_id, DATE(USEC_TO_TIMESTAMP(event_dim.timestamp_micros)) as attempt_date, count(*) as attempt_count FROM [udofy-1021:co_gradeup_android_ANDROID.app_events_20161101] WHERE event_dim.name =\'Answer_Selected\' and event_dim.params.key = \'postId\' and user_dim.user_id is not null and user_dim.user_id != "" group by 1,2,3 ', 
           u'writeDisposition': u'WRITE_APPEND'}}, 
u'etag': u'', #User_etag 
u'id': u'', #User_Id 
u'jobReference': {u'jobId': u'job_C9kSTaEOQBw0VPBEF_Yj44C0-Us', 
        u'projectId': u'udofy-1021'}, 
u'kind': u'bigquery#job', 
u'selfLink': u'https://www.googleapis.com/bigquery/v2/projects/udofy-1021/jobs/job_C9kSTaEOQBw0VPBEF_Yj44C0-Us', 
u'statistics': {u'creationTime': u'1478082742163', 
       u'startTime': u'1478082742420'}, 
u'status': {u'state': u'RUNNING'}, 
u'user_email': u''} #service_account_email 

答えて

0

問題は、ジョブ本体のクエリの出力スキーマ/形式が、データが挿入API経由で挿入されていた表のスキーマと一致しないことでした。ジョブ本体で実行されたクエリにマイナーな変更がありました。クエリの

出力形式は、出力データにテーブルスキーマとしてまったく同じであるべきで挿入しなければなりません。

0

サービスアカウントのdoesn問題の大きなクエリプロジェクトにアクセスする権限がありません。サービスアカウントはあなたではなく、事前認証が必要です。

他のユーザーにプロジェクトへのアクセスを許可することはできますが、サービスアカウントの電子メールアドレスを使用してユーザーとして追加できるかどうかは考えられません。

これはサービスアカウントコードの動作に左右されます。私のpythonのスキルが限られている私はその権利を引き受ける必要があります。

+0

サービスアカウントの電子メールアドレスは、すでにエディタ権限を持つプロジェクトユーザのダッシュボードに追加されています。今日まで正常に動作していたため、OAuthトークンの期限切れになることはありますか? – Prabhjot

+0

サービスアカウントはアクセス権があり、Google開発者用コンソールでプロジェクトが削除されていないか再生されていない限り期限切れになりません。 – DaImTo

+0

どちらも起こらなかった。別のローカルサーバー上でコードを実行しています。違いがありますか? – Prabhjot

関連する問題