Questa pagina descrive come utilizzare il tipo di dati JSONB
quando utilizzi Spanner.
JSONB
è un tipo di dati PostgreSQL utilizzato per memorizzare dati semistrutturati nel dialetto PostgreSQL di Spanner. JSONB
conserva i dati
in formato JSON (JavaScript Object Notation), che segue le specifiche
descritto in RFC 7159.
Specifiche
Il tipo di dati JSONB
di Spanner archivia una rappresentazione normalizzata di
il 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 in base alla lunghezza della chiave e poi in ordine grammaticale lunghezza della chiave dell'oggetto equivalente. Se sono presenti chiavi oggetto duplicate, solo l'ultima ne viene conservata una.
- I tipi primitivi (
string
,boolean
,number
enull
) hanno il proprio tipo e il valore viene mantenuto.- 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
JSONB
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 dell'array JSONB viene mantenuto.
Limitazioni
Con Spanner JSONB
si applicano le seguenti limitazioni:
- Gli argomenti alla funzione
to_jsonb
possono provenire solo da PostgreSQL i tipi di dati supportati da Spanner. - I valori del tipo di numero possono contenere 4932 cifre prima del punto decimale e 16.383 cifre dopo la virgola decimale.
- La dimensione massima consentita del formato di archiviazione normalizzato è 10 MB.
- I documenti
JSONB
devono essere codificati in UTF-8. Transazioni o query conJSONB
i documenti 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 esempio di oggetto VenueFeatures
JSONB
:
{
"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;
L'esempio seguente mostra come aggiungere una colonna JSONB
denominata VenueDetails
alla tabella Venues
utilizzando le librerie client Spanner.
C++
C#
Vai
Java
Node.js
PHP
Python
Ruby
Modificare i 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;
L'esempio seguente mostra come aggiornare i dati di JSONB
utilizzando
librerie client di Spanner.
C++
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client Spanner.
Per eseguire l'autenticazione su Spanner, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura 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 autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura 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 autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client Spanner.
Per eseguire l'autenticazione su Spanner, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura 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 autenticarti a 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 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 Spanner.
Per eseguire l'autenticazione su Spanner, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client Spanner.
Per eseguire l'autenticazione su Spanner, configura 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. La
nell'esempio seguente estrae VenueId
e VenueName
da Venues
in cui
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
librerie client di Spanner.
C++
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client di Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
C#
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura 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 autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client Spanner.
Per eseguire l'autenticazione su Spanner, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client Spanner.
Per autenticarti a 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 autenticarti a 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 autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per scoprire come installare e utilizzare la libreria client per Spanner, consulta Librerie client Spanner.
Per eseguire l'autenticazione su Spanner, configura 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 in Spanner JSONB
:
- Ordine, confronto e aggregazione
- PrimaryKey e ForeignKey
- Indicizzazione, compreso l'indice GIN. Per ulteriori informazioni, consulta la sezione Indicizzazione.
- Modifica di una colonna
JSONB
in o da qualsiasi altro tipo di dati - Utilizzo di query con parametri con parametri JSONB non digitati negli strumenti che utilizzano il protocollo PostgreSQL
Coercizione nel motore di query. A differenza di PostgreSQL standard, la coercizione da
JSONB
non è supportato. Solo le stringheJSON
valide vengono forzate al tipoJSONB
per eguagliare le 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);