AutoETL mendukung agregasi data bisnis dari beberapa kluster PolarDB for MySQL ke satu node PolarSearch untuk pencarian teks lengkap dan analitik terpadu. Topik ini menjelaskan cara membuat pipeline agregasi data multi-kluster menggunakan AutoETL.
Fitur ini saat ini dalam rilis canary. Untuk mengaktifkan fitur ini, submit a ticket.
Informasi latar belakang
Dalam skenario dunia nyata, data bisnis sering tersebar di beberapa kluster PolarDB for MySQL. Saat Anda perlu melakukan pencarian teks lengkap atau analitik terpadu di seluruh kluster tersebut, Anda dapat menggunakan fitur agregasi data multi-kluster AutoETL untuk menyinkronkan data dari beberapa kluster sumber ke node PolarSearch pada kluster agregasi.
Alur data bekerja sebagai berikut:
Pada setiap kluster sumber, jalankan pernyataan
CREATE ETL GRANTuntuk memberikan otorisasi kepada kluster agregasi agar dapat mengakses data pada kluster sumber.Pada kluster agregasi, buat pipeline agregasi menggunakan prosedur tersimpan ETL (
dbms_etl.sync_by_sql). Pada klausaWITHsetiap tabel sumber, tentukan kluster sumber PolarDB for MySQL dengan parameterpolardb-mysql-instance.Setelah pipeline dimulai, AutoETL memverifikasi bahwa setiap kluster sumber telah memberikan akses ETL kepada kluster agregasi. Setelah otorisasi dikonfirmasi, mesin membaca data dari setiap kluster sumber dan menyinkronkannya ke node PolarSearch pada kluster agregasi.
Batasan
Semua kluster PolarDB for MySQL yang terlibat dalam agregasi harus berada dalam Akun Alibaba Cloud (UID) yang sama.
Pipeline agregasi multi-kluster hanya dapat dibuat menggunakan prosedur tersimpan ETL (
dbms_etl.sync_by_sql). Tampilan pencarian tidak didukung.Pencabutan otorisasi ETL tidak memengaruhi pipeline sinkronisasi yang sedang berjalan.
Langkah 1: Buat otorisasi ETL
Untuk mengizinkan kluster agregasi menyinkronkan data dari kluster sumber, Anda harus membuat otorisasi ETL pada setiap kluster sumber guna memberikan akses AutoETL.
Buat otorisasi ETL
Jalankan pernyataan SQL berikut pada kluster sumber. Ganti <allow_instance_id> dengan ID kluster agregasi.
CREATE ETL GRANT `<allow_instance_id>`;Cabut otorisasi ETL
DROP ETL GRANT `<allow_instance_id>`;Lihat izin ETL
SHOW ETL GRANTS;Langkah 2: Buat pipeline agregasi
Anda dapat membuat pipeline agregasi multi-kluster menggunakan prosedur tersimpan ETL (dbms_etl.sync_by_sql). Pada klausa WITH setiap tabel sumber, tentukan ID kluster sumber dengan parameter polardb-mysql-instance.
Persiapkan data
Asumsikan Anda memiliki dua kluster PolarDB for MySQL (Kluster A dan Kluster B), dan Anda ingin mengagregasi data dari Kluster A ke node PolarSearch pada Kluster B.
Buat data uji pada Kluster A dan berikan akses ETL ke Kluster B:
-- Jalankan pada Kluster A CREATE DATABASE IF NOT EXISTS db1; USE db1; CREATE TABLE IF NOT EXISTS t1 ( id INT PRIMARY KEY, c1 VARCHAR(100), c2 VARCHAR(100) ); INSERT INTO t1(id, c1, c2) VALUES (1, '1', '1'), (2, '1', '1'), (3, '1', '1'); -- Berikan akses ETL ke Kluster B -- Ganti pc-xxx dengan ID kluster aktual Kluster B CREATE ETL GRANT `pc-xxx`;Buat data uji pada Kluster B:
-- Jalankan pada Kluster B CREATE DATABASE IF NOT EXISTS db2; USE db2; CREATE TABLE IF NOT EXISTS t2 ( id INT PRIMARY KEY, c1 VARCHAR(100), c2 VARCHAR(100) ); INSERT INTO t2(id, c1, c2) VALUES (1, '2', '2'), (2, '2', '2'), (3, '2', '2');
Buat pipeline agregasi
Jalankan pernyataan SQL berikut pada Kluster B untuk membuat pipeline agregasi yang menyinkronkan data dari kedua kluster ke node PolarSearch pada Kluster B.
Rincian koneksi untuk tabel sumber dan tujuan, seperti alamat koneksi, port, dan kredensial, dikonfigurasi secara otomatis oleh sistem. Anda hanya perlu menentukan ID kluster sumber dengan parameter polardb-mysql-instance.
-- Jalankan pada Kluster B
CALL dbms_etl.sync_by_sql("search", "
-- Langkah 1: Definisikan tabel sumber pada Kluster A
CREATE TEMPORARY TABLE `db1`.`t1` (
`id` BIGINT,
`c1` STRING,
`c2` STRING,
PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
'connector' = 'mysql',
'database-name' = 'db1',
'table-name' = 't1',
'polardb-mysql-instance' = 'pc-xxx' -- Ganti dengan ID kluster aktual Kluster A
);
-- Langkah 2: Definisikan tabel sumber pada Kluster B
CREATE TEMPORARY TABLE `db2`.`t2` (
`id` BIGINT,
`c1` STRING,
`c2` STRING,
PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
'connector' = 'mysql',
'database-name' = 'db2',
'table-name' = 't2',
'polardb-mysql-instance' = 'pc-xxx' -- Ganti dengan ID kluster aktual Kluster B
);
-- Langkah 3: Definisikan tabel tujuan PolarSearch
CREATE TEMPORARY TABLE `dest` (
`id` BIGINT,
`p1_c1` STRING,
`p2_c1` STRING,
PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
'connector' = 'opensearch',
'index' = 'dest'
);
-- Langkah 4: Definisikan logika komputasi dan penyisipan
INSERT INTO `dest`
SELECT
`t1`.`id`,
`t1`.`c1`,
`t2`.`c1`
FROM `db1`.`t1` AS `t1`
LEFT JOIN `db2`.`t2` AS `t2`
ON `t1`.`id` = `t2`.`id`;
");Langkah 3: Verifikasi data
Hubungkan ke node PolarSearch pada kluster agregasi dan jalankan kueri REST API yang kompatibel dengan Elasticsearch berikut untuk memverifikasi bahwa data telah disinkronkan.
# Ganti <user>:<password> dengan kredensial node PolarSearch
# Ganti <polarsearch_endpoint> dengan titik akhir dan port node PolarSearch
curl -u <user>:<password> -X GET "http://<polarsearch_endpoint>/dest/_search"