Перейти к содержимому

Конвертировать JSON в схему BigQuery — Numio

Генерирует схему таблицы Google BigQuery (JSON-массив полей name, type и mode) по образцу JSON. Массивы становятся REPEATED, вложенные объекты — RECORD, а все элементы массива объединяются в одну схему.

Подготовка черновика файла схемы для bq load или bq mk --schema по образцу события или ответа API.

JSON

Big Query Schema

Когда пригодится

  • Подготовка черновика файла схемы для bq load или bq mk --schema по образцу события или ответа API.
  • Проверка перед созданием таблицы, как вложенные объекты и массивы записи лога отображаются в столбцы RECORD и REPEATED.

Как пользоваться

  1. Вставьте один JSON-объект или массив образцов записей в левый редактор или откройте файл в кодировке UTF-8 кнопкой загрузки файла.
  2. Изучите схему справа; проверьте тип, выбранный для каждого поля, особенно для дат, числовых строк и массивов.
  3. Скопируйте JSON-массив, при необходимости поправьте типы или задайте mode REQUIRED и сохраните его как файл схемы.

Образец JSON-объекта

{
  "order_id": 1024,
  "zip": "02139",
  "coupon": null,
  "created_at": "2026-01-05T10:00:00Z",
  "items": [{ "sku": "A1", "qty": 2 }, { "sku": "B7", "price": 4.5 }]
}

JSON-схема BigQuery

[
  {
    "name": "order_id",
    "type": "INTEGER",
    "mode": "NULLABLE"
  },
  {
    "name": "zip",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "coupon",
    "type": "STRING",
    "mode": "NULLABLE"
  },
  {
    "name": "created_at",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
  },
  {
    "name": "items",
    "type": "RECORD",
…

Подробности и ограничения

Строки получают тип TIMESTAMP, только если похожи на дату и время в формате ISO (2026-01-05T10:00:00Z), и DATE — только для чистого YYYY-MM-DD; всё остальное, включая числовые строки вроде "02139", остаётся STRING.

Значение null или пустой массив не несут типа, поэтому становятся STRING (NULLABLE или REPEATED), если значение не даёт другая запись. Режим REQUIRED никогда не генерируется.

Поля объединяются по всем элементам массива: INTEGER вместе с FLOAT даёт FLOAT, остальные конфликтующие типы сводятся к STRING.

Преобразование выполняется в браузере; ничего не загружается на сервер.

FAQ

Почему столбец с меткой времени получил тип TIMESTAMP, а не DATETIME?

Генератор не различает дату и время с часовым поясом и без него; любая строка даты и времени ISO становится TIMESTAMP. Если у значений нет часового пояса, замените тип на DATETIME вручную.

Можно ли вставить массив записей?

Да. Корневой массив объектов объединяется в одну схему, поэтому поле, присутствующее лишь в некоторых записях, тоже попадёт в неё. NDJSON (по объекту на строку) не разбирается; оберните строки в [ ] и разделите запятыми.

Как типизируются значения null?

Как NULLABLE STRING, если ни один другой образец не задаёт полю значение, как показывает coupon в примере. Если столбец числовой или RECORD, добавьте образец без null или поправьте тип.

Спецификации и справка