我如何使用BigQuery补丁?

时间:2013-06-13 22:42:07

标签: google-bigquery

在BigQuery API文档中,有一个名为patch的方法。我希望我可以用它来改变现有表的模式。不幸的是,bq不支持它。但根据他们的网站,你可以在https://developers.google.com/bigquery/docs/reference/v2/tables/patch试试。但是当我尝试它时发送以下请求:

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补丁来改变表格的例子,以及它实际可以做什么的描述吗?

1 个答案:

答案 0 :(得分:12)

TLDR :您需要在修补程序请求的正文中提供完整的架构,而不仅仅是您尝试添加的字段。后端错误可能是由该数组中的空字段引起的。


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

update方法将表资源替换为您提供的新资源。在您想要获取现有表资源,修改它,然后将修改后的表资源完整地发布回BigQuery的情况下,此方法很有用。 (但请注意,对象的某些字段(如creationTime)被视为不可变,因此将忽略为这些字段提供的新值。)

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

由于您尝试更新的架构包含一个字段数组,并且由于补丁方法会更新数组批量,因此补丁对象需要包含所需字段的完整数组。 (您无法通过在修补程序对象中指定单字段数组来添加字段。)

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

最后,后端错误是我们的问题,可能是您请求中两个空架构字段的结果。我们将进一步挖掘并希望改进未来的错误信息。