In questa pagina viene descritto come lavorare con il tipo di dati JSONB
quando si utilizza Spanner.
JSONB
è un tipo di dati PostgreSQL utilizzato per contenere dati semistrutturati
nel dialetto PostgreSQL di Spanner. JSONB
contiene i dati in formato JSON (JavaScript Object Notation), che segue la specifica descritta in RFC 7159.
Specifiche
Il tipo di dati JSONB
di Spanner archivia una rappresentazione normalizzata del documento di input. Ciò implica quanto segue:
- Le virgolette e gli spazi vuoti non vengono conservati.
- I commenti non sono supportati. Le transazioni o le query con commenti non vanno a buon fine.
- Le chiavi degli oggetti vengono ordinate prima per lunghezza della chiave e poi lessicograficamente in base alla lunghezza equivalente della chiave dell'oggetto. Se sono presenti chiavi oggetto duplicate, viene conservata solo l'ultima.
- Per i tipi primitivi (
string
,boolean
,number
enull
) vengono conservati tipo e valore.- I valori di tipo
string
vengono conservati esattamente. - Gli zeri finali vengono conservati. Il formato di output per i valori di tipo
number
non utilizza la notazione scientifica.
- I valori di tipo
I valori
null
diJSONB
vengono trattati come SQL nonNULL
. Ad esempio: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
L'ordine degli elementi array JSONB viene mantenuto.
Limitazioni
Con Spanner JSONB
si applicano le seguenti limitazioni:
- Gli argomenti della funzione
to_jsonb
possono provenire solo dai tipi di dati PostgreSQL supportati da Spanner. - I valori di tipo numerico possono avere 4932 cifre prima del punto decimale e 16.383 cifre dopo il separatore decimale.
- La dimensione massima consentita del formato di archiviazione normalizzato è 10 MB.
JSONB
documenti devono avere la codifica UTF-8. Le transazioni o le query con documentiJSONB
codificati in altri formati restituiscono un errore.
Crea una tabella con colonne JSONB
Puoi aggiungere una colonna JSONB
a una tabella quando la crei.
CREATE TABLE Venues (
VenueId BIGINT PRIMARY KEY,
VenueName VARCHAR(1024),
VenueAddress VARCHAR(1024),
VenueFeatures JSONB,
DateOpened TIMESTAMPTZ
);
Di seguito è riportato un oggetto VenueFeatures
JSONB
di esempio:
{
"rating": 4.5,
"capacity":"1500",
"construction":"brick",
"tags": [
"multi-cuisine",
"open-seating",
"stage",
"public address system"
]
}
Aggiungere e rimuovere colonne JSONB dalle tabelle esistenti
Puoi aggiungere una colonna JSONB
e rilasciarla utilizzando le istruzioni ALTER
nel seguente modo:
ALTER TABLE Venues ADD COLUMN VenueDetails JSONB;
ALTER TABLE Venues DROP COLUMN VenueDetails;
Il seguente esempio mostra come aggiungere una colonna JSONB
denominata VenueDetails
alla tabella Venues
utilizzando le librerie client di Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Modifica dati JSONB
Puoi modificare una colonna JSONB
come faresti con qualsiasi altra colonna.
Ecco un esempio:
UPDATE Venues SET VenueFeatures = '{"rating": 4.5, "tags":["multi-cuisine", "open-seating"] }'
WHERE VenueId = 1;
Il seguente esempio mostra come aggiornare i dati JSONB
utilizzando le librerie client di Spanner.
C++
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
C#
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Go
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Java
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
PHP
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esegui query sui dati JSONB
Puoi eseguire query su JSONB
colonne in base ai valori dei campi sottostanti. L'esempio seguente estrae VenueId
e VenueName
da Venues
, dove
VenueFeatures
ha un valore rating
maggiore di 3.5
.
SELECT VenueId, VenueName FROM Venues WHERE (VenueFeatures->>'rating')::FLOAT8 > 3.5;
L'esempio seguente mostra come eseguire query sui dati di JSONB
utilizzando le librerie client di Spanner.
C++
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
C#
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Go
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Java
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
PHP
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta librerie client di Spanner.
Per eseguire l'autenticazione su Spanner, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Funzionalità JSONB di PostgreSQL non supportate
Le seguenti funzionalità di PostgreSQL JSONB
non sono supportate su Spanner JSONB
:
- Ordine, confronto e aggregazione
- Chiave primaria e chiave esterna
- Indicizzazione, compreso l'indice GIN. Per maggiori informazioni, consulta la sezione Indicizzazione.
- Modifica di una colonna
JSONB
da o verso un altro tipo di dati - Utilizzo di query con parametri con parametri JSONB non digitati in strumenti che utilizzano il protocollo di cavo PostgreSQL
Coercizione nel motore di query. A differenza di PostgreSQL standard, la coercizione da
JSONB
a testo non è supportata. Solo le stringheJSON
valide vengono forzate al tipoJSONB
per corrispondere alle firme delle funzioni. Esempi:SELECT concat('abc'::text, '{"key1":1}'::jsonb); -- Returns error SELECT concat('abc'::text, CAST('{"key1":1}'::jsonb AS TEXT)); -- This works
Indicizzazione
JSONB
colonne non supportano l'indicizzazione. Tuttavia, puoi creare un indice su una colonna generata per estrarre un valore scalare da una colonna JSONB
.
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);