Pular para o conteúdo

Converter JSON em esquema BigQuery — Numio

Gera um schema de tabela do Google BigQuery (um array JSON de campos com name, type e mode) a partir de JSON de exemplo. Arrays viram REPEATED, objetos aninhados viram RECORD e todos os elementos de um array são mesclados em um único schema.

Montar um arquivo de schema para bq load ou bq mk --schema a partir de um evento de exemplo ou de uma resposta de API.

JSON

Big Query Schema

Quando usar

  • Montar um arquivo de schema para bq load ou bq mk --schema a partir de um evento de exemplo ou de uma resposta de API.
  • Verificar como objetos aninhados e arrays de um registro de log são mapeados para colunas RECORD e REPEATED antes de criar uma tabela.

Como usar

  1. Cole um objeto JSON ou um array de registros de exemplo no editor da esquerda ou use o botão de carregar arquivo para abrir um arquivo UTF-8.
  2. Leia o schema à direita; confira o tipo escolhido para cada campo, principalmente datas, strings numéricas e arrays.
  3. Copie o array JSON, ajuste os tipos ou defina mode como REQUIRED onde for preciso e salve-o como arquivo de schema.

Objeto JSON de exemplo

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

Schema do BigQuery em JSON

[
  {
    "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",
…

Detalhes e limitações

Strings só recebem o tipo TIMESTAMP quando parecem uma data e hora ISO (2026-01-05T10:00:00Z), e DATE apenas para um YYYY-MM-DD simples; todo o resto, incluindo strings numéricas como "02139", continua STRING.

Um valor null ou um array vazio não traz tipo, então vira STRING (NULLABLE ou REPEATED), a menos que outro registro forneça um valor. O mode REQUIRED nunca é gerado.

Os campos são mesclados entre todos os elementos do array: INTEGER com FLOAT vira FLOAT, e outros tipos conflitantes voltam para STRING.

A conversão roda no seu navegador; nada é enviado.

FAQ

Por que minha coluna de data e hora tem o tipo TIMESTAMP e não DATETIME?

O gerador não distingue datas e horas com fuso das locais; qualquer string de data e hora ISO vira TIMESTAMP. Mude para DATETIME à mão se os valores não tiverem fuso horário.

Posso colar um array de registros?

Sim. Um array de objetos na raiz é mesclado em um único schema, então um campo presente só em alguns registros também é incluído. NDJSON (um objeto por linha) não é analisado; envolva as linhas em [ ] com vírgulas.

Que tipo recebem os valores null?

NULLABLE STRING quando nenhuma outra amostra dá valor ao campo, como mostra coupon no exemplo. Forneça uma amostra não nula, ou edite o tipo, se a coluna for numérica ou um RECORD.

Especificações e referências