1

이 질문은 필자의 이전 질문에 대한 후속 작업으로 here을 찾을 수 있습니다. 발생한 인코딩 오류를 처리 한 후 새로운 HttpError 401 문제가 발생했습니다. 내 dev에 애플리케이션 서버 로그에서 추적은 다음과 같습니다 : HttpError 401 CloudStorage 파이프 라인을 통해 BigQuery URL에 액세스하려고 시도합니다.

ERROR 2012-12-20 03:10:46,312 pipeline.py:2237] Generator main.CloudStorageToBigQuery(*([u'/gs/jibdancsvtest/Datastore Mapper main.streamdata-1582389642294FE5DBBCE-output'],), **{})#2d3dba4f4a5211e2bf0ac3cee1488e47 raised exception. HttpError: <HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/1093XXXXXXXXX/jobs?alt=json returned "Invalid Credentials"> 
Traceback (most recent call last): 
    File "C:\Users\Tank\Documents\Aptana Studio 3 Workspace\jibdantest-bq\mapreduce\lib\pipeline\pipeline.py", line 2030, in evaluate 
    self, pipeline_key, root_pipeline_key, caller_output) 
    File "C:\Users\Tank\Documents\Aptana Studio 3 Workspace\jibdantest-bq\mapreduce\lib\pipeline\pipeline.py", line 1064, in _run_internal 
    return self.run(*self.args, **self.kwargs) 
    File "C:\Users\Tank\Documents\Aptana Studio 3 Workspace\jibdantest-bq\main.py", line 77, in run 
    result.execute() 
    File "C:\Users\Tank\Documents\Aptana Studio 3 Workspace\jibdantest-bq\oauth2client\util.py", line 120, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "C:\Users\Tank\Documents\Aptana Studio 3 Workspace\jibdantest-bq\apiclient\http.py", line 678, in execute 
    raise HttpError(resp, content, uri=self.uri) 
HttpError: <HttpError 401 when requesting https://www.googleapis.com/bigquery/v2/projects/1093XXXXXXXXX/jobs?alt=json returned "Invalid Credentials"> 

나는 또한 내가 URL에서 JSON 응답을 게시 할 거라고 생각했다. 여기에 유래 내 앞의 질문에 대한 링크를 따라 가면

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "required", 
    "message": "Login Required", 
    "locationType": "header", 
    "location": "Authorization" 
    } 
    ], 
    "code": 401, 
    "message": "Login Required" 
} 
} 

, 당신은 모든 것을 실행 내 main.py 파일의 코드를 찾을 수 있습니다 : 여기에 JSON이다. 하지만 여기에 다시 게시해야한다면 그렇게 할 수 있습니다.

그래서 저는 이것이 OAuth 문제라고 생각합니다. 그러나 나는 그 모든 것을 올바르게 설정했다고 생각합니다. 내가 할 수있는 다른 일에 대한 제안/조사는 훌륭 할 것입니다.

Many Thanks in Advance.

답변

1

작업을 실행할 수있는 올바른 권한이 있는지 확인하는 것이 좋습니다. 우리는 비슷한 문제를 겪었고 우리가 작업을 수행하기 위해 소유자의 허가가 필요하다는 것을 알았습니다.

희망이 있습니다. 로컬 dev에 서버에서 실행하면

+0

감사합니다. 나는 그것을 시도했지만 여전히 같은 문제가있다. 그러나 GAE, 클라우드 저장소 및 BigQuery가 함께 작동하는 방식을 살펴볼 수있는 아이디어가있었습니다. 바라기를 나는 나 자신의 질문에 대답 할 수 있었다는 것을 나중에보고 할 수있다 :) –

2

, 당신은 다른 자격 증명을 설정해야합니다

은 첫째, 당신은 설치에 로컬 자격 증명 저장소가 필요합니다. 여기에서 get_refresh_token.py를 사용하십시오. https://codereview.appspot.com/5362041/diff/1/samples/oauth2cmdline/get_refresh_token.py

Google API 콘솔에서 웹 응용 프로그램의 클라이언트 ID를 설정하고 위의 스크립트에 매개 변수를 전달합니다 (OAuth2 인증을 위해 브라우저로 실행 됨). 그러면 인증 된 요청에 대해 API 클라이언트에 전달할 수있는 자격증 명으로 로컬 파일이 생성됩니다.

from oauth2client.client import Storage, Credentials 
from oauth2client.appengine import AppAssertionCredentials 

class FileStorage(Storage): 
    def __init__(self, filepath): 
     self._filepath = filepath 

    def locked_get(self): 
     with open(self._filepath, 'r') as f: 
      json = f.read() 
     credentials = Credentials.new_from_json(json) 
     return credentials 

if not os.environ.get('SERVER_SOFTWARE', '').startswith('Development'): 
    credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/bigquery') 
else: 
    filepath = #Path to credentials file here 
    storage = FileStorage(filepath) 
    credentials = storage.get() 

희망이 있습니다.

+0

많은 감사. 이전에 로컬 dev 서버에서 자격 증명을 사용하여이 해결 방법을 보지 못했습니다. 필자는 코드를 프로덕션에 업로드하고 필수 환경에서 테스트해야한다고 생각했습니다. 나는 이것을 확실히 시도해보고 내가 어디에서 왔는지 알려 줄 것이다. –

+0

BigQuery와 상호 작용할 때이 방법을 사용하여 개발할 수 있도록이 방법을 사용합니다. 그러나 현재 Google Storage에 글을 쓸 수는 없습니다. 이미 Google Storage에 데이터가 있고 BigQuery가 데이터를 상호 작용하게하려면 그렇게 할 수 있습니다. – someone1

관련 문제