Dibandingkan dengan tampilan yang di-materialisasi sinkron, tampilan yang di-materialisasi asinkron mendukung penggabungan multi-tabel dan kumpulan operator agregat yang lebih kaya. Tampilan ini dapat diperbarui melalui pemanggilan manual atau penjadwalan otomatis, serta mendukung pembaruan sebagian partisi, yang secara signifikan mengurangi biaya pembaruan. Selain itu, tampilan yang di-materialisasi asinkron mendukung berbagai skenario penulisan ulang kueri, memungkinkan percepatan kueri secara otomatis dan transparan. Topik ini menjelaskan cara membuat, menggunakan, dan mengelola tampilan yang di-materialisasi asinkron di StarRocks.
Latar Belakang
Aplikasi dalam lingkungan gudang data sering kali mengeksekusi kueri kompleks berdasarkan beberapa tabel besar, melibatkan penggabungan dan agregasi miliaran baris data antara beberapa tabel. Memproses kueri semacam itu biasanya mengonsumsi banyak sumber daya sistem dan waktu, mengakibatkan biaya kueri yang sangat tinggi.
Anda dapat menyelesaikan masalah-masalah ini dengan tampilan yang di-materialisasi asinkron di StarRocks. Tampilan ini adalah tabel fisik khusus yang menyimpan hasil pra-komputasi berdasarkan pernyataan kueri tertentu pada tabel dasar. Saat Anda mengeksekusi kueri kompleks pada tabel dasar, StarRocks dapat langsung menggunakan kembali hasil pra-komputasi, menghindari perhitungan berulang dan meningkatkan performa kueri. Semakin tinggi frekuensi kueri atau semakin kompleks pernyataan kueri, semakin signifikan peningkatan performa.
Anda juga dapat menggunakan tampilan yang di-materialisasi asinkron untuk memodelkan gudang data Anda, memberikan antarmuka data terpadu kepada aplikasi lapisan atas, menyembunyikan implementasi bawah, dan melindungi keamanan data rinci tabel dasar.
Perbandingan tampilan yang di-materialisasi
Tampilan yang di-materialisasi sinkron StarRocks (Rollup) menawarkan kesegaran data yang lebih baik dan biaya pembaruan yang lebih rendah. Namun, tampilan ini memiliki banyak keterbatasan dalam hal skenario, hanya dapat dibuat berdasarkan satu tabel dasar, dan hanya mendukung operator agregat yang terbatas. Sebaliknya, tampilan yang di-materialisasi asinkron StarRocks dapat dibuat berdasarkan beberapa tabel dasar dan mendukung kumpulan operator agregat yang lebih kaya.
Tabel berikut membandingkan tampilan yang di-materialisasi asinkron dan sinkron (Rollup) di StarRocks dari perspektif fitur yang didukung.
Tampilan yang di-materialisasi | Agregasi tabel tunggal | Penggabungan multi-tabel | Penulisan ulang kueri | Strategi pembaruan | Tabel dasar |
Tampilan yang di-materialisasi asinkron | Ya | Ya | Ya |
| Mendukung konstruksi multi-tabel. Tabel dasar dapat berasal dari:
|
Tampilan yang di-materialisasi sinkron (Rollup) | Hanya beberapa fungsi agregat | Tidak | Ya | Pembaruan sinkron selama impor | Hanya mendukung konstruksi tabel tunggal berdasarkan Katalog Default |
Istilah
Konsep | Deskripsi |
Tabel Dasar | Tabel penggerak dari tampilan yang di-materialisasi. Untuk tampilan yang di-materialisasi asinkron StarRocks, tabel dasar dapat berupa tabel internal di Katalog Default, tabel di katalog data eksternal, atau bahkan tampilan yang di-materialisasi asinkron yang ada atau tampilan. StarRocks mendukung pembuatan tampilan yang di-materialisasi asinkron pada semua jenis tabel StarRocks. |
Segarkan | Setelah membuat tampilan yang di-materialisasi asinkron, datanya hanya mencerminkan status tabel dasar pada saat pembuatan. Ketika data di tabel dasar berubah, Anda perlu memperbarui tampilan yang di-materialisasi asinkron untuk memperbarui perubahan data tersebut. Saat ini, StarRocks mendukung dua strategi pembaruan asinkron:
|
Penulisan Ulang Kueri | Penulisan ulang kueri mengacu pada sistem yang secara otomatis menentukan apakah hasil pra-komputasi dalam tampilan yang di-materialisasi dapat digunakan kembali saat menanyakan tabel dasar yang memiliki tampilan yang di-materialisasi yang dibangun di atasnya. Jika penggunaan kembali dimungkinkan, sistem akan langsung membaca hasil pra-komputasi dari tampilan yang di-materialisasi yang relevan untuk menghindari konsumsi sumber daya sistem dan waktu melalui perhitungan berulang. StarRocks mendukung penulisan ulang kueri otomatis dan transparan berdasarkan tampilan yang di-materialisasi asinkron tipe SPJG. Tampilan yang di-materialisasi tipe SPJG mengacu pada tampilan yang di-materialisasi yang Plan hanya mencakup operator Scan, Filter, Project, dan Aggregate. Catatan Tampilan yang di-materialisasi asinkron yang dibangun berdasarkan tabel Katalog JDBC dan Katalog Hudi saat ini tidak mendukung penulisan ulang kueri. |
Casus Penggunaan
Kami merekomendasikan pembuatan tampilan yang di-materialisasi asinkron jika lingkungan gudang data Anda memiliki persyaratan berikut.
Mempercepat kueri agregat berulang
Misalkan lingkungan gudang data Anda memiliki banyak kueri yang berisi subkueri fungsi agregat yang sama, mengonsumsi sejumlah besar sumber daya komputasi. Anda dapat membuat tampilan yang di-materialisasi asinkron berdasarkan subkueri tersebut, menghitung dan menyimpan semua hasil dari subkueri tersebut. Setelah berhasil dibuat, sistem akan secara otomatis menulis ulang pernyataan kueri untuk langsung menanyakan hasil antara dalam tampilan yang di-materialisasi asinkron, sehingga mengurangi beban dan mempercepat kueri.
Kueri penggabungan multi-tabel berkala
Misalkan Anda perlu secara berkala menggabungkan beberapa tabel di gudang data Anda untuk menghasilkan tabel lebar baru. Anda dapat membuat tampilan yang di-materialisasi asinkron untuk tabel-tabel ini dan menetapkan aturan pembaruan berkala, sehingga menghindari penjadwalan manual tugas penggabungan. Setelah tampilan yang di-materialisasi asinkron dibuat, kueri akan langsung mengembalikan hasil berdasarkan tampilan tersebut, menghindari latensi yang disebabkan oleh operasi penggabungan.
Kategori lapisan data
Misalkan tabel dasar Anda berisi sejumlah besar data mentah, dan kueri memerlukan operasi ETL yang kompleks. Anda dapat menerapkan pelapisan gudang data dengan membuat beberapa lapisan tampilan yang di-materialisasi asinkron pada data. Ini dapat memecah kueri kompleks menjadi beberapa lapisan kueri sederhana, baik mengurangi perhitungan berulang maupun membantu personel pemeliharaan dengan cepat menemukan masalah. Selain itu, pelapisan gudang data dapat memisahkan data mentah dari data statistik, sehingga melindungi data mentah sensitif.
Percepatan Lakehouse
Menanyakan data lake mungkin lambat karena latensi jaringan dan keterbatasan throughput penyimpanan objek. Anda dapat meningkatkan performa kueri dengan membangun tampilan yang di-materialisasi asinkron di atas data lake. Selain itu, StarRocks dapat secara cerdas menulis ulang kueri untuk menggunakan tampilan yang di-materialisasi yang ada, menghilangkan kerumitan modifikasi kueri secara manual.
Untuk kasus penggunaan spesifik tampilan yang di-materialisasi asinkron, lihat:
Buat tampilan yang di-materialisasi asinkron
Sumber data yang didukung
StarRocks mendukung pembuatan tampilan yang di-materialisasi asinkron pada sumber data berikut:
Tabel internal StarRocks (tabel dasar mendukung semua jenis tabel StarRocks)
Tabel di Katalog Eksternal
Katalog Hive
Katalog Hudi
Katalog Iceberg
Katalog JDBC
Tampilan yang di-materialisasi asinkron yang ada
Tampilan yang ada
Persiapan
Contoh berikut didasarkan pada dua tabel dasar di Katalog Default:
Tabel
goodsberisi ID produkitem_id1, nama produkitem_name, dan harga produkprice.Tabel
order_listberisi ID pesananorder_id, ID pelangganclient_id, dan ID produkitem_id2.
Di mana item_id1 setara dengan item_id2.
Buat tabel dan impor data berikut.
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
CREATE TABLE goods(
item_id1 INT,
item_name STRING,
price FLOAT
) DISTRIBUTED BY HASH(item_id1);
INSERT INTO goods
VALUES
(1001,"apple",6.5),
(1002,"pear",8.0),
(1003,"potato",2.2);
CREATE TABLE order_list(
order_id INT,
client_id INT,
item_id2 INT,
order_date DATE
) DISTRIBUTED BY HASH(order_id);
INSERT INTO order_list
VALUES
(10001,101,1001,"2022-03-13"),
(10001,101,1002,"2022-03-13"),
(10002,103,1002,"2022-03-13"),
(10002,103,1003,"2022-03-14"),
(10003,102,1003,"2022-03-14"),
(10003,102,1001,"2022-03-14");Skenario bisnis contoh ini memerlukan analisis total pesanan yang sering, sehingga kueri perlu menggabungkan kedua tabel dan memanggil fungsi sum() untuk menghasilkan tabel baru berdasarkan ID pesanan dan jumlah total. Selain itu, skenario bisnis ini memerlukan pembaruan total pesanan setiap hari.
Pernyataan kueri adalah sebagai berikut.
USE test_db;
SELECT
order_id,
sum(goods.price) as total
FROM order_list INNER JOIN goods ON goods.item_id1 = order_list.item_id2
GROUP BY order_id;Buat tampilan yang di-materialisasi asinkron berdasarkan pernyataan kueri
Anda dapat membuat tampilan yang di-materialisasi untuk pernyataan kueri tertentu menggunakan pernyataan CREATE MATERIALIZED VIEW.
Contoh
Contoh berikut membuat tampilan yang di-materialisasi asinkron berdasarkan pernyataan kueri di atas, menggunakan tabel goods dan order_list untuk "mengelompokkan berdasarkan ID pesanan dan menjumlahkan harga semua produk dalam pesanan", dan menetapkan mode pembaruannya ke ASYNC, secara otomatis memperbarui setiap hari.
USE test_db;
CREATE MATERIALIZED VIEW order_mv
DISTRIBUTED BY HASH(`order_id`)
REFRESH ASYNC START('2022-09-01 10:00:00') EVERY (interval 1 day)
AS SELECT
order_list.order_id,
sum(goods.price) as total
FROM order_list INNER JOIN goods ON goods.item_id1 = order_list.item_id2
GROUP BY order_id;Saat membuat tampilan yang di-materialisasi asinkron, Anda harus menentukan setidaknya salah satu bucketing atau strategi pembaruan.
Anda dapat menetapkan strategi partisi dan bucketing yang berbeda untuk tampilan yang di-materialisasi asinkron daripada tabel dasarnya, tetapi kolom kunci partisi dan kolom bucketing dari tampilan yang di-materialisasi asinkron harus ada dalam pernyataan kueri.
Tampilan yang di-materialisasi asinkron mendukung penggulungan partisi. Sebagai contoh, jika tabel dasar dipartisi berdasarkan hari, Anda dapat menetapkan tampilan yang di-materialisasi asinkron untuk dipartisi berdasarkan bulan.
Tampilan yang di-materialisasi asinkron saat ini tidak mendukung penggunaan strategi partisi Daftar, dan tidak mendukung pembuatan berdasarkan tabel dasar yang menggunakan partisi Daftar.
Pernyataan kueri untuk membuat tampilan yang di-materialisasi tidak mendukung fungsi non-deterministik, termasuk rand(), random(), uuid(), dan sleep().
Tampilan yang di-materialisasi asinkron mendukung berbagai tipe data.
Secara default, setelah mengeksekusi pernyataan CREATE MATERIALIZED VIEW, StarRocks akan segera memulai tugas pembaruan, yang akan mengonsumsi sumber daya sistem tertentu. Untuk menunda waktu pembaruan, tambahkan parameter REFRESH DEFERRED.
Catatan
Mekanisme Pembaruan Tampilan yang di-Materialisasi Asinkron
Saat ini, StarRocks mendukung dua strategi pembaruan ON DEMAND: pembaruan asinkron (ASYNC) dan pembaruan manual (MANUAL).
Selain itu, tampilan yang di-materialisasi asinkron mendukung berbagai mekanisme pembaruan untuk mengontrol overhead pembaruan dan memastikan tingkat keberhasilan pembaruan:
Mendukung pengaturan jumlah maksimum partisi untuk diperbarui. Saat tampilan yang di-materialisasi asinkron memiliki banyak partisi, pembaruan tunggal akan mengonsumsi banyak sumber daya. Anda dapat menggunakan mekanisme pembaruan ini untuk menentukan jumlah maksimum partisi untuk pembaruan tunggal, sehingga membagi tugas pembaruan untuk memastikan bahwa tampilan yang di-materialisasi dengan jumlah data besar dapat diperbarui secara bertahap dan stabil.
Mendukung penetapan Time to Live (TTL) untuk partisi tampilan yang di-materialisasi asinkron, sehingga mengurangi ruang penyimpanan yang ditempati oleh tampilan yang di-materialisasi asinkron.
Mendukung penetapan rentang pembaruan, memperbarui hanya beberapa partisi terbaru, mengurangi overhead pembaruan.
Mendukung penetapan tabel dasar di mana perubahan data tidak akan memicu pembaruan otomatis dari tampilan yang di-materialisasi yang sesuai.
Mendukung penetapan kelompok sumber daya untuk tugas pembaruan.
Anda juga dapat menggunakan
ALTER MATERIALIZED VIEWuntuk memodifikasi mekanisme pembaruan tampilan yang di-materialisasi asinkron yang ada.CatatanUntuk menghindari tugas pembaruan penuh menghabiskan sumber daya sistem dan menyebabkan kegagalan tugas, disarankan untuk membuat tampilan yang di-materialisasi berpartisi berdasarkan tabel dasar berpartisi, memastikan bahwa ketika data di partisi tabel dasar diperbarui, hanya partisi yang sesuai dari tampilan yang di-materialisasi yang diperbarui, bukan seluruh tampilan yang di-materialisasi. Untuk informasi lebih lanjut, lihat Pemodelan partisi.
Tampilan yang di-Materialisasi Bersarang
StarRocks mendukung tampilan yang di-materialisasi asinkron bersarang, yaitu membangun tampilan yang di-materialisasi asinkron baru berdasarkan tampilan yang di-materialisasi asinkron yang ada. Metode pembaruan setiap tampilan yang di-materialisasi asinkron hanya mempengaruhi tampilan yang di-materialisasi saat ini. Saat ini, StarRocks tidak membatasi jumlah tingkat bersarang. Dalam lingkungan produksi, disarankan agar kedalaman bersarang tidak melebihi tiga lapis.
Tampilan yang di-Materialisasi Katalog Eksternal
StarRocks mendukung pembuatan tampilan yang di-materialisasi asinkron berdasarkan Katalog Hive, Katalog Hudi, Katalog Iceberg, dan Katalog JDBC. Tampilan yang di-materialisasi katalog data eksternal dibuat dengan cara yang sama seperti tampilan yang di-materialisasi asinkron reguler, tetapi memiliki batasan penggunaan. Untuk informasi lebih lanjut, lihat Menggunakan tampilan yang di-materialisasi untuk mempercepat kueri data lake.
Perbarui manual tampilan yang di-materialisasi asinkron
Anda dapat memperbarui manual tampilan yang di-materialisasi asinkron tertentu menggunakan perintah REFRESH MATERIALIZED VIEW.
-- Secara asinkron memanggil tugas pembaruan.
REFRESH MATERIALIZED VIEW test_db.order_mv;
-- Secara sinkron memanggil tugas pembaruan.
REFRESH MATERIALIZED VIEW test_db.order_mv WITH SYNC MODE;Anda dapat membatalkan tugas pembaruan yang dipanggil secara asinkron menggunakan CANCEL REFRESH MATERIALIZED VIEW.
-- Batalkan tugas pembaruan.
CANCEL REFRESH MATERIALIZED VIEW test_db.order_mv;
-- Paksa batalkan tugas pembaruan.
CANCEL REFRESH MATERIALIZED VIEW test_db.order_mv FORCE;Kueri langsung tampilan yang di-materialisasi asinkron
Tampilan yang di-materialisasi asinkron pada dasarnya adalah tabel fisik yang menyimpan set hasil lengkap pra-komputasi sesuai dengan pernyataan kueri tertentu. Setelah tampilan yang di-materialisasi diperbarui untuk pertama kalinya, Anda dapat langsung menanyakan tampilan yang di-materialisasi.
SELECT * FROM test_db.order_mv;Anda dapat langsung menanyakan tampilan yang di-materialisasi asinkron, namun karena mekanisme pembaruan asinkron, hasilnya mungkin tidak konsisten dengan hasil yang Anda tanyakan dari tabel dasar.
Gunakan tampilan yang di-materialisasi asinkron untuk menulis ulang dan mempercepat kueri
StarRocks mendukung penulisan ulang kueri tampilan yang di-materialisasi asinkron tipe SPJG secara otomatis dan transparan. Penulisan ulang kuerinya mencakup penulisan ulang tabel tunggal, penulisan ulang Join, penulisan ulang agregat, penulisan ulang Union, dan penulisan ulang tampilan yang di-materialisasi bersarang. Mulai dari v3.3.0, StarRocks lebih lanjut mendukung penulisan ulang tampilan yang di-materialisasi berbasis teks. Untuk informasi lebih lanjut, lihat Penulisan ulang kueri tampilan yang di-materialisasi.
Saat ini, StarRocks mendukung penulisan ulang kueri untuk tampilan yang di-materialisasi asinkron berdasarkan Katalog Default, Katalog Hive, Katalog Hudi, dan Katalog Iceberg. Saat menanyakan data Katalog Default, StarRocks memastikan konsistensi kuat antara hasil kueri yang ditulis ulang dan hasil kueri asli dengan mengecualikan tampilan yang di-materialisasi di mana data tidak konsisten dengan tabel dasar. Saat data tampilan yang di-materialisasi sudah usang, itu tidak akan dipertimbangkan sebagai kandidat tampilan yang di-materialisasi. Saat menanyakan data katalog eksternal, StarRocks tidak dapat mendeteksi perubahan data di partisi katalog eksternal, sehingga tidak menjamin konsistensi kuat hasilnya. Untuk informasi tentang tampilan yang di-materialisasi asinkron berdasarkan Katalog Eksternal, lihat Menggunakan tampilan yang di-materialisasi untuk mempercepat kueri data lake.
Tampilan yang di-materialisasi asinkron yang dibangun berdasarkan tabel Katalog JDBC saat ini tidak mendukung penulisan ulang kueri.
Kelola tampilan yang di-materialisasi asinkron
Modifikasi tampilan yang di-materialisasi asinkron
Anda dapat memodifikasi properti tampilan yang di-materialisasi asinkron menggunakan perintah ALTER MATERIALIZED VIEW.
Aktifkan tampilan yang di-materialisasi asinkron yang dinonaktifkan (atur status tampilan yang di-materialisasi menjadi Aktif).
ALTER MATERIALIZED VIEW test_db.order_mv ACTIVE;Ubah nama tampilan yang di-materialisasi asinkron menjadi
order_total.ALTER MATERIALIZED VIEW test_db.order_mv RENAME order_total;Modifikasi interval pembaruan maksimum tampilan yang di-materialisasi asinkron menjadi 2 hari.
ALTER MATERIALIZED VIEW test_db.order_mv REFRESH ASYNC EVERY(INTERVAL 2 DAY);
Lihat tampilan yang di-materialisasi asinkron
Anda dapat menggunakan SHOW MATERIALIZED VIEWS atau menanyakan metadata sistem dalam Information Schema untuk melihat tampilan yang di-materialisasi asinkron di database.
Lihat semua tampilan yang di-materialisasi asinkron di gudang data saat ini.
USE test_db; SHOW MATERIALIZED VIEWS;Lihat tampilan yang di-materialisasi asinkron tertentu.
USE test_db; SHOW MATERIALIZED VIEWS WHERE NAME = "order_mv";Lihat tampilan yang di-materialisasi asinkron berdasarkan pencocokan nama.
USE test_db; SHOW MATERIALIZED VIEWS WHERE NAME LIKE "order%";Lihat semua tampilan yang di-materialisasi asinkron melalui metadata sistem
materialized_viewsdi Information Schema.USE test_db; SELECT * FROM information_schema.materialized_views;
Lihat pernyataan pembuatan tampilan yang di-materialisasi asinkron
Anda dapat melihat pernyataan pembuatan tampilan yang di-materialisasi asinkron menggunakan perintah SHOW CREATE MATERIALIZED VIEW.
SHOW CREATE MATERIALIZED VIEW test_db.order_mv;Lihat status eksekusi tampilan yang di-materialisasi asinkron
Anda dapat melihat status eksekusi tampilan yang di-materialisasi asinkron dengan dua cara berikut.
Melalui halaman Materialized View Management > Asynchronous Materialized View di EMR StarRocks Manager.
Dengan menanyakan metadata
tasksdantask_runsdi Information Schema StarRocks untuk melihat status eksekusi (pembuatan atau pembaruan) tampilan yang di-materialisasi asinkron.Contoh adalah sebagai berikut.
Lihat
TASK_NAMEdari tugas terbaru di tabeltasks.SELECT * FROM information_schema.tasks ORDER BY CREATE_TIME DESC limit 1;Lihat status eksekusi di tabel
task_runsberdasarkanTASK_NAMEyang di-query.SELECT * FROM information_schema.task_runs WHERE task_name='mv-59299' ORDER BY CREATE_TIME;
Hapus tampilan yang di-materialisasi asinkron
Anda dapat menghapus tampilan yang di-materialisasi asinkron yang telah dibuat menggunakan perintah DROP MATERIALIZED VIEW.
DROP MATERIALIZED VIEW test_db.order_mv;