Modello di flussi di modifiche di Spanner in Cloud Storage

Il modello di modifiche in tempo reale di Spanner in Cloud Storage è una pipeline di streaming che esegue lo streaming dei record delle modifiche dei dati di Spanner e li scrive in un bucket Cloud Storage utilizzando Dataflow Portable Runner.

La pipeline raggruppa i record delle modifiche in tempo reale di Spanner in finestre in base al relativo timestamp, con ogni finestra che rappresenta una durata di tempo la cui lunghezza può essere configurata con questo modello. Tutti i record con timestamp appartenenti alla finestra sono garantiti nella finestra; non possono esserci arrivi in ritardo. Puoi anche definire un numero di shard di output; la pipeline crea un file di output di Cloud Storage per finestra per shard. All'interno di un file di output, i record non sono ordinati. I file di output possono essere scritti in formato JSON o AVRO, a seconda della configurazione dell'utente.

Tieni presente che puoi ridurre al minimo la latenza di rete e i costi di trasporto di rete eseguendo il job Dataflow dalla stessa regione dell'istanza Spanner o del bucket Cloud Storage. Se utilizzi origini, sink, località dei file di staging o località dei file temporanei che si trovano al di fuori della regione del job, i dati potrebbero essere inviati tra le regioni. Scopri di più sulle regioni di Dataflow.

Scopri di più sulle modifiche in tempo reale, su come creare pipeline Dataflow di modifiche in tempo reale e sulle best practice.

Requisiti della pipeline

  • L'istanza Spanner deve esistere prima dell'esecuzione della pipeline.
  • Il database Spanner deve esistere prima dell'esecuzione della pipeline.
  • L'istanza dei metadati di Spanner deve esistere prima dell'esecuzione della pipeline.
  • Il database dei metadati di Spanner deve esistere prima dell'esecuzione della pipeline.
  • La modifica in tempo reale di Spanner deve esistere prima dell'esecuzione della pipeline.
  • Il bucket di output di Cloud Storage deve esistere prima dell'esecuzione della pipeline.

Parametri del modello

Parametri obbligatori

  • spannerInstanceId: l'ID dell'istanza Spanner da cui leggere i dati delle modifiche in tempo reale.
  • spannerDatabase: il database Spanner da cui leggere i dati delle modifiche in tempo reale.
  • spannerMetadataInstanceId: l'ID dell'istanza Spanner da utilizzare per la tabella dei metadati del connettore di modifiche in tempo reale.
  • spannerMetadataDatabase: il database Spanner da utilizzare per la tabella dei metadati del connettore di modifiche in tempo reale.
  • spannerChangeStreamName: il nome della modifica in tempo reale di Spanner da cui leggere.
  • gcsOutputDirectory: il percorso e il prefisso del nome file per la scrittura dei file di output. Deve terminare con una barra. La formattazione DateTime viene utilizzata per analizzare il percorso della directory per i formattatori di data e ora. Ad esempio, gs://your-bucket/your-path.

