Usa Datastream con una tabla de BigQuery existente

En esta página, se describen las prácticas recomendadas para los casos de uso en los que sucede lo siguiente:

  • Los usuarios tienen una tabla existente en BigQuery y deben replicar sus datos mediante la captura de datos modificados (CDC) en la misma tabla de BigQuery.
  • Los usuarios deben copiar datos en una tabla existente de BigQuery sin usar la función de reabastecimiento de Datastream, ya sea por el tiempo que tardarí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 de lenguaje de manipulación de datos (DML). Esto significa que una vez que una transmisión de CDC comienza a escribir en una tabla de BigQuery, no hay forma de agregar datos históricos que no se hayan propagado previamente en la tabla.

Considera la siguiente situación:

  1. MARCA DE TIEMPO 1: Se inicia la operación de copia de tabla.
  2. 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).
  3. MARCA DE TIEMPO 3: Se inicia la CDC, pero no se capturan los cambios que ocurrieron en la MARCA DE TIEMPO 2, lo que genera una discrepancia de 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 realizada que se copió en la tabla de BigQuery.

La solución que sigue te permite asegurarte de que el proceso de CDC capture todos los cambios de la MARCA DE TIEMPO 2, sin bloquear la operación de copia para que no escriba datos en la tabla de BigQuery.

Requisitos previos

  • La tabla de destino en BigQuery debe tener exactamente el mismo esquema y configuración que si Datastream la creó. Puedes usar el kit de herramientas de migración de Datastream de BigQuery para lograrlo.
  • 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 tablas.

Fuentes de MySQL y Oracle

  1. Crea, pero no inicies la transmisión que deseas usar para la replicación de CDC en curso. La transmisión debe tener el estado CREATED.
  2. Cuando tengas todo listo para iniciar la operación de copia de tabla, identifica la posición de registro actual de la base de datos:
    • Para MySQL, consulta la documentación de MySQL a fin de 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
  3. Copia la tabla de la base de datos de origen en BigQuery.
  4. Una vez que se completa la operación de copia, sigue los pasos descritos en la página Administrar transmisiones para iniciar la transmisión desde la posición de registro que identificaste antes.

Fuentes de PostgreSQL

  1. Cuando tengas todo listo para comenzar a copiar la tabla, crea la ranura de replicación. Para obtener más información, consulta Configura una base de datos PostgreSQL de origen.
  2. Copia la tabla de la base de datos de origen en BigQuery.
  3. Una vez que se complete la operación de copia, crea y, luego, inicia la transmisión.