Toolkit Migrasi BigQuery Datastream


Halaman ini menjelaskan praktik terbaik saat menggunakan Datastream untuk bermigrasi dari template Dataflow Datastream ke BigQuery ke solusi replikasi BigQuery bawaan Datastream.

Sebelum memulai

Petunjuk di halaman ini mengasumsikan hal berikut:

  • Anda memahami dan telah menginstal Docker.
  • Anda tahu cara meng-clone repositori dari layanan seperti GitHub.
  • Anda tahu cara menjalankan aliran data di Datastream.
  • Anda telah menginstal Google Cloud CLI.

Ringkasan toolkit migrasi

Toolkit Migrasi BigQuery Datastream adalah software open source yang ditawarkan oleh Google Cloud. Toolkit ini memungkinkan Anda bermigrasi dari template Datastream ke BigQuery Dataflow, tetapi Anda juga dapat menggunakannya saat bermigrasi dari pipeline lain, seperti yang dijelaskan di bagian Bermigrasi dari pipeline lain berikut.

Untuk memigrasikan tabel BigQuery menggunakan toolkit, Anda perlu melakukan langkah-langkah berikut:

  1. Membuat, memulai, dan menjeda aliran Datastream dengan tujuan BigQuery.
  2. Jalankan migrasi di setiap tabel BigQuery yang perlu dimigrasikan.
  3. Lanjutkan streaming.

Toolkit ini melakukan hal berikut:

  • Mengambil skema tabel sumber menggunakan discover API Datastream.
  • Membuat tabel BigQuery yang kompatibel dengan Datastream berdasarkan skema yang diambil.
  • Mengambil skema tabel BigQuery tempat Anda melakukan migrasi untuk menentukan konversi jenis data yang diperlukan.
  • Menyalin semua baris yang ada dari tabel asli ke tabel baru, termasuk transmisi jenis kolom yang sesuai.

Untuk informasi selengkapnya tentang cara toolkit disusun, dan argumen yang digunakannya, lihat file README.md toolkit.

Menyiapkan toolkit migrasi

Untuk menjalankan toolkit migrasi menggunakan Docker, lakukan langkah-langkah berikut:

  1. Clone repositori dan ubah direktori ke dalamnya:

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. Buat gambar:

    docker build -t migration-service .
    
  3. Lakukan autentikasi dengan kredensial Google Cloud CLI Anda:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. Tetapkan Google Cloud properti project Anda:

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

    Ganti PROJECT_ID dengan ID project Google Cloud Anda.

Bermigrasi dari Dataflow ke solusi bawaan Datastream

  1. Membuat aliran Datastream dengan tujuan BigQuery

  2. Mulai streaming, lalu segera jeda. Hal ini memungkinkan Datastream mengambil posisi tempat perubahan diambil sebelum migrasi dimulai.

  3. Kosongkan pipeline Datastream dan Dataflow:

    1. Jeda streaming tujuan Cloud Storage yang ada.
    2. Periksa metrik latensi total untuk streaming dan tunggu setidaknya selama latensi saat ini untuk memastikan bahwa peristiwa yang sedang berlangsung ditulis ke tujuan.
    3. Selesaikan tugas Dataflow.
  4. Jalankan migrasi:

    1. Jalankan migrasi dalam mode dry_run. Mode dry_run memungkinkan Anda membuat pernyataan DDL CREATE TABLE dan pernyataan SQL untuk menyalin data, tanpa mengeksekusinya:

      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
      

      Ganti kode berikut:

      • PROJECT_ID: ID unik project Google Cloud Anda.
      • STREAM_ID: ID unik aliran tujuan BigQuery Anda.
      • STREAM_REGION: Lokasi streaming Anda, misalnya us-central1.
      • SOURCE_SCHEMA_NAME: Nama skema sumber.
      • SOURCE_TABLE_NAME: Nama tabel sumber.
      • BIGQUERY_SOURCE_DATASET_NAME: Nama set data BigQuery yang ada.
      • BIGQUERY_SOURCE_TABLE_NAME: Nama tabel BigQuery yang ada.
    2. Periksa file .sql di bagian output/create_target_table dan output/copy_rows. Berikut adalah perintah SQL yang akan dieksekusi dalam project Google Cloud Anda:

      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. Untuk menjalankan perintah SQL, jalankan migrasi dalam mode full. Mode full memungkinkan Anda membuat tabel di BigQuery dan menyalin semua baris dari tabel BigQuery yang ada:

      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. Melanjutkan streaming yang dijeda.

  6. Buka Google Cloud Logs Explorer, lalu cari log Datastream dengan kueri berikut:

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

    Cari log berikut, dengan %d adalah angka:

    Completed writing %d records into..
    

    Log ini menunjukkan bahwa aliran data baru berhasil memuat data ke BigQuery. Tab ini hanya muncul jika ada data CDC yang akan dimuat.

Bermigrasi dari pipeline lain

Toolkit ini juga memungkinkan Anda bermigrasi dari pipeline lain ke solusi BigQuery bawaan Datastream. Toolkit ini dapat membuat DDL CREATE TABLE untuk tabel BigQuery yang kompatibel dengan Datastream, berdasarkan skema database sumber menggunakan mode 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

Karena skema tabel BigQuery dapat bervariasi, sulit untuk memberikan pernyataan SQL universal untuk menyalin baris. Anda dapat menggunakan skema di direktori DDL tabel sumber (output/source_table_ddl) dan direktori DDL tabel tujuan (output/create_target_table) untuk membuat pernyataan SQL dengan transmisi yang sesuai pada kolom sumber.

Berikut adalah contoh format pernyataan SQL yang dapat Anda gunakan:

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

Ganti kode berikut:

  • DESTINATION_TABLE: Nama tabel tujuan Anda di BigQuery.
  • DESTINATION_COLUMN: Nama kolom di tabel tujuan Anda.
  • SOURCE_COLUMN: Nama kolom di tabel sumber Anda.
  • SOURCE_TABLE: Nama tabel sumber Anda.

Batasan

Toolkit ini memiliki batasan berikut:

  • Nama kolom di tabel BigQuery yang ada dan baru harus cocok (mengabaikan kolom metadata). Migrasi akan gagal jika Anda menerapkan fungsi yang ditentukan pengguna Dataflow (UDF) yang mengubah nama kolom dalam tabel yang ada (misalnya, dengan menambahkan awalan atau mengubah huruf besar/kecil).
  • Migrasi lintas-region dan lintas-project tidak didukung.
  • Migrasi ini berfungsi per tabel.
  • Hanya sumber Oracle dan MySQL yang didukung.