Parametri facoltativi

  • spannerProjectId: l'ID del progetto Google Cloud che contiene il database Spanner da cui leggere le modifiche in tempo reale. In questo progetto viene creata anche la tabella dei metadati del connettore di modifiche in tempo reale. Il valore predefinito di questo parametro è il progetto in cui è in esecuzione la pipeline Dataflow.
  • spannerDatabaseRole: il ruolo database Spanner da utilizzare durante l'esecuzione del modello. Questo parametro è obbligatorio solo quando l'entità IAM che esegue il modello è un utente con controllo dell'accesso granulare. Il ruolo database deve avere il privilegio SELECT sulla modifica in tempo reale e il privilegio EXECUTE sulla funzione di lettura della modifica in tempo reale. Per saperne di più, consulta Controllo dell'accesso granulare per le modifiche in tempo reale (https://cloud.google.com/spanner/docs/fgac-change-streams).
  • spannerMetadataTableName: il nome della tabella dei metadati del connettore di modifiche in tempo reale di Spanner da utilizzare. Se non viene fornita, durante l'esecuzione della pipeline viene creata automaticamente una tabella dei metadati delle modifiche in tempo reale di Spanner. Devi fornire un valore per questo parametro quando aggiorni una pipeline esistente. In caso contrario, non utilizzare questo parametro.
  • startTimestamp: la data e l'ora di inizio, inclusiva, da utilizzare per la lettura delle modifiche in tempo reale, nel formato Ex-2021-10-12T07:20:50.52Z. Il valore predefinito è il timestamp di avvio della pipeline, ovvero l'ora corrente.
  • endTimestamp: la data e l'ora di fine, inclusiva, da utilizzare per la lettura delle modifiche in tempo reale. Ad esempio, Ex-2021-10-12T07:20:50.52Z. Il valore predefinito è un tempo infinito nel futuro.
  • spannerHost: l'endpoint Cloud Spanner da chiamare nel modello. Utilizzato solo per i test. Ad esempio, https://spanner.googleapis.com. Il valore predefinito è: https://spanner.googleapis.com.
  • outputFileFormat: il formato del file di output di Cloud Storage. I formati consentiti sono TEXT e AVRO. Il valore predefinito è AVRO.
  • windowDuration: la durata della finestra è l'intervallo in cui i dati vengono scritti nella directory di output. Configura la durata in base alla velocità effettiva della pipeline. Ad esempio, una velocità effettiva più elevata potrebbe richiedere dimensioni delle finestre più piccole in modo che i dati rientrino nella memoria. Il valore predefinito è 5 m (cinque minuti), con un minimo di 1 s (un secondo). I formati consentiti sono: [int]s (per i secondi, ad esempio 5s), [int]m (per i minuti, ad esempio 12m), [int]h (per le ore, ad esempio 2h). Ad esempio, 5m.
  • rpcPriority: la priorità della richiesta per le chiamate Spanner. Il valore deve essere HIGH, MEDIUM o LOW. Il valore predefinito è HIGH.
  • spannerChangeStreamTvfNameList: elenco separato da punti e virgola dei nomi TVF di modifiche in tempo reale di Spanner da interrogare e unire. Il valore predefinito è vuoto.
  • outputFilenamePrefix: il prefisso da inserire in ogni file con finestra. Ad esempio, output-. Il valore predefinito è: output.
  • numShards: il numero massimo di shard di output prodotti durante la scrittura. Un numero maggiore di shard significa una velocità effettiva più elevata per la scrittura in Cloud Storage, ma potenzialmente un costo di aggregazione dei dati più elevato tra gli shard durante l'elaborazione dei file di output di Cloud Storage. Il valore predefinito è: 20.

Esegui il modello

Console

  1. Vai alla pagina Crea job da modello di Dataflow.
  2. Vai a Crea job da modello
  3. Nel campo Nome job, inserisci un nome job univoco.
  4. (Facoltativo) Per Endpoint a livello di regione, 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.

  5. Nel menu a discesa Modello Dataflow, seleziona il modello Modifiche in tempo reale di Cloud Spanner in Google Cloud Storage.
  6. Nei campi dei parametri forniti, inserisci i valori dei parametri.
  7. Fai clic su Esegui job.

gcloud

Nella shell o nel terminale, esegui il modello:

gcloud dataflow flex-template run JOB_NAME \
    --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Spanner_Change_Streams_to_Google_Cloud_Storage \
    --region REGION_NAME \
    --parameters \
spannerInstanceId=SPANNER_INSTANCE_ID,\
spannerDatabase=SPANNER_DATABASE,\
spannerMetadataInstanceId=SPANNER_METADATA_INSTANCE_ID,\
spannerMetadataDatabase=SPANNER_METADATA_DATABASE,\
spannerChangeStreamName=SPANNER_CHANGE_STREAM,\
gcsOutputDirectory=GCS_OUTPUT_DIRECTORY

Sostituisci quanto segue:

  • JOB_NAME: un nome job univoco a tua scelta
  • VERSION: la versione del modello che vuoi utilizzare

    Puoi utilizzare i seguenti valori:

  • REGION_NAME: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempio us-central1
  • SPANNER_INSTANCE_ID: ID istanza Cloud Spanner
  • SPANNER_DATABASE: database Cloud Spanner
  • SPANNER_METADATA_INSTANCE_ID: ID istanza dei metadati di Cloud Spanner
  • SPANNER_METADATA_DATABASE: database dei metadati di Cloud Spanner
  • SPANNER_CHANGE_STREAM: modifica in tempo reale di Cloud Spanner
  • GCS_OUTPUT_DIRECTORY: percorso del file per l'output delle modifiche in tempo reale

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",
      "parameters": {
          "spannerInstanceId": "SPANNER_INSTANCE_ID",
          "spannerDatabase": "SPANNER_DATABASE",
          "spannerMetadataInstanceId": "SPANNER_METADATA_INSTANCE_ID",
          "spannerMetadataDatabase": "SPANNER_METADATA_DATABASE",
          "spannerChangeStreamName": "SPANNER_CHANGE_STREAM",
          "gcsOutputDirectory": "GCS_OUTPUT_DIRECTORY"
      },
      "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/Spanner_Change_Streams_to_Google_Cloud_Storage",
   }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto Google Cloud in cui vuoi eseguire il job Dataflow
  • JOB_NAME: un nome job univoco a tua scelta
  • VERSION: la versione del modello che vuoi utilizzare

    Puoi utilizzare i seguenti valori:

  • LOCATION: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempio us-central1
  • SPANNER_INSTANCE_ID: ID istanza Cloud Spanner
  • SPANNER_DATABASE: database Cloud Spanner
  • SPANNER_METADATA_INSTANCE_ID: ID istanza dei metadati di Cloud Spanner
  • SPANNER_METADATA_DATABASE: database dei metadati di Cloud Spanner
  • SPANNER_CHANGE_STREAM: modifica in tempo reale di Cloud Spanner
  • GCS_OUTPUT_DIRECTORY: percorso del file per l'output delle modifiche in tempo reale

Passaggi successivi