En esta página, se describen las prácticas recomendadas para casos de uso en los que se produce lo siguiente:
- Los usuarios tienen una tabla existente en BigQuery y necesitan replicar sus datos con la captura de datos modificados (CDC) en la misma tabla de BigQuery.
- Los usuarios deben copiar datos en una tabla de BigQuery existente sin usar la función de reabastecimiento de Datastream, ya sea por el tiempo que llevaría o por las limitaciones del producto.
Problema
Una tabla de BigQuery que se propaga con la API de BigQuery Storage Write no permite operaciones normales del lenguaje de manipulación de datos (DML). Esto significa que, una vez que un flujo de CDC comienza a escribir en una tabla de BigQuery, no hay forma de agregar datos históricos que aún no se hayan propagado previamente en la tabla.
Considera la siguiente situación:
- TIMESTAMP 1: Se inicia la operación de copia de tablas.
- MARCA DE TIEMPO 2: Mientras se copia la tabla, las operaciones DML en la fuente generan cambios en los datos (se agregan, actualizan o quitan filas).
- TIMESTAMP 3: Se inicia la CDC, y no se capturan los cambios que se produjeron en TIMESTAMP 2, lo que genera discrepancias en los datos.
Solución
Para garantizar la integridad de los datos, el proceso de CDC debe capturar todos los cambios en la fuente que se produjeron desde el momento inmediatamente posterior a la última actualización que se copió en la tabla de BigQuery.
La siguiente solución te permite asegurarte de que el proceso de CDC capture todos los cambios de TIMESTAMP 2, sin bloquear la operación de copia para que escriba datos en la tabla de BigQuery.
Requisitos previos
- La tabla de destino en BigQuery debe tener exactamente el mismo esquema y la misma configuración que si Datastream la hubiera creado. Puedes usar el kit de herramientas de migración de BigQuery de Datastream para hacerlo.
- En el caso de las fuentes de MySQL y Oracle, el usuario debe poder identificar la posición del registro en el momento en que se inicia la operación de copia.
- La base de datos debe tener suficiente almacenamiento y política de retención de registros para permitir que se complete el proceso de copia de la tabla.
Fuentes de MySQL y Oracle
- Crea, pero no inicies la transmisión que deseas usar para la replicación de CDC en curso. La transmisión debe estar en el estado CREATED.
- Cuando todo esté listo para iniciar la operación de copia de tablas, identifica la posición de registro actual de la base de datos:
- En el caso de MySQL, consulta la documentación de MySQL para obtener información sobre cómo obtener las coordenadas del registro binario de replicación. Una vez que hayas identificado la posición del registro, cierra la sesión para liberar los bloqueos de la base de datos.
- Para Oracle, ejecuta la siguiente consulta:
SELECT current_scn FROM V$DATABASE
- Copia la tabla de la base de datos de origen a BigQuery.
- Una vez que se complete la operación de copia, sigue los pasos que se describen en la página Administrar transmisiones para iniciar la transmisión desde la posición del registro que identificaste antes.
Fuentes de PostgreSQL
- Cuando tengas todo listo para comenzar a copiar la tabla, crea el espacio de replicación. Para obtener más información, consulta Configura una base de datos de PostgreSQL de origen.
- Copia la tabla de la base de datos de origen a BigQuery.
- Una vez que se complete la operación de copia, crea y comienza la transmisión.