Aplicação de tipos de dados no Bigtable

O esquema flexível do Bigtable permite armazenar dados de qualquer tipo (strings, datas, números, documentos JSON ou até mesmo imagens ou PDFs) em uma tabela do Bigtable.

Este documento descreve quando o Bigtable aplica o tipo, exigindo que você o codifique ou decodifique no código do aplicativo. Para uma lista de tipos de dados do Bigtable, consulte Tipo na documentação de referência da API Data.

Tipos aplicados

O tipo de dados é aplicado aos seguintes dados:

  • Grupos de colunas agregados (contadores)
  • Carimbos de data/hora
  • Visualizações materializadas

Agregações

Para o tipo de dados agregado, a codificação depende do tipo de agregação. Ao criar um grupo de colunas agregado, é necessário especificar um tipo de agregação.

Esta tabela mostra o tipo de entrada e a codificação para cada tipo de agregação.

Tipo de agregação Tipo de entrada Codificação
Soma Int64 BigEndianBytes
Mín. Int64 BigEndianBytes
Máx. Int64 BigEndianBytes
HLL Bytes Zetasketch HLL++

Ao consultar os dados em células agregadas usando o SQL, o SQL incorpora automaticamente informações de tipo.

Ao ler os dados em células agregadas usando o método ReadRows da API Data, o Bigtable retorna bytes. Portanto, o aplicativo precisa decodificar os valores usando a codificação que o Bigtable usou para mapear os dados digitados para bytes.

Não é possível converter um grupo de colunas que contém dados não agregados em um grupo de colunas agregado. As colunas em grupos de colunas agregados não podem conter células não agregadas, e os grupos de colunas padrão não podem conter células agregadas.

Para mais informações sobre como criar tabelas com grupos de colunas agregados, consulte Criar uma tabela. Para exemplos de código que mostram como incrementar uma célula agregada com valores codificados, consulte Incrementar um valor.

Carimbos de data/hora

Cada célula do Bigtable tem um carimbo de data/hora Int64 que precisa ser um valor em microssegundos com precisão de milissegundos no máximo. O Bigtable rejeita um carimbo de data/hora com precisão de microssegundos, como 3023483279876543. Neste exemplo, o valor de carimbo de data/hora aceitável é 3023483279876000. Um carimbo de data/hora é o número de microssegundos desde a época do Unix, 1970-01-01 00:00:00 UTC.

Visualizações materializadas contínuas

As visualizações materializadas contínuas são recursos somente leitura que podem ser lidos usando SQL ou com uma chamada de API Data ReadRows. Os dados em uma visualização materializada são digitados com base na consulta que a define. Para uma visão geral, consulte Visualizações materializadas contínuas.

Ao usar o SQL para consultar uma visualização materializada contínua, o SQL incorpora automaticamente informações de tipo.

Ao ler de uma visualização materializada contínua usando uma solicitação da API Data ReadRows, é necessário conhecer o tipo de cada coluna e decodificá-la no código do aplicativo.

Os valores agregados em uma visualização materializada contínua são armazenados usando a codificação descrita na tabela a seguir, com base no tipo de saída da coluna da definição da visualização.

Tipo Codificação
BOOL Valor de 1 byte, 1 = verdadeiro, 0 = falso
BYTES Sem codificação
INT64 (ou INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) Big-endian de 64 bits
FLOAT64 IEEE 754 de 64 bits, excluindo NaN e +/-inf
STRING UTF-8
TIME/TIMESTAMP Número inteiro de 64 bits que representa o número de microssegundos desde a época do Unix (consistente com o GoogleSQL)
Para mais informações, consulte Codificação na referência da API Data.

Chaves de linha estruturadas

As chaves de linha estruturadas permitem acessar os dados usando chaves de várias colunas, semelhantes a chaves compostas em bancos de dados relacionais.

O tipo e a codificação das chaves de linha estruturadas são definidos por um esquema de chave de linha que pode ser adicionado a uma tabela do Bigtable. Os dados de chave de linha estruturados são armazenados como bytes, mas o GoogleSQL para Bigtable usa automaticamente o tipo e a codificação definidos no esquema de chave de linha ao executar uma consulta SQL na tabela.

Não é possível usar um esquema de chave de linha para consultar uma tabela com uma solicitação ReadRows. Uma visualização materializada contínua tem um esquema de chave de linha por padrão. Para mais informações sobre chaves de linha estruturadas, consulte Gerenciar esquemas de chave de linha.

Tipos não aplicados

Se nenhuma informação de tipo for fornecida, o Bigtable tratará cada célula como bytes com uma codificação desconhecida.

Ao consultar grupos de colunas criados sem aplicação de tipo, é necessário fornecer informações de tipo no momento da leitura para garantir que os dados sejam lidos corretamente. Isso é relevante com funções de banco de dados cujo comportamento depende do tipo de dados. O GoogleSQL para Bigtable oferece CAST funções para fazer conversões de tipo no momento da consulta. Essas funções convertem de bytes para os tipos que várias funções esperam.

Embora o Bigtable não aplique tipos, algumas operações pressupõem um tipo de dados. Saber disso ajuda a garantir que os dados sejam gravados de uma maneira que possa ser processada no banco de dados. Confira alguns exemplos:

  • Os incrementos que usam ReadModifyWriteRow pressupõem que a célula contém um número inteiro assinado big-endian de 64 bits.
  • A função TO_VECTOR64 no SQL espera que a célula contenha uma matriz de bytes que seja uma concatenação dos bytes big-endian de números de ponto flutuante de 64 bits.
  • A função TO_VECTOR32 no SQL espera que a célula contenha uma matriz de bytes que seja uma concatenação dos bytes big-endian de números de ponto flutuante de 32 bits.

A seguir