Utilizzare i dati JSON

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 restituisce JSON '2.2412421353246237'.
  • Utilizza le funzioni TO_JSON(), JSON_OBJECT() e JSON_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;