Inicio
Esquema BigQuery

Generador de esquema de tabla Google BigQuery desde JSON

RECORD & NDJSON

Infiere y convierte objetos JSON en esquemas de tabla para Google Cloud BigQuery con campos RECORD, STRING, INTEGER, NUMERIC y TIMESTAMP.

Presets:
Opciones de esquema e ingesta BigQueryecommerce_dw.fact_order_events
Carga útil JSON / NDJSON / JSONL de entrada
1[
2 {
3 "name": "event_id",
4 "type": "STRING",
5 "mode": "REQUIRED",
6 "description": "Field representing event id"
7 },
8 {
9 "name": "order_id",
10 "type": "STRING",
11 "mode": "REQUIRED",
12 "description": "Field representing order id"
13 },
14 {
15 "name": "order_status",
16 "type": "STRING",
17 "mode": "REQUIRED",
18 "description": "Field representing order status"
19 },
20 {
21 "name": "event_timestamp",
22 "type": "TIMESTAMP",
23 "mode": "REQUIRED",
24 "description": "Timestamp indicating when event timestamp occurred"
25 },
26 {
27 "name": "order_date",
28 "type": "DATE",
29 "mode": "REQUIRED",
30 "description": "Calendar date for order date"
31 },
32 {
33 "name": "subtotal_amount",
34 "type": "NUMERIC",
35 "mode": "REQUIRED",
36 "description": "Monetary or numeric measure for subtotal amount"
37 },
38 {
39 "name": "tax_amount",
40 "type": "NUMERIC",
41 "mode": "REQUIRED",
42 "description": "Monetary or numeric measure for tax amount"
43 },
44 {
45 "name": "discount_amount",
46 "type": "INT64",
47 "mode": "REQUIRED",
48 "description": "Integer count or identifier for discount amount"
49 },
50 {
51 "name": "grand_total",
52 "type": "NUMERIC",
53 "mode": "REQUIRED",
54 "description": "Monetary or numeric measure for grand total"
55 },
56 {
57 "name": "currency",
58 "type": "STRING",
59 "mode": "REQUIRED",
60 "description": "Field representing currency"
61 },
62 {
63 "name": "is_expedited",
64 "type": "BOOL",
65 "mode": "REQUIRED",
66 "description": "Boolean indicator flag for is expedited"
67 },
68 {
69 "name": "customer",
70 "type": "RECORD",
71 "mode": "REQUIRED",
72 "description": "Nested struct containing customer attributes",
73 "fields": [
74 {
75 "name": "customer_id",
76 "type": "STRING",
77 "mode": "REQUIRED",
78 "description": "Field representing customer id"
79 },
80 {
81 "name": "email",
82 "type": "STRING",
83 "mode": "REQUIRED",
84 "description": "Field representing email"
85 },
86 {
87 "name": "loyalty_tier",
88 "type": "STRING",
89 "mode": "REQUIRED",
90 "description": "Field representing loyalty tier"
91 },
92 {
93 "name": "account_created_at",
94 "type": "TIMESTAMP",
95 "mode": "REQUIRED",
96 "description": "Timestamp indicating when account created at occurred"
97 }
98 ]
99 },
100 {
101 "name": "shipping_address",
102 "type": "RECORD",
103 "mode": "REQUIRED",
104 "description": "Nested struct containing shipping address attributes",
105 "fields": [
106 {
107 "name": "recipient_name",
108 "type": "STRING",
109 "mode": "REQUIRED",
110 "description": "Field representing recipient name"
111 },
112 {
113 "name": "street_address",
114 "type": "STRING",
115 "mode": "REQUIRED",
116 "description": "Field representing street address"
117 },
118 {
119 "name": "city",
120 "type": "STRING",
121 "mode": "REQUIRED",
122 "description": "Field representing city"
123 },
124 {
125 "name": "state_code",
126 "type": "STRING",
127 "mode": "REQUIRED",
128 "description": "Field representing state code"
129 },
130 {
131 "name": "postal_code",
132 "type": "STRING",
133 "mode": "REQUIRED",
134 "description": "Field representing postal code"
135 },
136 {
137 "name": "country_code",
138 "type": "STRING",
139 "mode": "REQUIRED",
140 "description": "Field representing country code"
141 }
142 ]
143 },
144 {
145 "name": "line_items",
146 "type": "RECORD",
147 "mode": "REPEATED",
148 "description": "Repeated array of line items entries",
149 "fields": [
150 {
151 "name": "item_id",
152 "type": "STRING",
153 "mode": "REQUIRED",
154 "description": "Field representing item id"
155 },
156 {
157 "name": "sku",
158 "type": "STRING",
159 "mode": "REQUIRED",
160 "description": "Field representing sku"
161 },
162 {
163 "name": "product_name",
164 "type": "STRING",
165 "mode": "REQUIRED",
166 "description": "Field representing product name"
167 },
168 {
169 "name": "quantity",
170 "type": "INT64",
171 "mode": "REQUIRED",
172 "description": "Integer count or identifier for quantity"
173 },
174 {
175 "name": "unit_price",
176 "type": "NUMERIC",
177 "mode": "REQUIRED",
178 "description": "Monetary or numeric measure for unit price"
179 },
180 {
181 "name": "category",
182 "type": "STRING",
183 "mode": "REQUIRED",
184 "description": "Field representing category"
185 }
186 ]
187 },
188 {
189 "name": "tracking_tags",
190 "type": "STRING",
191 "mode": "REPEATED",
192 "description": "Repeated array of tracking tags entries"
193 },
194 {
195 "name": "warehouse_location",
196 "type": "GEOGRAPHY",
197 "mode": "REQUIRED",
198 "description": "Geospatial coordinates for warehouse location"
199 },
200 {
201 "name": "cancellation_reason",
202 "type": "STRING",
203 "mode": "NULLABLE",
204 "description": "Field representing cancellation reason"
205 }
206]
Campos del esquema y columnas33 columnas (30 requerido)
Jerarquía y anidamiento de StructLevel 0 profundidad (3 registros anidados)
Modos de campo y nulabilidadPartition: event_timestamp • Standard SQL

