Usa Datastream y Dataflow para transmitir datos a BigQuery

En esta página, encontrarás 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 preparación 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 que Datastream y Dataflow las apliquen.

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. Para este ejemplo, la tabla actor en el 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 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 la función definida por el usuario.
  • Usa el parámetro javascriptTextTransformFunctionName para especificar el nombre de la función de JavaScript que quieres llamar como tu función definida por el usuario.

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

Para lograrlo, crea una función que copie el valor de la columna _metadata_deleted en una columna nueva llamada is_deleted y, luego, restablece 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 actualice 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);
 }

Establecer 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 reabastecen los datos históricos, te recomendamos que mantengas la frecuencia de combinación baja (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á la tarea que usa la plantilla cada 10 minutos. Sin embargo, la primera vez que se ejecute el trabajo habrá un retraso de 5 minutos. En este ejemplo, si la tarea se ejecuta a las 9:14 a.m., la primera combinación se realizará a las 9:29 a.m. (10 minutos para la combinación y 5 minutos para la demora). La segunda combinación se realizará a las 9:39 a.m. y todas las combinaciones posteriores se realizarán en intervalos de 10 minutos (9:49 a.m., 9:59 a.m., 10:09 a.m., etcétera).

Si configuras la frecuencia de combinación en 60 minutos, el trabajo se ejecutará por hora, luego de una demora de 5 minutos durante 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 realizarán en intervalos de 60 minutos (11:05 a.m., 12:05 p.m., 1:05 p.m., etcétera).

Ya sea como resultado de controlar los costos o por otras razones, es posible que no puedas realizar una fusión con una frecuencia que satisfaga las necesidades de tu empresa. 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 replicación y preparación 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 preparación y réplica). Si la frecuencia de combinación es baja y necesitas un acceso más rápido a los datos, usa la vista.