Quando un backfill standard di Datastream richiede troppo tempo o presenta limitazioni del prodotto, puoi copiare i dati iniziali in una tabella BigQuery esistente separatamente. Lo streaming degli aggiornamenti di Change Data Capture (CDC) in BigQuery da una posizione di log specifica ti consente di mantenere sincronizzata la tabella senza eseguire un backfill integrato.
Problema
Una tabella BigQuery compilata utilizzando l' API BigQuery Storage Write non consente le normali operazioni del data manipulation language (DML). Ciò significa che, dopo che un flusso CDC inizia a scrivere in una tabella BigQuery, non è possibile aggiungere dati storici che non erano già stati precompilati nella tabella.
Considera il seguente scenario:
- TIMESTAMP 1: viene avviata l'operazione di copia della tabella.
- TIMESTAMP 2: mentre la tabella viene copiata, le operazioni DML nell' origine comportano modifiche ai dati (le righe vengono aggiunte, aggiornate o rimosse).
- TIMESTAMP 3: il CDC viene avviato, ma le modifiche apportate durante TIMESTAMP 2 non vengono acquisite, il che comporta una discrepanza dei dati.
Soluzione
Per garantire l'integrità dei dati, il processo CDC deve acquisire tutte le modifiche apportate all'origine dal momento immediatamente successivo all'ultimo aggiornamento copiato nella tabella BigQuery.
La soluzione che segue ti consente di assicurarti che il processo CDC acquisisca tutte le modifiche da TIMESTAMP 2, senza bloccare l'operazione di copia dalla scrittura dei dati nella tabella BigQuery.
Prerequisiti
- La tabella di destinazione in BigQuery deve avere esattamente lo stesso schema e la stessa configurazione di una tabella creata da Datastream. Puoi utilizzare Datastream BigQuery Migration Toolkit per eseguire questa operazione.
- Per le origini MySQL e Oracle, devi essere in grado di identificare la posizione di log al momento dell'avvio dell'operazione di copia.
- Il database deve disporre di spazio di archiviazione sufficiente e di una policy di conservazione dei log adeguata per consentire il completamento del processo di copia della tabella.
Origini MySQL e Oracle
- Crea, ma non avviare lo stream che intendi utilizzare per la replica CDC continua. Lo stream deve essere nello stato CREATED.
- Quando è tutto pronto per avviare l'operazione di copia della tabella, identifica la posizione di log corrente del database:
- Per MySQL, consulta la documentazione di MySQL per scoprire come ottenere le coordinate del log binario di replica. Dopo aver identificato la posizione di log, chiudi la sessione per rilasciare eventuali blocchi sul database.
- Per Oracle, esegui la seguente query:
SELECT current_scn FROM V$DATABASE.
- Copia la tabella dal database di origine in BigQuery.
- Al termine dell'operazione di copia, segui i passaggi descritti nella pagina Gestisci stream per avviare lo stream dalla posizione di log identificata in precedenza.
Origini PostgreSQL
- Quando è tutto pronto per iniziare a copiare la tabella, crea lo slot di replica. Per ulteriori informazioni, consulta Configurare un database PostgreSQL di origine.
- Copia la tabella dal database di origine in BigQuery.
- Al termine dell'operazione di copia, crea e avvia lo stream.