在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补丁来改变表格的例子,以及它实际可以做什么的描述吗?
答案 0 :(得分:12)
TLDR :您需要在修补程序请求的正文中提供完整的架构,而不仅仅是您尝试添加的字段。后端错误可能是由该数组中的空字段引起的。
BigQuery的API允许以两种方式更新表(和其他资源):更新和补丁。
update方法将表资源替换为您提供的新资源。在您想要获取现有表资源,修改它,然后将修改后的表资源完整地发布回BigQuery的情况下,此方法很有用。 (但请注意,对象的某些字段(如creationTime)被视为不可变,因此将忽略为这些字段提供的新值。)
patch方法仅替换您在请求中包含的字段,并保持资源的其余部分不变。如果要对一个字段进行单独更改而不必担心其余字段,则此方法很有用。此算法以递归方式应用于任何嵌套对象,但不应用于嵌套数组。换句话说,随请求一起发送的补丁资源将与现有资源递归合并,直到遇到数组或标量值,此时补丁对象中的数组或值将替换现有资源中的数组或值。
由于您尝试更新的架构包含一个字段数组,并且由于补丁方法会更新数组批量,因此补丁对象需要包含所需字段的完整数组。 (您无法通过在修补程序对象中指定单字段数组来添加字段。)
请注意,表ID在请求URL中给出,因此不需要包含在对象本身中。
最后,后端错误是我们的问题,可能是您请求中两个空架构字段的结果。我们将进一步挖掘并希望改进未来的错误信息。