Nesta página, descrevemos 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 da entrada Documento JSON.
- O JSON pode ser aninhado em até 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 o
TO_JSON()
,JSON_OBJECT()
, e oJSON_ARRAY()
para criar documentos JSON no SQL. Essas funções implementam os caracteres de escape e aspas necessários.
O tamanho máximo permitido do documento normalizado é 2621440 de caracteres UTF-8.
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. Tipo JSON valores 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
para
a 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 de JSON
usando o
Bibliotecas de cliente do Spanner.
C++
Para aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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 o
Bibliotecas de cliente do Spanner.
C++
Para aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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 aprender a 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
- Não é possível usar colunas JSON em ORDER BY.
- As colunas do tipo JSON não são compatíveis com indexação. No entanto, é possível criar um índice 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 de STRING em
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: