Questa pagina descrive come lavorare con JSON utilizzando Spanner.
Il tipo di dati JSON è un tipo di dati semi-strutturati utilizzato per contenere dati JSON (JavaScript Object Notation). Le specifiche per il formato JSON sono descritte nel documento RFC 7159.
JSON è utile per integrare uno schema relazionale per dati sparsi o con una struttura poco definita o mutevole. ma si basa sul modello relazionale per filtrare, unire, aggregare e ordinare su larga scala in modo efficiente. Le query su JSON avranno meno ottimizzazioni integrate e meno opportunità di ispezione e ottimizzazione delle prestazioni.
Specifiche
Il tipo JSON di Spanner archivia una rappresentazione normalizzata del documento JSON di input.
- JSON può essere nidificato fino a un massimo di 80 livelli.
- Lo spazio vuoto non viene conservato.
- I commenti non sono supportati. Le transazioni o le query con commenti non andranno a buon fine.
- I membri di un oggetto JSON vengono ordinati lessicograficamente.
- L'ordine degli elementi array JSON viene mantenuto.
- Se un oggetto JSON ha chiavi duplicate, viene conservata solo la prima.
- I tipi primitivi (stringa, booleano, numero e null) vengono conservati per tipo e valore.
- I valori del tipo di stringa vengono conservati esattamente.
- I valori dei tipi numerici vengono conservati, ma la loro rappresentazione testuale potrebbe cambiare come risultato del processo di normalizzazione. Ad
esempio, un numero di input pari a 10.000 può avere una rappresentazione normalizzata
di 1e+4. La semantica di conservazione dei valori numerici è la seguente:
- I numeri interi firmati compresi nell'intervallo [INT64_MIN, INT64_MAX] vengono conservati.
- I numeri interi senza segno compresi nell'intervallo [0, UINT64_MAX] vengono conservati.
- Vengono conservati i valori doppi che è possibile tornare indietro da una stringa a un'altra a stringa senza perdita di precisione. Se un valore doppio non può
andare indietro in questo modo, la transazione o la query hanno esito negativo.
- Ad esempio,
SELECT JSON '2.2412421353246235436'
non riesce. - Una soluzione alternativa funzionale è
PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round')
, che restituisceJSON '2.2412421353246237'
.
- Ad esempio,
La dimensione massima consentita del documento normalizzato è 2621440 caratteri UTF-8.
Supporto di valori Null
I valori JSON null
vengono trattati come SQL non NULL.
Ad esempio:
SELECT (JSON '{"a":null}').a IS NULL; -- Returns FALSE
SELECT (JSON '{"a":null}').b IS NULL; -- Returns TRUE
SELECT JSON_QUERY(JSON '{"a":null}', "$.a"); -- Returns a JSON 'null'
SELECT JSON_QUERY(JSON '{"a":null}', "$.b"); -- Returns a SQL NULL
Codifica
I documenti JSON devono essere codificati in UTF-8. Le transazioni o le query con documenti JSON codificati in altri formati restituiscono un errore.
Crea una tabella con colonne JSON
Una colonna JSON può essere aggiunta a una tabella al momento della sua creazione. I valori di tipo JSON possono essere null.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
VenueFeatures JSON,
DateOpened DATE,
) PRIMARY KEY(VenueId);
Aggiungere e rimuovere colonne JSON dalle tabelle esistenti
Una colonna JSON può anche essere aggiunta e rimossa da tabelle esistenti.
ALTER TABLE Venues ADD COLUMN VenueDetails JSON;
ALTER TABLE Venues DROP COLUMN VenueDetails;
Il seguente esempio mostra come aggiungere una colonna JSON
denominata VenueDetails
alla tabella Venues
utilizzando le librerie client Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Modifica dati JSON
Il seguente esempio mostra come aggiornare i dati JSON
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 JSON
Il seguente esempio mostra come eseguire query sui dati di JSON
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.
Limitazioni
- Le colonne JSON non possono essere utilizzate in ORDER BY.
- Le colonne di tipo JSON non supportano l'indicizzazione. Tuttavia, è possibile creare un indice su una colonna generata che estrae un valore scalare da un elemento JSON.
Nell'esempio seguente, sulla colonna generata Details
viene creato un indice VenueMisc
che estrae un valore scalare dall'elemento JSON VenueDetails
.
Il valore json_path modificabile è un valore di STRING in formato JSONPath.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
DateOpened DATE,
VenueDetails JSON,
Details STRING(MAX) AS (JSON_VALUE(VenueDetails, json_path)) STORED
) PRIMARY KEY(VenueId);
CREATE INDEX VenueMisc ON Venues(Details);
Riferimenti
- Tipo di dati JSON
- Funzioni di JSON
- Operatori JSON: