#google-bigquery
#google-bigquery
Вопрос:
Можно ли добавить новое поле к существующему полю типа ЗАПИСИ в bigquery? Так, например, если моя текущая схема :
{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'}]}
Я не смог найти способ сделать это из пользовательского интерфейса. Но я смог сделать это с помощью API.
Ответ №1:
Это можно сделать полностью из пользовательского интерфейса, используя соответствующие средства поиска API
Во-первых, вам нужно получить схему вашей таблицы. Вы можете сделать это с помощью Tables.get API Explorer. Убедитесь, что вы выбрали / установите флажок схема в 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
Теперь вы закончили.
Обратите внимание, что независимо от того, где вы разместили свое новое поле в записи — оно будет добавлено в конец полей этой записи
Кстати, в качестве альтернативы вы можете использовать автономные средства поиска
Сервисы> BigQuery API v2
Те, которые мы использовали здесь bigquery.jobs.get
, и bigquery.tables.patch
Комментарии:
1. Спасибо! Я совершенно забыл о проводнике. Есть ли какой-либо способ сделать это из bigquery.cloud.google.com Пользовательский интерфейс?
2. похоже, что нет! у него есть
Add New Fields
кнопка внизу страницы схемы таблицы, но, похоже, она позволяет добавлять новое поле только в корень
Ответ №2:
Вы также можете использовать инструмент командной строки bigquery, который входит в состав инструмента командной строки gcloud. Я нашел этот маршрут проще, потому что в запросе меньше информации для добавления. Вам не нужен токен доступа или ключ 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
Комментарии:
1. это просто здорово … чище, приятнее и намного быстрее, чем описано выше. Спасибо, что поделились