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 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 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 é de 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. 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 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 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 a
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 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 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 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 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: