Tampilan yang di-materialisasi (materialized view) adalah objek yang telah diproses sebelumnya dan menyimpan hasil operasi yang memakan waktu, seperti JOIN dan AGGREGATE. Anda dapat menggunakan kembali hasil tersebut dalam kueri berikutnya untuk menghindari pengulangan operasi mahal dan meningkatkan performa kueri. Topik ini menjelaskan perintah-perintah terkait Tampilan yang di-materialisasi.
Batasan
Tampilan yang di-materialisasi hanya didukung di Hologres V1.3 ke atas. Jika instans Anda menggunakan versi sebelumnya, lihat Kesalahan umum saat mempersiapkan upgrade atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi lebih lanjut, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.
Untuk informasi lebih lanjut mengenai batasan dan operasi, lihat Kelola Tampilan yang di-materialisasi dengan SQL.
Buat Tampilan yang di-materialisasi
-
Sintaksis
Gunakan sintaks berikut untuk membuat Tampilan yang di-materialisasi.
CREATE MATERIALIZED VIEW <mv_name> AS <QUERY BODY>;mv_name adalah nama Tampilan yang di-materialisasi. QUERY BODY adalah pernyataan kueri. Untuk informasi lebih lanjut, lihat SELECT.
-
Contoh
-
Membuat tampilan materialized untuk tabel non-partisi.
BEGIN; CREATE TABLE base_sales( day text not null, hour int , ts timestamptz, amount float, pk text not null primary key ); CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'appendonly'); --Setelah Tampilan yang di-materialisasi dihapus, jalankan perintah berikut untuk menonaktifkan properti appendonly pada tabel sumber. --CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'none'); CREATE MATERIALIZED VIEW mv_sales AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales GROUP BY day, hour; COMMIT; insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),100,'pk1'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),200,'pk2'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),300,'pk3'); -
Membuat tampilan materialized untuk tabel partisi.
BEGIN; CREATE TABLE base_sales_p( day text not null, hour int, ts timestamptz, amount float, pk text not null, primary key (day, pk) ) partition by list(day); CALL SET_TABLE_PROPERTY('base_sales_p', 'mutate_type', 'appendonly'); --Kolom day adalah kolom kunci partisi dan harus disertakan dalam klausa GROUP BY pada tampilan. CREATE MATERIALIZED VIEW mv_sales_p AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales_p GROUP BY day, hour; COMMIT; create table base_sales_20220101 partition of base_sales_p for values in('20220101');
-
Kueri Tampilan yang di-materialisasi
Gunakan pernyataan SQL berikut untuk mengkueri Tampilan yang di-materialisasi.
SELECT * FROM mv_sales WHERE day = to_char(now(),'YYYYMMDD') AND hour = 12;
Hapus Tampilan yang di-materialisasi
-
Sintaksis
Sintaks untuk menghapus tampilan adalah sebagai berikut.
DROP MATERIALIZED VIEW <mv_name>;mv_name adalah nama Tampilan yang di-materialisasi.
Contoh
DROP MATERIALIZED VIEW mv_sales;