Modello Datastream a BigQuery (flusso)

Il template da Datastream a BigQuery è una pipeline di streaming che legge i dati di Datastream e li replica in BigQuery. Il template legge i dati da Cloud Storage utilizzando le notifiche Pub/Sub e li replica in una tabella di gestione temporanea BigQuery con partizionamento temporale. Dopo la replica, il template esegue un'istruzione MERGE in BigQuery per applicare l'upsert di tutte le modifiche di Change Data Capture (CDC) in una replica della tabella di origine. Specifica il parametro gcsPubSubSubscription per leggere i dati dalle notifiche Pub/Sub OPPURE fornisci il parametro inputFilePattern per leggere i dati direttamente dai file in Cloud Storage.

Il template gestisce la creazione e l'aggiornamento delle tabelle BigQuery gestite dalla replica. Quando è richiesto il Data Definition Language (DDL), un callback a Datastream estrae lo schema della tabella di origine e lo traduce in tipi di dati BigQuery. Le operazioni supportate includono:

  • Le nuove tabelle vengono create man mano che i dati vengono inseriti.
  • Le nuove colonne vengono aggiunte alle tabelle BigQuery con valori iniziali nulli.
  • Le colonne eliminate vengono ignorate in BigQuery e i valori futuri sono nulli.
  • Le colonne rinominate vengono aggiunte a BigQuery come nuove colonne.
  • Le modifiche al tipo non vengono propagate a BigQuery.

Ti consigliamo di eseguire questa pipeline utilizzando la modalità di flussi di dati at-least-once, perché il template esegue la deduplicazione quando unisce i dati di una tabella BigQuery temporanea alla tabella BigQuery principale. Questo passaggio nella pipeline significa che non esiste alcun vantaggio aggiuntivo nell'utilizzo della modalità di flussi di dati exactly-once.

Requisiti della pipeline

  • Un flusso Datastream pronto per replicare i dati o che li sta già replicando.
  • Le notifiche Pub/Sub di Cloud Storage sono abilitate per i dati Datastream.
  • I set di dati di destinazione BigQuery vengono creati e all'account di servizio Compute Engine viene concesso l'accesso amministratore.
  • Per creare la tabella di replica di destinazione, è necessaria una chiave primaria nella tabella di origine.
  • Un database di origine MySQL o Oracle. I database PostgreSQL e SQL Server non sono supportati.

Parametri del modello

Parametri obbligatori

  • inputFileFormat: il formato dei file di output prodotti da Datastream. I valori consentiti sono avro e json. Il valore predefinito è avro.
  • outputStagingDatasetTemplate: il nome del set di dati che contiene le tabelle di gestione temporanea. Questo parametro supporta i modelli, ad esempio {_metadata_dataset}_log o my_dataset_log. In genere, questo parametro è il nome di un set di dati. Il valore predefinito è {_metadata_dataset}. Nota: per le origini MySQL, il nome del database è mappato a {_metadata_schema} anziché a {_metadata_dataset}.
  • outputDatasetTemplate: il nome del set di dati che contiene le tabelle di replica. Questo parametro supporta i modelli, ad esempio {_metadata_dataset} o my_dataset. In genere, questo parametro è il nome di un set di dati. Il valore predefinito è {_metadata_dataset}. Nota: per le origini MySQL, il nome del database viene mappato a {_metadata_schema} anziché a {_metadata_dataset}.
  • deadLetterQueueDirectory: il percorso utilizzato da Dataflow per scrivere l'output della coda di messaggi non recapitabili. Questo percorso non deve essere lo stesso dell'output del file Datastream. Il valore predefinito è empty.

