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 exige a codificação ou decodificação de tipos no código do aplicativo. Para conferir uma lista de tipos de dados do Bigtable, consulte Tipo na documentação de referência da API de dados.
Tipos aplicados
O tipo de dados é aplicado aos seguintes dados:
- Agregar grupos de colunas (contadores)
- Carimbos de data/hora
- Visualizações materializadas.
Agregações
Para o tipo de dados aggregate, a codificação depende do tipo de agregação. Ao criar um grupo de colunas agregadas, é necessário especificar um tipo de agregação.
Esta tabela mostra o tipo de entrada e a codificação de 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++ |
Quando você consulta os dados em células agregadas usando SQL, o SQL incorpora automaticamente informações de tipo.
Quando você lê os dados em células agregadas usando o método ReadRows
da API Data, o Bigtable retorna bytes. Portanto, seu aplicativo precisa decodificar os valores usando a codificação que o Bigtable usou para mapear os dados tipados em bytes.
Não é possível converter um grupo de colunas que contém dados não agregados em um grupo de colunas agregadas. 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 famílias de colunas agregadas, 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 aceitável do carimbo de data/hora é 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 da API de dados 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.
Quando você usa 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 ReadRows
da API Data, é necessário saber 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 |
HORA/CARIMBO DE DATA/HORA | Número inteiro de 64 bits que representa o número de microssegundos desde a época do Unix (compatível com o GoogleSQL). |
Chaves de linha estruturadas
Com chaves de linha estruturadas, é possível acessar seus dados usando chaves de várias colunas, semelhantes às 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 estruturados de chave de linha 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 chave de linha linha.
Tipos não aplicados
Se nenhuma informação de tipo for fornecida, o Bigtable vai tratar cada célula como bytes com uma codificação desconhecida.
Ao consultar grupos de colunas criados sem imposição de tipo, é necessário fornecer informações de tipo no momento da leitura para garantir que os dados sejam lidos corretamente. Isso é relevante para funções de banco de dados cujo comportamento depende do tipo de dados. O GoogleSQL para Bigtable oferece funções CAST para fazer conversões de tipo durante a 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. Isso ajuda a garantir que os dados sejam gravados de uma forma 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 de 64 bits big-endian. - A função
TO_VECTOR64
em 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
em SQL espera que a célula contenha uma matriz de bytes, que é uma concatenação dos bytes big-endian de números de ponto flutuante de 32 bits.