MaxCompute, sebelumnya dikenal sebagai ODPS, adalah solusi gudang data yang cepat dan sepenuhnya terkelola yang mampu memproses data dalam skala exabyte. Anda dapat menggunakan Data Transmission Service (DTS) untuk menyinkronkan data dari instans ApsaraDB RDS for MySQL atau instans ke MaxCompute guna membangun sistem analitik data real-time dengan cepat.
Prasyarat
Anda telah menyelesaikan operasi berikut:
Peringatan
Selama inisialisasi data penuh, DTS mengonsumsi sumber daya baca dan tulis dari database sumber dan tujuan, yang dapat meningkatkan beban database. Ketika database memiliki performa rendah, spesifikasi rendah, atau beban kerja tinggi (misalnya, banyak pernyataan SQL lambat, tabel tanpa primary key, atau deadlock pada database tujuan), tekanan pada database dapat meningkat lebih lanjut dan layanan mungkin menjadi tidak tersedia. Oleh karena itu, evaluasi performa database sumber dan tujuan sebelum memulai sinkronisasi data, dan lakukan sinkronisasi selama jam sepi (misalnya, saat Beban CPU kedua database berada di bawah 30%).
-
Hanya sinkronisasi data tingkat tabel yang didukung.
-
Selama sinkronisasi data, jangan gunakan alat seperti gh-ost atau pt-online-schema-change untuk melakukan operasi DDL Online pada objek sinkronisasi di database sumber. Jika tidak, tugas sinkronisasi akan gagal.
-
MaxCompute tidak mendukung kendala PRIMARY KEY. Jika DTS mengirim ulang data karena masalah jaringan, catatan duplikat mungkin muncul di MaxCompute.
Penagihan
|
Jenis sinkronisasi |
Harga |
|
Sinkronisasi skema dan sinkronisasi data penuh |
Gratis. |
|
Sinkronisasi data inkremental |
Dikenai biaya. Untuk informasi selengkapnya, lihat Ikhtisar penagihan. |
Tipe instans sumber yang didukung
Sinkronisasi data didukung untuk jenis database MySQL berikut:
-
Database yang dikelola sendiri pada instance ECS
-
Database yang dikelola sendiri yang terhubung melalui jalur sewa, VPN Gateway, atau Smart Access Gateway
-
Database yang dikelola sendiri yang terhubung melalui Database Gateway
-
Instans ApsaraDB RDS for MySQL yang termasuk dalam Akun Alibaba Cloud yang sama atau berbeda
Topik ini menggunakan RDS Instance sebagai contoh untuk menjelaskan prosedur konfigurasi. Prosedurnya serupa untuk tipe instans database sumber lainnya.
Jika database sumber adalah database MySQL yang dikelola sendiri, Anda juga harus menyelesaikan langkah-langkah persiapan. Untuk informasi selengkapnya, lihat Ikhtisar persiapan.
Operasi SQL yang didukung
-
Operasi DDL: ALTER TABLE, ADD COLUMN
-
Operasi DML: INSERT, UPDATE, DELETE
Proses sinkronisasi
-
Sinkronisasi skema awal.
DTS menyinkronkan definisi skema tabel yang akan disinkronkan dari database sumber ke MaxCompute. Selama inisialisasi, DTS menambahkan sufiks `_base` ke nama tabel. Misalnya, jika tabel sumber adalah `customer`, maka tabel di MaxCompute menjadi `customer_base`.
-
Sinkronisasi data penuh awal.
DTS menyinkronkan semua data historis dari tabel di database sumber ke tabel `_base` di MaxCompute. Misalnya, data disinkronkan dari tabel `customer` di database sumber ke tabel `customer_base` di MaxCompute. Data ini berfungsi sebagai garis dasar untuk sinkronisasi data inkremental berikutnya.
CatatanTabel ini juga dikenal sebagai tabel garis dasar penuh.
-
Sinkronisasi data inkremental.
DTS membuat tabel log inkremental di MaxCompute. Nama tabel adalah nama tabel tujuan dengan sufiks `_log`, misalnya `customer_log`. DTS kemudian menyinkronkan data inkremental dari database sumber ke tabel ini secara real time.
CatatanUntuk informasi selengkapnya tentang struktur tabel log inkremental, lihat Skema tabel log inkremental.
Prosedur
Untuk memastikan akun sinkronisasi DTS dapat diberi otorisasi, lengkapi langkah-langkah berikut menggunakan akun root Anda.
-
Beli instansi sinkronisasi data. Untuk informasi selengkapnya, lihat Beli instans DTS.
CatatanSaat membeli instans, atur instans sumber ke MySQL, instans tujuan ke MaxCompute, dan topologi sinkronisasi ke One-way Synchronization.
- Masuk ke Konsol Data Transmission Service.
Catatan
Jika Anda dialihkan secara otomatis ke Konsol Data Management (DMS), klik ikon
di pojok kanan bawah, lalu klik
untuk kembali ke Konsol DTS klasik. - Di panel navigasi kiri, klik Data Synchronization.
- Di bilah navigasi atas halaman Data Synchronization, pilih wilayah tempat instans tujuan berada.
- Temukan instansi sinkronisasi data yang telah dibeli dan klik Configure Synchronization Channel.
-
Konfigurasikan instans sumber dan tujuan.
Kategori
Konfigurasi
Deskripsi
Tidak ada
Synchronization Job Name
DTS secara otomatis menghasilkan nama untuk tugas sinkronisasi. Kami menyarankan agar Anda menentukan nama deskriptif agar mudah diidentifikasi. Nama tersebut tidak harus unik.
Informasi Instans Sumber
Instance Type
Pilih RDS Instance.
Instance Region
Wilayah instans sumber yang Anda pilih saat membeli instans sinkronisasi data. Ini tidak dapat diubah.
Instance ID
Pilih ID instans RDS yang berfungsi sebagai sumber data.
Database Account
Masukkan akun database instans RDS sumber.
CatatanJika tipe database instans RDS sumber adalah MySQL 5.5 atau MySQL 5.6, Anda tidak perlu mengonfigurasi Database Account atau Database Password.
Database Password
Masukkan password yang sesuai dengan akun database.
Connection Method
Pilih Unencrypted Connection atau Secure SSL Connection sesuai kebutuhan. Jika Anda memilih Secure SSL Connection, Anda harus terlebih dahulu mengaktifkan fitur enkripsi SSL untuk instans RDS. Untuk informasi selengkapnya, lihat Setel enkripsi SSL.
PentingSaat ini, Encryption hanya dapat diatur di wilayah Tiongkok daratan dan China (Hong Kong).
Informasi Instans Tujuan
Instance Type
Diatur ke MaxCompute dan tidak dapat diubah.
Instance Region
Wilayah instans tujuan yang Anda pilih saat membeli instans sinkronisasi data. Ini tidak dapat diubah.
Project
Masukkan Project instans MaxCompute. Anda dapat menemukannya di halaman Daftar Workspace MaxCompute.

