Saltar al contenido

Convertir JSON a un esquema BigQuery — Numio

Genera un esquema de tabla de Google BigQuery (un array JSON de campos con name, type y mode) a partir de JSON de ejemplo. Los arrays pasan a REPEATED, los objetos anidados a RECORD y todos los elementos de un array se combinan en un único esquema.

Preparar un archivo de esquema para bq load o bq mk --schema a partir de un evento de ejemplo o una respuesta de API.

JSON

Big Query Schema

Cuándo usarla

  • Preparar un archivo de esquema para bq load o bq mk --schema a partir de un evento de ejemplo o una respuesta de API.
  • Comprobar cómo se asignan los objetos anidados y los arrays de un registro de log a columnas RECORD y REPEATED antes de crear una tabla.

Cómo usarla

  1. Pega un objeto JSON o un array de registros de ejemplo en el editor izquierdo, o usa el botón de cargar archivo para abrir un archivo UTF-8.
  2. Lee el esquema de la derecha; comprueba el tipo elegido para cada campo, sobre todo en fechas, cadenas numéricas y arrays.
  3. Copia el array JSON, ajusta los tipos o pon mode en REQUIRED donde haga falta, y guárdalo como archivo de esquema.

Objeto JSON de ejemplo

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

Esquema de BigQuery en 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",
…

Detalles y limitaciones

Las cadenas solo reciben el tipo TIMESTAMP cuando parecen una fecha y hora ISO (2026-01-05T10:00:00Z), y DATE solo si son un YYYY-MM-DD simple; todo lo demás, incluidas cadenas numéricas como "02139", queda como STRING.

Un valor null o un array vacío no aporta tipo, así que pasa a STRING (NULLABLE o REPEATED) salvo que otro registro aporte un valor. Nunca se genera el modo REQUIRED.

Los campos se combinan entre todos los elementos del array: INTEGER con FLOAT da FLOAT, y los demás tipos en conflicto vuelven a STRING.

La conversión se ejecuta en tu navegador; no se sube nada.

FAQ

¿Por qué mi columna de fecha y hora tiene el tipo TIMESTAMP y no DATETIME?

El generador no distingue entre fechas y horas con zona horaria y locales; cualquier cadena de fecha y hora ISO pasa a TIMESTAMP. Cámbiala a mano a DATETIME si los valores no tienen zona horaria.

¿Puedo pegar un array de registros?

Sí. Un array de objetos en la raíz se combina en un único esquema, así que también se incluye un campo que solo aparece en algunos registros. NDJSON (un objeto por línea) no se analiza; envuelve las líneas en [ ] separadas por comas.

¿Qué tipo reciben los valores null?

NULLABLE STRING cuando ninguna otra muestra da valor al campo, como ocurre con coupon en el ejemplo. Aporta una muestra no nula, o edita el tipo, si la columna es numérica o un RECORD.

Especificaciones y referencias