Auf dieser Seite wird beschrieben, wie Sie mithilfe von Spanner mit JSON arbeiten.
Der JSON-Datentyp ist ein semistrukturierter Datentyp, der zum Speichern von JSON-Daten (JavaScript Object Notation) verwendet wird. Die Spezifikationen für das JSON-Format werden in RFC 7159 beschrieben.
JSON ist nützlich, um ein relationales Schema für Daten zu ergänzen, die dünnbesetzt oder eine lose definierte oder sich ändernde Struktur haben. Das Abfrageoptimierungstool stützt sich jedoch auf das relationale Modell, um in großem Maßstab effizient zu filtern, zu joinen, zu aggregieren und zu sortieren. Abfragen über JSON haben weniger integrierte Optimierungen und weniger Kosten, um die Leistung zu prüfen und zu optimieren.
Spezifikationen
Spanner-JSON-Typ speichert eine normalisierte Darstellung der Eingabe JSON-Dokument.
- JSON kann auf maximal 80 Ebenen verschachtelt werden.
- Leerzeichen bleiben nicht erhalten.
- Kommentare werden nicht unterstützt. Transaktionen oder Abfragen mit Kommentaren schlagen fehl.
- Mitglieder eines JSON-Objekts werden lexikografisch sortiert.
- Die Reihenfolge der JSON-Arrayelemente wird beibehalten.
- Wenn ein JSON-Objekt Schlüsselduplikate hat, wird nur der erste beibehalten.
- Bei einfachen Typen (String, boolesch, Zahl und Null) werden Typ und Wert beibehalten.
- Die Werte der Stringtypen werden genau beibehalten.
- Zahlentypwerte bleiben erhalten, ihre Textdarstellung kann sich jedoch aufgrund des Normalisierungsprozesses jedoch ändern. Zum Beispiel kann eine Eingabenummer von 10.000 eine normalisierte Darstellung von 1e+4 haben. Folgendes ist die Semantik für die Beibehaltung der Zahl:
- Signierte Ganzzahlen im Bereich von [INT64_MIN, INT64_MAX] bleiben erhalten.
- Vorzeichenlose Ganzzahlen im Bereich von [0, UINT64_MAX] bleiben erhalten.
- Doppelte Werte, bei denen ein String in eine Gleitkommazahl mit doppelter Genauigkeit umgewandelt wird, werden beibehalten. Wenn eine Gleitkommazahl mit doppelter Genauigkeit nicht auf diese Weise umgewandelt werden kann, schlägt die Transaktion oder Abfrage fehl.
- Beispiel:
SELECT JSON '2.2412421353246235436'
schlägt fehl. - Eine funktionale Problemumgehung ist
PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round')
, dieJSON '2.2412421353246237'
zurückgibt.
- Beispiel:
- Verwenden Sie die Methode
TO_JSON()
,JSON_OBJECT()
, undJSON_ARRAY()
zum Erstellen von JSON-Dokumenten in SQL. Mit diesen Funktionen werden die erforderlichen Anführungszeichen und Escapezeichen implementiert.
Die maximal zulässige Größe des normalisierten Dokuments beträgt 10 MB.
Null-Zulässigkeit
JSON-null
-Werte werden als SQL-Nicht-NULL behandelt.
Beispiel:
SELECT (JSON '{"a":null}').a IS NULL; -- Returns FALSE
SELECT (JSON '{"a":null}').b IS NULL; -- Returns TRUE
SELECT JSON_QUERY(JSON '{"a":null}', "$.a"); -- Returns a JSON 'null'
SELECT JSON_QUERY(JSON '{"a":null}', "$.b"); -- Returns a SQL NULL
Codierung
JSON-Dokumente müssen in UTF-8 codiert sein. Transaktionen oder Abfragen mit JSON-Dokumenten, die in anderen Formaten codiert sind, geben einen Fehler zurück.
Tabelle mit JSON-Spalten erstellen
Eine JSON-Spalte kann beim Erstellen der Tabelle hinzugefügt werden. JSON-Typ Werte können Nullwerte enthalten.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
VenueFeatures JSON,
DateOpened DATE,
) PRIMARY KEY(VenueId);
JSON-Spalten zu vorhandenen Tabellen hinzufügen und daraus entfernen
Eine JSON-Spalte kann auch einer vorhandenen Tabelle hinzugefügt und daraus entfernt werden.
ALTER TABLE Venues ADD COLUMN VenueDetails JSON;
ALTER TABLE Venues DROP COLUMN VenueDetails;
Im folgenden Beispiel wird gezeigt, wie Sie der Tabelle Venues
mit den Spanner-Clientbibliotheken eine JSON
-Spalte namens VenueDetails
hinzufügen.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
JSON-Daten ändern
Im folgenden Beispiel wird gezeigt, wie Sie JSON
-Daten mithilfe der
Spanner-Clientbibliotheken.
C++
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
C#
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Go
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Java
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
PHP
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie zur Authentifizierung bei Spanner Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ruby
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
JSON-Daten abfragen
Das folgende Beispiel zeigt, wie JSON
-Daten mit der
Spanner-Clientbibliotheken.
C++
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
C#
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Go
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Java
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
PHP
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie zur Authentifizierung bei Spanner Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ruby
Informationen zum Installieren und Verwenden der Clientbibliothek für Spanner finden Sie unter Spanner-Clientbibliotheken
Richten Sie zur Authentifizierung bei Spanner Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Beschränkungen
- JSON-Spalten können nicht in ORDER BY verwendet werden.
- JSON-Typspalten unterstützen keine Indexierung. Ein Index kann jedoch für eine generierte Spalte erstellt werden, die einen skalaren Wert aus einem JSON-Element extrahiert.
Im folgenden Beispiel wird ein Index VenueMisc
für die generierte Spalte erstellt.
Details
, die einen skalaren Wert aus dem JSON-Element VenueDetails
extrahiert.
Der bearbeitbare json_path ist ein STRING-Wert im JSONPath-Format.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
DateOpened DATE,
VenueDetails JSON,
Details STRING(MAX) AS (JSON_VALUE(VenueDetails, json_path)) STORED
) PRIMARY KEY(VenueId);
CREATE INDEX VenueMisc ON Venues(Details);
Verweise
- JSON-Datentyp
- JSON-Funktionen
- JSON-Operatoren: