Modello Datastream a BigQuery (flusso)

Il modello Datastream a BigQuery è una pipeline di streaming che legge Datastream dati e li replica in BigQuery. Il modello 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 modello esegue un'operazione MERGE in BigQuery per eseguire 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 direttamente i dati dai file in Cloud Storage.

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

  • Le nuove tabelle vengono create quando vengono inseriti i dati.
  • Le nuove colonne vengono aggiunte alle tabelle BigQuery con valori iniziali null.
  • Le colonne eliminate vengono ignorate in BigQuery e i valori futuri sono null.
  • Le colonne rinominate vengono aggiunte a BigQuery come nuove colonne.
  • Le modifiche del tipo non vengono propagate a BigQuery.

Ti consigliamo di eseguire questa pipeline utilizzando la modalità di streaming Almeno una volta, perché il modello esegue la deduplicazione quando unisce i dati da una tabella BigQuery temporanea alla tabella BigQuery principale. Questo passaggio della pipeline significa che non c'è alcun vantaggio aggiuntivo nell'utilizzo della modalità di streaming Esattamente una volta.

Requisiti della pipeline

  • Uno stream Datastream pronto per la replica dei dati o che la sta già eseguendo.
  • Le notifiche Pub/Sub di Cloud Storage sono abilitate per i dati di Datastream.
  • I set di dati di destinazione BigQuery vengono creati e all'account di servizio Compute Engine è stato concesso l'accesso amministratore.
  • Nella tabella di origine è necessaria una chiave primaria per creare la tabella di replica di destinazione.
  • 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 contenente le tabelle di gestione temporanea. Questo parametro supporta i modelli, ad esempio {_metadata_dataset}_log o my_dataset_log. In genere, questo parametro è un nome di 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}.
  • outputDatasetTemplate: il nome del set di dati contenente le tabelle di replica. Questo parametro supporta i modelli, ad esempio {_metadata_dataset} o my_dataset. In genere, questo parametro è un nome di 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 del percorso dell'output dei file di Datastream. Il valore predefinito è empty.

Parametri facoltativi

  • inputFilePattern: la posizione dei file per l'output dei file di Datastream in Cloud Storage, nel formato gs://<BUCKET_NAME>/<ROOT_PATH>/.
  • gcsPubSubSubscription: l'abbonamento Pub/Sub utilizzato 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 modello dello stream per 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). Il valore predefinito è: 1970-01-01T00:00:00.00Z.
  • fileReadConcurrency: il numero di file DataStream da leggere contemporaneamente. Il valore predefinito è 10.
  • outputProjectId: l'ID del progetto Google Cloud contenente i set di dati BigQuery in cui inserire i dati di output. Il valore predefinito di questo parametro è il progetto in cui è in esecuzione la pipeline Dataflow.
  • outputStagingTableNameTemplate: il modello da utilizzare per denominare le 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: i campi separati da virgole da ignorare in BigQuery. Il 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 tentativi di ripetizione della coda di messaggi non recapitabili. Il valore predefinito è 10.
  • dataStreamRootUrl: l'URL principale dell'API Datastream. Il valore predefinito è: https://datastream.googleapis.com/.
  • applyMerge: indica se disabilitare le query MERGE per il job. Il valore predefinito è true.
  • mergeConcurrency: il numero di query MERGE BigQuery simultanee. Ha effetto solo se 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 BigQuery. Il valore predefinito è 1.
  • useStorageWriteApiAtLeastOnce: questo parametro ha effetto solo se Use BigQuery Storage Write API è abilitata. Se true, per l'API Storage Write vengono utilizzate le semantiche Almeno una volta. In caso contrario, vengono utilizzate le semantiche Esattamente una volta. 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 JavaScript definita dall'utente (UDF) 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, vedi Esempi di UDF (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples).
  • javascriptTextTransformReloadIntervalMinutes: specifica la frequenza di ricaricamento della UDF, in minuti. Se il valore è maggiore di 0, Dataflow controlla periodicamente il file UDF in Cloud Storage e ricarica la UDF se il file viene modificato. Questo parametro consente di aggiornare la UDF mentre la pipeline è in esecuzione, senza dover riavviare il job. Se il valore è 0, il ricaricamento della UDF è disabilitato. Il valore predefinito è 0.
  • pythonTextTransformGcsPath: il pattern del percorso Cloud Storage per il codice Python contenente le funzioni definite dall'utente. Ad esempio, gs://your-bucket/your-transforms/*.py.
  • pythonRuntimeVersion: la versione del 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 volte in cui verrà ritentato un runtime prima di non riuscire. 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ù, vedi Utilizzo dell'API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api).
  • numStorageWriteApiStreams: quando si utilizza l'API Storage Write, specifica il numero di stream di scrittura. Se useStorageWriteApi è true e useStorageWriteApiAtLeastOnce è false, devi impostare questo parametro. Il valore predefinito è 0.
  • storageWriteApiTriggeringFrequencySec: quando si utilizza 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

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

Specifica della funzione

La UDF 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 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, vedi Località di Dataflow.

    5. Nel 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 Esattamente una volta alla modalità di streaming Almeno una volta, seleziona Almeno una volta.
    8. Fai clic su Esegui job.

    gcloud

    Nella shell o nel terminale, esegui il modello:

    gcloud dataflow flex-template run JOB_NAME \
        --project=PROJECT_ID \
        --region=REGION_NAME \
        --enable-streaming-engine \
        --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/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 a 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:

    • GCS_FILE_PATH: il percorso Cloud Storage dei dati di Datastream. Ad esempio: gs://bucket/path/to/data/
    • GCS_SUBSCRIPTION_NAME: l'abbonamento 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 della tabella BigQuery. Ad esempio, {_metadata_schema}_{_metadata_table}_log

    API

    Per eseguire il modello utilizzando l'API REST, invia una richiesta HTTP POST. Per saperne di più sull'API e sui suoi ambiti di autorizzazione, vedi 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-LOCATION/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 a 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:

    • GCS_FILE_PATH: il percorso Cloud Storage dei dati di Datastream. Ad esempio: gs://bucket/path/to/data/
    • GCS_SUBSCRIPTION_NAME: l'abbonamento 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 della tabella BigQuery. Ad esempio, {_metadata_schema}_{_metadata_table}_log

    Passaggi successivi