Valeurs globales au moment de l'écriture

Si vous souhaitez créer un compteur ou agréger vos données dans Bigtable au moment de l'écriture, vous pouvez utiliser des agrégations. Les agrégations sont des cellules de table Bigtable qui agrégent les valeurs des cellules lors de l'écriture des données. Lorsque vous ajoutez une nouvelle valeur, une fonction d'agrégation fusionne la valeur avec la valeur agrégée déjà présente dans la cellule. D'autres bases de données font référence à des fonctionnalités similaires en tant que compteurs distribués.

Vous pouvez lire et écrire des valeurs agrégées à l'aide de la CLI cbt et des bibliothèques clientes Bigtable pour C++, Go et Java. Vous pouvez également lire les résultats d'agrégation à l'aide de SQL. Vous mettez à jour les cellules agrégées à l'aide de méthodes qui envoient une requête MutateRow avec une mutation AddToCell ou MergeToCell. MergeToCell vous permet de fusionner un accumulateur, et AddToCell vous permet d'ajouter une entrée.

Ce document présente les agrégations et explique comment créer une famille de colonnes agrégées. Avant de lire ce document, vous devez connaître la présentation de Bigtable et les écritures.

Quand utiliser des agrégations ?

Les agrégations Bigtable sont utiles lorsque vous vous intéressez aux données d'une entité de manière globale et non sous forme de points de données individuels.

Compteurs

Vous pouvez créer un compteur à l'aide de cellules agrégées et incrémenter la valeur au moment de l'écriture, sans les limites liées à l'envoi d'une requête ReadModifyWriteRow.

Si vous migrez vers Bigtable à partir de bases de données telles qu'Apache Cassandra ou Redis, vous pouvez utiliser des agrégations Bigtable à des endroits où vous vous appuyiez auparavant sur des compteurs dans ces systèmes.

Pour suivre un guide de démarrage rapide qui explique comment implémenter des compteurs à l'aide de la CLI cbt, consultez Créer et mettre à jour des compteurs.

Buckets de temps

Vous pouvez utiliser des buckets temporels pour obtenir des valeurs agrégées sur une période donnée, par exemple une heure, un jour ou une semaine. Au lieu d'agréger les données avant ou après leur écriture dans votre table, vous ajoutez de nouvelles valeurs pour agréger les cellules de la table.

Par exemple, si vous gérez un service qui aide les associations caritatives à collecter des fonds, vous pouvez souhaiter connaître le montant des dons en ligne par jour pour chaque campagne, mais vous n'avez pas besoin de connaître l'heure exacte de chaque don ni le montant par heure. Dans votre table, les clés de ligne représentent les ID d'associations caritatives, et vous créez une famille de colonnes agrégées appelée donations. Les qualificatifs de colonne de la ligne sont les ID de campagne.

Chaque montant de don reçu pour un jour donné pour une campagne est ajouté à la somme de la cellule globale de la colonne pour ce jour. Chaque requête d'ajout pour la cellule utilise un code temporel tronqué au début de la journée, de sorte que chaque requête ait le même code temporel. Le troncage des codes temporels garantit que tous les dons de ce jour sont ajoutés à la même cellule. Le jour suivant, toutes vos requêtes sont placées dans une nouvelle cellule, à l'aide d'horodatages qui sont tronqués jusqu'à la nouvelle date, et ce schéma se poursuit.

Selon votre cas d'utilisation, vous pouvez choisir de créer plutôt des colonnes pour vos nouveaux agrégats. En fonction du nombre de buckets que vous prévoyez d'accumuler, vous pouvez envisager une conception de clé de ligne différente.

Pour en savoir plus sur les buckets temporels, consultez la section Conception de schéma pour les données de séries temporelles.

Simplifier les workflows

Les agrégations vous permettent d'agréger vos données dans votre table Bigtable sans avoir à utiliser de logiciel de traitement ETL ou de flux pour les agréger avant ou après les avoir écrites dans Bigtable. Par exemple, si votre application a déjà publié des messages dans Pub/Sub, puis utilisé Dataflow pour lire les messages et agréger les données avant de les écrire dans Bigtable, vous pouvez plutôt envoyer les données directement pour agréger des cellules dans Bigtable.

Agréger des familles de colonnes

Pour créer et mettre à jour des cellules agrégées, vous devez disposer d'une ou de plusieurs familles de colonnes agrégées dans votre table, c'est-à-dire des familles de colonnes ne contenant que des cellules agrégées. Vous pouvez les créer lorsque vous créez une table ou ajouter une famille de colonnes agrégées à une table déjà utilisée. Lorsque vous créez la famille de colonnes, vous spécifiez le type d'agrégation, par exemple la somme.

Vous ne pouvez pas convertir une famille de colonnes contenant des données non agrégées en famille de colonnes agrégées. Les colonnes des familles de colonnes agrégées ne peuvent pas contenir de cellules non agrégées, et les familles de colonnes standards ne peuvent pas contenir de cellules agrégées.