Parametri facoltativi

  • inputFilePattern: la posizione del file di output di Datastream in Cloud Storage, nel formato gs://<BUCKET_NAME>/<ROOT_PATH>/.
  • gcsPubSubSubscription: la sottoscrizione Pub/Sub utilizzata da Cloud Storage per notificare a Dataflow i nuovi file disponibili per l'elaborazione, nel formato: projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>.
  • streamName: il nome o il template dello stream di cui eseguire il polling per le informazioni sullo schema. Il valore predefinito è: {_metadata_stream}. In genere, il valore predefinito è sufficiente.
  • rfcStartDateTime: la data e l'ora di inizio da utilizzare per recuperare i dati da Cloud Storage (https://tools.ietf.org/html/rfc3339). Valore predefinito: 1970-01-01T00:00:00.00Z.
  • fileReadConcurrency: il numero di file DataStream simultanei da leggere. Il valore predefinito è 10.
  • outputProjectId: l'ID del progetto Google Cloud che contiene i set di dati BigQuery in cui inserire i dati. L'impostazione predefinita di questo parametro è il progetto in cui è in esecuzione la pipeline Dataflow.
  • outputStagingTableNameTemplate: il modello da utilizzare per assegnare un nome alle tabelle di gestione temporanea. Ad esempio, {_metadata_table}. Il valore predefinito è {_metadata_table}_log.
  • outputTableNameTemplate: il modello da utilizzare per il nome delle tabelle di replica, ad esempio {_metadata_table}. Il valore predefinito è {_metadata_table}.
  • ignoreFields: campi separati da virgole da ignorare in BigQuery. Valore predefinito: _metadata_stream,_metadata_schema,_metadata_table,_metadata_source,_metadata_tx_id,_metadata_dlq_reconsumed,_metadata_primary_keys,_metadata_error,_metadata_retry_count. Ad esempio: _metadata_stream,_metadata_schema.
  • mergeFrequencyMinutes: il numero di minuti tra le unioni per una determinata tabella. Il valore predefinito è 5.
  • dlqRetryMinutes: il numero di minuti tra i nuovi tentativi DLQ. Il valore predefinito è 10.
  • dataStreamRootUrl: l'URL di base dell'API Datastream. Il valore predefinito è: https://datastream.googleapis.com/.
  • applyMerge: indica se disattivare le query MERGE per il job. Il valore predefinito è true.
  • mergeConcurrency: il numero di query MERGE BigQuery simultanee. Ha effetto solo quando applyMerge è impostato su true. Il valore predefinito è 30.
  • partitionRetentionDays: il numero di giorni da utilizzare per la conservazione delle partizioni durante l'esecuzione delle unioni di BigQuery. Il valore predefinito è 1.
  • useStorageWriteApiAtLeastOnce: questo parametro ha effetto solo se Use BigQuery Storage Write API è abilitato. Se true, per l'API Storage Write viene utilizzata la semantica "at-least-once". In caso contrario, viene utilizzata la semantica "exactly-once". Il valore predefinito è false.
  • datastreamSourceType: esegue l'override del rilevamento del tipo di origine per i dati CDC di Datastream. Se specificato, questo valore verrà utilizzato anziché derivare il tipo di origine dal campo read_method. I valori validi includono "mysql", "postgresql", "oracle", "sqlserver" e così via. Questo parametro è utile quando il campo read_method contiene "cdc" e il tipo di origine effettivo non può essere determinato automaticamente.
  • javascriptTextTransformGcsPath: l'URI Cloud Storage del file .js che definisce la funzione definita dall'utente (UDF) JavaScript da utilizzare. Ad esempio, gs://my-bucket/my-udfs/my_file.js.
  • javascriptTextTransformFunctionName: il nome della funzione definita dall'utente (UDF) JavaScript da utilizzare. Ad esempio, se il codice della funzione JavaScript è myTransform(inJson) { /*...do stuff...*/ }, il nome della funzione è myTransform. Per esempi di UDF JavaScript, consulta Esempi di UDF (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples).
  • javascriptTextTransformReloadIntervalMinutes: specifica la frequenza di ricaricamento della funzione definita dall'utente, in minuti. Se il valore è maggiore di 0, Dataflow controlla periodicamente il file della funzione definita dall'utente in Cloud Storage e ricarica la funzione definita dall'utente se il file viene modificato. Questo parametro consente di aggiornare la funzione definita dall'utente mentre la pipeline è in esecuzione, senza dover riavviare il job. Se il valore è 0, il ricaricamento delle UDF è disabilitato. Il valore predefinito è 0.
  • pythonTextTransformGcsPath: il pattern del percorso di Cloud Storage per il codice Python contenente le funzioni definite dall'utente. Ad esempio, gs://your-bucket/your-transforms/*.py.
  • pythonRuntimeVersion: la versione di runtime da utilizzare per questa UDF Python.
  • pythonTextTransformFunctionName: il nome della funzione da chiamare dal file JavaScript. Utilizza solo lettere, cifre e trattini bassi. Ad esempio, transform_udf1.
  • runtimeRetries: il numero di tentativi di esecuzione di un runtime prima che si verifichi un errore. Il valore predefinito è 5.
  • useStorageWriteApi: se true, la pipeline utilizza l'API BigQuery Storage Write (https://cloud.google.com/bigquery/docs/write-api). Il valore predefinito è false. Per saperne di più, consulta Utilizzo dell'API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api).
  • numStorageWriteApiStreams: quando utilizzi l'API Storage Write, specifica il numero di flussi di scrittura. Se useStorageWriteApi è true e useStorageWriteApiAtLeastOnce è false, devi impostare questo parametro. Il valore predefinito è 0.
  • storageWriteApiTriggeringFrequencySec: quando utilizzi l'API Storage Write, specifica la frequenza di attivazione, in secondi. Se useStorageWriteApi è true e useStorageWriteApiAtLeastOnce è false, devi impostare questo parametro.

