Questa pagina descrive come lavorare con JSON utilizzando Spanner.
Il tipo di dati JSON è un tipo di dati semistrutturati utilizzato per conservare 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 i dati sparsi o che hanno una struttura poco definita o modificabile. Tuttavia, l'ottimizzatore delle query fa affidamento sul modello relazionale per filtrare, unire, aggregare e ordinare su larga scala. Le query su JSON avranno meno ottimizzazioni integrate e meno abitudini per l'ispezione e la messa a punto delle prestazioni.
Specifiche
Il tipo JSON 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 sono ordinati lessicograficamente.
- L'ordine degli elementi degli array JSON viene mantenuto.
- Se un oggetto JSON ha chiavi duplicate, viene conservato solo la prima.
- Tipo e valore dei tipi primitivi (stringa, booleano, numero e nullo) vengono mantenuti.
- I valori del tipo di stringa vengono conservati esattamente.
- I valori del tipo di numero vengono conservati, ma la loro rappresentazione testuale potrebbe cambiare
in seguito al processo di normalizzazione. Ad esempio, un numero di input pari a 10000 può avere una rappresentazione normalizzata di 1e+4. La semantica della conservazione dei valori numerici è la seguente:
- I numeri interi firmati nell'intervallo [INT64_MIN, INT64_MAX] vengono conservati.
- I numeri interi senza segno nell'intervallo [0, UINT64_MAX] vengono conservati.
- I valori doppi che possono essere sottoposti a round trip da stringa a doppio
a stringa senza perdita di precisione vengono conservati. Se un valore doppio non può
arrotondare il trip in questo modo, la transazione o la query non va a buon fine.
- 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,
Le dimensioni massime consentite del documento normalizzato sono di 2621440 caratteri UTF-8.
Supporto di valori Null
I valori null
JSON 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 avere codifica 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 creazione della tabella. I valori di tipo JSON possono essere nulli.
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 da tabelle esistenti
Una colonna JSON può anche essere aggiunta e rimossa dalle tabelle esistenti.
ALTER TABLE Venues ADD COLUMN VenueDetails JSON;
ALTER TABLE Venues DROP COLUMN VenueDetails;
L'esempio seguente mostra come aggiungere una colonna JSON
denominata VenueDetails
alla tabella Venues
utilizzando le librerie client di Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Modifica dati JSON
L'esempio seguente 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 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 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 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 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 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 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.
Ruby
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.
Query su dati JSON
L'esempio seguente mostra come eseguire query sui 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 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 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 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 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 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 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.
Ruby
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.
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, viene creato un indice VenueMisc
sulla colonna generata
Details
che estrae un valore scalare dall'elemento JSON VenueDetails
.
L'elemento json_path modificabile è un valore 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 JSON
- Operatori JSON: