Google bigquery 如何使用BigQuery修补程序?

Google bigquery 如何使用BigQuery修补程序?,google-bigquery,Google Bigquery,在BigQueryAPI文档中有一个名为patch的方法。我希望可以使用它来改变现有表的模式。不幸的是,bq不支持它。但根据他们的网站,你可以在。但是,当我尝试时,它会发送以下请求: PATCH https://www.googleapis.com/bigquery/v2/projects/(my project id)/datasets/tmp_bt/tables/change_cols?key={YOUR_API_KEY} Content-Type: application/json A

在BigQueryAPI文档中有一个名为patch的方法。我希望可以使用它来改变现有表的模式。不幸的是,bq不支持它。但根据他们的网站,你可以在。但是,当我尝试时,它会发送以下请求:

PATCH https://www.googleapis.com/bigquery/v2/projects/(my project id)/datasets/tmp_bt/tables/change_cols?key={YOUR_API_KEY}

Content-Type:  application/json
Authorization:  Bearer (removed)
X-JavaScript-User-Agent:  Google APIs Explorer

{
 "schema": {
  "fields": [
   {
   },
   {
   },
   {
    "mode": "nullable",
    "name": "gotchahere",
    "type": "string"
   }
  ]
 }
}
(我不知道空元素从何而来,编辑器太难使用,无法直接粘贴到我现有的表定义中。我注意到它缺少必需的元素,如我的项目ID,我希望包含这些元素,因为它们是表单中必需的),然后我得到了响应:

cache-control:  private, max-age=0
content-encoding:  gzip
content-length:  122
content-type:  application/json; charset=UTF-8
date:  Thu, 13 Jun 2013 22:22:09 GMT
expires:  Thu, 13 Jun 2013 22:22:09 GMT
server:  GSE

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "backendError",
    "message": "Backend Error"
   }
  ],
  "code": 503,
  "message": "Backend Error"
 }
}
这是完全无用的。我做了一个网络搜索,但没有找到任何使用它的例子


有谁能给我一个使用BigQuery补丁修改表的例子,以及它实际可以做什么的描述吗?

TLDR:您需要在补丁请求的主体中提供完整的模式,而不仅仅是您试图添加的字段。后端错误可能是由该数组中的空字段引起的


BigQuery的API允许以两种方式更新表(和其他资源):更新和修补

该方法使用您提供的新资源替换表资源。如果您希望获取现有表资源,对其进行修改,然后将修改后的表资源全部发布回BigQuery,则此方法非常有用。(但是,请注意,对象的某些字段(如creationTime)被视为不可变的,因此将忽略为这些字段提供的新值。)

该方法仅替换您在请求中包含的字段,并保持资源的其余部分不变。如果您希望对一个字段进行单独更改而不必担心其他字段,则此方法非常有用。此算法递归应用于任何嵌套对象,但应用于嵌套数组。换句话说,随请求发送的修补程序资源将与现有资源递归合并,直到遇到数组或标量值,此时修补程序对象中的数组或值将替换现有资源中的数组或值

由于您尝试更新的架构包含一个字段数组,并且由于patch方法批量更新数组,因此您的patch对象需要包含您希望在结果架构中包含的完整字段数组。(不能通过在面片对象中指定一个字段数组来添加字段。)

请注意,表ID是在请求URL中给出的,因此它不需要包含在对象本身中


最后,后端错误是我们这边的一个问题,可能是请求中两个空模式字段的结果。我们将进一步挖掘并希望在将来改进错误消息。

根据更新方法,我们也应该做同样的事情。这方面的例子也同样有效。几个问题。更改字段时,现有字段会发生什么变化?名字匹配吗?它是否有可能重命名它们?如果类型不匹配怎么办?还有一个无关的性能问题。假设我有一系列的活动。当我查询它时,我总是希望限制时间范围,并具有随机的其他条件(活动类型、用户等)。所以我会把所有的时间都放在桌子上,但只想要一天、一周或一个月。有什么技巧可以使这种使用模式更有效吗?模式更新只允许您附加字段或放松字段模式(例如,必需->可选)。您不能更改字段名或类型,也不能对其重新排序。您无法针对您的访问模式优化单个表(这是我们的工作)。但是,您可以做的一件事是按日期分割表,并只查询包含您关心的日期的表。这种方法还可以为您节省资金,因为您不必扫描每个查询中的所有数据。既然我得到了您的关注,您是否有可能添加更好的错误消息?现在,我在一个API调用中面临“缺少必需的参数”,但我不知道该插入哪个参数,或者在哪里插入它。只要给我起个名字就很有意思了。