Utiliser Datastream avec une table BigQuery existante

Cette page décrit les bonnes pratiques à suivre dans les cas d'utilisation suivants:

  • Les utilisateurs disposent d'une table existante dans BigQuery et doivent répliquer leurs données à l'aide de la capture des données modifiées (CDC) dans la même table BigQuery.
  • Les utilisateurs doivent copier des données dans une table BigQuery existante sans utiliser la fonctionnalité de remplissage de Datastream, soit en raison du temps qu'elle prendrait, soit en raison des limites du produit.

Problème

Une table BigQuery renseignée à l'aide de l'API BigQuery Storage Write n'autorise pas les opérations de langage de manipulation de données (LMD) standards. Cela signifie qu'une fois qu'un flux CDC commence à écrire dans une table BigQuery, il n'est pas possible d'ajouter des données historiques qui n'ont pas déjà été préremplies dans la table.

Imaginez le scénario suivant :

  1. TIMESTAMP 1: l'opération de copie de table est lancée.
  2. TIMESTAMP 2: pendant la copie de la table, les opérations LMD à la source entraînent des modifications des données (des lignes sont ajoutées, mises à jour ou supprimées).
  3. TIMESTAMP 3: la capture des données modifiées est lancée. Les modifications apportées à TIMESTAMP 2 ne sont pas capturées, ce qui entraîne une divergence de données.

Solution

Pour garantir l'intégrité des données, le processus CDC doit capturer toutes les modifications apportées à la source depuis le moment immédiatement suivant la dernière mise à jour copiée dans la table BigQuery.

La solution suivante vous permet de vous assurer que le processus de CDC capture toutes les modifications à partir de TIMESTAMP 2, sans empêcher l'opération de copie d'écrire des données dans la table BigQuery.

Prérequis

  • La table cible dans BigQuery doit avoir exactement le même schéma et la même configuration que si elle avait été créée par Datastream. Pour ce faire, vous pouvez utiliser le kit de migration BigQuery Datastream.
  • Pour les sources MySQL et Oracle, l'utilisateur doit pouvoir identifier la position du journal au moment du démarrage de l'opération de copie.
  • La base de données doit disposer d'un espace de stockage et d'une stratégie de conservation des journaux suffisants pour que le processus de copie de la table soit terminé.

Sources MySQL et Oracle

  1. Créez, mais ne démarrez pas le flux que vous prévoyez d'utiliser pour la réplication CDC en cours. Le flux doit être à l'état CREATED (CRÉÉ).
  2. Lorsque vous êtes prêt à démarrer l'opération de copie de table, identifiez la position actuelle du journal de la base de données :
    • Pour MySQL, consultez la documentation MySQL pour savoir comment obtenir les coordonnées du journal binaire de réplication. Une fois que vous avez identifié la position du journal, fermez la session pour libérer les verrous de la base de données.
    • Pour Oracle, exécutez la requête suivante: SELECT current_scn FROM V$DATABASE
  3. Copiez la table de la base de données source dans BigQuery.
  4. Une fois l'opération de copie terminée, suivez la procédure décrite sur la page Gérer les flux pour démarrer le flux à partir de la position de journal que vous avez identifiée précédemment.

Sources PostgreSQL

  1. Lorsque vous êtes prêt à commencer à copier la table, créez l'emplacement de réplication. Pour en savoir plus, consultez Configurer une base de données PostgreSQL source.
  2. Copiez la table de la base de données source dans BigQuery.
  3. Une fois l'opération de copie terminée, créez et démarrez le flux.