-
Di pojok kanan bawah halaman, klik Authorize Whitelist And Go To Next Step.
CatatanJika database sumber atau tujuan adalah instans database Alibaba Cloud, seperti instans ApsaraDB RDS for MySQL, instans ApsaraDB for MongoDB, atau database yang dikelola sendiri pada instance ECS, DTS secara otomatis menambahkan alamat IP layanan DTS di wilayah yang sesuai ke daftar putih instans database Alibaba Cloud atau aturan keamanan instance ECS. Anda tidak perlu menambahkan alamat IP secara manual. Untuk informasi selengkapnya, lihat Blok alamat IP server DTS.
-
Di pojok kanan bawah halaman, klik Next. Kemudian, berikan izin akun sinkronisasi DTS pada proyek MaxCompute, seperti yang ditunjukkan pada gambar berikut.

-
Konfigurasikan kebijakan dan objek sinkronisasi.

Konfigurasi
Deskripsi
Incremental Log Table Partition Definition
Pilih nama partisi sesuai kebutuhan. Untuk informasi selengkapnya tentang partisi, lihat Partition.
Synchronization Initialization
Inisialisasi sinkronisasi mencakup sinkronisasi skema awal dan sinkronisasi data penuh awal.
Pilih kedua opsi Initial Schema Synchronization dan Initial Full Data Synchronization. DTS kemudian akan menyinkronkan skema dan data historis objek yang dipilih sebelum menyinkronkan data inkremental.
Processing Mode for Existing Tables in the Destination
-
Precheck And Block On Error: Pemeriksaan Awal berhasil jika database tujuan tidak berisi tabel yang memiliki nama yang sama dengan tabel di database sumber. Jika tidak, kesalahan akan dikembalikan selama Pemeriksaan Awal dan tugas sinkronisasi data tidak dapat dimulai.
CatatanJika Anda tidak dapat menghapus atau mengganti nama tabel dengan nama yang sama di database tujuan, Anda dapat mengatur nama objek sinkronisasi di instans tujuan untuk menghindari konflik nama.
-
Ignore Errors And Continue Execution: Melewati pemeriksaan untuk tabel dengan nama yang sama di database tujuan.
PeringatanMemilih Ignore Errors And Continue Execution dapat menyebabkan ketidakkonsistenan data dan menimbulkan risiko bagi bisnis Anda:
-
Jika struktur tabel konsisten dan suatu catatan di database tujuan memiliki nilai kunci primer yang sama dengan catatan di database sumber, catatan di database tujuan akan dipertahankan selama inisialisasi. Selama sinkronisasi inkremental, catatan di database tujuan akan ditimpa.
-
Jika struktur tabel tidak konsisten, inisialisasi data mungkin gagal. Hal ini dapat mengakibatkan hanya sebagian data yang disinkronkan atau kegagalan sinkronisasi total.
-
Select Synchronization Objects
Dari kotak Source Objects, pilih satu atau beberapa tabel untuk disinkronkan dan klik ikon
untuk memindahkannya ke kotak Selected Objects.Catatan-
Anda hanya dapat memilih tabel sebagai objek sinkronisasi. Anda dapat memilih tabel dari beberapa database.
-
Secara default, nama objek sinkronisasi tetap tidak berubah. Jika Anda ingin nama objek berbeda di instans tujuan, gunakan fitur pemetaan nama objek. Untuk informasi selengkapnya, lihat Atur nama objek sinkronisasi di instans tujuan.
Select Additional Column Rule
Saat DTS menyinkronkan data ke MaxCompute, kolom tambahan ditambahkan ke tabel tujuan. Jika nama kolom tambahan ini bertabrakan dengan nama kolom yang sudah ada, tugas sinkronisasi data akan gagal. Sesuai kebutuhan bisnis Anda, atur Enable New Additional Column Rule ke Yes atau No.
PeringatanSebelum memilih aturan kolom tambahan, evaluasi apakah nama kolom tambahan akan bertabrakan dengan nama kolom yang sudah ada di tabel tujuan. Jika tidak, tugas mungkin gagal atau data bisa hilang. Untuk informasi selengkapnya tentang aturan dan definisi kolom tambahan, lihat Nama dan definisi kolom tambahan.
Ubah nama mapping
Ubah nama objek yang disinkronkan di instans tujuan. Untuk informasi selengkapnya, lihat Pemetaan database, tabel, dan kolom.
Whether to copy temporary tables to the destination database during an online DDL operation on the source table using DMS
Jika Anda menggunakan Data Management (DMS) untuk melakukan perubahan DDL Online pada database sumber, Anda dapat memilih apakah akan menyinkronkan tabel sementara yang dihasilkan oleh perubahan DDL tersebut.
-
Yes: Menyinkronkan tabel sementara yang dihasilkan oleh perubahan DDL Online.
CatatanJika sejumlah besar data tabel sementara dihasilkan oleh perubahan DDL Online, tugas sinkronisasi data mungkin tertunda.
-
No: Tidak menyinkronkan tabel sementara yang dihasilkan oleh perubahan DDL Online. Hanya operasi DDL asli dari database sumber yang disinkronkan.
CatatanOpsi ini menyebabkan tabel di database tujuan terkunci.
Retry Time for Failed Connections to Source and Destination Databases
Jika DTS tidak dapat terhubung ke instans sumber atau tujuan, DTS akan mencoba kembali selama 720 menit (12 jam) secara default. Anda juga dapat menentukan durasi percobaan ulang kustom. Jika DTS berhasil terhubung kembali ke instans sumber atau tujuan dalam durasi yang ditentukan, tugas sinkronisasi akan dilanjutkan secara otomatis. Jika tidak, tugas akan gagal.
CatatanAnda dikenai biaya berdasarkan waktu eksekusi tugas selama percobaan ulang koneksi. Sesuaikan durasi percobaan ulang berdasarkan kebutuhan bisnis Anda, atau rilis instans DTS segera setelah instans sumber dan tujuan dirilis.
-
Setelah menyelesaikan konfigurasi di atas, klik Precheck and Start di pojok kanan bawah halaman.
CatatanSebelum tugas sinkronisasi resmi dimulai, Pemeriksaan Awal akan dilakukan. Tugas sinkronisasi hanya dapat dimulai setelah Pemeriksaan Awal berhasil.
Jika Pemeriksaan Awal gagal, klik ikon
di samping item pemeriksaan tertentu untuk melihat detail kegagalannya.Ikuti petunjuk untuk memperbaiki masalah dan jalankan Pemeriksaan Awal lagi.
Jika Anda tidak perlu memperbaiki item peringatan, Anda juga dapat memilih Ignore, Ignore Warning Items and Rerun Precheck untuk melewati item peringatan dan menjalankan Pemeriksaan Awal lagi.
- Setelah muncul pesan Precheck Passed di kotak dialog Precheck, tutup kotak dialog tersebut. Tugas sinkronisasi akan dimulai secara otomatis.
- Tunggu hingga saluran sinkronisasi diinisialisasi dan tugas memasuki status Synchronizing.
Halaman Data Synchronization menampilkan status tugas sinkronisasi data.

