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:
- Membuat, memulai, dan menjeda aliran Datastream dengan tujuan BigQuery.
- Jalankan migrasi di setiap tabel BigQuery yang perlu dimigrasikan.
- 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:
Clone repositori dan ubah direktori ke dalamnya:
git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit && cd datastream-bigquery-migration-toolkitBuat 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 loginTetapkan properti project Google Cloud :
docker run -ti --volumes-from gcloud-config migration-service \ gcloud config set project PROJECT_IDGanti PROJECT_ID dengan ID project Anda. Google Cloud
Bermigrasi dari Dataflow ke solusi bawaan Datastream
Mulai streaming, lalu segera jeda. Hal ini memungkinkan Datastream mengambil posisi dari tempat ia mengambil perubahan sebelum migrasi dimulai.
Kosongkan pipeline Datastream dan Dataflow:
- Jeda aliran tujuan Cloud Storage yang ada.
- Periksa metrik total latensi untuk aliran dan tunggu setidaknya selama latensi saat ini untuk memastikan bahwa semua peristiwa dalam proses ditulis ke tujuan.
- Selesaikan tugas Dataflow.
Jalankan migrasi:
Jalankan migrasi dalam mode
dry_run. Modedry_runmemungkinkan Anda membuat pernyataan DDLCREATE TABLEdan 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_NAMEGanti 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.
Periksa file
.sqldi bagianoutput/create_target_tabledanoutput/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 {} \;Untuk menjalankan perintah SQL, jalankan migrasi dalam mode
full. Modefullmemungkinkan 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, lalu cari log Datastream dengan kueri berikut:
resource.type="datastream.googleapis.com/Stream" resource.labels.stream_id=STREAM_IDCari log berikut, dengan
%dadalah 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.