Questa pagina descrive come lavorare con JSON utilizzando Spanner.
Il tipo di dati JSON è un tipo di dati semistrutturato 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 i dati sparsi o con una struttura definita in modo approssimativo o in evoluzione. Tuttavia, l'ottimizzatore di query si basa sul modello relazionale per filtrare, unire, aggregare e ordinare in modo efficiente su larga scala. Le query su JSON avranno meno ottimizzazioni integrate e meno funzionalità per esaminare e ottimizzare le prestazioni.
Specifiche
Il tipo JSON di Spanner memorizza una rappresentazione normalizzata del documento JSON di input.
- JSON può essere nidificato fino a un massimo di 80 livelli.
- Lo spazio vuoto non viene mantenuto.
- 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 dell'array JSON viene mantenuto.
- Se un oggetto JSON ha chiavi duplicate, viene conservata solo la prima.
- I tipi primitivi (stringa, booleano, numero e null) mantengono il tipo
e il valore.
- I valori di tipo String vengono conservati esattamente.
- I valori di tipo numerico vengono conservati, ma la loro rappresentazione
testuale potrebbe essere modificata in seguito al processo di normalizzazione. Ad esempio, un numero di input pari a 10.000 potrebbe avere una rappresentazione normalizzata pari a 1e+4. La semantica di conservazione dei valori numerici è la seguente:
- Gli interi con segno 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 convertiti da stringa a doppio e da doppio a stringa senza perdita di precisione decimale vengono conservati. Se un valore doppio
non può essere trasferito in questo modo, la transazione o la query non riesce.
- Ad esempio,
SELECT JSON '2.2412421353246235436'non va a buon fine. - Una soluzione alternativa funzionale è
PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round'), che restituisceJSON '2.2412421353246237'.
- Ad esempio,
- Utilizza le funzioni
TO_JSON(),JSON_OBJECT()eJSON_ARRAY()per creare documenti JSON in SQL. Queste funzioni implementano i caratteri di escape e le virgolette necessari.
La dimensione massima consentita del documento normalizzato è di 10 MB.
Supporto di valori Null
I valori JSON null vengono trattati come SQL non NULL.
Ad esempio:
SELECT (JSON '{"a":null}').a IS NULL;