Auf dieser Seite wird beschrieben, wie Sie den Datentyp JSONB
bei der Verwendung von Spanner verwenden.
JSONB
ist ein PostgreSQL-Datentyp zum Speichern semistrukturierter Daten.
Daten im PostgreSQL-Dialekt
von Spanner erstellen. JSONB
Holds
im JSON-Format (JavaScript Object Notation), das der Spezifikation entspricht
beschrieben in RFC 7159.
Spezifikationen
Der Spanner-Datentyp JSONB
speichert eine normalisierte Darstellung von
das Eingabedokument. 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 Schlüssellänge und dann lexikografisch nach dem gleichwertige Objektschlüssellänge. Bei doppelten Objektschlüsseln werden nur die letzten beibehalten.
- Einfache Typen (
string
,boolean
,number
undnull
) haben ihren Typ und der Wert beibehalten wird.- Die Werte des Typs
string
werden genau beibehalten. - Nachgestellte Nullen werden beibehalten. Das Ausgabeformat für Werte des Typs
number
keine wissenschaftliche Schreibweise verwendet.
- Die Werte des Typs
JSONB
null
-Werte werden als SQL-Nicht-NULL
behandelt. Hier einige Beispiele: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 Elemente im JSONB-Array wird beibehalten.
Beschränkungen
Für Spanner JSONB
gelten die folgenden Einschränkungen:
- Argumente für die
to_jsonb
-Funktion können nur aus PostgreSQL stammen Datentypen, die Spanner unterstützt. - Zahlentypwerte können 4.932 Ziffern vor dem Dezimalzeichen haben und 16.383 Ziffern nach dem Dezimalzeichen.
- Die maximal zulässige Größe für das normalisierte Speicherformat beträgt 10 MB.
JSONB
-Dokumente müssen in UTF-8 codiert sein. Transaktionen oder Abfragen mitJSONB
Dokumente, die in anderen Formaten codiert sind, geben einen Fehler zurück.
Tabelle mit JSONB-Spalten erstellen
Sie können beim Erstellen einer Tabelle 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 verwenden:
ALTER TABLE Venues ADD COLUMN VenueDetails JSONB;
ALTER TABLE Venues DROP COLUMN VenueDetails;
Im folgenden Beispiel sehen Sie, wie Sie eine JSONB
-Spalte namens VenueDetails
die Tabelle Venues
mit Spanner-Clientbibliotheken.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
JSONB-Daten ändern
JSONB
-Spalten können wie jede andere Spalte geändert werden.
Hier ein Beispiel:
UPDATE Venues SET VenueFeatures = '{"rating": 4.5, "tags":["multi-cuisine", "open-seating"] }'
WHERE VenueId = 1;
Im folgenden Beispiel sehen Sie, wie JSONB
-Daten mit
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 zur Authentifizierung bei Spanner Standardanmeldedaten für Anwendungen ein. 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 hat, der größer als 3.5
ist.
SELECT VenueId, VenueName FROM Venues WHERE (VenueFeatures->>'rating')::FLOAT8 > 3.5;
Das folgende Beispiel zeigt, wie JSONB
-Daten mit den Spanner-Clientbibliotheken abgefragt werden.
C++
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.
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 in Spanner-JSONB
nicht unterstützt:
- Sortierung, Vergleich und Aggregation
- Primärschlüssel und Fremdschlüssel
- Indexierung, einschließlich des GIN-Index. Weitere Informationen finden Sie unter Indexierung.
- Spalte
JSONB
in einen anderen Datentyp oder in einen anderen Datentyp ändern - Parametrisierte Abfragen mit nicht typisierten JSONB-Parametern in Tools verwenden, PostgreSQL-Wire-Protokoll
Erzwingung in der Abfrage-Engine. Im Gegensatz zu Standard-PostgreSQL wird die Erzwingung aus
JSONB
in Text wird nicht unterstützt. Nur gültigeJSON
-Strings werden in den TypJSONB
umgewandelt, Funktionssignaturen übereinstimmen. 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
Eine generierte Spalte, 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);