Inferencia de esquema BigQuery 100% en navegador

Cero envíos al servidor o APIs en la nube. Árboles JSON complejos, structs anidados y lotes NDJSON se procesan directamente en la memoria del navegador.

Sistema de tipos y modos de BigQuery para producción

Mapea con precisión primitivas JSON a INT64, NUMERIC, TIMESTAMP, DATE, GEOGRAPHY y campos RECORD con modos NULLABLE, REQUIRED o REPEATED.

Listo para plataformas de datos en la nube

Exporta definiciones de tablas para bq CLI, Google Cloud Terraform/Pulumi IaC, SDK de Python BigQuery y SQL DDL estándar ANSI con particionamiento.

Referencia técnica y guía de arquitectura

Guía de Desarrollo: Generador de Esquema de Tabla Google BigQuery desde JSON — Guía de referencia

Infiere y convierte objetos JSON en esquemas de tabla para Google Cloud BigQuery con campos RECORD, STRING, INTEGER, NUMERIC y TIMESTAMP.

Parámetros clave y controles

defaultModestring

Especifica el modo de nulabilidad predeterminado (NULLABLE o REQUIRED) para columnas primitivas principales y anidadas.

Por defecto: NULLABLE
timestampDetectionboolean

Detecta automáticamente formatos ISO 8601 (p. ej., 2026-10-17T04:49:28Z) y los asigna a TIMESTAMP en lugar de STRING.

Por defecto: true
numericPrecisionstring

Controla la precisión decimal: FLOAT64 para análisis científico o NUMERIC / BIGNUMERIC para operaciones financieras exactas.

Por defecto: NUMERIC
sanitizeFieldNamesboolean

Convierte claves JSON con caracteres no válidos (guiones, espacios, números iniciales) en identificadores legales para BigQuery ([a-zA-Z_][a-zA-Z0-9_]*).

Por defecto: true

Consejos profesionales y mejores prácticas

Al procesar JSON delimitado por saltos

Al procesar JSON delimitado por saltos de línea (NDJSON), incluye varios registros variados para no omitir campos opcionales del esquema final.

Mapea importes financieros a tipos

Mapea importes financieros a tipos NUMERIC (hasta 38 dígitos de precisión fija) o BIGNUMERIC en lugar de utilizar FLOAT64 con estándar IEEE 754.

Carga directa mediante la CLI de bq

Guarda la salida como schema.json y carga archivos NDJSON de inmediato con: bq load --source_format=NEWLINE_DELIMITED_JSON my_dataset.my_table gs://my-bucket/data.json ./schema.json

