Как добавить столбец в таблицу в Google BigQuery

Хотя потенциальные изменения, вносимые в схему таблицы в Google BigQuery, довольно ограничены, по существу есть два типа изменений, которые вам разрешено выполнять. Вы можете добавить новый столбец NULLABLEили REPEATEDстолбец или изменить существующий столбец mode(с REQUIREDна NULLABLE). Помимо этого, BigQuery не допускает многих других изменений, таких как удаление или переименование столбцов (хотя это можно выполнить косвенно, скопировав столбцы, которые вы хотите сохранить, в новую таблицу, уничтожив исходную, а затем создав таблицу замены с новыми данными. ).

А пока мы рассмотрим методы добавления нового столбца в таблицу в этом руководстве.

Добавление столбца через веб-интерфейс

Добавление столбца через BigQuery WebUI – очень простой процесс:

  • Откройте BigQuery WebUI .
  • Выберите projectdataset и наконец , table вы хотите изменить.
  • Щелкните Add New Fields кнопку.
  • Для каждого поля, которое вы хотите добавить, введите name, выберите type и измените mode (при необходимости).
  • По завершении нажмите Add to Table кнопку, чтобы завершить обновления.

Добавление вложенных записей

Для добавления более сложных схем, таких как вложенные поля в Record поле типа, щелкните +символ рядом с Record полем выбора типа. Теперь новое поле поля, которое было добавлено, будет вложено в Record поле выше.

Добавление столбца через API

Чтобы обновить таблицу и добавить новый столбец с помощью API BigQuery, у вас есть два варианта выбора метода: Tables.patch или Tables.updateTables.patch обновляет только те поля, которые добавляются / изменяются, тогда как Tables.updateзаменяет весь ресурс таблицы на новую предоставленную вами схему. Поэтому почти во всех случаях Tables.patch это предпочтительный метод.

Как и во всех вызовах API в BigQuery, ключом является правильное форматирование строки конфигурации перед ее отправкой в ​​метод API. В этом случае, вызов Tables.patch требует полной таблицы schema будет поставляться, который только содержит fields список, который представляет собой список полей , содержащих namemode и type значения.

Важно отметить, что независимо от того, добавляете ли вы столбцы или просто обновляете modesсуществующие столбцы, вы должны предоставить полную схему для вызова API.

Например, мы имеем простую melville таблицу с несколькими существующими полями: BookMeta_TitleBookMeta_DateBookMeta_CreatorBookMeta_Language, и BookMeta_Publisher. Мы хотим добавить last_updated поле TIMESTAMP type, чтобы весь наш сценарий конфигурации для API выглядел так:

{
  "schema": {
    "fields": [
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Title",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Date",
        "type": "TIMESTAMP"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Creator",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Language",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Publisher",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "last_updated",
        "type": "TIMESTAMP"
      }
    ]
  }
}

По сути, все, что мы сделали, это точно перечислили все существующие поля, а затем добавили наше новое last_updated поле внизу. После отправки через вызов патча API мы получаем ожидаемый результат:

{
 "kind": "bigquery#table",
 "etag": "\"T7tifokHjXTVbjJPVpstHNnQ7nk/MTQ2OTMyMzMyOTIxMQ\"",
 "id": "bookstore-1382:exports.melville",
 "selfLink": "https://www.googleapis.com/bigquery/v2/projects/bookstore-1382/datasets/exports/tables/melville",
 "tableReference": {
  "projectId": "bookstore-1382",
  "datasetId": "exports",
  "tableId": "melville"
 },
 "schema": {
  "fields": [
   {
    "name": "BookMeta_Title",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Date",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Creator",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Language",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Publisher",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "last_updated",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
   }
  ]
 },
 "numBytes": "1344",
 "numLongTermBytes": "0",
 "numRows": "12",
 "creationTime": "1469323329211",
 "lastModifiedTime": "1469323329211",
 "type": "TABLE"
}

И, конечно же, теперь в схему таблицы добавлено наше новое поле!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *