Werte zum Schreibzeitpunkt aggregieren
Wenn Sie Ihre Daten zum Schreibzeitpunkt in Bigtable aggregieren möchten, können Sie Aggregatfunktionen verwenden. Aggregierte sind Bigtable-Tabellenzellen, die Zellenwerte aggregieren, während die Daten geschrieben werden. Wenn Sie einen neuen Wert hinzufügen, führt eine Aggregationsfunktion den Wert mit dem aggregierten Wert zusammen, der sich bereits in der Zelle befindet. Andere Datenbanken beziehen sich auf ähnliche Funktionen wie Zähler oder verteilte Zähler.
Bigtable bietet den Aggregationstyp sum. Wenn Sie einer aggregierten Zelle einen Wert hinzufügen, wird der Zellenwert durch die Summe des neu hinzugefügten Werts und des aktuellen Zellenwerts ersetzt.
In der Vorabversion können Sie über die cbt
-Befehlszeile und die Bigtable-Clientbibliotheken für C++, Go und Java mit Aggregatfunktionen arbeiten.
Dieses Dokument bietet einen Überblick über aggregierte Daten, zeigt, wie eine aggregierte Spaltenfamilie erstellt wird, und enthält Beispiele, die zeigen, wie einer aggregierten Zelle ein Wert hinzugefügt wird. Bevor Sie dieses Dokument lesen, sollten Sie sich mit den Informationen unter Bigtable – Übersicht und Schreibvorgänge vertraut gemacht haben.
Wann sollten Aggregatfunktionen verwendet werden?
Bigtable-Aggregate sind nützlich, wenn Daten für eine Entität in aggregierter Form und nicht als einzelne Datenpunkte wichtig sind. Bei der Migration von Datenbanken wie Apache Cassandra oder Redis zu Bigtable können Sie Bigtable-Aggregatfunktionen dort verwenden, wo Sie sich bisher auf Zähler in diesen Systemen verlassen haben.
Zeit-Buckets
Sie können Zeit-Buckets verwenden, um aggregierte Werte für einen bestimmten Zeitraum abzurufen, z. B. eine Stunde, einen Tag oder eine Woche. Anstatt Daten vor oder nach dem Schreiben in die Tabelle zu aggregieren, fügen Sie neue Werte hinzu, um Zellen in der Tabelle zu aggregieren.
Wenn Sie beispielsweise einen Dienst betreiben, mit dem gemeinnützige Organisationen Geld sammeln können, möchten Sie vielleicht die Höhe der Onlinespenden pro Tag für jede Kampagne wissen, aber nicht den genauen Zeitpunkt der einzelnen Spenden oder den genauen Betrag pro Stunde. In Ihrer Tabelle stellen Zeilenschlüssel die IDs der gemeinnützigen Organisationen dar und Sie erstellen eine aggregierte Spaltenfamilie mit dem Namen donations
. Die Spaltenqualifizierer in der Zeile sind Kampagnen-IDs.
Da jeder für eine Kampagne an einem bestimmten Tag eingegangene Spendenbetrag eingeht, wird er zur Summe in der aggregierten Zelle in der Spalte für diesen Tag addiert. Jede Hinzufügungsanfrage für die Zelle verwendet einen Zeitstempel, der auf den Anfang des Tages gekürzt wird, sodass praktisch jede Anfrage denselben Zeitstempel hat. Durch das Abschneiden der Zeitstempel wird sichergestellt, dass alle Spenden von diesem Tag derselben Zelle hinzugefügt werden. Am nächsten Tag werden alle Ihre Anfragen mit Zeitstempeln, die auf das neue Datum gekürzt werden, in eine neue Zelle eingefügt und dieses Muster wird fortgesetzt.
Je nach Anwendungsfall können Sie stattdessen neue Spalten für die neuen Zusammenfassungen erstellen. Je nach Anzahl der Buckets, die Sie akkumulieren möchten, können Sie ein anderes Zeilenschlüsseldesign in Betracht ziehen.
Weitere Informationen zu Zeit-Buckets finden Sie unter Schemadesign für Zeitachsendaten.
Arbeitsabläufe rationalisieren
Mit Aggregationen können Sie Ihre Daten in Ihrer Bigtable-Tabelle aggregieren, ohne ETL- oder Streaming-Verarbeitungssoftware verwenden zu müssen, um die Daten vor oder nach dem Schreiben in Bigtable zu aggregieren. Wenn Ihre Anwendung beispielsweise zuvor Nachrichten in Pub/Sub veröffentlicht und dann Dataflow verwendet hat, um die Nachrichten zu lesen und die Daten zu aggregieren, bevor sie in Bigtable geschrieben wurden, können Sie die Daten stattdessen direkt an aggregierte Zellen in Bigtable senden.
Aggregierte Spaltenfamilien
Zum Erstellen und Aktualisieren von aggregierten Zellen müssen Sie eine oder mehrere Aggregatspaltenfamilien in Ihrer Tabelle haben – Spaltenfamilien, die nur aggregierte Zellen enthalten. Sie können sie zusammen mit einer Tabelle erstellen oder einer bereits verwendeten Tabelle eine aggregierte Spaltenfamilie hinzufügen. Wenn Sie die Spaltenfamilie erstellen, geben Sie den Zusammenfassungstyp an, z. B. die Summe.
Sie können eine Spaltenfamilie mit nicht aggregierten Daten nicht in eine zusammengefasste Spaltenfamilie umwandeln. Spalten in aggregierten Spaltenfamilien dürfen keine nicht aggregierten Zellen enthalten und Standardspaltenfamilien keine aggregierten Zellen.
Informationen zum Erstellen einer neuen Tabelle mit einer aggregierten Spaltenfamilie finden Sie unter Tabelle erstellen. Informationen zum Hinzufügen einer aggregierten Spaltenfamilie zu einer Tabelle finden Sie unter Spaltenfamilien hinzufügen.
Zusammenfassungstypen
Bigtable unterstützt den Aggregationstyp sum
. Der Eingabetyp, der für Summen unterstützt wird, ist Int64
.
Zeitstempel
Eine aggregierte Zelle wird durch Zeilenschlüssel, Spaltenfamilie, Spaltenqualifizierer und Zeitstempel definiert. Sie verwenden immer denselben Zeitstempel, wenn Sie der Zelle Daten hinzufügen. Wenn Sie einen Wert mit einem anderen Zeitstempel an denselben Zeilenschlüssel, dieselbe Spaltenfamilie und denselben Spaltenqualifizierer senden, wird in der Spalte eine neue aggregierte Zelle erstellt.
Eine Anfrage zum Hinzufügen, die an eine aggregierte Zelle gesendet wird, muss einen Zeitstempel enthalten.
Eingabetyp
Der Eingabetyp des Werts in der Anfrage zum Hinzufügen muss dem Eingabetyp entsprechen, mit dem die Spaltenfamilie erstellt wird. Wenn Sie beispielsweise einen Stringwert an eine Spaltenfamilie senden, die für Int64
konfiguriert ist, wird die Anfrage abgelehnt.
AddToCell
Eine Hinzufügungsanfrage sendet die Mutation AddToCell
in der Bigtable Data API. Im Gegensatz dazu wird bei einer nicht aggregierten Schreibanfrage die Mutation SetCell
gesendet. Weitere Informationen finden Sie in der Data API-Referenz.
AddToCell
-Vorgänge unterliegen denselben Vorgangslimits wie andere Tabellenmutationen.
In einer replizierten Tabelle konvergiert eine aggregierte Zelle innerhalb der aktuellen Replikationsverzögerung zum selben Gesamtwert in allen Clustern. Der Gesamtwert ist die Summe aller AddToCell
-Mutationen, die seit dem letzten Löschvorgang oder seit dem Erstellen der Zelle an diese Zelle in allen Clustern gesendet wurden.
Anfragebeispiele hinzufügen
Die folgenden Beispiele zeigen, wie Sie einer aggregierten Zelle einen Wert hinzufügen. Die Beispiele ergänzen eine Summe in einer Spaltenfamilie, die den Eingabetyp Int64
erwartet.
cbt
cbt addtocell TABLE_ID ROW_KEY
FAMILY_NAME:COLUMN_QUALIFER=VALUE@TIMESTAMP
Ersetzen Sie Folgendes:
TABLE_ID
: Die permanente Kennzeichnung der TabelleROW_KEY
: der ZeilenschlüsselFAMILY_NAME
: der Name der aggregierten SpaltenfamilieCOLUMN_QUALIFIER
: eine Kennzeichnung für die SpalteVALUE
: Wert, der der Zelle hinzugefügt werden sollTIMESTAMP
: ein Unix-Zeitstempel in Mikrosekunden, z. B.1710868850000000
Beispiel:
cbt addtocell mobile-data device-1 updates:week12=100@1710868850000000
Einfach loslegen (Go)
Informationen zum Installieren und Verwenden der Clientbibliothek für Bigtable finden Sie unter Bigtable-Clientbibliotheken.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Bigtable zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Informationen zum Installieren und Verwenden der Clientbibliothek für Bigtable finden Sie unter Bigtable-Clientbibliotheken.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Bigtable zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.