Esegui la migrazione di una tabella CDC in un'altra regione
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Questa pagina descrive le best practice per un caso d'uso in cui hai configurato la replica di Datastream in BigQuery, ma hai configurato il set di dati di destinazione in una regione errata. Poi vuoi spostare il set di dati in un'altra regione (o in più regioni) senza dover sincronizzare di nuovo tutti i dati dal database di origine a BigQuery.
Prima di iniziare
Prima di iniziare a eseguire la migrazione dei dati in un'altra regione, tieni presente quanto segue:
La migrazione richiede tempo e devi mettere temporaneamente in pausa lo stream durante l'operazione. Per mantenere l'integrità dei dati, il database di origine deve conservare i log delle modifiche quando lo stream è in pausa. Per stimare il tempo di messa in pausa dello stream,
combina il valore di max_staleness nel set di dati e l'operazione di unione più lunga:
Se la pausa stimata è troppo lunga per essere supportata dal database di origine,
potrebbe essere consigliabile ridurre temporaneamente il valore di max_staleness
per le tabelle del set di dati.
Verifica che l'utente che esegue la migrazione disponga di risorse BigQuery sufficienti nella regione di destinazione (prenotazione delle query e prenotazione in background). Per ulteriori informazioni sulle prenotazioni, consulta
Assegnazioni delle prenotazioni.
DATASET_NAME: il nome del set di dati che vuoi creare.
NEW_REGION: il nome della regione in cui vuoi creare il set di dati. Ad esempio, region-us.
Monitora l'avanzamento della migrazione e attendi che la filigrana di copia nella replica si avvicini a quella principale entro pochi minuti. Puoi eseguire questa query su
INFORMATION_SCHEMA di BigQuery
per controllare l'avanzamento della migrazione:
DATASET_REPLICA_STALENESS: la configurazione dell'obsolescenza delle tabelle nella replica del set di dati che hai creato.
NEW_REGION: la regione in cui hai creato il set di dati.
Metti in pausa lo stream Datastream esistente. Per ulteriori informazioni, consulta la sezione su come mettere in pausa lo stream.
Attendi il completamento dello stream e prendi nota dell'ora in cui lo stream è entrato nello stato PAUSED.
Verifica che le ultime modifiche CDC siano state applicate alla tabella BigQuery controllando upsert_stream_apply_watermark per la tabella. Esegui la seguente query e assicurati che il timestamp della filigrana sia successivo di 10 minuti rispetto al momento in cui lo stream è stato messo in pausa:
Per eseguire la query solo per una tabella specifica, aggiungi la seguente clausola WHERE:
WHEREtable_name='TABLE_NAME'
Sostituisci quanto segue:
DATASET_NAME: il nome del set di dati.
TABLE_NAME: facoltativo. La tabella per la quale vuoi controllare il valore upsert_stream_apply_watermark.
Utilizza la query del passaggio 3 per verificare che la filigrana della copia della nuova regione sia successiva a upsert_stream_apply_watermark acquisita nel passaggio 6.
Se vuoi, confronta manualmente diverse tabelle del set di dati principale nella regione originale con la replica nella nuova regione per verificare che tutti i dati siano stati copiati correttamente.
Esegui la promozione della replica del set di dati BigQuery eseguendo il seguente
comando in BigQuery Studio:
NEW_REGION: la regione in cui hai creato il set di dati.
Se non hai più bisogno del set di dati originale (ora la replica) e non vuoi sostenere costi aggiuntivi, vai a BigQuery Studio e inserisci il set di dati BigQuery originale:
ORIGINAL_REGION: la regione del set di dati originale.
Crea un nuovo stream con la stessa configurazione, ma con una nuova località di destinazione BigQuery.
Avvia il nuovo stream.
Per evitare di replicare eventi duplicati, avvia
lo stream da una posizione specifica:
Per le origini MySQL e Oracle: puoi identificare la posizione del log esaminando i log dello stream originale e trovando l'ultima posizione da cui lo stream è stato letto correttamente. Per informazioni su come avviare lo stream da una posizione specifica, vedi Gestire gli stream.
Per le origini PostgreSQL: il nuovo stream inizia a leggere le modifiche dal primo
numero di sequenza di log (LSN) nello slot di replica. Poiché lo stream originale potrebbe aver già elaborato alcune di queste modifiche, modifica manualmente il cursore dello slot di replica sull'ultimo LSN da cui è stato letto Datastream.
Puoi trovare questo LSN nei log del consumer di Datastream.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-04 UTC."],[[["\u003cp\u003eThis guide details how to migrate a BigQuery dataset to a new region without a full data re-synchronization when using Datastream replication.\u003c/p\u003e\n"],["\u003cp\u003eThe migration process involves creating a dataset replica in the new region, temporarily pausing the Datastream stream, and monitoring the data transfer progress.\u003c/p\u003e\n"],["\u003cp\u003eBefore initiating the migration, you must estimate the required stream pause duration based on the dataset's \u003ccode\u003emax_staleness\u003c/code\u003e and the merge operation time, while ensuring the source database retains change logs.\u003c/p\u003e\n"],["\u003cp\u003eOnce the replica's data is consistent and the stream is paused, the replica is promoted to the primary dataset and a new stream is created with the correct BigQuery destination.\u003c/p\u003e\n"],["\u003cp\u003eUsers should also ensure sufficient BigQuery resources and permissions are available in the destination region before commencing the dataset migration.\u003c/p\u003e\n"]]],[],null,["# Migrate a CDC table to another region\n\nThis page describes best practices for a use case where you've set up\nDatastream replication to BigQuery but configured the\ndestination dataset in an incorrect region. You then want to move the dataset to\nanother region (or multi-region) without having to re-synchronise all of the data\nfrom the source database to BigQuery.\n\n\u003cbr /\u003e\n\n| Querying the secondary region during the migration procedure might return incorrect or incomplete results. For more information about the limitations related to the migration procedure described on this page, see [Cross-region dataset replication](/bigquery/docs/data-replication#limitations).\n\n\u003cbr /\u003e\n\nBefore you begin\n----------------\n\nBefore you start migrating your data to another region, consider the\nfollowing:\n\n- Migration takes time, and you must temporarily pause the stream during the operation. To maintain data integrity, the source database must retain the change logs when the stream is paused. To estimate how long to pause the stream, combine the value of `max_staleness` in the dataset and the longest-running merge operation:\n - For information about how long it might take for merge operations to finish, see [Recommended table `max_staleness` value](/bigquery/docs/change-data-capture#recommended-max-staleness).\n - To find the maximum `max_staleness` in the dataset, see [Determine the current `max_staleness` value of a table](/bigquery/docs/change-data-capture#determine-max-staleness) and adjust the query to your specific needs.\n - If the estimated pause is too long for your source database to support, you might want to consider temporarily reducing the value of `max_staleness` for the tables in the dataset.\n- Verify that the user performing the migration has sufficient BigQuery resources in the destination region (query reservation and background reservation). For more information about reservations, see [Reservation assignments](/bigquery/docs/reservations-intro#assignments).\n- Verify that the user performing the migration has sufficient permissions to perform this operation, such as [Identity and Access Management (IAM)](/iam) controls or [VPC Service Controls](/security/vpc-service-controls).\n\nMigration steps\n---------------\n\nTo initiate [dataset migration](/bigquery/docs/data-replication#migrate_datasets),\nuse BigQuery data replication:\n\n1. In the Google Cloud console, go to the **BigQuery Studio** page.\n\n [Go to BigQuery Studio](https://console.cloud.google.com/bigquery)\n2. Create a BigQuery dataset replica in the new region:\n\n ALTER SCHEMA \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eDATASET_NAME\u003c/span\u003e\u003c/var\u003e\n ADD REPLICA '\u003cvar translate=\"no\"\u003eNEW_REGION\u003c/var\u003e'\n OPTIONS(location='\u003cvar translate=\"no\"\u003eNEW_REGION\u003c/var\u003e');\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003eDATASET_NAME\u003c/var\u003e: the name of the dataset that you want to create.\n - \u003cvar translate=\"no\"\u003eNEW_REGION\u003c/var\u003e: the name of the region where you want to create your dataset. For example, `region-us`.\n3. Monitor the migration progress, and wait until the copy watermark in the\n replica is within a few minutes of the primary. You can run this query on\n the [BigQuery INFORMATION_SCHEMA](/bigquery/docs/information-schema-schemata-replicas#schema)\n to check the migration progress:\n\n SELECT\n catalog_name as project_id,\n schema_name as dataset_name,\n replication_time as dataset_replica_staleness\n FROM\n '\u003cvar translate=\"no\"\u003eNEW_REGION\u003c/var\u003e'.INFORMATION_SCHEMA.SCHEMATA_REPLICAS\n WHERE\n catalog_name = \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003ePROJECT_ID\u003c/span\u003e\u003c/var\u003e\n AND schema_name = \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eDATASET_NAME\u003c/span\u003e\u003c/var\u003e\n AND location = \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eNEW_REGION\u003c/span\u003e\u003c/var\u003e;\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e: the ID of your Google Cloud project.\n - \u003cvar translate=\"no\"\u003eDATASET_NAME\u003c/var\u003e: the name of your dataset.\n - \u003cvar translate=\"no\"\u003eDATASET_REPLICA_STALENESS\u003c/var\u003e: the staleness configuration of the tables in the dataset replica that you created.\n - \u003cvar translate=\"no\"\u003eNEW_REGION\u003c/var\u003e: the region where you created your dataset.\n4. Pause the existing Datastream stream. For more information, see\n [Pause the stream](/datastream/docs/run-a-stream#pauseastream).\n\n5. Wait for the stream to drain and take note of the time when the stream entered the\n `PAUSED` state.\n\n6. Confirm that the latest CDC changes have been applied to the BigQuery\n table by checking the [`upsert_stream_apply_watermark`](/bigquery/docs/change-data-capture#monitor_table_upsert_operation_progress)\n for the table. Run the following query and ensure that the watermark timestamp\n is 10 minutes later then when the stream was paused:\n\n SELECT table_name, upsert_stream_apply_watermark\n FROM \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eDATASET_NAME\u003c/span\u003e\u003c/var\u003e.INFORMATION_SCHEMA.TABLES\n\n To run the query only for a specific table, add the following `WHERE` clause: \n\n WHERE table_name = '\u003cvar translate=\"no\"\u003eTABLE_NAME\u003c/var\u003e'\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003eDATASET_NAME\u003c/var\u003e: the name of your dataset.\n - \u003cvar translate=\"no\"\u003eTABLE_NAME\u003c/var\u003e: optional. The table for which you want to check the `upsert_stream_apply_watermark`.\n7. Use the query from step 3 to verify that the new region copy watermark is\n later than the `upsert_stream_apply_watermark` captured in step 6.\n\n8. Optionally, manually compare several tables in the primary dataset in the\n original region with the replica in the new region to verify that all data\n is correctly copied.\n\n9. Promote the BigQuery dataset replica by running the following\n command in BigQuery Studio:\n\n ALTER SCHEMA \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eDATASET_NAME\u003c/span\u003e\u003c/var\u003e\n SET OPTIONS(primary_replica = '\u003cvar translate=\"no\"\u003eNEW_REGION\u003c/var\u003e');\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003eDATASET_NAME\u003c/var\u003e: the name of your dataset.\n - \u003cvar translate=\"no\"\u003eNEW_REGION\u003c/var\u003e: the region where you created your dataset.\n10. Optionally, if you no longer need the original dataset (now the replica), and\n don't want to incur extra charges, then go to BigQuery Studio and drop\n the original BigQuery dataset:\n\n ALTER SCHEMA \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eDATASET_NAME\u003c/span\u003e\u003c/var\u003e DROP REPLICA IF EXISTS \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eORIGINAL_REGION\u003c/span\u003e\u003c/var\u003e;\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003eDATASET_NAME\u003c/var\u003e: the name of the original dataset.\n - \u003cvar translate=\"no\"\u003eORIGINAL_REGION\u003c/var\u003e: the region of the original dataset.\n11. Create a new stream with the exact same configuration but with new BigQuery\n destination location.\n\n12. Start the new stream.\n\n To prevent replicating duplicate events, start\n the stream from a specific position:\n - For MySQL and Oracle sources: you can identify the log position by examining the logs of the original stream and finding the last position from which the stream read successfully. For information about starting the stream from a specific position, see [Manage streams](/datastream/docs/manage-streams#startastreamfromspecific).\n - For PostgreSQL sources: the new stream starts reading changes from the first log sequence number (LSN) in the replication slot. Because the original stream might have already processed some of these changes, manually change the pointer of the replication slot to the last LSN from which Datastream read. You can find this LSN in the Datastream consumer logs.\n13. Optionally, delete the original stream."]]