Usar Datastream y Dataflow para transmitir datos a BigQuery

En esta página, encontrarás las prácticas recomendadas para usar Datastream y Dataflow para transmitir datos a BigQuery.

Particionar conjuntos de datos de réplica en claves definidas por el usuario

El conjunto de datos de almacenamiento provisional de BigQuery se particiona automáticamente. Sin embargo, de forma predeterminada, el conjunto de datos de réplica no tiene particiones, ya que las claves de partición de las tablas de réplica se deben definir en función de una lógica empresarial específica, en lugar de ser obligatorias por Datastream y Dataflow.

Por cada tabla del conjunto de datos de réplica que necesite particiones, haz lo siguiente:

  1. Detener y vaciar la tarea de Dataflow

  2. Usa el editor de SQL de BigQuery para ejecutar la siguiente secuencia de comandos de SQL en cada tabla del conjunto de datos de réplica. En este ejemplo, la tabla actor del conjunto de datos datastream_cdc tiene una columna last_update que queremos definir como clave de partición. Al ejecutar la secuencia de comandos, se vuelve a crear la tabla con la clave de partición correcta.

    create table '[BigQuery_PROJECT_ID].datastream_cdc.actor_new' partition by date(last_update)
    as SELECT * FROM '[BigQuery_PROJECT_ID].datastream_cdc.actor'
    
    drop table '[BigQuery_PROJECT_ID].datastream_cdc.actor'
    
    alter table '[BigQuery_PROJECT_ID].datastream_cdc.actor_new' rename to 'actor'
  3. Usa la plantilla de Datastream a BigQuery para volver a crear una tarea de Dataflow.

Ejecutar funciones definidas por el usuario para manipular datos de eventos

Puedes usar la plantilla de Datastream a BigQuery para ejecutar una función definida por el usuario de JavaScript. Para ello, primero coloca un archivo que contenga la función en una ubicación específica de Cloud Storage. A continuación, haz lo siguiente:

  • Usa el parámetro javascriptTextTransformGcsPath en la plantilla para especificar la ubicación del archivo de Cloud Storage que contiene tu función definida por el usuario.
  • Usa el parámetro javascriptTextTransformFunctionName para especificar el nombre de la función de JavaScript que quieras llamar como función definida por el usuario.

Por ejemplo, puedes ejecutar una función definida por el usuario para conservar los registros eliminados en las tablas del conjunto de datos de réplica en BigQuery. Este proceso se conoce como eliminación no definitiva.

Para ello, crea una función que copie el valor de la columna _metadata_deleted en una nueva columna llamada is_deleted y, a continuación, restablezca el valor de la columna _metadata_deleted a false. De esta forma, la tarea de Dataflow ignora los eventos de eliminación y conserva los registros eliminados al actualizar el conjunto de datos de réplica en BigQuery.

Este es el código de muestra de esta función definida por el usuario:

/**
* This function changes the behavior of the Datastream to
* BigQuery template to allow soft deletes.
* @param {string} messageString from DatastreamIO data
* @return {string} same as an input message with an added property
*/
function transform(messageString) {
   // messageString is a JSON object as a string
   var messageJson = JSON.parse(messageString);
    // Moving the deleted flag to a new column will cause the pipeline to soft delete data.
   messageJson['is_deleted'] = messageJson['_metadata_deleted'];
   messageJson['_metadata_deleted'] = false;
    return JSON.stringify(messageJson);
 }

Definir la frecuencia de combinación

Usa el parámetro mergeFrequencyMinutes de la plantilla de Datastream a BigQuery para definir la frecuencia de combinación. Es el número de minutos que transcurren entre las combinaciones de una tabla determinada del conjunto de datos de réplica en BigQuery. Mientras se rellenan los datos históricos, le recomendamos que mantenga una frecuencia de combinación baja (12 o 24 horas) para controlar los costes.

Por ejemplo, si asignas el valor 10 minutos a este parámetro, Dataflow ejecutará la tarea que usa la plantilla cada 10 minutos. Sin embargo, la primera vez que se ejecute la tarea, habrá un retraso de 5 minutos. En este ejemplo, si el trabajo se ejecuta a las 9:14, la primera combinación se producirá a las 9:29 (10 minutos para la combinación y 5 minutos para el retraso). La segunda combinación se producirá a las 9:39, y todas las combinaciones posteriores se producirán en intervalos de 10 minutos (9:49, 9:59, 10:09, etc.).

Si define la frecuencia de combinación en 60 minutos, el trabajo se ejecutará cada hora, después de un retraso de 5 minutos para la ejecución inicial del trabajo. Si la tarea se ha programado para las 10:00, se ejecutará a las 10:05 debido al retraso de 5 minutos. Las siguientes combinaciones se producirán en intervalos de 60 minutos (11:05, 12:05, 13:05, etc.).

Tanto si es para controlar los costes como por otros motivos, es posible que no puedas combinar los datos con la frecuencia que necesites. Es posible que no tengas los datos más recientes. Para acceder a los datos más recientes, cree una vista sobre las tablas de los conjuntos de datos de almacenamiento temporal y de réplica en BigQuery, donde la vista imite la combinación. Esta vista se crea como una tabla lógica (tanto para el conjunto de datos de la fase de staging como para el de la réplica). Si la frecuencia de combinación es baja y necesitas acceder a los datos más rápido, usa la vista.