Esta página descreve como trabalhar com JSON usando o Spanner.
Os dados do tipo JSON são semiestruturados e usados para armazenar dados JSON (JavaScript Object Notation). As especificações do formato JSON são descritas em RFC 7159 (em inglês).
O JSON é útil para complementar um esquema relacional para dados esparsos ou que com uma estrutura vagamente definida ou mutável. No entanto, o otimizador de consultas se baseia no modelo relacional para filtrar, juntar, agregar e classificar de maneira eficiente em escala. As consultas por JSON terão menos otimizações e recursos integrados para inspecionar e ajustar o desempenho.
Especificações
O tipo JSON do Spanner armazena uma representação normalizada do documento JSON de entrada.
- O JSON pode ser aninhado para um máximo de 80 níveis.
- O espaço em branco não é preservado.
- Não é possível usar comentários. Transações ou consultas com comentários falharão.
- Os membros de um objeto JSON são classificados lexicograficamente.
- A ordem dos elementos da matriz JSON é preservada.
- Se um objeto JSON tiver chaves duplicadas, apenas a primeira será preservada.
- O tipo e o valor de tipos primitivos (string, booleano, número e nulo) serão preservados.
- Os valores do tipo string serão preservados.
- Os valores do tipo de número serão preservados, mas podem ter a representação textual
como resultado do processo de normalização. Por
exemplo, um número de entrada de 10000 pode ter uma representação normalizada de 1e+4. A semântica de preservação de valor numérico
é a seguinte:
- Os números inteiros assinados no intervalo de [INT64_MIN, INT64_MAX] são preservados.
- Os números inteiros não assinados no intervalo de [0, UINT64_MAX] são preservados.
- Valores duplicados que podem ser enviados entre string e duplicatas
sem perda de precisão são preservados. Se o valor duplicado não puder ser enviado assim,
a transação ou a consulta falhará.
- Por exemplo,
SELECT JSON '2.2412421353246235436'
falha. - Uma solução funcional é
PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round')
, que retornaJSON '2.2412421353246237'
.
- Por exemplo,
- Use as funções
TO_JSON()
,JSON_OBJECT()
eJSON_ARRAY()
para construir documentos JSON no SQL. Essas funções implementam os caracteres de aspas e de escape necessários.
O tamanho máximo permitido do documento normalizado é 10 MB.
Nulidade
Os valores JSON null
são tratados como SQL não NULL.
Exemplo:
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ção
Os documentos JSON precisam ser codificados em UTF-8. Transações ou consultas com documentos JSON codificados em outros formatos retornam um erro.
Criar uma tabela com colunas JSON
Uma coluna JSON pode ser adicionada a uma tabela quando ela é criada. Os valores do tipo JSON podem ser anuláveis.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
VenueFeatures JSON,
DateOpened DATE,
) PRIMARY KEY(VenueId);
Adicionar e remover colunas JSON de tabelas atuais
Também é possível adicionar e remover uma coluna JSON das tabelas atuais.
ALTER TABLE Venues ADD COLUMN VenueDetails JSON;
ALTER TABLE Venues DROP COLUMN VenueDetails;
O exemplo a seguir mostra como adicionar uma coluna JSON
chamada VenueDetails
à
tabela Venues
usando as bibliotecas de cliente do Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Modificar dados JSON
O exemplo a seguir mostra como atualizar dados JSON
usando as
bibliotecas de cliente do Spanner.
C++
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
C#
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Consultar dados JSON
O exemplo a seguir mostra como consultar dados JSON
usando as
bibliotecas de cliente do Spanner.
C++
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
C#
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Restrições
- As colunas JSON não podem ser usadas em ORDER BY.
- As colunas do tipo JSON não são compatíveis com indexação. No entanto, um índice pode ser criado em uma coluna gerada que extrai um valor escalar de um elemento JSON.
No exemplo abaixo, um índice VenueMisc
é criado na coluna gerada
Details
, que extrai um valor escalar do elemento JSON VenueDetails
.
O json_path editável é um valor STRING no 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);
Referências
- Tipo de dados JSON
- Funções JSON
- Operadores JSON: