Trabajar con datos JSONB

En esta página se describe cómo trabajar con el tipo de datos JSONB al usar Spanner.

JSONB es un tipo de datos de PostgreSQL que se usa para almacenar datos semiestructurados en el dialecto PostgreSQL de Spanner. JSONB contiene datos en formato de notación de objetos JavaScript (JSON), que sigue la especificación descrita en RFC 7159.

Especificaciones

El tipo de datos JSONB de Spanner almacena una representación normalizada del documento de entrada. Esto implica lo siguiente:

  • No se conservan las comillas ni los espacios.
  • No se admiten comentarios. Las transacciones o las consultas con comentarios fallan.
  • Las claves de objeto se ordenan primero por la longitud de la clave y, después, lexicográficamente por la longitud de la clave de objeto equivalente. Si hay claves de objeto duplicadas, solo se conserva la última.
  • Los tipos primitivos (string, boolean, number y null) conservan su tipo y su valor.
    • Los valores de tipo string se conservan exactamente.
    • Los ceros finales se conservan. El formato de salida de los valores de tipo number no usa notación científica.
  • Los valores JSONB null se tratan como no NULL de SQL. Por ejemplo:

    SELECT null::jsonb IS NULL;  -- Returns true
    SELECT 'null'::jsonb IS NULL; -- Returns false
    
    SELECT '{"a":null}'::jsonb -> 'a' IS NULL; -- Returns false
    SELECT '{"a":null}'::jsonb -> 'b' IS NULL; -- Returns true
    
    SELECT '{"a":null}'::jsonb -> 'a'; -- Returns a JSONB 'null'
    SELECT '{"a":null}'::jsonb -> 'b'; -- Returns a SQL NULL
    
  • Se conserva el orden de los elementos de la matriz JSONB.

Restricciones

Se aplican las siguientes restricciones con Spanner JSONB:

  • Los argumentos de la función to_jsonb solo pueden ser de los tipos de datos de PostgreSQL que admite Spanner.
  • Los valores de tipo numérico pueden tener 4932 dígitos antes del punto decimal y 16.383 dígitos después del punto decimal.
  • El tamaño máximo permitido del formato de almacenamiento normalizado es de 10 MB.
  • Los documentos JSONB deben estar codificados en UTF-8. Las transacciones o consultas con JSONB documentos codificados en otros formatos devuelven un error.

Crear una tabla con columnas JSONB

Puedes añadir una columna JSONB a una tabla cuando la crees.

CREATE TABLE Venues (
 VenueId   BIGINT PRIMARY KEY,
 VenueName  VARCHAR(1024),