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 se cumplen las siguientes condiciones:

  • 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 necesitan copiar datos en una tabla de BigQuery existente sin usar la capacidad de carga inicial de Datastream, ya sea por el tiempo que llevaría o por las limitaciones del producto.

Problema

Una tabla de BigQuery que se completa con la API de BigQuery Storage Write no permite operaciones regulares del 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. TIMESTAMP 1: Se inicia la operación de copia de la tabla.
  2. TIMESTAMP 2: Mientras se copia la tabla, las operaciones DML en la fuente generan cambios en los datos (se agregan, actualizan o quitan filas).
  3. TIMESTAMP 3: Se inicia la CDC, no se capturan los cambios que ocurrieron en TIMESTAMP 2, lo que genera una discrepancia 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 realizada que se copió en la tabla de BigQuery.

La siguiente solución te permite garantizar que el proceso de CDC capture todos los cambios desde TIMESTAMP 2, sin bloquear la operación de copia para escribir 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 la hubiera creado Datastream. Para ello, puedes usar el Kit de herramientas de migración de BigQuery de Datastream.
  • 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 una política de retención de registros que permita que se complete el proceso de copia de la tabla.

Fuentes de MySQL y Oracle

  1. Crea, pero no inicies la transmisión que piensas usar para la replicación continua de CDC. La transmisión debe estar en el estado CREATED.
  2. Cuando esté todo listo para iniciar la operación de copia de la tabla, identifica la posición actual del registro 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 en la base de datos.
    • En 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 complete la operación de copia, sigue los pasos que se describen en la página Administra transmisiones para iniciar la transmisión desde la posición del registro que identificaste anteriormente.

Fuentes de PostgreSQL

  1. Cuando esté 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 de 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 e inicia la transmisión.