Valori aggregati al momento della scrittura
Se vuoi creare un contatore o aggregare i dati in Bigtable al momento della scrittura, puoi utilizzare gli aggregati. Gli aggregati sono celle di tabella Bigtable che aggregano i valori delle celle durante la scrittura dei dati. Quando aggiungi un nuovo valore, una funzione di aggregazione unisce il valore con il valore aggregato già presente nella cella. Altri database fanno riferimento a funzionalità simili come contatori distribuiti.
Puoi leggere e scrivere valori aggregati utilizzando l'cbt
interfaccia a riga di comando
e le
librerie client Bigtable per C++, Go e Java. Puoi anche leggere
i risultati dell'aggregazione utilizzando SQL. Puoi aggiornare le celle aggregate utilizzando metodi che inviano una richiesta MutateRow
con una mutazione AddToCell
o MergeToCell
. MergeToCell
ti consente di unire un accumulatore e AddToCell
ti consente di aggiungere un input.
Questo documento fornisce una panoramica degli aggregati e descrive come creare una famiglia di colonne aggregate. Prima di leggere questo documento, devi conoscere la panoramica di Bigtable e le scritture.
Quando utilizzare gli aggregati
Gli aggregati Bigtable sono utili per le situazioni in cui ti interessano i dati di un'entità in forma aggregata e non come singoli punti dati.
Contatori
Puoi creare un contatore utilizzando celle aggregate e incrementare il valore al momento della scrittura, senza le limitazioni legate all'invio di una richiesta ReadModifyWriteRow
.
Se esegui la migrazione a Bigtable da database come Apache Cassandra o Redis, puoi utilizzare gli aggregati Bigtable nei punti in cui in precedenza utilizzavi i contatori in questi sistemi.
Per seguire una guida rapida che mostra come implementare i contatori utilizzando
la cbt
CLI
, consulta Creare e aggiornare
i contatori.
Bucket di tempo
Puoi utilizzare i bucket di tempo per ottenere valori aggregati per un periodo di tempo, ad esempio un'ora, un giorno o una settimana. Anziché aggregare i dati prima o dopo la loro scrittura nella tabella, aggiungi nuovi valori alle celle aggregate della tabella.
Ad esempio, se gestisci un servizio che aiuta le organizzazioni di beneficenza a raccogliere fondi, potresti voler conoscere l'importo delle donazioni online giornaliere per ogni campagna, ma non è necessario conoscere l'ora esatta di ogni donazione o l'importo per ora. Nella tabella, le chiavi di riga rappresentano gli ID delle organizzazioni di beneficenza e crei una famiglia di colonne aggregate denominata donations
. I qualificatori di colonna nella riga sono ID campagna.
Man mano che ogni importo della donazione viene ricevuto per un determinato giorno per una campagna, viene aggiunto alla somma nella cella aggregata della colonna per quel giorno. Ogni richiesta di aggiunta per la cella utilizza un timestamp troncato all'inizio della giornata, in modo che in pratica ogni richiesta abbia lo stesso timestamp. La troncatura dei timestamp garantisce che tutte le donazioni del giorno in questione vengano aggiunte alla stessa cella. Il giorno successivo, tutte le richieste vengono inserite in una nuova cella utilizzando timestamp troncati fino alla nuova data e questo schema continua.
A seconda del caso d'uso, puoi scegliere di creare nuove colonne per i nuovi aggregati. A seconda del numero di bucket che prevedi di accumulare, potresti prendere in considerazione un design diverso per la chiave di riga.
Per ulteriori informazioni sui bucket di tempo, consulta Progettazione dello schema per i dati delle serie temporali.
Semplificazione dei flussi di lavoro
Le aggregazioni ti consentono di aggregare i dati nella tabella Bigtable senza dover utilizzare software di elaborazione ETL o di streaming per aggregare i dati prima o dopo averli scritti in Bigtable. Ad esempio, se in precedenza la tua applicazione pubblicava messaggi in Pub/Sub e poi utilizzava Dataflow per leggere i messaggi e aggregare i dati prima di scriverli in Bigtable, puoi inviare i dati direttamente alle celle aggregate in Bigtable.
Famiglie di colonne aggregate
Per creare e aggiornare le celle aggregate, devi avere una o più famiglie di colonne aggregate nella tabella, ovvero famiglie di colonne che contengono solo celle aggregate. Puoi crearle quando crei una tabella oppure puoi aggiungere una famiglia di colonne aggregate a una tabella già in uso. Quando crei la famiglia di colonne, specifica il tipo di aggregazione, ad esempio somma.
Non puoi convertire una famiglia di colonne contenente dati non aggregati in una famiglia di colonne aggregate. Le colonne nelle famiglie di colonne aggregate non possono contenere celle non aggregate e le famiglie di colonne standard non possono contenere celle aggregate.
Per creare una nuova tabella con una famiglia di colonne aggregate, consulta Creare una tabella. Per aggiungere una famiglia di colonne aggregate a una tabella, consulta Aggiungere famiglie di colonne.
Tipi di aggregazione
Bigtable supporta i seguenti tipi di aggregazione:
Somma
Quando scrivi un valore in una cella di somma aggregata (sum
), il valore della cella viene sostituita con la somma del valore appena aggiunto e del valore corrente della cella. Il
tipo di input supportato per le somme è Int64
.
Minimo
Quando scrivi un valore in una cella aggregata minima (min
), il valore della cella viene sostituita con il valore più basso tra il valore appena aggiunto e il valore corrente della cella. Il tipo di input supportato per min è Int64
.
Massimo
Quando scrivi un valore in una cella aggregata massima (max
), il valore della cella viene sostituita con il valore più alto tra il valore appena aggiunto e il valore della cella corrente. Il tipo di input supportato per il valore massimo è Int64
.
HyperLogLog (HLL)
Quando scrivi un valore in una cella aggregata HLL (inthll
), il valore viene aggiunto
a un insieme probabilistico di tutti i valori aggiunti dall'ultimo ripristino. Il valore della cella rappresenta lo stato dell'insieme. Per informazioni più generali sull'algoritmo HLL, consulta HyperLogLog.
Puoi leggere i valori HLL utilizzando la libreria Zetasketch. Per maggiori informazioni, consulta
il repository GitHub di Zetasketch. Il
tipo di input supportato per HLL è BYTES
.
Timestamp
Una cella aggregata è definita da chiave di riga, famiglia di colonne, qualificatore di colonna e timestamp. Utilizza lo stesso timestamp ogni volta che aggiungi dati alla cella. Se invii un valore alla stessa chiave di riga, alla stessa famiglia di colonne e allo stesso qualificatore di colonna, ma con un timestamp diverso, nella colonna viene creata una nuova cella aggregata.
Qualsiasi richiesta inviata a una cella aggregata deve includere un timestamp.
Tipo input
Il tipo di input del valore nella richiesta di scrittura deve corrispondere al tipo di input con cui è stata creata la famiglia di colonne. Ad esempio, se invii un valore di stringa a una famiglia di colonne configurata per Int64
, la richiesta viene rifiutata.
Tipo di mutazione
Una richiesta MutateRow
di Bigtable include il tipo di mutazione,
ovvero una modifica alla tabella. I tipi di mutazione che puoi inviare per creare
e aggiornare le celle aggregate sono AddToCell
e MergeToCell
. Al contrario, una scrittura non aggregata comporta una mutazione SetCell
. Puoi anche utilizzare le mutazioni di eliminazione per cancellare il valore accumulato di una cella.
In una tabella replicata, una cella aggregata converge sullo stesso valore finale in tutti i cluster entro il ritardo di replica corrente. Il valore finale è la somma di tutte le mutazioni AddToCell
inviate a quella cella in tutti i cluster dall'ultima operazione di eliminazione o dalla creazione della cella.
Le operazioni di aggregazione sono soggette agli stessi limiti di operazioni delle altre mutazioni di tabelle.
AddToCell
Per aggiungere dati a una cella aggregata, ad esempio quando aumenti un contatore,
invii una mutazione AddToCell
in una richiesta MutateRow
. Per ulteriori informazioni, consulta AddToCell
nel riferimento all'API Bigtable Data.
MergeToCell
Se vuoi copiare i dati tra le celle, utilizza una mutazione MergeToCell
. Ad esempio, per copiare lo stato dalla cella A alla cella B, puoi eseguire un'operazione come [DeleteCell(B), MergeToCell(B)]
con il valore letto dalla cella A. Per ulteriori informazioni, consulta MergeToCell
nel riferimento all'API Bigtable Data.
Eliminazioni
Come per i dati non aggregati, puoi reimpostare un contatore o eliminare i dati aggregati utilizzando le mutazioni dell'API Data. Per ulteriori informazioni, consulta Mutation nel riferimento all'API Bigtable Data.
Garbage collection
Le celle aggregate vengono trattate come qualsiasi altra cella durante la garbage collection: se una cella è contrassegnata per l'eliminazione, l'eliminazione viene replicata in tutti i cluster dell'istanza. Per ulteriori informazioni, consulta Replica e raccolta del garbage. Se una richiesta di aggiunta viene inviata a una cella aggregata che è stata rimossa dalla garbage collection, viene creata una nuova cella aggregata.
Passaggi successivi
- Consulta una guida rapida per scoprire come creare e aggiornare i contatori utilizzando l'interfaccia a riga di comando
cbt
. - Esempi di codice che mostrano come aggiungere un valore a una cellula aggregata.
- Esamina i concetti relativi alla progettazione dello schema.