Il modello di modifiche in tempo reale di Bigtable a BigQuery è una pipeline di streaming che trasmette i flussi di record delle modifiche dei dati di Bigtable e li scrive nelle tabelle BigQuery utilizzando Dataflow.
Un flusso di modifiche di Bigtable ti consente di abbonarti alle mutazioni dei dati per ogni tabella. Quando ti abboni ai flussi di modifiche in tempo reale delle tabelle, si applicano i seguenti vincoli:
- Vengono restituiti solo i descrittori e le celle modificate delle operazioni di eliminazione.
- Viene restituito solo il nuovo valore di una cella modificata.
Quando i record delle modifiche dei dati vengono scritti in BigQuery, le righe potrebbero essere inserite in un ordine diverso rispetto all'ordine originale dei timestamp di commit di Bigtable.
Le righe della tabella del log delle modifiche che non possono essere scritte in BigQuery a causa di un errore persistente vengono inserite definitivamente in una directory della coda di messaggi non recapitabili (coda di messaggi non elaborati) in Cloud Storage per la revisione umana o l'ulteriore elaborazione da parte dell'utente.
Se la tabella BigQuery necessaria non esiste, la pipeline la crea. In caso contrario, viene utilizzata una tabella BigQuery esistente. Lo schema delle tabelle BigQuery esistenti deve contenere le colonne nella tabella seguente.
Ogni nuova riga BigQuery include un record delle modifiche dei dati restituito dal flusso di modifiche dalla riga corrispondente nella tabella Bigtable.
Schema della tabella di output BigQuery
| Nome colonna | Tipo | Ammette valori Null | Descrizione |
|---|---|---|---|
row_key |
STRING o BYTES |
No | La chiave di riga della riga modificata. Se l'opzione della pipeline writeRowkeyAsBytes è impostata su true, il tipo della colonna deve essere BYTES. In caso contrario, utilizza il tipo STRING. |
mod_type |
STRING |
No | Il tipo di mutazione della riga. Utilizza uno dei seguenti valori: SET_CELL, DELETE_CELLS o DELETE_FAMILY. |
column_family |
STRING |
No | La famiglia di colonne interessata dalla mutazione della riga. |
column |
STRING |
Sì | Il qualificatore di colonna interessato dalla mutazione della riga. Per il tipo di mutazione DELETE_FAMILY, imposta su NULL. |
commit_timestamp |
TIMESTAMP |
No | L'ora in cui Bigtable applica la mutazione. |
big_query_commit_timestamp |
TIMESTAMP |
Sì | (Facoltativo) Specifica l'ora in cui BigQuery scrive la riga in una tabella di output. Il campo non viene compilato se il nome della colonna è presente nel valore dell'opzione della pipeline bigQueryChangelogTableFieldsToIgnore. |
timestamp |
TIMESTAMP o INT64 |
Sì | Il valore del timestamp della cella interessata dalla mutazione. Se l'opzione della pipeline writeNumericTimestamps è impostata su true, il tipo della colonna deve essere INT64. In caso contrario, utilizza il tipo TIMESTAMP.
Per i tipi di mutazione DELETE_CELLS e DELETE_FAMILY, imposta su NULL. |
timestamp_from |
TIMESTAMP o INT64 |
Sì | Descrive un inizio inclusivo dell'intervallo di timestamp per tutte le celle eliminate dalla mutazione DELETE_CELLS. Per altri tipi di mutazione, imposta su NULL. |
timestamp_to |
TIMESTAMP o INT64 |
Sì | Descrive una fine esclusiva dell'intervallo di timestamp per tutte le celle eliminate dalla mutazione DELETE_CELLS. Per altri tipi di mutazione, imposta su NULL. |
is_gc |
BOOL |
No | (Facoltativo) Se la mutazione viene attivata da una policy di garbage collection, imposta su true.
In tutti gli altri casi, imposta su false. Il campo non viene compilato se il nome della colonna è presente nel valore dell'opzione della pipeline bigQueryChangelogTableFieldsToIgnore. |
source_instance |
STRING |
No | (Facoltativo) Descrive il nome dell'istanza Bigtable da cui proviene la mutazione. Il campo non viene compilato se il nome della colonna è presente nel valore dell'opzione della pipeline bigQueryChangelogTableFieldsToIgnore. |
source_cluster |
STRING |
No | (Facoltativo) Descrive il nome del cluster Bigtable da cui proviene la mutazione. Il campo non viene compilato se il nome della colonna è presente nel valore dell'opzione della pipeline bigQueryChangelogTableFieldsToIgnore. |
source_table |
STRING |
No | (Facoltativo) Descrive il nome della tabella Bigtable a cui si applica la mutazione. Il valore in questa colonna potrebbe essere utile se più tabelle Bigtable trasmettono in streaming le modifiche alla stessa tabella BigQuery. Il campo non viene compilato se il nome della colonna è presente nel valore dell'opzione della pipeline bigQueryChangelogTableFieldsToIgnore. |
tiebreaker |
INT64 |
No | (Facoltativo) Quando due mutazioni vengono registrate contemporaneamente da cluster Bigtable diversi, alla tabella di origine viene applicata la mutazione con il valore tiebreaker più alto. Le mutazioni con valori tiebreaker inferiori vengono eliminate. Il campo non viene compilato se il nome della colonna è presente nel valore dell'opzione della pipeline bigQueryChangelogTableFieldsToIgnore. |
value |
STRING o BYTES |
Sì | Il nuovo valore impostato dalla mutazione. Se l'opzione della pipeline writeValuesAsBytes è impostata su true, il tipo della colonna deve essere BYTES. In caso contrario, utilizza il tipo STRING. Il valore viene impostato per le mutazioni SET_CELL. Per altri tipi di mutazione, il valore è impostato su NULL. |
Requisiti della pipeline
- L'istanza di origine Bigtable specificata.
- La tabella di origine Bigtable specificata. Per la tabella devono essere abilitati modifiche in tempo reale.
- Il profilo dell'applicazione Bigtable specificato.
- Il set di dati di destinazione BigQuery specificato.
Parametri del modello
Parametri obbligatori
- bigQueryDataset: il nome del set di dati della tabella BigQuery di destinazione.
- bigtableChangeStreamAppProfile: l'ID del profilo dell'applicazione Bigtable. Il profilo dell'applicazione deve utilizzare il routing a cluster singolo e consentire le transazioni su riga singola.
- bigtableReadInstanceId: l'ID dell'istanza Bigtable di origine.
- bigtableReadTableId: l'ID della tabella Bigtable di origine.
Parametri facoltativi
- writeRowkeyAsBytes: indica se scrivere le chiavi di riga come
BYTESdi BigQuery. Se impostato sutrue, le chiavi di riga vengono scritte nella colonnaBYTES. In caso contrario, le chiavi di riga vengono scritte nella colonnaSTRING. Il valore predefinito èfalse. - writeValuesAsBytes: se impostato su
true, i valori vengono scritti in una colonna di tipo BYTES, altrimenti in una colonna di tipo STRING . Il valore predefinito èfalse. - writeNumericTimestamps: indica se scrivere il timestamp Bigtable come INT64 di BigQuery. Se impostato su
true, i valori vengono scritti nella colonna INT64. In caso contrario, i valori vengono scritti nella colonnaTIMESTAMP. Colonne interessate:timestamp,timestamp_from, etimestamp_to. Il valore predefinito èfalse. Se impostato sutrue, il tempo viene misurato in microsecondi dall'epoca Unix (1° gennaio 1970 alle ore 00:00:00 UTC). - bigQueryProjectId: l'ID progetto del set di dati BigQuery. Il valore predefinito è il progetto per il job Dataflow.
- bigQueryChangelogTableName: il nome della tabella BigQuery di destinazione. Se non specificato, viene utilizzato il valore
bigtableReadTableId + "_changelog". Il valore predefinito è vuoto. - bigQueryChangelogTablePartitionGranularity: specifica una granularità per il partizionamento della tabella del log delle modifiche. Se impostato, la tabella viene partizionata. Utilizza uno dei seguenti valori supportati:
HOUR,DAY,MONTHoYEAR. Per impostazione predefinita, la tabella non è partizionata. - bigQueryChangelogTablePartitionExpirationMs: imposta il tempo di scadenza della partizione della tabella del log delle modifiche, in millisecondi. Se impostato su
true, le partizioni precedenti al numero di millisecondi specificato vengono eliminate. Per impostazione predefinita, non è impostata alcuna scadenza. - bigQueryChangelogTableFieldsToIgnore: un elenco separato da virgole delle colonne del log delle modifiche che, se specificate, non vengono create e compilate. Utilizza uno dei seguenti valori supportati:
is_gc,source_instance,source_cluster,source_table,tiebreakerobig_query_commit_timestamp. Per impostazione predefinita, tutte le colonne vengono compilate. - dlqDirectory: la directory da utilizzare per la coda di messaggi non recapitabili. I record che non possono essere elaborati vengono archiviati in questa directory. Il valore predefinito è una directory nella località temporanea del job Dataflow. Nella maggior parte dei casi, puoi utilizzare il percorso predefinito.
- bigtableChangeStreamMetadataInstanceId: l'ID dell'istanza dei metadati delle modifiche in tempo reale di Bigtable. Il valore predefinito è vuoto.
- bigtableChangeStreamMetadataTableTableId: l'ID della tabella dei metadati del connettore dei flussi di modifiche in tempo reale di Bigtable. Se non viene fornita, durante l'esecuzione della pipeline viene creata automaticamente una tabella dei metadati del connettore delle modifiche in tempo reale di Bigtable. Il valore predefinito è vuoto.
- bigtableChangeStreamCharset: il nome del set di caratteri dei flussi di modifiche in tempo reale di Bigtable. Il valore predefinito è UTF-8.
- bigtableChangeStreamStartTimestamp: il timestamp di inizio (https://tools.ietf.org/html/rfc3339), inclusivo, da utilizzare per la lettura dei flussi di modifiche in tempo reale. Ad esempio,
2022-05-05T07:59:59Z. Il valore predefinito è il timestamp dell'ora di inizio della pipeline. - bigtableChangeStreamIgnoreColumnFamilies: un elenco separato da virgole delle modifiche ai nomi famiglia di colonne da ignorare. Il valore predefinito è vuoto.
- bigtableChangeStreamIgnoreColumns: un elenco separato da virgole delle modifiche ai nomi delle colonne da ignorare. Esempio: "cf1:col1,cf2:col2". Il valore predefinito è vuoto.
- bigtableChangeStreamName: un nome univoco per la pipeline client. Consente di riprendere l'elaborazione dal punto in cui si è interrotta una pipeline in esecuzione in precedenza. Il valore predefinito è un nome generato automaticamente. Per il valore utilizzato, consulta i log dei job Dataflow.
- bigtableChangeStreamResume: se impostato su
true, una nuova pipeline riprende l'elaborazione dal punto in cui si è interrotta una pipeline in esecuzione in precedenza con lo stesso valorebigtableChangeStreamName. Se la pipeline con il valorebigtableChangeStreamNamespecificato non è mai stata eseguita, non viene avviata una nuova pipeline. Se impostato sufalse, viene avviata una nuova pipeline. Se una pipeline con lo stesso valorebigtableChangeStreamNameè già stata eseguita per l'origine specificata, non viene avviata una nuova pipeline. Il valore predefinito èfalse. - bigtableReadChangeStreamTimeoutMs: il timeout per le richieste ReadChangeStream di Bigtable in millisecondi.
- bigtableReadProjectId: l'ID progetto Bigtable. Il valore predefinito è il progetto per il job Dataflow.
Esegui il modello
Console
- Vai alla pagina Crea job da modello di Dataflow. Vai a Crea job da modello
- Nel campo Nome job, inserisci un nome job univoco.
- (Facoltativo) Per Endpoint regionale, seleziona un valore dal menu a discesa. La regione predefinita è
us-central1.Per un elenco delle regioni in cui puoi eseguire un job Dataflow, consulta Località di Dataflow.
- Nel menu a discesa Modello Dataflow, seleziona il modello Modifiche in tempo reale di Bigtable a BigQuery.
- Nei campi dei parametri forniti, inserisci i valori dei parametri.
- Fai clic su Esegui job.
gcloud
Nella shell o nel terminale, esegui il modello:
gcloud dataflow flex-template run JOB_NAME \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Bigtable_Change_Streams_to_BigQuery \ --parameters \ bigtableReadInstanceId=BIGTABLE_INSTANCE_ID,\ bigtableReadTableId=BIGTABLE_TABLE_ID,\ bigtableChangeStreamAppProfile=BIGTABLE_APPLICATION_PROFILE_ID,\ bigQueryDataset=BIGQUERY_DESTINATION_DATASET
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto in cui vuoi eseguire il job Dataflow Google CloudJOB_NAME: un nome job univoco a tua sceltaVERSION: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latestper utilizzare la versione più recente del modello, disponibile nella cartella principale non datata nel bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, ad esempio
2023-09-12-00_RC00, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella principale datata nel bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1BIGTABLE_INSTANCE_ID: l'ID dell'istanza Bigtable.BIGTABLE_TABLE_ID: l'ID della tabella Bigtable.BIGTABLE_APPLICATION_PROFILE_ID: l'ID del profilo dell'applicazione Bigtable.BIGQUERY_DESTINATION_DATASET: il nome del set di dati di destinazione BigQuery
API
Per eseguire il modello utilizzando l'API REST, invia una richiesta HTTP POST. Per saperne di più sull'
API e sui relativi ambiti di autorizzazione, consulta
projects.templates.launch.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launch_parameter": { "jobName": "JOB_NAME", "containerSpecGcsPath": "gs://dataflow-templates-REGION_NAME/VERSION/flex/Bigtable_Change_Streams_to_BigQuery", "parameters": { "bigtableReadInstanceId": "BIGTABLE_INSTANCE_ID", "bigtableReadTableId": "BIGTABLE_TABLE_ID", "bigtableChangeStreamAppProfile": "BIGTABLE_APPLICATION_PROFILE_ID", "bigQueryDataset": "BIGQUERY_DESTINATION_DATASET" } } }
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto in cui vuoi eseguire il job Dataflow Google CloudJOB_NAME: un nome job univoco a tua sceltaVERSION: la versione del modello che vuoi utilizzarePuoi utilizzare i seguenti valori:
latestper utilizzare la versione più recente del modello, disponibile nella cartella principale non datata nel bucket: gs://dataflow-templates-REGION_NAME/latest/- il nome della versione, ad esempio
2023-09-12-00_RC00, per utilizzare una versione specifica del modello, che si trova nidificata nella rispettiva cartella principale datata nel bucket: gs://dataflow-templates-REGION_NAME/
LOCATION: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempious-central1BIGTABLE_INSTANCE_ID: l'ID dell'istanza Bigtable.BIGTABLE_TABLE_ID: l'ID della tabella Bigtable.BIGTABLE_APPLICATION_PROFILE_ID: l'ID del profilo dell'applicazione Bigtable.BIGQUERY_DESTINATION_DATASET: il nome del set di dati di destinazione BigQuery
Passaggi successivi
- Scopri di più sui modelli Dataflow.
- Consulta l'elenco dei modelli forniti da Google.