Validació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 aplica Bigtable el tipo, lo que requiere que lo codifiques o decodifiques en el código de tu aplicación. Para ver una lista de los tipos de datos de Bigtable, consulta Tipo en la documentación de referencia de la API Data.
Tipos obligatorios
El tipo de datos se aplica a los siguientes datos:
- Familias de columnas agregadas (contadores)
- Marcas de tiempo
- Vistas materializadas
Agregaciones
En el caso del tipo de datos aggregate, la codificación depende del tipo de agregación. Cuando creas una familia de columnas agregada, debes especificar un tipo de agregación.
En esta tabla se muestran el tipo de entrada y la codificación de 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 de las celdas agregadas mediante SQL, este lenguaje incorpora automáticamente la información de tipo.
Cuando lees los datos de las celdas agregadas mediante el método ReadRows
de la API Data, Bigtable devuelve bytes, por lo que tu aplicación debe
decodificar los valores mediante la codificación que Bigtable ha usado para asignar los
datos tipados a bytes.
No puedes convertir una familia de columnas que contenga datos no agregados en una familia de columnas agregada. 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 Crear una tabla. Para ver ejemplos de código que muestran cómo incrementar una celda agregada con valores codificados, consulte Incrementar un valor.
Marcas de tiempo
Cada celda de Bigtable tiene una Int64
marca de tiempo que debe ser un valor de microsegundo con una precisión de milisegundo como máximo. Bigtable
rechaza una marca de tiempo con una precisión de microsegundos, como 3023483279876543. En este ejemplo, el valor de marca de tiempo aceptable es 3023483279876000. Una marca de tiempo es el número de microsegundos transcurridos desde el inicio del registro de tiempo Unix, 1970-01-01 00:00:00 UTC
.
Vistas materializadas continuas
Las vistas materializadas continuas son recursos de solo lectura que puedes leer mediante SQL o con una llamada a la API de datos ReadRows
. Los datos de una vista materializada se escriben en función de 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 datos de una vista materializada continua mediante una solicitud de la API Data
ReadRows
, debes conocer el tipo de cada columna y decodificarlo en el código de tu aplicación.
Los valores agregados de una vista materializada continua se almacenan mediante la codificación que se describe en la siguiente tabla, en función del tipo de salida de la columna de la definición de la vista.
Tipo | Codificación |
---|---|
BOOL | Valor de 1 byte, 1 = true, 0 = false |
BYTES | Sin codificación |
INT64 (o INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) | Big-endian de 64 bits |
FLOAT64 | IEEE 754 de 64 bits, excluyendo NaN y +/-inf |
STRING | UTF-8 |
HORA/MARCA DE TIEMPO | Número entero de 64 bits que representa el número de microsegundos transcurridos desde el inicio del registro de tiempo Unix (de acuerdo con GoogleSQL). |
Claves de fila estructuradas
Las claves de fila estructuradas te permiten acceder a tus datos mediante claves de varias columnas, de forma similar a las claves compuestas de las bases de datos relacionales.
El tipo y la codificación de las claves de fila estructuradas se definen mediante un esquema de clave de fila que puede añadir a una tabla de Bigtable de forma opcional. Los datos de clave de fila estructurados 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 SQL en la tabla.
No se admite el uso de un esquema de clave de fila para consultar una tabla con una solicitud ReadRows
. Una vista materializada continua tiene un esquema de clave de fila de forma predeterminada. Para obtener más información sobre las claves de fila estructuradas, consulta Gestionar esquemas de claves de fila.
Tipos no obligatorios
Si no se proporciona información sobre el tipo, Bigtable trata cada celda como bytes con una codificación desconocida.
Cuando consultas familias de columnas creadas sin la obligación de definir el tipo, debes proporcionar información sobre el tipo en el momento de la lectura para asegurarte de que los datos se leen correctamente. Esto es relevante en el caso de las funciones de bases de datos cuyo comportamiento depende del tipo de datos. GoogleSQL para Bigtable ofrece funciones CAST para hacer conversiones de tipos en el momento de la consulta. Estas funciones convierten bytes a los tipos que esperan varias funciones.
Aunque Bigtable no aplica tipos, algunas operaciones asumen un tipo de datos. Conocer esta información te ayudará a asegurarte de que tus datos se escriben de forma que se puedan procesar en la base de datos. Estos son algunos ejemplos:
- Los incrementos que usan
ReadModifyWriteRow
asumen que la celda contiene un número entero con signo de 64 bits en formato big-endian. - La función
TO_VECTOR64
de SQL espera que la celda contenga una matriz de bytes que sea una concatenación de los bytes big-endian de números de coma flotante de 64 bits. - La función
TO_VECTOR32
de SQL espera que la celda contenga una matriz de bytes que sea una concatenación de los bytes big-endian de números de coma flotante de 32 bits.