Auf dieser Seite wird beschrieben, wie Sie bei Verwendung von Spanner mit dem Datentyp JSONB
arbeiten.
JSONB
ist ein PostgreSQL-Datentyp, der zum Speichern semistrukturierter Daten im PostgreSQL-Dialekt von Spanner verwendet wird. JSONB
enthält Daten im JSON-Format (JavaScript Object Notation), das der in RFC 7159 beschriebenen Spezifikation entspricht.
Spezifikationen
Der Spanner-Datentyp JSONB
speichert eine normalisierte Darstellung des Eingabedokuments. Dies impliziert Folgendes:
- Anführungszeichen und Leerzeichen werden nicht beibehalten.
- Kommentare werden nicht unterstützt. Transaktionen oder Abfragen mit Kommentaren schlagen fehl.
- Objektschlüssel werden zuerst nach der Schlüssellänge und dann lexikografisch nach der entsprechenden Objektschlüssellänge sortiert. Gibt es doppelte Objektschlüssel, wird nur der letzte beibehalten.
- Bei einfachen Typen (
string
,boolean
,number
undnull
) werden Typ und Wert beibehalten.- Die Werte des Typs
string
werden exakt beibehalten. - Die nachgestellten Nullen bleiben erhalten. Das Ausgabeformat für Werte des Typs
number
verwendet keine wissenschaftliche Notation.
- Die Werte des Typs
JSONB
null
-Werte werden als SQL-Nicht-NULL
-Werte behandelt. Beispiel:SELECT null::jsonb IS NULL; -- Returns true SELECT 'null'::jsonb IS NULL; -- Returns false SELECT '{"a":null}'::jsonb -> 'a' IS NULL; -- Returns false SELECT '{"a":null}'::jsonb -> 'b' IS NULL; -- Returns true SELECT '{"a":null}'::jsonb -> 'a'; -- Returns a JSONB 'null' SELECT '{"a":null}'::jsonb -> 'b'; -- Returns a SQL NULL
Die Reihenfolge der JSONB-Arrayelemente wird beibehalten.
Einschränkungen
Für Spanner JSONB
gelten die folgenden Einschränkungen:
- Argumente für die Funktion
to_jsonb
können nur aus den PostgreSQL-Datentypen stammen, die Spanner unterstützt. - Werte vom Typ „Zahl“ können 4.932 Ziffern vor dem Dezimalzeichen und 16.383 Ziffern nach dem Dezimalzeichen haben.
- Die maximal zulässige Größe des normalisierten Speicherformats beträgt 10 MB.
JSONB
-Dokumente müssen UTF-8-codiert sein. Transaktionen oder Abfragen mitJSONB
-Dokumenten, die in anderen Formaten codiert sind, geben einen Fehler zurück.
Tabelle mit JSONB-Spalten erstellen
Sie können einer Tabelle beim Erstellen die Spalte JSONB
hinzufügen.
CREATE TABLE Venues (
VenueId BIGINT PRIMARY KEY,
VenueName VARCHAR(1024),
VenueAddress VARCHAR(1024),
VenueFeatures JSONB,
DateOpened TIMESTAMPTZ
);
Hier ein Beispiel für ein VenueFeatures
-JSONB
-Objekt:
{
"rating": 4.5,
"capacity":"1500",
"construction":"brick",
"tags": [
"multi-cuisine",
"open-seating",
"stage",
"public address system"
]
}
JSONB-Spalten vorhandenen Tabellen hinzufügen und daraus entfernen
Sie können eine JSONB
-Spalte hinzufügen und löschen, indem Sie ALTER
-Anweisungen so verwenden:
ALTER TABLE Venues ADD COLUMN VenueDetails JSONB;
ALTER TABLE Venues DROP COLUMN VenueDetails;
Das folgende Beispiel zeigt, wie Sie der Tabelle Venues
mithilfe von Spanner-Clientbibliotheken eine JSONB
-Spalte namens VenueDetails
hinzufügen.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
JSONB-Daten ändern
Sie können eine JSONB
-Spalte wie jede andere Spalte ändern.
Hier ein Beispiel:
UPDATE Venues SET VenueFeatures = '{"rating": 4.5, "tags":["multi-cuisine", "open-seating"] }'
WHERE VenueId = 1;
Im folgenden Beispiel wird gezeigt, wie Sie JSONB
-Daten mit Spanner-Clientbibliotheken aktualisieren.
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 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 Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
JSONB-Daten abfragen
Sie können JSONB
-Spalten basierend auf den Werten der zugrunde liegenden Felder abfragen. Im folgenden Beispiel werden VenueId
und VenueName
aus Venues
extrahiert, wobei VenueFeatures
einen rating
-Wert größer als 3.5
hat.
SELECT VenueId, VenueName FROM Venues WHERE (VenueFeatures->>'rating')::FLOAT8 > 3.5;
Im folgenden Beispiel wird gezeigt, wie Sie JSONB
-Daten mithilfe von Spanner-Clientbibliotheken abfragen.
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 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 Standardanmeldedaten für Anwendungen ein, um sich bei Spanner zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Nicht unterstützte PostgreSQL-JSONB-Features
Die folgenden PostgreSQL-JSONB
-Features werden für Spanner JSONB
nicht unterstützt:
- Sortierung, Vergleich und Aggregation
- PrimaryKey und ForeignKey
- Indexierung, einschließlich des GIN-Index Weitere Informationen finden Sie unter Indexierung.
- Eine
JSONB
-Spalte in einen anderen Datentyp ändern oder diesen ändern - Parametrisierte Abfragen mit nicht typisierten JSONB-Parametern in Tools verwenden, die das PostgreSQL-Verbindungsprotokoll verwenden
Erzwingen in der Abfrage-Engine Im Gegensatz zu Standard-PostgreSQL wird die Erzwingung von
JSONB
in Text nicht unterstützt. Nur gültigeJSON
-Strings werden in den TypJSONB
umgewandelt, um Funktionssignaturen abzugleichen. Beispiele:SELECT concat('abc'::text, '{"key1":1}'::jsonb); -- Returns error SELECT concat('abc'::text, CAST('{"key1":1}'::jsonb AS TEXT)); -- This works
Indexierung
JSONB
-Spalten unterstützen keine Indexierung. Sie können jedoch einen Index für eine generierte Spalte erstellen, um einen skalaren Wert aus einer JSONB
-Spalte zu extrahieren.
CREATE TABLE Venues (
VenueId BIGINT PRIMARY KEY,
VenueName VARCHAR(1024),
VenueAddress VARCHAR(1024),
VenueFeatures JSONB,
TotalCapacity BIGINT GENERATED ALWAYS AS ((VenueFeatures->>'capacity')::BIGINT) STORED,
DateOpened TIMESTAMPTZ
);
CREATE INDEX VenuesByCapacity ON Venues(TotalCapacity);