Valores agregados en el momento de la escritura
Si deseas agregar tus datos en Bigtable en el momento de la escritura, puedes usar agrupaciones. Los agregados son celdas de una tabla de Bigtable que agregar valores de celda a medida que se escriben los datos. Cuando agregas un valor nuevo, se genera una la función de agregación combina el valor con el valor agregado que ya está en la celda. Otras bases de datos se refieren a funciones similares a las de los contadores o contadores distribuidos.
Puedes trabajar con agregaciones usando el
CLI de cbt
y
las bibliotecas cliente de Bigtable
para C++, Go y Java.
En este documento, se brinda una descripción general de las agregaciones y se muestra cómo crear un agregar una familia de columnas y proporciona ejemplos de cómo agregar un valor a un Agregar celda. Antes de leer este documento, debes familiarizarte con los Bigtable descripción general y Escrituras de Google Cloud.
Cuándo usar agregados
Los agregados de Bigtable son útiles en situaciones en las que te interesa datos de una entidad de forma agregada y no como datos individuales. Si estás migrar a Bigtable desde bases de datos como Apache Cassandra o en Redis, puedes usar Bigtable en lugares donde anteriormente dependía de contadores en estos sistemas.
Buckets de tiempo
Puedes usar buckets de tiempo para obtener valores agregados por un período, como una hora, un día o una semana. En lugar de agregar datos antes o después de que se escriben en la tabla, agregas valores nuevos para agregar celdas en la tabla.
Por ejemplo, si administras un servicio que ayuda a organizaciones benéficas a recaudar dinero, es posible que desees conocer el importe de las donaciones en línea por día para cada campaña, pero no necesitas saber la hora exacta de cada donación ni el importe por hora. En
su tabla, las claves de fila representan los ID de organizaciones benéficas y usted crea una columna de datos agregados
familia llamada donations
. Los calificadores de columna en la fila son los IDs de campaña.
A medida que se recibe cada importe de donación de un día determinado para una campaña, se agrega a la suma en la celda agregada de la columna de ese día. Cada agregado solicitud de celda usa una marca de tiempo truncada al comienzo del día, así que que, en efecto, cada solicitud tiene la misma marca de tiempo. Truncar las marcas de tiempo garantiza que todas las donaciones de ese día se agreguen a la misma celda. El al día siguiente, todas tus solicitudes van a una nueva celda, con marcas de tiempo que son se truncará a la nueva fecha, y ese patrón continuará.
Según su caso de uso, puede optar por crear columnas nuevas para su campaña nueva agrega en su lugar. Según la cantidad de buckets que planees podrías considerar un diseño de clave de fila diferente.
Si deseas obtener más información sobre buckets temporales, consulta Diseño de esquemas para series temporales los datos en la nube.
Optimización de los flujos de trabajo
Las agregaciones te permiten agregar tus datos a tu tabla de Bigtable sin necesidad de usar ningún ETL ni software de procesamiento de transmisión para agregar tus datos antes o después de escribirlos en Bigtable. Por ejemplo: si tu aplicación publicó mensajes anteriormente en Pub/Sub y, luego, usó Dataflow para leer los mensajes y agregar los datos antes escribirlos en Bigtable, en su lugar, podrías enviarlos directamente para agregar celdas en Bigtable.
Familias de columnas agregadas
Para crear y actualizar celdas agregadas, debes tener una o más familias de columnas agregadas en tu tabla, es decir, familias de columnas que solo contengan celdas agregadas. Puedes crearlas cuando creas una tabla o puedes agregar una agregación a una tabla que ya esté en uso. Cuando creas la columna debes especificar el tipo de agregación, como suma.
No puedes convertir una familia de columnas que contiene datos no agregados en un con 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 crear una tabla nueva con una familia de columnas agregada, consulta Crea una de la tabla. Cómo agregar una columna de agregación a una tabla, consulta Agregar columna familias.
Tipos de agregación
Bigtable admite los siguientes tipos de agregación:
Suma
Cuando agregas un valor a una celda de suma total (sum
), el valor de la celda se
y se reemplaza por la suma del valor agregado recientemente y el valor actual de la celda. El
el tipo de entrada compatible con las sumas es Int64
.
Mínimo
Cuando agregas un valor a una celda agregada mínima (min
), el valor de la celda es
reemplazado por el valor más bajo entre el valor agregado recientemente y el valor
el valor de la celda. El tipo de entrada compatible con el valor mínimo es Int64
.
Máximo
Cuando agregas un valor a una celda agregada máxima (max
), el valor de la celda se reemplaza por el valor más alto entre el valor agregado recientemente y el valor de la celda actual. El tipo de entrada que se admite para el máximo es Int64
.
HyperLogLog (HLL)
Cuando agregas un valor a una celda agregada de HLL (inthll
), el valor se agrega a
un conjunto probabilístico de todos los valores agregados desde el restablecimiento más reciente (ya sea el
creación de la celda o eliminación de sus datos). El valor de la celda representa la
estado de ese conjunto. Para obtener información general sobre el algoritmo HLL, consulta
HyperLogLog.
Puedes leer los valores HLL con la biblioteca Zetasketch. Para obtener más información, consulta
el repositorio de GitHub de Zetasketch. El
el tipo de entrada compatible con HLL es BYTES
.
Marcas de tiempo
Una celda de agregación se define por la clave de fila, la familia de columnas, el calificador de columna y y marca de tiempo. Debes usar la misma marca de tiempo cada vez que agregues datos a la celda. Si envías un valor a la misma clave de fila, familia de columnas y calificador de columna, pero con una marca de tiempo diferente, se crea una nueva celda agregada en la columna.
Una solicitud de agregado que se envía a una celda de agregación debe incluir una marca de tiempo.
Tipo de entrada
El tipo de entrada del valor en la solicitud de agregado debe coincidir con el tipo de entrada que
con la que se crea la familia de columnas. Por ejemplo, si envías un valor de cadena a una
configurada para Int64
, se rechaza la solicitud.
AddToCell
Una solicitud de adición envía una mutación AddToCell
en la API de datos de Bigtable.
Por el contrario, una solicitud de escritura no agregada envía una mutación SetCell
. Para ver más
consulta la página de la API de Data
referencia.
Las operaciones AddToCell
están sujetas a las mismas operaciones
límites
que otras mutaciones de la tabla.
En una tabla replicada, una celda agregada converge en el mismo valor final en
a todos los clústeres
con el retraso de replicación actual. El valor final es el
agregado de todas las mutaciones de AddToCell
enviadas a esa celda en todos los clústeres desde
la última operación de eliminación o desde que se creó la celda.
Recolección de elementos no utilizados
Las celdas de agregación se tratan como a cualquier otra celda durante la recolección de elementos no utilizados: si se trata de se marca para su eliminación, esta se replica en todos los clústeres del instancia. Para obtener más información, consulta Replicación y elementos no utilizados colección. Si una solicitud de agregado enviados a una celda de agregado que se haya quitado a través de la recolección de elementos no utilizados, una nueva se crea una celda de agregación.
Agrega ejemplos de solicitudes
En los siguientes ejemplos, se muestra cómo agregar un valor a una celda agregada. El
ejemplos se suman a una suma en una familia de columnas que espera el tipo de entrada Int64
.
cbt
cbt addtocell TABLE_ID ROW_KEY
FAMILY_NAME:COLUMN_QUALIFER=VALUE@TIMESTAMP
Reemplaza lo siguiente:
TABLE_ID
: el identificador permanente de la tablaROW_KEY
: Es la clave de fila.FAMILY_NAME
: Es el nombre de la familia de columnas agregada.COLUMN_QUALIFIER
: Es un identificador para la columna.VALUE
: Es el valor que se agregará a la celda.TIMESTAMP
: Una marca de tiempo de Unix en microsegundos, como1710868850000000
.
Ejemplo:
cbt addtocell mobile-data device-1 updates:week12=100@1710868850000000
Go
Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.
Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Java
Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.
Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.