Toolkit Migrasi BigQuery Datastream


Halaman ini menjelaskan praktik terbaik saat menggunakan Datastream untuk melakukan migrasi dari template Dataflow Datastream ke BigQuery ke Solusi replikasi BigQuery bawaan Datastream.

Sebelum memulai

Petunjuk pada halaman ini mengasumsikan sebagai berikut:

  • Anda sudah terbiasa dan telah menginstal Docker.
  • Anda tahu cara meng-clone repositori dari layanan seperti GitHub.
  • Mengetahui cara menjalankan streaming di Datastream.
  • Anda telah menginstal Google Cloud CLI.

Ringkasan toolkit migrasi

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

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

  1. Buat, mulai, dan jeda 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 bermigrasi untuk menentukan konversi jenis data yang diperlukan.
  • Menyalin semua baris yang ada dari tabel asli ke tabel baru, termasuk cast jenis kolom yang sesuai.

Untuk mengetahui informasi selengkapnya tentang struktur toolkit, 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 properti project Google Cloud 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 data dengan tujuan BigQuery

  2. Mulai streaming, dan segera jeda. Hal ini memungkinkan Datastream untuk menangkap posisi tempat perubahan dilakukan sebelum migrasi dimulai.

  3. Mengosongkan pipeline Datastream dan Dataflow:

    1. Menjeda aliran data tujuan Cloud Storage yang ada.
    2. Periksa metrik latensi total untuk streaming dan tunggu setidaknya selama latensi saat ini untuk memastikan semua peristiwa yang sedang berlangsung ditulis ke tujuan.
    3. Mengosongkan 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 sudah ada.
    2. Periksa file .sql di bagian output/create_target_table dan output/copy_rows. Berikut adalah perintah SQL yang akan dijalankan di 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. Lanjutkan streaming yang dijeda.

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

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

    Cari log berikut, dengan %d sebagai angka:

    Completed writing %d records into..
    

    Log ini menunjukkan bahwa aliran data baru berhasil memuat data ke BigQuery. Pesan ini hanya muncul jika ada data CDC untuk dimuat.

Bermigrasi dari pipeline lain

Dengan toolkit ini, Anda juga dapat bermigrasi dari pipeline lain ke solusi BigQuery bawaan Datastream. Toolkit ini dapat menghasilkan DDL CREATE TABLE untuk tabel BigQuery yang kompatibel dengan Datastream, berdasarkan skema database sumber dengan 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 cast yang sesuai di kolom sumber.

Berikut ini adalah contoh format pernyataan SQL yang bisa 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.
  • SOURCE_TABLE: Nama tabel sumber Anda.

Batasan

Toolkit ini memiliki batasan berikut:

  • Nama kolom di tabel BigQuery yang sudah ada dan yang 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 berfungsi per tabel.
  • Hanya sumber Oracle dan MySQL yang didukung.