全部产品
Search
文档中心

Lindorm:Panduan Cepat: ETL Real-time

更新时间:Oct 29, 2025

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

Skenario 1: Tabel cermin real-time

Catatan

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

  1. Hubungkan ke LindormTable dari baris perintah MySQL.

  2. 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

  1. Hubungkan ke mesin stream menggunakan baris perintah MySQL.

  2. Buat ETL.

    CREATE ETL sync_etl AS INSERT INTO sink SELECT * FROM source;

Verifikasi data

  1. Hubungkan ke LindormTable dari baris perintah MySQL.

  2. 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);
  3. 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

Catatan

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

  1. Hubungkan ke LindormTable dari baris perintah MySQL.

  2. Buat dua tabel sumber: user_tbl (informasi pengguna) dan order_tbl (informasi pesanan pengguna). Kemudian buat indeks sekunder bernama idx1 untuk tabel order_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');
  3. Buat tabel sink user_order_tbl untuk 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

  1. Hubungkan ke mesin stream menggunakan baris perintah MySQL.

  2. Buat pekerjaan ETL dan tambahkan logika integrasi data.

    Logika adalah sebagai berikut:

    1. Gabungkan tabel sumber order_tbl dan user_tbl pada bidang user_id untuk mengaitkan informasi pengguna dengan data pesanan mereka.

    2. Gunakan ekspresi reguler REGEXP_EXTRACT untuk mengekstrak kode alamat dari bidang user_addr.

    3. 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

  1. Hubungkan ke LindormTable dari baris perintah MySQL.

  2. 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);
  3. 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         |
    +----------+---------+-----------------------+---------------------------+-----------+------------------------------------+----------------+