Datastream BigQuery Migration Toolkit


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

Prima di iniziare

Le istruzioni riportate in questa pagina presuppongono quanto segue:

  • Hai familiarità con Docker e lo hai installato.
  • Sai come clonare i repository da servizi come GitHub.
  • Sai come eseguire gli stream in Datastream.
  • Hai installato Google Cloud CLI.

Panoramica del toolkit di migrazione

Il toolkit di migrazione BigQuery di Datastream è un software open source offerto da Google Cloud. Il toolkit consente di eseguire la migrazione dal modello Dataflow Datastream a BigQuery, ma puoi utilizzarlo anche 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 un flusso Datastream con una destinazione BigQuery.
  2. Esegui la migrazione su ogni tabella BigQuery di cui è necessario eseguire 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 cast del tipo di colonna appropriato.

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

Configurare il toolkit di migrazione

Per eseguire il toolkit di migrazione utilizzando Docker, segui questi passaggi:

  1. Clona il repository e cambia la 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 Google Cloud CLI:

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

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

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

Esegui la migrazione da Dataflow alla soluzione integrata Datastream

  1. Crea uno stream Datastream con una destinazione BigQuery

  2. Avvia lo streaming 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 il tempo della latenza attuale per assicurarti che tutti gli eventi in corso 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 copiare i dati, senza eseguirle:

      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 progetto Google Cloud.
      • STREAM_ID: l'identificatore univoco del flusso 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. Ispeziona 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 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 Esplora log Google Cloud 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 consente anche di eseguire la migrazione da altre pipeline alla soluzione BigQuery integrata di Datastream. Il toolkit può generare CREATE TABLE DDL per 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 riesce se applichi funzioni definite dall'utente di Dataflow che modificano i nomi delle colonne nelle tabelle esistenti (ad esempio, aggiungendo un prefisso o modificando le maiuscole e minuscole).
  • Le migrazioni tra regioni e tra progetti non sono supportate.
  • La migrazione funziona per tabella.
  • Sono supportate solo le origini Oracle e MySQL.