Aplicación de tipos de datos en Bigtable
El esquema flexible de Bigtable te permite almacenar datos de cualquier tipo (cadenas, fechas, números, documentos JSON o incluso imágenes o PDFs) en una tabla de Bigtable.
En este documento, se describe cuándo Bigtable aplica el tipo, lo que requiere que lo codifiques o decodifiques en el código de tu aplicación. Para obtener una lista de los tipos de datos de Bigtable, consulta Type en la documentación de referencia de la API de Data.
Tipos aplicados
El tipo de datos se aplica a los siguientes datos:
- Agrega familias de columnas (contadores)
- Marcas de tiempo
- Vistas materializadas
Agregaciones
Para el tipo de datos aggregate, la codificación depende del tipo de agregación. Cuando creas una familia de columnas agregadas, debes especificar un tipo de agregación.
En esta tabla, se muestran el tipo de entrada y la codificación para cada tipo de agregación.
Tipo de agregación | Tipo de entrada | Codificación |
---|---|---|
Suma | Int64 |
BigEndianBytes
|
Mín. | Int64 |
BigEndianBytes
|
Máx. | Int64 |
BigEndianBytes
|
HLL | Bytes | Zetasketch HLL++ |
Cuando consultas los datos en celdas agregadas con SQL, este lenguaje incorpora automáticamente la información del tipo.
Cuando lees los datos en celdas agregadas con el método ReadRows
de la API de Data, Bigtable devuelve bytes, por lo que tu aplicación debe decodificar los valores con la codificación que Bigtable usó para asignar los datos escritos a bytes.
No puedes convertir una familia de columnas que contiene datos no agregados en una familia de columnas agregadas. Las columnas de las familias de columnas agregadas no pueden contener celdas no agregadas, y las familias de columnas estándar no pueden contener celdas agregadas.
Para obtener más información sobre cómo crear tablas con familias de columnas agregadas, consulta Crea una tabla. Para ver muestras de código que muestran cómo incrementar una celda agregada con valores codificados, consulta Incrementa un valor.
Marcas de tiempo
Cada celda de Bigtable tiene una marca de tiempo Int64
que debe ser un valor de microsegundos con una precisión de milisegundos como máximo. Bigtable rechaza una marca de tiempo con precisión de microsegundos, como 3023483279876543. En este ejemplo, el valor de marca de tiempo aceptable es 3023483279876000. Una marca de tiempo es la cantidad de microsegundos desde la época de Unix, 1970-01-01 00:00:00 UTC
.
Vistas materializadas continuas
Las vistas materializadas continuas son recursos de solo lectura que puedes leer con SQL o con una llamada a la API de Data ReadRows
. Los datos de una vista materializada se escriben según la consulta que la define. Para obtener una descripción general, consulta Vistas materializadas continuas.
Cuando usas SQL para consultar una vista materializada continua, SQL incorpora automáticamente información sobre el tipo.
Cuando lees desde una vista materializada continua con una solicitud de la API de Data ReadRows
, debes conocer el tipo de cada columna y decodificarlo en el código de tu aplicación.
Los valores agregados en una vista materializada continua se almacenan con la codificación que se describe en la siguiente tabla, según el tipo de salida de la columna de la definición de la vista.
Tipo | Codificación |
---|---|
BOOL | Valor de 1 byte, 1 = verdadero, 0 = falso |
BYTES | Sin codificación |
INT64 (o INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) | Big-endian de 64 bits |
FLOAT64 | IEEE 754 de 64 bits, sin incluir NaN ni +/-inf |
STRING | UTF-8 |
TIME/TIMESTAMP | Es un número entero de 64 bits que representa la cantidad de microsegundos desde la época de Unix (coherente con GoogleSQL). |
Claves de filas estructuradas
Las claves de fila estructuradas te permiten acceder a tus datos con claves de varias columnas, de forma similar a las claves compuestas en las bases de datos relacionales.
El tipo y la codificación de las claves de filas estructuradas se definen mediante un esquema de claves de filas que puedes agregar de forma opcional a una tabla de Bigtable. Los datos de claves de filas estructuradas se almacenan como bytes, pero GoogleSQL para Bigtable usa automáticamente el tipo y la codificación definidos en el esquema de clave de fila cuando ejecutas una consulta en SQL en la tabla.
No se admite el uso de un esquema de clave de fila para consultar una tabla con una solicitud ReadRows
. De forma predeterminada, una vista materializada continua tiene un esquema de clave de fila. Para obtener más información sobre las claves de fila estructuradas, consulta Administra clave de fila fila.
Tipos no aplicados
Si no se proporciona información de tipo, Bigtable trata cada celda como bytes con una codificación desconocida.
Cuando consultas familias de columnas creadas sin aplicación de tipos, debes proporcionar información de tipos en el momento de la lectura para garantizar que los datos se lean correctamente. Esto es relevante para las funciones de la base de datos cuyo comportamiento depende del tipo de datos. GoogleSQL para Bigtable ofrece funciones de CAST para realizar conversiones de tipos en el momento de la consulta. Estas funciones convierten bytes en los tipos que esperan varias funciones.
Si bien Bigtable no aplica tipos, ciertas operaciones suponen un tipo de datos. Conocer esta información te ayuda a garantizar que tus datos se escriban de una manera que se pueda procesar dentro de la base de datos. A continuación, se incluyen algunos ejemplos:
- Los incrementos que usan
ReadModifyWriteRow
suponen que la celda contiene un número entero de 64 bits con signo big-endian. - La función
TO_VECTOR64
en SQL espera que la celda contenga un array de bytes que sea una concatenación de los bytes big-endian de números de punto flotante de 64 bits. - La función
TO_VECTOR32
en SQL espera que la celda contenga un array de bytes que sea una concatenación de los bytes big-endian de números de punto flotante de 32 bits.