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
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 memorizza una rappresentazione normalizzata del
documento di input. Ciò implica quanto segue:
- Le virgolette e i caratteri di spazio vuoto non vengono conservati.
- I commenti non sono supportati. Le transazioni o le query con commenti non vanno a buon fine.
- Le chiavi dell'oggetto vengono ordinate prima in base alla lunghezza della chiave e poi in ordine lessicografico in base alla lunghezza della chiave dell'oggetto equivalente. Se sono presenti chiavi di oggetti duplicate, viene conservata solo l'ultima.
- I tipi primitivi (
string
,boolean
,number
enull
) mantengono inalterati il tipo e il 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
JSONB
null
vengono trattati come nonNULL
in SQL. 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 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 separatore decimale e 16383 cifre dopo il separatore decimale.
- La dimensione massima consentita del formato di archiviazione normalizzato è 10 MB.
- I documenti
JSONB
devono essere codificati in UTF-8. Le transazioni o le query con documentiJSONB
codificati in altri formati restituiscono un errore.
Creare 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 inserirla utilizzando le istruzioni ALTER
come segue:
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 qualsiasi altra colonna.
Di seguito è riportato 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 JSONB
utilizzando le librerie client Spanner.
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, 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Esegui query sui dati JSONB
Puoi eseguire query sulle colonne JSONB
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 JSONB
utilizzando
le librerie client Spanner.
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, 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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 Spanner.
Per autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori 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
:
- Ordinamento, confronto e aggregazione
- PrimaryKey e ForeignKey
- Indicizzazione, incluso 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 tipi negli strumenti che utilizzano il protocollo di comunicazione 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 abbinare 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
Le colonne JSONB
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);