0

我正在尝试使用 POST 请求将数据插入 BigQuery 表。我的应用程序创建正文以指定格式请求:

--xxx
Content-Type: application/json; charset=UTF-8

{
   "configuration": {
       "load": {
           "sourceFormat": "NEWLINE_DELIMITED_JSON"
       },
       "destinationTable": {
           "projectId": "some-id",
           "datasetId": "dataset-id",
           "tableId": "cards"
       }
   }
}
--xxx
Content-Type: application/octet-stream

{"board_id":1,"version":2,"card_id":1,"title":"Tytul kartki 1"}
--xxx--

但是当我使用以下方式发送这些数据时:

credentials = SignedJwtAssertionCredentials(
        SERVICE_ACCOUNT_EMAIL,
        key,
        scope='https://www.googleapis.com/auth/bigquery')
self.http = credentials.authorize(httplib2.Http())
headers = {'Content-Type': 'multipart/related; boundary=xxx'}
resp, content = self.http.request(url, method="POST",
                                       body=output,
                                       headers=headers)

服务器的响应是:

Status: {'date': 'Thu, 25 Jul 2013 12:49:06 GMT', 'status': '400', 'content-length': '205', 'content-type': 'application/json', 'server': 'HTTP Upload Server Built on Jul 12 2013 17:12:36 (1373674356)'}
Content: {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required parameter is missing"
   }
  ],
  "code": 400,
  "message": "Required parameter is missing"
 }
}

我不知道缺少什么参数。文档中唯一需要的参数是sourceUris但我想从请求正文而不是 GS 加载数据。

4

3 回答 3

1

我认为问题在于您缺少架构配置:

'configuration': {
  'load': {
    'sourceFormat': <required for JSON files>',
    'schema': {
      'fields': [
        {'name':'f1', 'type':'STRING'},
        {'name':'f2', type:'INTEGER'}
      ]
    },
    'destinationTable': {
      'projectId': 'projectId',
      'datasetId': 'datasetId',
      'tableId': 'tableId'
    }
  }
}

此链接可能对您有所帮助:https ://developers.google.com/bigquery/loading-data-into-bigquery

于 2013-07-25T19:24:04.037 回答
0

查看他们加载数据页面上的示例。请注意,项目 id 位于两个位置,jobData 和destinationTable。这可能是缺少参数错误的原因。

于 2013-08-07T05:41:41.500 回答
0

问题是“destinationTable”必须在“load”对象内:

{
   "configuration": {
       "load": {
           "sourceFormat": "NEWLINE_DELIMITED_JSON"
           "destinationTable": {
               "projectId": "some-id",
               "datasetId": "dataset-id",
               "tableId": "cards"
           }
       }
   }
}

可以在将数据加载到 BigQuery页面中看到。

于 2014-11-10T10:07:14.143 回答