2014-05-20 3 views
2

Google Cloud Storage에서 Google BigQuery 테이블로 압축 된 json 파일을으로로드하려고했습니다. Google Cloud Storage와 Google BigQuery에서 읽기/쓰기 권한을 가지고 있습니다. 또한 업로드 된 파일은 BigQuery 프로젝트와 동일한 프로젝트에 속합니다.Google Cloud Storage에 Big Query에 저장된 파일을로드하는 중 오류가 발생했습니다.

이 URL 뒤에있는 리소스 https://www.googleapis.com/upload/bigquery/v2/projects/NUMERIC_ID/jobsPOST 요청으로 액세스하면 문제가 발생합니다.

{ 
"kind" : "bigquery#job", 
"projectId" : NUMERIC_ID, 
"configuration": { 
    "load": { 
     "sourceUris": ["gs://bucket_name/document.json.gz"], 
     "schema": { 
      "fields": [ 
       { 
        "name": "id", 
        "type": "INTEGER" 
       }, 
       { 
        "name": "date", 
        "type": "TIMESTAMP" 
       }, 
       { 
        "name": "user_agent", 
        "type": "STRING" 
       }, 
       { 
        "name": "queried_key", 
        "type": "STRING" 
       }, 
       { 
        "name": "user_country", 
        "type": "STRING" 
       }, 
       { 
        "name": "duration", 
        "type": "INTEGER" 
       }, 
       { 
        "name": "target", 
        "type": "STRING" 
       } 
      ] 
     }, 
     "destinationTable": { 
      "datasetId": "DATASET_NAME", 
      "projectId": NUMERIC_ID, 
      "tableId": "TABLE_ID" 
     } 
    } 
} 

}

그러나 오류가 이해가되지 않습니다 또한 아래에서 찾을 수 있습니다 : 상기의 자원에 대한 요청의 내용은 다음과 같이 찾을 수 있습니다

{ 
    "error": { 
     "errors": [ 
      { 
       "domain": "global", 
       "reason": "invalid", 
       "message": "Job configuration must contain exactly one job-specific configuration object (e.g., query, load, extract, spreadsheetExtract), but there were 0: " 
      } 
     ], 
     "code": 400, 
     "message": "Job configuration must contain exactly one job-specific configuration object (e.g., query, load, extract, spreadsheetExtract), but there were 0: " 
    } 
} 

내가 전에 빈 테이블을 성공적으로 만들었 기 때문에 프로젝트 ID 또는 인증 헤더에있는 액세스 토큰에 문제가 있지 않음을 알고 있습니다. 또한 내용 유형 헤더가 application/json 인 것으로 지정합니다. 본문 내용이 json으로 인코딩되어야하므로 여기서는 문제라고 생각하지 않습니다. 사전에

감사

+0

요청이 괜찮아 보입니다. 스키마의 "대상"필드 끝에 여분의 쉼표가있어 API에서 작업 구성이 0이라고 생각할 수 있습니다. –

+0

고맙습니다.하지만 쉼표는 오타였습니다. 스키마에서 더 많은 요소가 삭제되어 본문을 더 간단하게 만들었 기 때문입니다. 문제는 여전히 지속됩니다. – rubioz

답변

1

귀하의 HTTP 요청 형식이 잘못되었습니다 - BigQuery에 전혀 부하 작업으로이 문제를 인식하지 못합니다. POST 요청을 조사하고 보내는 본문을 확인해야합니다.

POST 호출의 body은 위의 모든 이음새가 올바른지 확인해야합니다. 위의 Json은 한 줄에 있어야하며 멀티 파트 메시지를 수동으로 만드는 경우 각 MIME 유형의 머리글과 본문 사이에 추가 줄 바꾸기가 있어야합니다.

일종의 라이브러리를 사용하는 경우 본문이 리소스, 내용 또는 본문과 같은 다른 형식으로되어 있지 않은지 확인하십시오. 나는 이것들을 다르게 사용하는 라이브러리를 보았다.

BigQuery API 탐색기 : https://developers.google.com/bigquery/docs/reference/v2/jobs/insert을 사용해보고 요청 본문이 API에서 만든 것과 일치하는지 확인하십시오.

+2

제공된 링크를 따라 가면서 작동하는 것을 발견했습니다. 다른 점은 업로드 엔드 포인트를 사용하지 않는다는 것입니다. https://www.googleapis.com/upload/bigquery/ 대신 https://www.googleapis.com/bigquery/v2/projects/NUMERIC_ID/jobs를 사용합니다. v2/projects/NUMERIC_ID/jobs). 또한 액세스 토큰과 같아야하는''key'''라는 쿼리 매개 변수를 추가합니다. 여전히 의미가 없지만 적어도 작동합니다. 감사 – rubioz

관련 문제