是否可以将新字段添加到bigquery中RECORD类型的现有字段?例如,如果我当前的模式是:
{u'fields': [{u'mode': u'NULLABLE', u'name': u'test1', u'type': u'STRING'},
{u'fields': [{u'mode': u'NULLABLE',
u'name': u'field1',
u'type': u'STRING'}],
u'mode': u'NULLABLE',
u'name': u'recordtest',
u'type': u'RECORD'}]}
我可以改变它添加字段"field2"recordtest?所以新的模式看起来像:
{u'fields': [{u'mode': u'NULLABLE', u'name': u'test1', u'type': u'STRING'},
{u'fields': [{u'mode': u'NULLABLE',
u'name': u'field1',
u'type': u'STRING'},
{u'mode': u'NULLABLE',
u'name': u'field2',
u'type': u'STRING'}],
u'mode': u'NULLABLE',
u'name': u'recordtest',
u'type': u'RECORD'}]}
我无法从UI中找到这样做的方法。但是我可以使用API来完成。
这完全可以在UI中使用各自的API explorer完成
首先,需要获取表的模式。您可以使用表来实现这一点。获取API资源管理器。确保在fields
框中选择/选中模式(最好不选中其余部分)。单击"Authorize and Execute
"。完成后-复制响应文本-它将看起来像下面的
{
"schema": {
"fields": [
{
"name": "id",
"type": "STRING",
"mode": "NULLABLE"
},
...
{
"name": "comment",
"type": "STRING",
"mode": "NULLABLE"
}
]
}
}
然后,使用Tables。patch API Explorer
将所需的字段添加到先前检索的模式中,并将其原样粘贴到Patch Body
框中(选择此框右上角的自由格式编辑器,并将其中的任何内容替换为模式文本)。再次点击Authorize and Execute
你现在完成了。
注意,无论将新字段放在记录的哪个位置,它都会被添加到该记录字段
顺便说一句,您也可以使用独立的浏览器
Services> BigQuery API v2
我们这里用的是bigquery.jobs.get
和bigquery.tables.patch
您也可以使用gcloud命令行工具中的bigquery CLI工具。我发现这种方法更简单,因为需要添加到请求中的信息更少。您不需要访问令牌或API密钥,因为您的会话已经建立。你可以在这里找到你需要知道的一切,但最基本的是:
bq show --schema --format=prettyjson YOUR_PROJECT_ID:YOUR_DATASET.YOUR_TABLE_NAME > schema_file.json
然后修改模式文件以添加新的嵌套字段。
然后运行:bq update YOUR_PROJECT_ID:YOUR_DATASET.YOUR_TABLE_NAME schema_file.json