Modelado de arreglos anidados

Las listas de objetos se transforman en type: 'RECORD' con mode: 'REPEATED'. Asegúrate de que las propiedades hijas mantengan modos válidos.

Errores comunes y solución de problemas

Error de nombre de columna no válido: 'Fields must contain only letters, numbers, and underscores'

Activa sanitizeFieldNames o renombra manualmente claves que contengan guiones (user-id) a formato snake_case válido (user_id).

Discrepancia de tipos entre filas (p. ej., fila 1 es INTEGER pero fila 2 es STRING)

Homogeneiza los datos en origen, amplía el campo a STRING en el esquema generado o utiliza el tipo nativo JSON de BigQuery.

Se ha excedido el límite de profundidad de anidamiento de 15 niveles

BigQuery limita las estructuras anidadas a 15 niveles. Aplana la jerarquía de los objetos o almacena las ramas profundas en una columna tipo JSON.

Preguntas frecuentes (FAQ)

¿Cómo se traducen los objetos y matrices JSON a los tipos de BigQuery?▼

Un objeto JSON se convierte en type: 'RECORD' (STRUCT). Un array de escalares se mapea al tipo base con mode: 'REPEATED'. Un array de objetos genera type: 'RECORD' con mode: 'REPEATED' y una lista secundaria de campos 'fields'.

¿Cómo cargo datos en BigQuery utilizando el archivo schema.json generado?▼

Ejecuta: 'bq load --source_format=NEWLINE_DELIMITED_JSON mi_dataset.mi_tabla datos.ndjson ./schema.json' o suministra la definición JSON al configurar un trabajo de carga mediante las API de Google Cloud.

¿Cuándo conviene usar el tipo nativo JSON frente a columnas tipadas en BigQuery?▼

Usa esquemas rígidos con columnas tipadas cuando requieras máximo rendimiento en consultas analíticas, particionamiento y validación estricta. Emplea el tipo nativo JSON para estructuras dinámicas y logs polimórficos.

¿Cuáles son las restricciones de nomenclatura para columnas en BigQuery?▼

Deben contener de 1 a 300 caracteres, comenzar con una letra o guion bajo, y componerse exclusivamente de letras, números y guiones bajos. No distinguen mayúsculas de minúsculas en consultas SQL.

Herramientas y utilidades relacionadas

Todas las herramientas →
Guía para Desarrolladores: Generador de DDL CREATE TABLE de JSON a SnowflakeDesarrollo

Transforme esquemas y cargas útiles JSON en sentencias SQL CREATE TABLE para Snowflake listas para producción con tipos de datos VARIANT, VARCHAR, NUMBER, BOOLEAN y TIMESTAMP_NTZ.

Abrir herramienta→
Guía de Desarrollo: Generador de Variables y Locals de Terraform HCL desde JSON / YAMLDesarrollo

Convierta cargas útiles JSON y YAML en restricciones de tipo de variables Terraform HCL (type = object({...})), valores predeterminados, bloques locals y definiciones terraform.tfvars.

Abrir herramienta→
Guía de Desarrollo: Conversor de OpenAPI / Swagger a GraphQL SDLDesarrollo

Convierte endpoints REST, cuerpos de solicitud y esquemas JSON de OpenAPI 3.0/3.1 y Swagger 2.0 en tipos, consultas, mutaciones y definiciones de entrada de GraphQL SDL.

Abrir herramienta→
Guía de desarrollo del generador de esquemas TypeBox TypeScript desde DDL SQLDesarrollo

Convierta sentencias SQL CREATE TABLE en esquemas de validación en tiempo de ejecución de @sinclair/typebox utilizando Type.Object, Type.String, Type.Number y Type.Optional.

Abrir herramienta→
Guía para Desarrolladores del Generador de Código cURL a Rust (reqwest y tokio)Desarrollo

Transforma comandos cURL en solicitudes HTTP asíncronas e idiomáticas en Rust utilizando reqwest, serde_json, encabezados personalizados y el runtime de Tokio.

Abrir herramienta→
Guía de desarrollo del generador de código cURL a Ruby (Net::HTTP y Faraday)Desarrollo

Convierte comandos cURL en código Ruby limpio e idiomático utilizando Net::HTTP, URI, Faraday y gestión nativa de JSON.

Abrir herramienta→