Questa pagina descrive come lavorare con JSON utilizzando Spanner.
Il tipo di dati JSON è un tipo di dati semistrutturati utilizzato per memorizzare i dati JSON (JavaScript Object Notation). Le specifiche per il formato JSON sono descritto in RFC 7159.
JSON è utile per integrare uno schema relazionale per i dati sparsi o con una struttura poco chiara o mutevole. Tuttavia, lo strumento di ottimizzazione delle query si basa il modello relazionale per filtrare, unire, aggregare e ordinare in modo efficiente su larga scala. Le query su JSON avranno meno ottimizzazioni integrate e meno inviti per ispezionare e ottimizzare le prestazioni.
Specifiche
Il tipo JSON Spanner archivia una rappresentazione normalizzata dell'input documento JSON.
- 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 in ordine alfabetico.
- L'ordine degli elementi degli array JSON viene mantenuto.
- Se un oggetto JSON ha chiavi duplicate, viene conservato solo la prima.
- I tipi primitivi (stringa, booleano, numero e nullo) hanno il proprio tipo
e il valore viene mantenuto.
- I valori del tipo di stringa vengono conservati esattamente.
- I valori del tipo di numero vengono conservati, ma possono avere un proprio testo
rappresentazione cambia a seguito del processo di normalizzazione. Per
Ad esempio, un numero di input pari a 10000 può avere un valore
rappresentazione di 1e+4. La semantica della conservazione dei valori numerici
che segue:
- I numeri interi firmati nell'intervallo [INT64_MIN, INT64_MAX] vengono conservati.
- I numeri interi senza segno nell'intervallo [0, UINT64_MAX] vengono conservati.
- Valori doppi che possono essere sottoposti a round trip da stringa a doppio
senza perdita di precisione vengono conservate. Se non è possibile specificare un valore doppio
andata e ritorno 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,
- Utilizza la
TO_JSON()
,JSON_OBJECT()
, eJSON_ARRAY()
per creare documenti JSON in SQL. Queste funzioni implementano le virgolette e i caratteri di escape necessari.
La dimensione massima consentita del documento normalizzato è 10 MB.
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. Transazioni o query con JSON i documenti 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. Tipo JSON ai valori può essere associato un valore 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 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
a
la tabella Venues
utilizzando le librerie client di Spanner.
C++
C#
Vai
Java
Node.js
PHP
Python
Ruby
Modifica dati JSON
L'esempio seguente mostra come aggiornare i dati JSON
utilizzando la proprietà
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 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 eseguire l'autenticazione su Spanner, configura 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, 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 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 di 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.
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 ulteriori informazioni, vedi Configura 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 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 autenticarti a Spanner, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Esegui query sui dati JSON
L'esempio seguente mostra come eseguire query sui dati JSON
utilizzando il metodo
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 di 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.
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 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 di Spanner.
Per eseguire l'autenticazione su Spanner, configura 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 eseguire l'autenticazione su Spanner, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura 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 ulteriori informazioni, vedi Configura 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 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 di 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.
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
nella colonna generata
Details
che estrae un valore scalare dall'elemento JSON VenueDetails
.
Il valore modificabile json_path è 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: