Accueil
Schéma BigQuery

Générateur de schéma de table Google BigQuery depuis JSON

RECORD & NDJSON

Déduisez et convertissez des objets JSON en schémas de table Google Cloud BigQuery au format JSON avec prise en charge des types RECORD, STRING, INTEGER, NUMERIC et TIMESTAMP.

Presets:
Options de schéma et d'ingestion BigQueryecommerce_dw.fact_order_events
Charge utile JSON / NDJSON / JSONL d'entrée
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]
Champs du schéma et colonnes33 colonnes (30 requis)
Hiérarchie et imbrication des StructsLevel 0 profondeur (3 enregistrements imbriqués)
Modes de champ et nullabilitéPartition: event_timestamp • Standard SQL

Inférence de schéma BigQuery 100% dans le navigateur

Aucun envoi vers un serveur ou API cloud. Les arborescences JSON complexes, structs imbriqués et flux NDJSON sont analysés en mémoire dans le navigateur.

Système de types et modes BigQuery pour la production

Mappe fidèlement les primitives JSON vers les types SQL INT64, NUMERIC, TIMESTAMP, DATE, GEOGRAPHY et RECORD avec modes NULLABLE, REQUIRED ou REPEATED.

Prêt pour les plateformes de données cloud

Exportez des définitions de tables pour bq CLI, Google Cloud Terraform/Pulumi IaC, le SDK Python BigQuery et SQL DDL ANSI avec partitionnement.

Référence technique et guide d'architecture

Guide Développeur : Générateur de Schéma de Table Google BigQuery depuis JSON — Guide de référence

Déduisez et convertissez des objets JSON en schémas de table Google Cloud BigQuery au format JSON avec prise en charge des types RECORD, STRING, INTEGER, NUMERIC et TIMESTAMP.

Paramètres clés et contrôles

defaultModestring

Définit le mode de nullabilité par défaut (NULLABLE ou REQUIRED) pour les champs primitifs de premier niveau et imbriqués.

Par défaut : NULLABLE
timestampDetectionboolean

Détecte automatiquement les chaînes au format ISO 8601 (ex. 2026-10-17T04:49:28Z) pour les typer en TIMESTAMP plutôt qu'en STRING.

Par défaut : true
numericPrecisionstring

Contrôle la précision des décimaux : FLOAT64 pour les données scientifiques ou NUMERIC / BIGNUMERIC pour la précision financière.

Par défaut : NUMERIC
sanitizeFieldNamesboolean

Nettoie les clés JSON non conformes (tirets, espaces, chiffres initiaux) en identifiants valides pour BigQuery ([a-zA-Z_][a-zA-Z0-9_]*).

Par défaut : true

Conseils de pro et bonnes practices

Lors de la conversion de JSON délimité

Lors de la conversion de JSON délimité par des retours à la ligne (NDJSON), injectez plusieurs enregistrements variés afin de ne pas omettre de champs optionnels dans le schéma final.

Associez les données monétaires au

Associez les données monétaires au type NUMERIC (virgule fixe jusqu'à 38 chiffres) ou BIGNUMERIC afin d'éviter les arrondis imprévus du type FLOAT64 (norme IEEE 754).

Ingestion directe via la CLI bq

Enregistrez la sortie sous schema.json et chargez vos fichiers NDJSON immédiatement : bq load --source_format=NEWLINE_DELIMITED_JSON mon_dataset.ma_table gs://mon-bucket/data.json ./schema.json

Les tableaux d'objets deviennent des

Les tableaux d'objets deviennent des champs type: 'RECORD' avec mode: 'REPEATED'. Vérifiez que les propriétés enfants conservent des modes valides.

Pièges courants et dépannage

Erreur de nom de colonne non valide : 'Fields must contain only letters, numbers, and underscores'

Activez l'option sanitizeFieldNames ou renommez manuellement les clés comportant des tirets (user-id) en snake_case (user_id).

Conflit de types entre lignes (ex. INTEGER à la ligne 1 mais STRING à la ligne 2)

Harmonisez la source de données en amont, élargissez le champ au type STRING ou utilisez le type de données natif JSON de BigQuery.

Dépassement du niveau d'imbrication maximal de 15 niveaux

BigQuery limite l'imbrication des structures à 15 niveaux. Aplatissez les arborescences trop profondes ou stockez les sous-objets dans une colonne de type JSON.

Foire aux questions (FAQ)

Comment les objets et tableaux JSON sont-ils traduits dans le schéma BigQuery ?▼

Un objet JSON devient un type: 'RECORD' (STRUCT). Un tableau de scalaires adopte son type d'origine avec mode: 'REPEATED'. Un tableau d'objets génère un type: 'RECORD' avec mode: 'REPEATED' et une liste enfant 'fields'.

Comment charger des données dans BigQuery avec le schéma JSON généré ?▼

Exécutez la commande : 'bq load --source_format=NEWLINE_DELIMITED_JSON mon_dataset.ma_table donnees.ndjson ./schema.json' ou transmettez le JSON dans le paramètre de configuration de chargement de l'API BigQuery.

Quand faut-il privilégier le type nativo JSON plutôt qu'un schéma structuré ?▼

Utilisez des schémas stricts pour maximiser les performances d'analyse, l'indexation, le partitionnement et le contrôle de types. Préférez le type JSON natif pour des données polymorphes ou des schémas changeant fréquemment.

Quelles sont les règles de nommage des colonnes dans BigQuery ?▼

Les noms doivent faire entre 1 et 300 caractères, commencer par une lettre ou un tiret bas, et ne contenir que des lettres, chiffres et tirets bas. Ils sont insensibles à la casse lors de l'exécution des requêtes SQL.

Outils et utilitaires connexes

Tous les outils →
Guide Développeur : Générateur de DDL CREATE TABLE JSON vers SnowflakeDéveloppement

Convertissez vos structures et charges utiles JSON en instructions SQL CREATE TABLE prêtes pour la production dans Snowflake avec des types de données optimisés tels que VARIANT, VARCHAR, NUMBER, BOOLEAN et TIMESTAMP_NTZ.

Ouvrir l'outil→
Guide Développeur : Générateur de Variables et Locals Terraform HCL depuis JSON / YAMLDéveloppement

Convertissez des structures JSON et YAML en contraintes de types HCL Terraform (type = object({...})), valeurs par défaut, blocs locals et fichiers terraform.tfvars.

Ouvrir l'outil→
Guide Développeur : Convertisseur OpenAPI / Swagger vers GraphQL SDLDéveloppement

Convertissez les points de terminaison REST, corps de requête et schémas JSON OpenAPI 3.0/3.1 et Swagger 2.0 en types, requêtes, mutations et entrées GraphQL SDL.

Ouvrir l'outil→
Guide développeur du générateur de schémas TypeScript TypeBox depuis SQL DDLDéveloppement

Convertissez les instructions SQL CREATE TABLE en schémas de validation à l'exécution @sinclair/typebox utilisant Type.Object, Type.String, Type.Number et Type.Optional.

Ouvrir l'outil→
Guide Développeur du Générateur de Code cURL vers Rust (reqwest & tokio)Développement

Convertissez des commandes cURL en requêtes HTTP asynchrones et idiomatiques en Rust à l'aide de reqwest, serde_json, d'en-têtes personnalisés et du runtime Tokio.

Ouvrir l'outil→
Guide développeur du générateur de code cURL vers Ruby (Net::HTTP & Faraday)Développement

Convertissez vos requêtes cURL en code Ruby propre et idiomatique avec Net::HTTP, URI, Faraday et la gestion native du JSON.

Ouvrir l'outil→