Usa Datastream y Dataflow para transmitir datos a BigQuery

Cuando replicas datos en BigQuery con la canalización de transmisión de Datastream y Dataflow, puedes personalizar la forma en que Dataflow procesa y combina los cambios. La partición de tablas de réplica en claves personalizadas, la transformación de eventos con funciones definidas por el usuario (UDF) de JavaScript y el ajuste de la frecuencia de combinación te ayudan a equilibrar la actualización de los datos con los costos de almacenamiento y de las consultas.

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

El conjunto de datos de etapa de pruebas en BigQuery se particiona automáticamente. Sin embargo, de forma predeterminada, el conjunto de datos de réplica no se particiona porque las claves de partición de las tablas de réplica deben definirse en función de una lógica empresarial específica, en lugar de ser aplicadas por Datastream y Dataflow.

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

  1. Detén y vacía el trabajo de Dataflow.

  2. Usa el editor de SQL en BigQuery para ejecutar la siguiente secuencia de comandos de SQL para 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 establecer como nuestra clave de partición. Cuando ejecutas la secuencia de comandos, vuelves 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 un trabajo de Dataflow.

Ejecuta 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 dentro de Cloud Storage. A continuación, sigue estos pasos:

  • Usa el parámetro javascriptTextTransformGcsPath en la plantilla para especificar la ubicación del archivo en 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 deseas llamar como tu función definida por el usuario.

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

Para lograrlo, crea una función que copie el valor de la columna _metadata_deleted en una columna nueva llamada is_deleted y, luego, restablezca el valor de la columna _metadata_deleted a false. Esto hace que el trabajo de Dataflow ignore los eventos de eliminación y conserve los registros borrados cuando se actualiza el conjunto de datos de réplica en BigQuery.

Este es el código de muestra para 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);
 }

Establece la frecuencia de combinación

Usa el parámetro mergeFrequencyMinutes de la plantilla de Datastream a BigQuery para establecer la frecuencia de combinación. Esta es la cantidad de minutos entre las combinaciones de una tabla determinada en el conjunto de datos de réplica en BigQuery. Mientras se completan los datos históricos, te recomendamos que mantengas baja la frecuencia de combinación (12 o 24 horas) para mantener los costos bajo control.

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

Si estableces la frecuencia de combinación en 60 minutos, el trabajo se ejecutará en la hora, después de una demora de 5 minutos para la ejecución inicial del trabajo. Si el trabajo está programado para ejecutarse a las 10 a.m., en realidad se ejecutará a las 10:05 a.m. debido a la demora de 5 minutos. Todas las combinaciones posteriores se producirán en intervalos de 60 minutos (11:05 a.m., 12:05 p.m., 1:05 p.m., y así sucesivamente).

Ya sea como resultado del control de costos o por otros motivos, es posible que no puedas realizar una combinación con una frecuencia que satisfaga tus necesidades comerciales. Es posible que no tengas los datos más recientes. Para acceder a los datos más recientes, crea una vista sobre las tablas de los conjuntos de datos de etapa de pruebas y de réplica en BigQuery, en la que la vista imite la combinación. Esta vista se crea como una tabla lógica (para los conjuntos de datos de etapa de pruebas y de réplica). Si la frecuencia de combinación es baja y necesitas un acceso más rápido a los datos, usa la vista.