Jika pengisian ulang Datastream standar memerlukan waktu terlalu lama atau memiliki batasan produk, Anda dapat menyalin data awal ke dalam tabel BigQuery yang ada secara terpisah. Streaming update pengambilan data perubahan (CDC) ke BigQuery dari posisi log tertentu memungkinkan Anda menyinkronkan tabel tanpa menjalankan pengisian ulang bawaan.
Masalah
Tabel BigQuery yang diisi menggunakan BigQuery Storage Write API tidak mengizinkan operasi bahasa pengolahan data (DML) reguler. Artinya, setelah streaming CDC mulai menulis ke tabel BigQuery, tidak ada cara untuk menambahkan data historis yang belum diisi sebelumnya dalam tabel.
Pertimbangkan skenario berikut:
- TIMESTAMP 1: operasi penyalinan tabel dimulai.
- TIMESTAMP 2: saat tabel sedang disalin, operasi DML di sumber menghasilkan perubahan pada data (baris ditambahkan, diperbarui, atau dihapus).
- TIMESTAMP 3: CDC dimulai, tetapi perubahan yang terjadi selama TIMESTAMP 2 tidak diambil, sehingga terjadi perbedaan data.
Solusi
Untuk memastikan integritas data, proses CDC harus mengambil semua perubahan di sumber yang terjadi sejak saat setelah update terakhir yang disalin ke dalam tabel BigQuery.
Solusi berikut memungkinkan Anda memastikan bahwa proses CDC mengambil semua perubahan dari TIMESTAMP 2, tanpa memblokir operasi penyalinan dari penulisan data ke dalam tabel BigQuery.
Prasyarat
- Tabel target di BigQuery harus memiliki skema dan konfigurasi yang sama persis seperti jika tabel dibuat oleh Datastream. Anda dapat menggunakan Datastream BigQuery Migration Toolkit untuk melakukannya.
- Untuk sumber MySQL dan Oracle, Anda harus dapat mengidentifikasi posisi log pada saat operasi penyalinan dimulai.
- Database harus memiliki penyimpanan yang cukup dan kebijakan retensi log yang memadai untuk memungkinkan proses penyalinan tabel selesai.
Sumber MySQL dan Oracle
- Buat, tetapi jangan memulai streaming yang ingin Anda gunakan untuk replikasi CDC yang sedang berlangsung. Streaming harus dalam status CREATED.
- Saat Anda siap memulai operasi penyalinan tabel, identifikasi posisi log database saat ini:
- Untuk MySQL, lihat dokumentasi MySQL untuk mempelajari cara mendapatkan koordinat log biner replikasi. Setelah mengidentifikasi posisi log, tutup sesi untuk melepaskan kunci apa pun di database.
- Untuk Oracle, jalankan kueri berikut:
SELECT current_scn FROM V$DATABASE.
- Salin tabel dari database sumber ke BigQuery.
- Setelah operasi penyalinan selesai, ikuti langkah-langkah yang dijelaskan di halaman Mengelola streaming untuk memulai streaming dari posisi log yang Anda identifikasi sebelumnya.
Sumber PostgreSQL
- Saat Anda siap mulai menyalin tabel, buat slot replikasi. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi database PostgreSQL sumber.
- Salin tabel dari database sumber ke BigQuery.
- Setelah operasi penyalinan selesai, buat dan mulai streaming.