Aplicação do tipo de dados no Bigtable
O esquema flexível do Bigtable permite-lhe armazenar dados de qualquer tipo, como strings, datas, números, documentos JSON ou até imagens ou PDFs, numa tabela do Bigtable.
Este documento descreve quando o Bigtable aplica o tipo, o que exige que o codifique ou descodifique no código da sua aplicação. Para ver uma lista dos 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:
- Agregue famílias de colunas (contadores)
- Indicações de tempo
- Vistas materializadas
Dados agregados
Para o tipo de dados aggregate, a codificação depende do tipo de agregação. Quando cria uma família de colunas agregadas, tem de 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++ |
Quando consulta os dados em células agregadas através de SQL, o SQL incorpora automaticamente informações de tipo.
Quando lê os dados em células agregadas através do método ReadRows
da API Data, o Bigtable devolve bytes, pelo que a sua aplicação tem de descodificar os valores através da codificação que o Bigtable usou para mapear os dados introduzidos para bytes.
Não é possível converter uma família de colunas que contenha dados não agregados numa família de colunas agregadas. As colunas em famílias de colunas agregadas não podem conter células não agregadas, e as famílias 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 o artigo Crie uma tabela. Para ver exemplos de código que mostram como incrementar uma célula agregada com valores codificados, consulte Incrementar um valor.
Indicações de tempo
Cada célula do Bigtable tem um carimbo de data/hora Int64
que tem de ser um valor de microssegundos com, no máximo, precisão de milissegundos. O Bigtable rejeita uma indicação de tempo com precisão de microssegundos, como 3023483279876543. Neste exemplo, o valor de data/hora aceitável é 3023483279876000. Uma indicação de tempo é o número de microssegundos desde o início da época Unix, 1970-01-01 00:00:00 UTC
.
Vistas materializadas contínuas
As vistas materializadas contínuas são recursos só de leitura que pode ler através de SQL ou com uma chamada da API Data ReadRows
. Os dados numa vista materializada são tipados com base na consulta que os define. Para uma vista geral, consulte o artigo Vistas materializadas
contínuas.
Quando usa SQL para consultar uma vista materializada contínua, o SQL incorpora automaticamente informações de tipo.
Quando lê a partir de uma vista materializada contínua através de um pedido da API de dadosReadRows
, tem de conhecer o tipo de cada coluna e descodificá-lo no código da sua aplicação.
Os valores agregados numa vista materializada contínua são armazenados através da codificação descrita na tabela seguinte, com base no tipo de saída da coluna da definição da vista.
Tipo | Codificação |
---|---|
BOOL | Valor de 1 byte, 1 = verdadeiro, 0 = falso |
BYTES | Sem codificação |
INT64 (ou INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) | 64 bits big-endian |
FLOAT64 | IEEE 754 de 64 bits, excluindo NaN e +/-inf |
STRING | UTF-8 |
HORA/INDICAÇÃO DE TEMPO | Número inteiro de 64 bits que representa o número de microssegundos desde a época Unix (consistente com o GoogleSQL) |
Chaves de linhas estruturadas
As chaves de linhas estruturadas permitem-lhe aceder aos seus dados através de chaves de várias colunas, semelhantes às chaves compostas em bases de dados relacionais.
O tipo e a codificação das chaves de linhas estruturadas são definidos por um esquema de chaves de linhas que pode adicionar opcionalmente a uma tabela do Bigtable. Os dados de chaves de linhas estruturadas são armazenados como bytes, mas o GoogleSQL para Bigtable usa automaticamente o tipo e a codificação definidos no esquema de chaves de linhas quando executa uma consulta SQL na tabela.
A utilização de um esquema de chave de linha para consultar uma tabela com um pedido ReadRows
não é suportada. Uma vista materializada contínua tem um esquema de chave de linha por predefinição. Para mais informações sobre chaves de linhas estruturadas, consulte o artigo Faça a gestão de esquemas de chaves de linhas.
Tipos não aplicados
Se não forem fornecidas informações de tipo, o Bigtable trata cada célula como bytes com uma codificação desconhecida.
Quando consulta famílias de colunas criadas sem aplicação de tipos, tem de fornecer informações de tipo no momento da leitura para garantir que os dados são lidos corretamente. Isto é relevante para as funções de base de dados cujo comportamento depende do tipo de dados. O GoogleSQL para o Bigtable oferece funções CAST para fazer conversões de tipos no momento da consulta. Estas funções convertem bytes nos tipos que várias funções esperam.
Embora o Bigtable não aplique tipos, determinadas operações pressupõem um tipo de dados. Saber isto ajuda a garantir que os seus dados são escritos de forma que possam ser processados na base de dados. Seguem-se alguns exemplos:
- Os incrementos que usam
ReadModifyWriteRow
pressupõem que a célula contém um 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 vírgula flutuante de 64 bits. - A função
TO_VECTOR32
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 vírgula flutuante de 32 bits.