En esta página, encontrarás prácticas recomendadas para usar Datastream y Dataflow para transmitir datos a BigQuery.
Particiona conjuntos de datos de réplicas 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 en 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 particionamiento, haz lo siguiente:
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 datosdatastream_cdc
tiene una columnalast_update
que queremos establecer como clave de partición. Si ejecutas la secuencia de comandos, volverás 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' Usa la plantilla de Datastream a BigQuery para volver a crear un trabajo de Dataflow.
Ejecuta funciones definidas por el usuario para manipular los 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 temporal.
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
en false
. Esto hace que el trabajo de Dataflow ignore los eventos de eliminación y conserve los registros borrados cuando 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); }
Cómo 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. 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 controlar los costos.
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., etcétera).
Si configuras 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 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., etcétera).
Ya sea como resultado del control de costos o por otros motivos, es posible que no puedas realizar una combinación con la 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 etapa de pruebas y de réplica en BigQuery, en la que la vista simule la combinación. Esta vista se crea como una tabla lógica (tanto para los conjuntos de datos de etapa de pruebas como para los de réplica). Si la frecuencia de combinación es baja y necesitas acceder a los datos más rápido, usa la vista.