我如何使用BigQuery补丁?

bti*_*lly 6 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"
   }
  ]
 }
}
Run Code Online (Sandbox Code Playgroud)

(我不知道空元素来自哪里,并且编辑器太难以用来粘贴我现有的表定义.我注意到它缺少必需的元素,比如我的项目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"
 }
}
Run Code Online (Sandbox Code Playgroud)

这完全没用.我已经完成了网络搜索,但没有找到任何正在使用的示例.

任何人都可以给我一个使用BigQuery补丁来改变表格的例子,以及它实际可以做什么的描述?

Jer*_*dit 12

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


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

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

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

由于您尝试更新的模式包含一个字段数组,并且由于patch方法更新了数组批发,因此您的补丁对象需要包含您在结果模式中需要的完整字段数组.(您无法通过在修补程序对象中指定单字段数组来添加字段.)

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

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