Google bigquery 使用POST插入googlebigquery

Google bigquery 使用POST插入googlebigquery,google-bigquery,Google Bigquery,我正在尝试使用POST请求将数据插入BigQuery表。 我的应用程序以指定格式创建要请求的正文: --xxx Content-Type: application/json; charset=UTF-8 { "configuration": { "load": { "sourceFormat": "NEWLINE_DELIMITED_JSON" }, "destinationTable": { "pro

我正在尝试使用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"
 }
}

我不知道缺少了什么参数。文档中唯一需要的参数是,但我希望从请求体而不是从GS加载数据。

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

'configuration': {
  'load': {
    'sourceFormat': <required for JSON files>',
    'schema': {
      'fields': [
        {'name':'f1', 'type':'STRING'},
        {'name':'f2', type:'INTEGER'}
      ]
    },
    'destinationTable': {
      'projectId': 'projectId',
      'datasetId': 'datasetId',
      'tableId': 'tableId'
    }
  }
}
“配置”:{
“加载”:{
“sourceFormat”:”,
“架构”:{
“字段”:[
{'name':'f1','type':'STRING'},
{'name':'f2',类型:'INTEGER'}
]
},
“destinationTable”:{
“projectd”:“projectd”,
'datasetId':'datasetId',
“tableId”:“tableId”
}
}
}

此链接可能对您有所帮助:

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

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


可以在第页中看到。

我认为您缺少设置模式?我没有编写模式,因为当我们使用JSON格式的数据时,它是可选参数
{
   "configuration": {
       "load": {
           "sourceFormat": "NEWLINE_DELIMITED_JSON"
           "destinationTable": {
               "projectId": "some-id",
               "datasetId": "dataset-id",
               "tableId": "cards"
           }
       }
   }
}