Pour créer une table avec une famille de colonnes agrégées, consultez Créer une table. Pour ajouter une famille de colonnes agrégatives à une table, consultez Ajouter des familles de colonnes.

Types d'agrégation

Bigtable est compatible avec les types d'agrégation suivants:

Somme

Lorsque vous écrivez une valeur dans une cellule de somme agrégative (sum), la valeur de la cellule est remplacée par la somme de la valeur nouvellement ajoutée et de la valeur de la cellule actuelle. Le type d'entrée compatible avec les sommes est Int64.

Minimum

Lorsque vous écrivez une valeur dans une cellule agrégative minimale (min), la valeur de la cellule est remplacée par la valeur la plus basse entre la valeur nouvellement ajoutée et la valeur de la cellule actuelle. Le type d'entrée accepté pour "min" est Int64.

Maximum

Lorsque vous écrivez une valeur dans une cellule agrégation maximale (max), la valeur de la cellule est remplacée par la valeur la plus élevée entre la valeur nouvellement ajoutée et la valeur de la cellule actuelle. Le type d'entrée accepté pour la valeur maximale est Int64.

HyperLogLog (HLL)

Lorsque vous écrivez une valeur dans une cellule agrégative HLL (inthll), elle est ajoutée à un ensemble probabiliste de toutes les valeurs ajoutées depuis la réinitialisation la plus récente. La valeur de la cellule représente l'état de cet ensemble. Pour en savoir plus sur l'algorithme HLL, consultez HyperLogLog.

Vous pouvez lire les valeurs HLL à l'aide de la bibliothèque Zetasketch. Pour en savoir plus, consultez le dépôt GitHub de Zetasketch. Le type d'entrée compatible avec HLL est BYTES.

Horodatages

Une cellule agrégative est définie par la clé de ligne, la famille de colonnes, le qualificatif de colonne et l'horodatage. Vous utilisez le même code temporel chaque fois que vous ajoutez des données à la cellule. Si vous envoyez une valeur à la même clé de ligne, à la même famille de colonnes et au même qualificatif de colonne, mais avec un code temporel différent, une nouvelle cellule agrégative est créée dans la colonne.

Toute requête envoyée à une cellule agrégative doit inclure un code temporel.

Type d'entrée

Le type d'entrée de la valeur dans la requête d'écriture doit correspondre au type d'entrée avec lequel la famille de colonnes est créée. Par exemple, si vous envoyez une valeur de chaîne à une famille de colonnes configurée pour Int64, la requête est rejetée.

Type de mutation

Une requête MutateRow Bigtable inclut le type de mutation, qui est une modification apportée à la table. Les types de mutation que vous pouvez envoyer pour créer et mettre à jour des cellules agrégées sont AddToCell et MergeToCell. En revanche, une écriture non agrégée implique une mutation SetCell. Vous pouvez également utiliser des mutations de suppression pour effacer la valeur cumulée d'une cellule.

Dans une table répliquée, une cellule agrégative converge vers la même valeur finale dans tous les clusters dans le délai de réplication actuel. La valeur finale correspond à l'agrégation de toutes les mutations AddToCell envoyées à cette cellule dans tous les clusters depuis la dernière opération de suppression ou depuis la création de la cellule.

Les opérations d'agrégation sont soumises aux mêmes limites d'opérations que les autres mutations de table.

AddToCell

Pour ajouter des données à une cellule agrégative, par exemple lorsque vous incrémentez un compteur, vous envoyez une mutation AddToCell dans une requête MutateRow. Pour en savoir plus, consultez la section AddToCell dans la documentation de référence de l'API Bigtable Data.

MergeToCell

Si vous souhaitez copier des données entre des cellules, utilisez une mutation MergeToCell. Par exemple, pour copier l'état de la cellule A vers la cellule B, vous pouvez utiliser [DeleteCell(B), MergeToCell(B)] avec la valeur que vous lisez dans la cellule A. Pour en savoir plus, consultez MergeToCell dans la documentation de référence de l'API Bigtable Data.

Suppressions

Comme pour les données non agrégées, vous pouvez réinitialiser un compteur ou supprimer des données agrégées à l'aide de mutations de l'API Data. Pour en savoir plus, consultez Mutation dans la documentation de référence de l'API Bigtable Data.

Récupération de mémoire

Les cellules agrégées sont traitées comme n'importe quelle autre cellule lors de la récupération de mémoire: si une cellule est marquée pour suppression, la suppression est répliquée dans tous les clusters de l'instance. Pour en savoir plus, consultez la section Réplication et collecte des déchets. Si une requête d'ajout est envoyée à une cellule agrégative qui a été supprimée par le nettoyage de la mémoire, une nouvelle cellule agrégative est créée.

Étape suivante