Convertir JSON en schéma BigQuery — Numio
Génère un schéma de table Google BigQuery (un tableau JSON de champs name, type et mode) à partir d’un exemple JSON. Les tableaux deviennent REPEATED, les objets imbriqués RECORD, et tous les éléments d’un tableau sont fusionnés en un seul schéma.
Préparer un fichier de schéma pour bq load ou bq mk --schema à partir d’un événement d’exemple ou d’une réponse d’API.
JSON
Big Query Schema
Quand l’utiliser
- Préparer un fichier de schéma pour bq load ou bq mk --schema à partir d’un événement d’exemple ou d’une réponse d’API.
- Vérifier comment les objets imbriqués et les tableaux d’un enregistrement de log se traduisent en colonnes RECORD et REPEATED avant de créer une table.
Mode d’emploi
- Collez un objet JSON ou un tableau d’enregistrements d’exemple dans l’éditeur de gauche, ou utilisez le bouton de chargement de fichier pour ouvrir un fichier UTF-8.
- Lisez le schéma à droite ; vérifiez le type choisi pour chaque champ, en particulier les dates, les chaînes numériques et les tableaux.
- Copiez le tableau JSON, ajustez les types ou passez mode à REQUIRED si nécessaire, puis enregistrez-le comme fichier de schéma.
Objet JSON d’exemple
{
"order_id": 1024,
"zip": "02139",
"coupon": null,
"created_at": "2026-01-05T10:00:00Z",
"items": [{ "sku": "A1", "qty": 2 }, { "sku": "B7", "price": 4.5 }]
}Schéma 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",
…Détails et limites
Les chaînes ne reçoivent le type TIMESTAMP que si elles ressemblent à une date-heure ISO (2026-01-05T10:00:00Z), et DATE seulement pour un YYYY-MM-DD seul ; tout le reste, y compris les chaînes numériques comme "02139", reste STRING.
Une valeur null ou un tableau vide ne porte aucun type : il devient donc STRING (NULLABLE ou REPEATED), sauf si un autre enregistrement fournit une valeur. Le mode REQUIRED n’est jamais généré.
Les champs sont fusionnés sur tous les éléments du tableau : INTEGER avec FLOAT donne FLOAT, et les autres types en conflit retombent sur STRING.
La conversion s’exécute dans votre navigateur ; rien n’est envoyé.
FAQ
Pourquoi ma colonne de date-heure est-elle de type TIMESTAMP et non DATETIME ?
Le générateur ne distingue pas les date-heures avec fuseau des date-heures locales ; toute chaîne de date-heure ISO devient TIMESTAMP. Passez-la à la main en DATETIME si les valeurs n’ont pas de fuseau horaire.
Puis-je coller un tableau d’enregistrements ?
Oui. Un tableau d’objets à la racine est fusionné en un seul schéma : un champ présent dans certains enregistrements seulement est donc inclus. Le NDJSON (un objet par ligne) n’est pas analysé ; entourez les lignes de [ ] avec des virgules.
Quel type reçoivent les valeurs null ?
NULLABLE STRING lorsqu’aucun autre exemple ne donne de valeur au champ, comme le montre coupon dans l’exemple. Fournissez un exemple non null, ou modifiez le type, si la colonne est numérique ou un RECORD.