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:
- Buat, mulai, dan jeda aliran Datastream dengan tujuan BigQuery.
- Jalankan migrasi di setiap tabel BigQuery yang perlu dimigrasikan.
- 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:
Clone repositori dan ubah direktori ke dalamnya:
git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit && cd datastream-bigquery-migration-toolkit
Buat gambar:
docker build -t migration-service .
Lakukan autentikasi dengan kredensial Google Cloud CLI Anda:
docker run -ti \ --name gcloud-config migration-service gcloud auth application-default login
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
Mulai streaming, dan segera jeda. Hal ini memungkinkan Datastream untuk menangkap posisi tempat perubahan dilakukan sebelum migrasi dimulai.
Mengosongkan pipeline Datastream dan Dataflow:
- Menjeda aliran data tujuan Cloud Storage yang ada.
- Periksa metrik latensi total untuk streaming dan tunggu setidaknya selama latensi saat ini untuk memastikan semua peristiwa yang sedang berlangsung ditulis ke tujuan.
- Mengosongkan tugas Dataflow.
Jalankan migrasi:
Jalankan migrasi dalam mode
dry_run
. Modedry_run
memungkinkan Anda membuat pernyataan DDLCREATE 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.
Periksa file
.sql
di bagianoutput/create_target_table
danoutput/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 {} \;
Untuk menjalankan perintah SQL, jalankan migrasi dalam mode
full
. Modefull
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
Lanjutkan streaming yang dijeda.
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.