Skema tabel log inkremental
Anda perlu menjalankan set odps.sql.allow.fullscan=true; di MaxCompute untuk mengatur properti proyek agar mengizinkan pemindaian tabel penuh.
Saat DTS menyinkronkan data inkremental dari MySQL ke tabel log inkremental di MaxCompute, metadata disimpan selain data inkremental, seperti yang ditunjukkan pada contoh berikut.

Pada contoh tersebut, modifytime_year, modifytime_month, modifytime_day, modifytime_hour, dan modifytime_minute adalah bidang partisi yang ditentukan dalam langkah Konfigurasikan kebijakan dan objek sinkronisasi.
Definisi skema
|
Bidang |
Deskripsi |
|
record_id |
ID catatan log inkremental, yang merupakan pengenal unik untuk log tersebut. Catatan
|
|
operation_flag |
Tipe operasi. Nilai yang valid:
|
|
utc_timestamp |
Timestamp operasi, yaitu timestamp log biner (dalam UTC). |
|
before_flag |
Menunjukkan apakah semua nilai kolom adalah nilai sebelum pembaruan. Nilai yang valid: Y atau N. |
|
after_flag |
Menunjukkan apakah semua nilai kolom adalah nilai setelah pembaruan. Nilai yang valid: Y atau N. |
Informasi tambahan tentang bidang before_flag dan after_flag
Untuk tipe operasi yang berbeda, bidang before_flag dan after_flag dalam log inkremental didefinisikan sebagai berikut:
-
INSERT
Ketika tipe operasi adalah INSERT, semua nilai kolom adalah nilai catatan yang baru dimasukkan. Ini adalah nilai setelah pembaruan. Oleh karena itu, nilai `before_flag` adalah N, dan nilai `after_flag` adalah Y, seperti yang ditunjukkan pada contoh berikut.

