Topik ini menjelaskan cara menggunakan pernyataan BUAT TAMPILAN MATERIALIZASI untuk membuat tampilan materialisasi yang mendukung penyegaran lengkap atau cepat serta mengonfigurasi waktu penyegaran.
Sintaks
CREATE [OR REPLACE] MATERIALIZED VIEW mv_name
[mv_definition]
[mv_properties]
[REFRESH [COMPLETE|FAST]]
[ON [DEMAND |OVERWRITE]]
[START WITH date] [NEXT date]
[[DISABLE|ENABLE] QUERY REWRITE]
[COMMENT 'view_comment']
AS
query_body
mv_definition:
({column_name column_type [column_attributes] [ column_constraints ] [COMMENT 'column_comment']
| table_constraints}
[, ... ])
[table_attribute]
[partition_options]
[index_all]
[storage_policy]
[block_size]
[engine]
[table_properties]Parameter
OR REPLACE | Opsional | Dapat diubah setelah pembuatan: tidak | |
Hanya kluster AnalyticDB for MySQL versi 3.1.4.7 atau lebih baru yang mendukung parameter ini.
| |||
mv_definition | Opsional | Dapat diubah setelah pembuatan: tidak | |
Skema dari tampilan materialisasi. Anda dapat memilih apakah akan secara eksplisit menentukan skema tampilan materialisasi. Jika Anda tidak secara eksplisit menentukan skema tampilan materialisasi, AnalyticDB for MySQL mendefinisikan kolom tampilan materialisasi dengan menggunakan kolom dari hasil kueri tampilan materialisasi, menentukan kunci utama untuk tampilan materialisasi, membuat indeks pada semua kolom, dan mengonfigurasi penyimpanan data panas dan mesin XUANWU. Jika Anda ingin secara manual menentukan skema tampilan materialisasi, termasuk kunci distribusi, kunci partisi, kunci utama, indeks, dan kebijakan penyimpanan bertingkat data panas dan dingin, gunakan metode definisi skema yang sama seperti yang digunakan untuk menjalankan pernyataan BUAT TABEL. Sebagai contoh, jika Anda tidak perlu mengindeks semua kolom, Anda dapat menggunakan kata kunci INDEX untuk menentukan kolom indeks. Jika Anda ingin mengurangi biaya penyimpanan tampilan materialisasi, Anda dapat mengatur kebijakan penyimpanan tampilan materialisasi ke penyimpanan campuran atau menyimpan data hanya dalam satu tahun terakhir. Aturan Kunci Utama
RekomendasiUntuk meningkatkan kinerja kueri tampilan materialisasi, kami sarankan Anda menentukan kunci utama, kunci distribusi, dan kunci partisi saat membuat tampilan materialisasi. | |||
mv_properties | Opsional | Dapat diubah setelah pembuatan: ya (dengan menggunakan pernyataan ALTER MATERIALIZED VIEW) | |
Hanya kluster AnalyticDB for MySQL Enterprise Edition, Basic Edition, atau Data Lakehouse Edition versi 3.1.9.3 atau lebih baru yang mendukung parameter ini. Kebijakan sumber daya tampilan materialisasi, yang terdiri dari parameter mv_resource_group yang menentukan grup sumber daya dan parameter mv_refresh_hints yang menentukan konfigurasi petunjuk penyegaran. Parameter mv_properties dalam format JSON. Contoh: mv_resource_groupGrup sumber daya yang digunakan untuk membuat dan menyegarkan tampilan materialisasi. Jika Anda tidak menentukan grup sumber daya, grup sumber daya default bernama user_default digunakan. Anda dapat mengatur parameter ini ke grup sumber daya interaktif atau grup sumber daya pekerjaan yang menggunakan mesin XIHE. Grup sumber daya pekerjaan memerlukan latensi penyegaran beberapa detik atau menit untuk menyediakan sumber daya. Jika Anda tidak memiliki persyaratan tinggi untuk latensi penyegaran, Anda dapat menentukan grup sumber daya pekerjaan. Tampilan materialisasi yang menggunakan grup sumber daya pekerjaan disebut tampilan materialisasi elastis. Jika Anda ingin meningkatkan kinerja penyegaran tampilan materialisasi elastis, Anda dapat mengonfigurasi bidang elastic_job_max_acu dalam parameter mv_refresh_hints untuk meningkatkan batas sumber daya tampilan materialisasi. Untuk informasi lebih lanjut, lihat contoh berikut dari tampilan materialisasi elastis. Anda dapat melihat grup sumber daya pada tab Grup Sumber Daya di konsol AnalyticDB for MySQL atau memanggil operasi DescribeDBResourceGroup untuk menanyakan daftar grup sumber daya. Jika grup sumber daya yang ditentukan tidak ada, kesalahan akan terjadi saat Anda membuat tampilan materialisasi. mv_refresh_hintsKonfigurasi petunjuk penyegaran tampilan materialisasi. Untuk informasi tentang parameter petunjuk yang didukung, lihat bagian "Parameter petunjuk umum" dari topik Konfigurasi dan parameter konfigurasi petunjuk. | |||
REFRESH [COMPLETE | FAST] | Opsional | Nilai default: COMPLETE | Dapat diubah setelah pembuatan: tidak |
Kebijakan penyegaran tampilan materialisasi. Untuk informasi tentang perbedaan antara kebijakan penyegaran dan skenario yang berlaku, lihat bagian "Pilih kebijakan penyegaran" dari topik Segarkan tampilan materialisasi. COMPLETEPenyegaran lengkap mengeksekusi kueri tampilan materialisasi untuk memindai data di semua partisi tabel dasar yang terlibat dan menggunakan hasil kueri untuk menimpa data asli tampilan materialisasi. Penyegaran lengkap mendukung mekanisme pemicu penyegaran berikut: penyegaran otomatis pada interval terjadwal (ditentukan oleh klausa FASTHanya kluster AnalyticDB for MySQL versi 3.1.9.0 atau lebih baru yang mendukung parameter ini. Di kluster AnalyticDB for MySQL versi 3.1.9.0, Anda hanya dapat membuat tampilan materialisasi satu tabel yang mendukung penyegaran cepat. Di kluster AnalyticDB for MySQL versi 3.2.0.0 atau lebih baru, Anda dapat membuat tampilan materialisasi satu tabel dan multi-tabel yang mendukung penyegaran cepat. Penyegaran cepat menulis ulang kueri tampilan materialisasi (query_body) untuk hanya memindai data yang diperbarui di tabel dasar (INSERT, DELETE, UPDATE) dan memperbarui data tampilan materialisasi. Ini mencegah semua data tabel dasar dipindai dan mengurangi overhead penyegaran. Sebelum Anda membuat tampilan materialisasi yang mendukung penyegaran cepat di kluster AnalyticDB for MySQL, Anda harus mengaktifkan fitur pencatatan biner untuk kluster dan tabel dasar. Jika tidak, kesalahan akan terjadi. Untuk informasi lebih lanjut, lihat bagian "Aktifkan fitur pencatatan biner" dari topik Segarkan tampilan materialisasi. Jika Anda ingin membuat tampilan materialisasi yang mendukung penyegaran cepat, Anda harus mengatur mekanisme pemicu penyegaran ke penyegaran otomatis pada interval terjadwal dengan menentukan klausa Batasan tertentu diberlakukan pada tampilan materialisasi yang mendukung penyegaran cepat. Jika kueri tampilan materialisasi tidak memenuhi persyaratan penyegaran cepat, kesalahan akan terjadi saat Anda membuat tampilan materialisasi. | |||
ON [DEMAND | OVERWRITE] | Opsional | Nilai default: DEMAND | Dapat diubah setelah pembuatan: tidak |
Mekanisme pemicu penyegaran tampilan materialisasi. Untuk informasi tentang perbedaan antara mekanisme pemicu penyegaran dan skenario yang berlaku, lihat bagian "Pilih mekanisme pemicu penyegaran" dari topik Segarkan tampilan materialisasi. DEMANDPenyegaran sesuai permintaan. Anda dapat memicu penyegaran secara manual atau menggunakan klausa Untuk tampilan materialisasi yang mendukung penyegaran cepat, Anda hanya dapat mengatur mekanisme pemicu penyegaran ke OVERWRITEPenyegaran otomatis saat tabel dasar ditimpa dengan mengeksekusi pernyataan Jika Anda mengatur mekanisme pemicu penyegaran ke | |||
[START WITH date] [NEXT date] | Opsional | Dapat diubah setelah pembuatan: tidak | |
Waktu penyegaran tampilan materialisasi saat Anda mengatur mekanisme pemicu penyegaran ke START WITHWaktu penyegaran pertama tampilan materialisasi. Jika Anda tidak menentukan klausa START WITH, waktu penyegaran pertama adalah waktu saat tampilan materialisasi dibuat. NEXTWaktu penyegaran berikutnya tampilan materialisasi.
dateFungsi waktu didukung dan harus akurat hingga detik. Milidetik dipotong. | |||
[DISABLE | ENABLE] QUERY REWRITE | Opsional | Nilai default: DISABLE | Dapat diubah setelah pembuatan: ya (dengan menggunakan pernyataan ALTER MATERIALIZED VIEW) |
Hanya kluster AnalyticDB for MySQL versi 3.1.4 atau lebih baru yang mendukung parameter ini. Mengaktifkan atau menonaktifkan fitur penulisan ulang kueri untuk tampilan materialisasi. Untuk informasi lebih lanjut, lihat Penulisan ulang kueri tampilan materialisasi. DISABLEMenonaktifkan fitur penulisan ulang kueri untuk tampilan materialisasi. ENABLEMengaktifkan fitur penulisan ulang kueri untuk tampilan materialisasi. Setelah Anda mengaktifkan fitur penulisan ulang kueri, pengoptimal menggunakan tampilan materialisasi untuk menulis ulang seluruh atau sebagian kueri berdasarkan pola SQL tanpa perlu melakukan komputasi pada tabel dasar. Ini meningkatkan kinerja kueri. | |||
query_body | Wajib | Dapat diubah setelah pembuatan: tidak | |
Kueri tampilan materialisasi pada tabel dasar. Tampilan materialisasi lengkap dapat dibuat berdasarkan tabel internal dan eksternal AnalyticDB for MySQL, tampilan materialisasi yang ada, dan tampilan. Tidak ada batasan yang diberlakukan pada kueri tabel dasar. Untuk informasi tentang sintaks kueri, lihat SELECT. Tampilan materialisasi cepat hanya dapat dibuat berdasarkan tabel internal dan eksternal AnalyticDB for MySQL. Kueri tabel dasar harus mematuhi aturan berikut: SELECT kolom
Batasan Lainnya
| |||
Izin yang Diperlukan
Sebelum membuat tampilan materialisasi, pastikan Anda memiliki izin berikut:
Izin CREATE pada tabel di database tempat Anda ingin membuat tampilan materialisasi.
Izin SELECT pada kolom tertentu atau semua kolom dari semua tabel dasar yang dirujuk dalam tampilan materialisasi.
Jika Anda ingin membuat tampilan materialisasi yang dapat disegarkan secara otomatis, Anda juga memerlukan izin berikut:
Izin untuk terhubung ke AnalyticDB for MySQL dari alamat IP apa pun yang dilambangkan oleh
'%'.Izin INSERT pada tampilan materialisasi atau semua tabel di database tempat tampilan materialisasi berada. Jika tidak, data di tampilan materialisasi tidak dapat disegarkan.
Contoh
Persiapan Contoh
Sebelum membuat tampilan materialisasi, jalankan pernyataan BUAT TABEL untuk membuat tabel dasar.
/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- Atur mesin tabel ke XUANWU.
CREATE TABLE customer (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(255),
is_vip Boolean
);/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- Atur mesin tabel ke XUANWU.
CREATE TABLE sales (
sale_id INT PRIMARY KEY,
product_id INT,
customer_id INT,
price DECIMAL(10, 2),
quantity INT,
sale_date TIMESTAMP
);Buat Tampilan Materialisasi yang Mendukung Penyegaran Lengkap
Buat tampilan materialisasi bernama
myview1yang disegarkan secara otomatis setiap interval 5 menit.CREATE MATERIALIZED VIEW myview1 REFRESH -- Setara dengan REFRESH COMPLETE. NEXT now() + INTERVAL 5 minute AS SELECT count(*) as cnt FROM customer;Buat tampilan materialisasi bernama
myview2yang disegarkan secara otomatis pada pukul 02:00:00 setiap hari.CREATE MATERIALIZED VIEW myview2 REFRESH COMPLETE START WITH DATE_FORMAT(now() + INTERVAL 1 day, '%Y-%m-%d 02:00:00') NEXT DATE_FORMAT(now() + INTERVAL 1 day, '%Y-%m-%d 02:00:00') AS SELECT count(*) as cnt FROM customer;Buat tampilan materialisasi bernama
myview3yang disegarkan secara otomatis pada pukul 02:00:00 setiap Senin.CREATE MATERIALIZED VIEW myview3 REFRESH COMPLETE ON DEMAND START WITH DATE_FORMAT(now() + INTERVAL 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') NEXT DATE_FORMAT(now() + INTERVAL 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') AS SELECT count(*) as cnt FROM customer;Buat tampilan materialisasi bernama
myview4yang disegarkan secara otomatis pada pukul 02:00:00 pada hari pertama setiap bulan.CREATE MATERIALIZED VIEW myview4 REFRESH -- Setara dengan REFRESH COMPLETE. NEXT DATE_FORMAT(last_day(now()) + INTERVAL 1 day, '%Y-%m-%d 02:00:00') AS SELECT count(*) as cnt FROM customer;Buat tampilan materialisasi bernama
myview5yang disegarkan secara otomatis hanya sekali.CREATE MATERIALIZED VIEW myview5 REFRESH -- Setara dengan REFRESH COMPLETE. START WITH now() + INTERVAL 1 day AS SELECT count(*) as cnt FROM customer;Buat tampilan materialisasi bernama
myview6yang tidak disegarkan secara otomatis. Anda hanya dapat menyegarkan tampilan materialisasi secara manual.CREATE MATERIALIZED VIEW myview6 ( PRIMARY KEY (customer_id) ) DISTRIBUTED BY HASH (customer_id) AS SELECT customer_id FROM customer;Segarkan tampilan materialisasi secara manual:
REFRESH MATERIALIZED VIEW myview6;Buat tampilan materialisasi bernama
myview7yang disegarkan secara otomatis saat tabel dasar ditimpa. Anda tidak perlu menentukan waktu penyegaran secara manual.CREATE MATERIALIZED VIEW myview7 REFRESH COMPLETE ON OVERWRITE AS SELECT count(*) as cnt FROM customer;
Buat Tampilan Materialisasi Satu Tabel yang Mendukung Penyegaran Cepat
Sebelum membuat tampilan materialisasi yang mendukung penyegaran cepat di kluster AnalyticDB for MySQL, Anda harus mengaktifkan fitur pencatatan biner untuk kluster dan tabel dasar.
SET ADB_CONFIG BINLOG_ENABLE=true;
ALTER TABLE customer binlog=true;
ALTER TABLE sales binlog=true;
Buat tampilan materialisasi satu tabel bernama fast_mv1 yang mendukung penyegaran cepat setiap interval 10 detik. Kueri tampilan materialisasi tidak melibatkan fungsi agregat.
CREATE MATERIALIZED VIEW fast_mv1 REFRESH FAST NEXT now() + INTERVAL 10 second AS SELECT sale_id, sale_date, price FROM sales WHERE price > 10;Buat tampilan materialisasi satu tabel bernama fast_mv2 yang mendukung penyegaran cepat setiap interval 5 detik. Kueri tampilan materialisasi melibatkan fungsi agregat dengan GROUP BY.
CREATE MATERIALIZED VIEW fast_mv2 REFRESH FAST NEXT now() + INTERVAL 5 second AS SELECT customer_id, sale_date, -- Sistem menggunakan kolom GROUP BY sebagai kunci utama tampilan materialisasi. COUNT(sale_id) AS cnt_sale_id, -- Lakukan operasi agregat pada kolom. SUM(price * quantity) AS total_revenue, -- Lakukan operasi agregat pada kolom. customer_id / 100 AS new_customer_id -- Anda dapat menggunakan ekspresi untuk mendefinisikan kolom yang tidak terlibat dalam operasi agregat. FROM sales WHERE ifnull(price, 1) > 0 -- Anda dapat menggunakan ekspresi untuk mendefinisikan kondisi WHERE. GROUP BY customer_id, sale_date;Buat tampilan materialisasi satu tabel bernama fast_mv3 yang mendukung penyegaran cepat setiap interval 1 menit. Kueri tampilan materialisasi melibatkan fungsi agregat tanpa GROUP BY.
CREATE MATERIALIZED VIEW fast_mv3 REFRESH FAST NEXT now() + INTERVAL 1 minute AS SELECT count(*) AS cnt -- Sistem menghasilkan konstanta sebagai kunci utama untuk memastikan bahwa hanya satu catatan yang terkandung dalam tampilan materialisasi. FROM sales;
Buat Tampilan Materialisasi Multi-Tabel yang Mendukung Penyegaran Cepat
Buat tampilan materialisasi multi-tabel bernama fast_mv4 yang mendukung penyegaran cepat setiap interval 5 detik. Kueri tampilan materialisasi tidak melibatkan fungsi agregat.
CREATE MATERIALIZED VIEW fast_mv4 REFRESH FAST NEXT now() + INTERVAL 5 second AS SELECT c.customer_id, c.customer_name, s.sale_id, (s.price * s.quantity) AS revenue FROM sales s JOIN customer c ON s.customer_id = c.customer_id;Buat tampilan materialisasi multi-tabel bernama fast_mv5 yang mendukung penyegaran cepat setiap interval 10 detik. Kueri tampilan materialisasi melibatkan fungsi agregat dengan klausa GROUP BY.
CREATE MATERIALIZED VIEW fast_mv5 REFRESH FAST NEXT now() + INTERVAL 10 second AS SELECT s.sale_id, c.customer_name, COUNT(*) AS cnt, SUM(s.price * s.quantity) AS revenue FROM sales s JOIN (SELECT customer_id, customer_name FROM customer) c ON c.customer_id = s.customer_id GROUP BY s.sale_id, c.customer_name;
Buat Tampilan Materialisasi Terpartisi
Buat tampilan materialisasi bernama myview8 dengan kunci distribusi dan kunci partisi.
CREATE MATERIALIZED VIEW myview8 (
quantity INT, --Tampilan materialisasi mencakup semua kolom dari hasil kueri meskipun tidak ada kolom yang ditampilkan secara eksplisit.
price DECIMAL(10, 2),
sale_date TIMESTAMP
)
DISTRIBUTED BY HASH(sale_id)
PARTITION BY VALUE(date_format(sale_date, "%Y%m%d")) LIFECYCLE 30
AS
SELECT * FROM sales;Buat Tampilan Materialisasi dengan Kunci Utama, Kunci Distribusi, atau Indeks
Buat tampilan materialisasi bernama
myview9untuk mana kolomcustomer_namediindeks.CREATE MATERIALIZED VIEW myview9 ( INDEX (sale_date), PRIMARY KEY (sale_id) ) DISTRIBUTED BY HASH (sale_id) REFRESH NEXT now() + INTERVAL 1 DAY AS SELECT * FROM sales;Buat tampilan materialisasi bernama
myview10untuk mana kunci utama, kunci distribusi, indeks terkluster, indeks berbasis kolom, dan komentar ditentukan.CREATE MATERIALIZED VIEW myview10 ( quantity INT, --Tampilan materialisasi mencakup semua kolom dari hasil kueri meskipun tidak ada kolom yang ditampilkan secara eksplisit. price DECIMAL(10, 2), KEY INDEX_ID(customer_id) COMMENT 'customer', CLUSTERED KEY INDEX(sale_id), PRIMARY KEY(sale_id,sale_date) ) DISTRIBUTED BY HASH(sale_id) COMMENT 'TAMPILAN MATERIALISASI c' AS SELECT * FROM sales;
Buat Tampilan Materialisasi Elastis
Buat tampilan materialisasi elastis bernama
myview11yang disegarkan secara otomatis sekali sehari menggunakan sumber daya grup sumber daya pekerjaan bernama serverless.CREATE MATERIALIZED VIEW myview11 MV_PROPERTIES='{ "mv_resource_group":"serverless" }' REFRESH COMPLETE ON DEMAND START WITH now() NEXT now() + INTERVAL 1 DAY AS SELECT * FROM sales;Buat tampilan materialisasi elastis bernama
myview12yang disegarkan secara otomatis sekali sehari menggunakan hingga 12 unit komputasi AnalyticDB (ACUs) sumber daya dalam grup sumber daya pekerjaan bernama serverless.CREATE MATERIALIZED VIEW myview12 MV_PROPERTIES='{ "mv_resource_group":"serverless", "mv_refresh_hints":{"elastic_job_max_acu":"12"} }' REFRESH COMPLETE ON DEMAND START WITH now() NEXT now() + INTERVAL 1 DAY AS SELECT * FROM sales;
Referensi
Tampilan Materialisasi: menjelaskan skenario yang berlaku dan pembaruan fitur tampilan materialisasi.
Buat Tampilan Materialisasi: menjelaskan cara membuat tampilan materialisasi dan kesalahan umum serta pemecahan masalah.
Segarkan Tampilan Materialisasi: menjelaskan cara mengonfigurasi penyegaran lengkap atau cepat untuk tampilan materialisasi.
Kelola Tampilan Materialisasi: menjelaskan cara menanyakan definisi tampilan materialisasi, menanyakan semua tampilan materialisasi, dan menghapus tampilan materialisasi.