Zum Inhalt springen

JSON in ein BigQuery-Schema umwandeln — Numio

Erzeugt aus Beispiel-JSON ein Google-BigQuery-Tabellenschema (ein JSON-Array mit den Feldern name, type und mode). Arrays werden zu REPEATED, verschachtelte Objekte zu RECORD, und alle Elemente eines Arrays werden zu einem Schema zusammengeführt.

Aus einem Beispiel-Event oder einer API-Antwort eine Schemadatei für bq load oder bq mk --schema entwerfen.

JSON

Big Query Schema

Wann sie hilft

  • Aus einem Beispiel-Event oder einer API-Antwort eine Schemadatei für bq load oder bq mk --schema entwerfen.
  • Vor dem Anlegen einer Tabelle prüfen, wie verschachtelte Objekte und Arrays eines Log-Eintrags auf RECORD- und REPEATED-Spalten abgebildet werden.

Anwendung

  1. Füge ein JSON-Objekt oder ein Array von Beispieldatensätzen in den linken Editor ein oder öffne über die Schaltfläche zum Laden einer Datei eine UTF-8-Datei.
  2. Lies das Schema rechts; prüfe den gewählten Typ jedes Felds, besonders bei Datumswerten, numerischen Strings und Arrays.
  3. Kopiere das JSON-Array, passe Typen an oder setze mode bei Bedarf auf REQUIRED, und speichere es als Schemadatei.

JSON-Beispielobjekt

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

BigQuery-Schema-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",
…

Details und Einschränkungen

Strings erhalten den Typ TIMESTAMP nur, wenn sie wie ein ISO-Datum mit Uhrzeit aussehen (2026-01-05T10:00:00Z), und DATE nur bei einem reinen YYYY-MM-DD; alles andere, auch numerische Strings wie "02139", bleibt STRING.

Ein null-Wert oder ein leeres Array trägt keinen Typ und wird daher zu STRING (NULLABLE oder REPEATED), sofern kein anderer Datensatz einen Wert liefert. Der Modus REQUIRED wird nie erzeugt.

Felder werden über alle Array-Elemente zusammengeführt: INTEGER mit FLOAT ergibt FLOAT, andere widersprüchliche Typen fallen auf STRING zurück.

Die Umwandlung läuft im Browser; es wird nichts hochgeladen.

FAQ

Warum hat meine Zeitstempel-Spalte den Typ TIMESTAMP statt DATETIME?

Der Generator unterscheidet nicht zwischen Datum-Uhrzeit-Werten mit und ohne Zeitzone; jeder ISO-Datum-Uhrzeit-String wird zu TIMESTAMP. Ändere ihn von Hand in DATETIME, wenn die Werte keine Zeitzone haben.

Kann ich ein Array von Datensätzen einfügen?

Ja. Ein Root-Array aus Objekten wird zu einem Schema zusammengeführt, sodass auch ein Feld enthalten ist, das nur in einigen Datensätzen vorkommt. NDJSON (ein Objekt pro Zeile) wird nicht geparst; setze die Zeilen mit Kommas in [ ].

Wie werden null-Werte typisiert?

Als NULLABLE STRING, wenn kein anderes Beispiel dem Feld einen Wert gibt, wie coupon im Beispiel zeigt. Liefere ein Beispiel ohne null oder ändere den Typ, wenn die Spalte numerisch oder ein RECORD ist.

Spezifikationen und Referenzen