Mesin DPI menggunakan SQL ekstrak, transformasi, dan muat (ETL) untuk melakukan pre-komputasi tingkat tabel secara real-time. Fitur ini berfungsi sebagai tampilan yang di-materialisasi secara real-time. Topik ini menjelaskan cara menggunakan SQL ETL untuk menyinkronkan dan melakukan pre-komputasi data tabel lebar secara real-time.
Prasyarat
Anda telah mengaktifkan Mesin Stream DPI.
Anda telah mengaktifkan LindormTable.
Skenario 1: Tabel cermin real-time
Anda dapat menyinkronkan data tabel sumber secara real-time. Ini berguna untuk berbagai skenario bisnis seperti berbagi data, cadangan data, pemisahan baca/tulis, dan pengindeksan heterogen.
Persiapan data
Buat tabel sumber dan tabel cermin.
-- Buat tabel sumber CREATE TABLE source(p1 INT, c1 DOUBLE, PRIMARY KEY(p1)); -- Buat tabel cermin CREATE TABLE sink(p1 INT, c1 DOUBLE, PRIMARY KEY(p1));
Kirim pekerjaan ETL
CREATE ETL sync_etl AS INSERT INTO sink SELECT * FROM source;
Verifikasi data
Masukkan data ke dalam tabel sumber.
INSERT INTO source(p1, c1) VALUES(0, 0.0); INSERT INTO source(p1, c1) VALUES(1, 1.0); INSERT INTO source(p1, c1) VALUES(2, 2.0); INSERT INTO source(p1, c1) VALUES(3, 3.0); INSERT INTO source(p1, c1) VALUES(4, 4.0);Kueri data dalam tabel cermin.
SELECT * FROM sink;Hasil berikut dikembalikan:
+------+------+ | p1 | c1 | +------+------+ | 0 | 0.0 | | 1 | 1.0 | | 2 | 2.0 | | 3 | 3.0 | | 4 | 4.0 | +------+------+
Skenario 2: Pre-komputasi real-time
Mesin DPI menyediakan kemampuan pre-komputasi yang luas. Contoh ini menunjukkan cara melakukan pra-gabungan multi-tabel. Pra-gabungan menggabungkan data dari beberapa tabel terlebih dahulu, menghindari operasi JOIN untuk setiap kueri, mencegah waktu respons yang lama dan overhead komputasi yang tinggi.
Persiapan data
Buat dua tabel sumber:
user_tbl(informasi pengguna) danorder_tbl(informasi pesanan pengguna). Kemudian buat indeks sekunder bernamaidx1untuk tabelorder_tbl.-- Buat tabel sumber 1: user_tbl CREATE TABLE `user_tbl` ( `user_id` varchar NOT NULL, `user_name` varchar, `user_addr` varchar, PRIMARY KEY (`user_id`) ); -- Buat tabel sumber 2: order_tbl CREATE TABLE `order_tbl` ( `order_id` varchar NOT NULL, `user_id` varchar, `product_name` varchar, `price` decimal(38, 20), PRIMARY KEY (`order_id`) ); -- Buat indeks idx1 untuk tabel sumber order_tbl CREATE INDEX idx1 ON `order_tbl`(user_id desc) WITH (COMPRESSION='ZSTD');Buat tabel sink
user_order_tbluntuk menyimpan data terintegrasi.CREATE TABLE `user_order_tbl` ( `order_id` varchar NOT NULL, `user_id` varchar, `product_name` varchar, `price` decimal(38, 20), `user_name` varchar, `user_addr` varchar, `user_addr_code` varchar, PRIMARY KEY (`order_id`) ) WITH (MUTABILITY = 'MUTABLE_UDT');
Kirim pekerjaan ETL
Buat pekerjaan ETL dan tambahkan logika integrasi data.
Logika adalah sebagai berikut:
Gabungkan tabel sumber
order_tbldanuser_tblpada bidanguser_iduntuk mengaitkan informasi pengguna dengan data pesanan mereka.Gunakan ekspresi reguler
REGEXP_EXTRACTuntuk mengekstrak kode alamat dari bidanguser_addr.Buat pekerjaan ETL untuk memasukkan data terintegrasi ke dalam tabel sink
user_order_tbl. Ini membuat satu tabel yang berisi informasi pengguna dan data pesanan mereka.
CREATE ETL join_etl AS INSERT INTO `lindorm_table`.`default`.`user_order_tbl` ( order_id, user_id, product_name, price, user_name, user_addr, user_addr_code ) SELECT o.order_id, o.user_id, o.product_name, o.price, u.user_name, u.user_addr, REGEXP_EXTRACT(u.user_addr, '#(.*?)$', 1) AS user_addr_code FROM `lindorm_table`.`default`.`order_tbl` o JOIN `lindorm_table`.`default`.`user_tbl` u ON o.user_id = u.user_id;
Verifikasi data
Masukkan data ke dalam tabel sumber.
INSERT INTO user_tbl (user_id, user_name, user_addr) VALUES ('U001', 'Zhang San', 'Chaoyang District, Beijing#100000'), ('U002', 'Li Si', 'Pudong New Area, Shanghai#200000'), ('U003', 'Wang Wu', 'Tianhe District, Guangzhou#510000'), ('U004', 'Zhao Liu', 'Nanshan District, Shenzhen#518000'); INSERT INTO order_tbl (order_id, user_id, product_name, price) VALUES ('O1001', 'U001', 'Laptop', 8999.00), ('O1002', 'U001', 'Wireless Mouse', 159.00), ('O1003', 'U002', 'Smartphone', 6999.00), ('O1004', 'U002', 'Bluetooth Headset', 299.00), ('O1005', 'U003', 'Tablet', 3499.00), ('O1006', 'U004', 'Mechanical Keyboard', 799.00), ('O1007', 'U004', 'Monitor', 1299.00);Kueri tabel sink. Pekerjaan ETL memfilter data berdasarkan logika integrasi dan menulis hasilnya ke tabel sink secara real-time.
SELECT * FROM user_order_tbl;Hasil berikut dikembalikan:
+----------+---------+-----------------------+---------------------------+-----------+------------------------------------+----------------+ | order_id | user_id | product_name | price | user_name | user_addr | user_addr_code | +----------+---------+-----------------------+---------------------------+-----------+------------------------------------+----------------+ | O1001 | U001 | Laptop | 8999.00000000000000000000 | Zhang San | Chaoyang District, Beijing#100000 | 100000 | | O1002 | U001 | Wireless Mouse | 159.00000000000000000000 | Zhang San | Chaoyang District, Beijing#100000 | 100000 | | O1003 | U002 | Smartphone | 6999.00000000000000000000 | Li Si | Pudong New Area, Shanghai#200000 | 200000 | | O1004 | U002 | Bluetooth Headset | 299.00000000000000000000 | Li Si | Pudong New Area, Shanghai#200000 | 200000 | | O1005 | U003 | Tablet | 3499.00000000000000000000 | Wang Wu | Tianhe District, Guangzhou#510000 | 510000 | | O1006 | U004 | Mechanical Keyboard | 799.00000000000000000000 | Zhao Liu | Nanshan District, Shenzhen#518000 | 518000 | | O1007 | U004 | Monitor | 1299.00000000000000000000 | Zhao Liu | Nanshan District, Shenzhen#518000 | 518000 | +----------+---------+-----------------------+---------------------------+-----------+------------------------------------+----------------+