Funzione definita dall'utente

Se vuoi, puoi estendere questo modello scrivendo una funzione definita dall'utente (UDF). Il template chiama la funzione definita dall'utente per ogni elemento di input. I payload degli elementi vengono serializzati come stringhe JSON. Per saperne di più, consulta Crea funzioni definite dall'utente per i template Dataflow.

Specifica della funzione

La funzione definita dall'utente ha la seguente specifica:

  • Input: i dati CDC, serializzati come stringa JSON.
  • Output: una stringa JSON che corrisponde allo schema della tabella di destinazione BigQuery.
  • 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. Dal menu a discesa Modello Dataflow, seleziona il modello Datastream a BigQuery.
    6. Nei campi dei parametri forniti, inserisci i valori dei parametri.
    7. (Facoltativo) Per passare dall'elaborazione "exactly-once" alla modalità flusso di dati "at-least-once", seleziona Almeno una volta.
    8. Fai clic su Esegui job.

    gcloud

    Nella shell o nel terminale, esegui il template:

    gcloud dataflow flex-template run JOB_NAME \
        --project=PROJECT_ID \
        --region=REGION_NAME \
        --enable-streaming-engine \
        --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Cloud_Datastream_to_BigQuery \
        --parameters \
    inputFilePattern=GCS_FILE_PATH,\
    gcsPubSubSubscription=GCS_SUBSCRIPTION_NAME,\
    outputStagingDatasetTemplate=BIGQUERY_DATASET,\
    outputDatasetTemplate=BIGQUERY_DATASET,\
    outputStagingTableNameTemplate=BIGQUERY_TABLE,\
    outputTableNameTemplate=BIGQUERY_TABLE_log
      

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto Google Cloud in cui vuoi eseguire il job Dataflow
    • JOB_NAME: un nome job univoco di tua scelta
    • REGION_NAME: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempio us-central1
    • VERSION: the version of the template that you want to use

      You can use the following values:

      • latest to use the latest version of the template, which is available in the non-dated parent folder in the bucket— gs://dataflow-templates/latest/
      • the version name, like 2023-09-12-00_RC00, to use a specific version of the template, which can be found nested in the respective dated parent folder in the bucket— gs://dataflow-templates/
    • GCS_FILE_PATH: il percorso Cloud Storage dei dati di Datastream. Ad esempio: gs://bucket/path/to/data/
    • GCS_SUBSCRIPTION_NAME: la sottoscrizione Pub/Sub da cui leggere i file modificati. Ad esempio: projects/my-project-id/subscriptions/my-subscription-id.
    • BIGQUERY_DATASET: il nome del set di dati BigQuery.
    • BIGQUERY_TABLE: il modello di tabella BigQuery. Ad esempio, {_metadata_schema}_{_metadata_table}_log

    API

    Per eseguire il template utilizzando l'API REST, invia una richiesta POST HTTP. 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": {
    
              "inputFilePattern": "GCS_FILE_PATH",
              "gcsPubSubSubscription": "GCS_SUBSCRIPTION_NAME",
              "outputStagingDatasetTemplate": "BIGQUERY_DATASET",
              "outputDatasetTemplate": "BIGQUERY_DATASET",
              "outputStagingTableNameTemplate": "BIGQUERY_TABLE",
              "outputTableNameTemplate": "BIGQUERY_TABLE_log"
          },
          "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Cloud_Datastream_to_BigQuery",
       }
    }
      

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto Google Cloud in cui vuoi eseguire il job Dataflow
    • JOB_NAME: un nome job univoco di tua scelta
    • LOCATION: la regione in cui vuoi eseguire il deployment del job Dataflow, ad esempio us-central1
    • VERSION: the version of the template that you want to use

      You can use the following values:

      • latest to use the latest version of the template, which is available in the non-dated parent folder in the bucket— gs://dataflow-templates/latest/
      • the version name, like 2023-09-12-00_RC00, to use a specific version of the template, which can be found nested in the respective dated parent folder in the bucket— gs://dataflow-templates/
    • GCS_FILE_PATH: il percorso Cloud Storage dei dati di Datastream. Ad esempio: gs://bucket/path/to/data/
    • GCS_SUBSCRIPTION_NAME: la sottoscrizione Pub/Sub da cui leggere i file modificati. Ad esempio: projects/my-project-id/subscriptions/my-subscription-id.
    • BIGQUERY_DATASET: il nome del set di dati BigQuery.
    • BIGQUERY_TABLE: il modello di tabella BigQuery. Ad esempio, {_metadata_schema}_{_metadata_table}_log

    Passaggi successivi