En esta página, se describe cómo trabajar con JSON con Spanner.
El tipo de datos JSON es un tipo de datos semiestructurado que se usa para conservar datos JSON (notación de objetos de JavaScript). Las especificaciones del formato JSON se describen en RFC 7159.
JSON es útil para complementar un esquema relacional para datos dispersos, que tienen una estructura definida o que cambia de manera flexible. Sin embargo, el optimizador de consultas se basa en el modelo relacional para filtrar, unir, agregar y ordenar a gran escala de manera eficiente. Las consultas sobre JSON tendrán menos optimizaciones integradas y menos posibilidades de inspeccionar y ajustar el rendimiento.
Especificaciones
El tipo JSON de Spanner almacena una representación normalizada de la entrada Documento JSON.
- JSON se puede anidar en un máximo de 80 niveles.
- El espacio en blanco no se conserva.
- No se admiten comentarios. Las transacciones o consultas con comentarios fallarán.
- Los miembros de un objeto JSON se ordenan de manera lexicográfica.
- Los elementos del arreglo JSON se conservan en su orden.
- Si un objeto JSON tiene claves duplicadas, solo se conserva la primera.
- Los tipos básicos (string, booleano, número y nulo) tienen su tipo y valor preservados.
- Los valores de tipo de string se conservan de forma exacta.
- Los valores de tipo numérico se conservan, pero su representación textual puede cambiar como resultado del proceso de normalización. Por ejemplo, un número de entrada de 10,000 puede tener una representación normalizada de 1e+4. La semántica de preservación del valor numérico es la siguiente:
- Se conservan los números enteros con signo en el rango de [INT64_MIN, INT64_MAX].
- Se conservan los números enteros sin signo en el rango de [0, UINT64_MAX].
- Se conservan los valores dobles que se pueden redondear de una string a otra con la string sin pérdida de precisión. Si un valor doble no puede viajar ida y vuelta de esta manera, la transacción o consulta falla.
- Por ejemplo,
SELECT JSON '2.2412421353246235436'
falla. - Una solución alternativa funcional es
PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round')
, que muestraJSON '2.2412421353246237'
.
- Por ejemplo,
- Usa el
TO_JSON()
,JSON_OBJECT()
, yJSON_ARRAY()
para crear documentos JSON en SQL. Estas funciones implementan los caracteres de comillas y escape necesarios.
El tamaño máximo permitido para un documento normalizado es de 10 MB.
Nulabilidad
Los valores null
de JSON se tratan como SQL que no es NULL.
Por ejemplo:
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
Codificación
Los documentos JSON se deben codificar en UTF-8. Las transacciones o consultas con documentos JSON codificados en otros formatos muestran un error.
Crea una tabla con columnas JSON
Se puede agregar una columna JSON a una tabla cuando esta se crea. Tipo de JSON los valores pueden ser anulables.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
VenueFeatures JSON,
DateOpened DATE,
) PRIMARY KEY(VenueId);
Agregado y quitado de las columnas JSON de las tablas existentes
Una columna JSON también se puede agregar y descartar de las tablas existentes.
ALTER TABLE Venues ADD COLUMN VenueDetails JSON;
ALTER TABLE Venues DROP COLUMN VenueDetails;
En el siguiente ejemplo, se muestra cómo agregar una columna JSON
llamada VenueDetails
a la tabla Venues
mediante las bibliotecas cliente de Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Modifica datos de JSON
En el siguiente ejemplo, se muestra cómo actualizar datos de JSON
con la
Bibliotecas cliente de Spanner.
C++
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
C#
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
PHP
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Consulta datos JSON
En el siguiente ejemplo, se muestra cómo consultar los datos JSON
mediante las bibliotecas cliente de Spanner.
C++
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
C#
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
PHP
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta Bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Restricciones
- Las columnas JSON no se pueden usar en ORDER BY.
- Las columnas de tipo JSON no admiten la indexación. Sin embargo, se puede crear un índice en una columna generada que extraiga un valor escalar de un elemento JSON.
En el siguiente ejemplo, se crea un índice VenueMisc
en la columna generada Details
, que extrae un valor escalar del elemento JSON VenueDetails
.
El json_path editable es un valor STRING en 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);
Referencias
- Tipo de datos JSON
- Funciones JSON
- Operadores JSON: