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 sudah memahami dan menginstal Docker.
  • Anda tahu cara meng-clone repositori dari layanan seperti GitHub.
  • Anda sudah mengetahui cara menjalankan aliran 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 melakukan migrasi dari template Datastream ke BigQuery Dataflow, tetapi Anda juga dapat menggunakannya saat melakukan migrasi dari pipeline lain, seperti yang dijelaskan di bagian Melakukan migrasi dari pipeline lain di bawah.

Untuk memigrasikan tabel BigQuery menggunakan toolkit, Anda harus 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 akan 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 yang menjadi sumber migrasi Anda untuk menentukan konversi jenis data yang diperlukan.
  • Menyalin semua baris yang ada dari tabel asli ke tabel baru, termasuk pengecoran 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 :

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

    Ganti PROJECT_ID dengan ID project Anda. Google Cloud

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 dari tempat ia mengambil perubahan sebelum migrasi dimulai.

  3. Kosongkan pipeline Datastream dan Dataflow:

    1. Jeda aliran tujuan Cloud Storage yang ada.
    2. Periksa metrik total latensi untuk aliran dan tunggu setidaknya selama latensi saat ini untuk memastikan bahwa semua peristiwa dalam proses 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 Anda. Google Cloud
      • 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 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, 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. Tombol 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 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 pemeran yang sesuai di 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.
  • SOURCE_COLUMN: Nama kolom dalam tabel sumber.
  • SOURCE_TABLE: Nama tabel sumber.

Batasan

Toolkit ini memiliki batasan berikut:

  • Nama kolom di tabel BigQuery yang 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).
  • Migrasi lintas-region dan lintas project tidak didukung.
  • Migrasi berfungsi per tabel.
  • Hanya sumber Oracle dan MySQL yang didukung.