-
UPDATE
Ketika tipe operasi adalah UPDATE, DTS membagi operasi UPDATE menjadi dua catatan log inkremental. Kedua catatan log ini memiliki nilai yang sama untuk `record_id`, `operation_flag`, dan `utc_timestamp`.
Catatan log pertama berisi nilai sebelum pembaruan, sehingga nilai `before_flag` adalah Y dan nilai `after_flag` adalah N. Catatan log kedua berisi nilai setelah pembaruan, sehingga nilai `before_flag` adalah N dan nilai `after_flag` adalah Y, seperti yang ditunjukkan pada contoh berikut.

-
DELETE
Ketika tipe operasi adalah DELETE, semua nilai kolom dalam catatan log inkremental adalah nilai yang dihapus. Artinya nilai kolom tidak berubah. Oleh karena itu, nilai `before_flag` adalah Y, dan nilai `after_flag` adalah N, seperti yang ditunjukkan pada contoh berikut.

Contoh penggabungan data penuh
Setelah operasi sinkronisasi data, DTS membuat tabel garis dasar penuh dan tabel log inkremental untuk setiap tabel di MaxCompute. Anda dapat menggunakan perintah SQL MaxCompute untuk menggabungkan kedua tabel ini guna mendapatkan data penuh pada titik waktu tertentu.
Contoh ini menggunakan tabel `customer` (dengan struktur berikut) untuk menjelaskan prosedurnya.

