Datastream BigQuery Migration Toolkit


Questa pagina descrive le best practice per l'utilizzo di Datastream per eseguire la migrazione dal modello Dataflow Datastream to BigQuery alla soluzione di replica BigQuery integrata di Datastream.

Prima di iniziare

Le istruzioni riportate in questa pagina presuppongono quanto segue:

  • Conosci e hai installato Docker.
  • Devi sapere come clonare i repository da servizi come GitHub.
  • Devi sapere come eseguire stream in Datastream.
  • Hai installato Google Cloud CLI.

Panoramica del toolkit per la migrazione

Datastream BigQuery Migration Toolkit è un software open source fornito da Google Cloud. Il toolkit ti consente di eseguire la migrazione dal modello Datastream a BigQuery di Dataflow, ma puoi anche utilizzarlo per la migrazione da altre pipeline, come spiegato nella sezione Eseguire la migrazione da altre pipeline che segue.

Per eseguire la migrazione delle tabelle BigQuery utilizzando il toolkit, devi svolgere i seguenti passaggi:

  1. Crea, avvia e metti in pausa uno stream di Datastream con una destinazione BigQuery.
  2. Esegui la migrazione su ogni tabella BigQuery di cui è richiesta la migrazione.
  3. Riprendi lo stream.

Il toolkit esegue le seguenti operazioni:

  • Recupera lo schema della tabella di origine utilizzando l'API discover di Datastream.
  • Crea una tabella BigQuery compatibile con Datastream in base allo schema recuperato.
  • Recupera lo schema della tabella BigQuery da cui esegui la migrazione per determinare le conversioni dei tipi di dati necessarie.
  • Copia tutte le righe esistenti dalla tabella originale alla nuova tabella, inclusi i tipi di conversione appropriati per le colonne.

Per ulteriori informazioni sulla struttura del toolkit e sugli argomenti utilizzati, consulta il file README.md del toolkit.

Configurare il kit di strumenti per la migrazione

Per eseguire il toolkit di migrazione utilizzando Docker, svolgi i seguenti passaggi:

  1. Clona il repository e passa alla directory:

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. Crea l'immagine:

    docker build -t migration-service .
    
  3. Esegui l'autenticazione con le credenziali di Google Cloud CLI:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. Imposta la Google Cloud proprietà del progetto:

    docker run -ti --volumes-from gcloud-config migration-service \
    gcloud config set project PROJECT_ID
    

    Sostituisci PROJECT_ID con l'identificatore del tuo Google Cloud progetto.

Esegui la migrazione da Dataflow alla soluzione integrata di Datastream

  1. Creare uno stream di Datastream con una destinazione BigQuery

  2. Avvia lo stream e mettilo subito in pausa. In questo modo, Datastream può acquisire la posizione da cui acquisisce le modifiche prima dell'inizio della migrazione.

  3. Svuota la pipeline Datastream e Dataflow:

    1. Metti in pausa lo stream di destinazione Cloud Storage esistente.
    2. Controlla la metrica della latenza totale per lo stream e attendi almeno per il tempo della latenza corrente per assicurarti che eventuali eventi in transito vengano scritti nella destinazione.
    3. Svuota il job Dataflow.
  4. Esegui la migrazione:

    1. Esegui la migrazione in modalità dry_run. La modalità dry_run consente di generare l'istruzione DDL CREATE TABLE e l'istruzione SQL per la copia dei dati, senza eseguirli:

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py dry_run \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'identificatore univoco del tuo Google Cloud progetto.
      • STREAM_ID: l'identificatore univoco dello stream di destinazione BigQuery.
      • STREAM_REGION: la posizione dello stream, ad esempio us-central1.
      • SOURCE_SCHEMA_NAME: il nome dello schema di origine.
      • SOURCE_TABLE_NAME: il nome della tabella di origine.
      • BIGQUERY_SOURCE_DATASET_NAME: il nome del set di dati BigQuery esistente.
      • BIGQUERY_SOURCE_TABLE_NAME: il nome della tabella BigQuery esistente.
    2. Controlla i file .sql in output/create_target_table e output/copy_rows. Questi sono i comandi SQL che verranno eseguiti nel tuo Google Cloud progetto:

      docker run -v output:/output -ti migration-service find output/create_target_table \
      -type f -print -exec cat {} \;
      
      docker run -v output:/output -ti migration-service find output/copy_rows \
      -type f -print -exec cat {} \;
      
    3. Per eseguire i comandi SQL, esegui la migrazione in modalità full. La modalità full consente di creare una tabella in BigQuery e di copiare tutte le righe dalla tabella BigQuery esistente:

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py full \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      
  5. Riprendi lo stream in pausa.

  6. Apri Google Cloud Esplora log e cerca i log di Datastream con la seguente query:

    resource.type="datastream.googleapis.com/Stream"
    resource.labels.stream_id=STREAM_ID
    

    Cerca il seguente log, dove %d è un numero:

    Completed writing %d records into..
    

    Questo log indica che il nuovo stream ha caricato correttamente i dati in BigQuery. Viene visualizzato solo se sono presenti dati CDC da caricare.

Eseguire la migrazione da altre pipeline

Il toolkit ti consente inoltre di eseguire la migrazione da altre pipeline alla soluzione BigQuery integrata di Datastream. Il toolkit può generare DDL CREATE TABLE per le tabelle BigQuery compatibili con Datastream, in base allo schema del database di origine, utilizzando la modalità dry_run:

  docker run -v output:/output -ti --volumes-from gcloud-config \
  migration-service python3 ./migration/migrate_table.py dry_run \
  --project-id PROJECT_ID \
  --stream-id STREAM_ID \
  --datastream-region STREAM_REGION \
  --source-schema-name SOURCE_SCHEMA_NAME \
  --source-table-name SOURCE_TABLE_NAME \
  --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
  --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME

Poiché gli schemi delle tabelle BigQuery possono variare, è difficile fornire un'istruzione SQL universale per la copia delle righe. Puoi utilizzare gli schemi nella directory DDL della tabella di origine (output/source_table_ddl) e nella directory DDL della tabella di destinazione (output/create_target_table) per creare un'istruzione SQL con conversioni appropriate nelle colonne di origine.

Di seguito è riportato un esempio di formato di istruzione SQL che puoi utilizzare:

  INSERT INTO DESTINATION_TABLE (DESTINATION_COLUMN1, DESTINATION_COLUMN2...)
  SELECT SOURCE_COLUMN1, SOURCE_COLUMN2
  FROM SOURCE_TABLE;

Sostituisci quanto segue:

  • DESTINATION_TABLE: il nome della tabella di destinazione in BigQuery.
  • DESTINATION_COLUMN: il nome della colonna nella tabella di destinazione.
  • SOURCE_COLUMN: il nome della colonna nella tabella di origine.
  • SOURCE_TABLE: il nome della tabella di origine.

Limitazioni

Il toolkit presenta le seguenti limitazioni:

  • I nomi delle colonne nelle tabelle BigQuery esistenti e nuove devono corrispondere (ignorando le colonne dei metadati). La migrazione non va a buon fine se applichi funzioni predefinite dall'utente (UDF) di Dataflow che modificano i nomi delle colonne nelle tabelle esistenti (ad esempio, aggiungendo un prefisso o cambiando la maiuscola).
  • Le migrazioni tra regioni e progetti non sono supportate.
  • La migrazione funziona in base alla tabella.
  • Sono supportate solo le origini Oracle e MySQL.