-
Berdasarkan struktur tabel yang akan disinkronkan di database sumber, buat tabel di MaxCompute untuk menyimpan hasil penggabungan.
Misalnya, untuk mendapatkan data penuh tabel `customer` pada timestamp
1565944878, buat tabel data berikut agar mudah diidentifikasi oleh bisnis:CREATE TABLE `customer_1565944878` ( `id` bigint NULL, `register_time` datetime NULL, `address` string);Catatan-
Anda dapat menjalankan perintah SQL di editor kueri ad-hoc MaxCompute.
-
Untuk informasi selengkapnya tentang tipe data yang didukung oleh MaxCompute, lihat Tipe data.
-
-
Jalankan perintah SQL berikut di MaxCompute untuk menggabungkan tabel garis dasar penuh dan tabel log inkremental guna mendapatkan data penuh tabel pada titik waktu tertentu.
set odps.sql.allow.fullscan=true; insert overwrite table <result_storage_table> select <col1>, <col2>, <colN> from( select row_number() over(partition by t.<primary_key_column> order by record_id desc, after_flag desc) as row_number, record_id, operation_flag, after_flag, <col1>, <col2>, <colN> from( select incr.record_id, incr.operation_flag, incr.after_flag, incr.<col1>, incr.<col2>,incr.<colN> from <table_log> incr where utc_timestamp< <timestamp> union all select 0 as record_id, 'I' as operation_flag, 'Y' as after_flag, base.<col1>, base.<col2>,base.<colN> from <table_base> base) t) gt where row_number=1 and after_flag='Y'Catatan-
<result_storage_table>: Nama tabel yang menyimpan set hasil penggabungan penuh.
-
<col1>/<col2>/<colN>: Nama kolom dalam tabel yang disinkronkan.
-
<primary_key_column>: Nama kolom kunci primer dalam tabel yang disinkronkan.
-
<table_log>: Nama tabel log inkremental.
-
<table_base>: Nama tabel garis dasar penuh.
-
<timestamp>: Titik waktu untuk mendapatkan data penuh.
Untuk menggabungkan tabel data dan mendapatkan data penuh tabel `customer` pada timestamp
1565944878, gunakan contoh berikut:set odps.sql.allow.fullscan=true; insert overwrite table customer_1565944878 select id, register_time, address from( select row_number() over(partition by t.id order by record_id desc, after_flag desc) as row_number, record_id, operation_flag, after_flag, id, register_time, address from( select incr.record_id, incr.operation_flag, incr.after_flag, incr.id, incr.register_time, incr.address from customer_log incr where utc_timestamp< 1565944878 union all select 0 as record_id, 'I' as operation_flag, 'Y' as after_flag, base.id, base.register_time, base.address from customer_base base) t) gt where gt.row_number= 1 and gt.after_flag= 'Y'; -
-
Setelah perintah di atas dieksekusi, Anda dapat mengkueri data yang digabungkan di tabel `customer_1565944878`.
