Tampilan materialized adalah objek database yang menyimpan hasil prakalkulasi dari kueri kompleks seperti JOIN dan AGGREGATE. Hasil ini dapat digunakan langsung saat menjalankan kueri serupa, mempercepat proses kueri.
Informasi latar belakang
Tampilan adalah kueri tersimpan yang dapat diakses sebagai tabel virtual. Setiap kali Anda mengkueri sebuah tampilan, pernyataan kueri dikonversi menjadi Pernyataan SQL yang mendefinisikan tampilan tersebut. Tampilan materialized adalah tabel fisik khusus yang menggunakan sumber daya penyimpanan untuk menyimpan data nyata. Untuk informasi lebih lanjut tentang aturan penagihan tampilan materialized, lihat bagian Aturan Penagihan dalam topik ini.
Tampilan materialized cocok untuk kueri berikut:
Kueri dengan mode tetap yang sering dieksekusi.
Kueri yang melibatkan operasi kompleks seperti JOIN atau AGGREGATE.
Kueri yang hanya melibatkan sebagian kecil data dalam tabel.
Tabel berikut membandingkan kueri tradisional dengan kueri berdasarkan tampilan materialized.
Item Perbandingan | Kueri Tradisional | Kueri Berdasarkan Tampilan Materialized |
Pernyataan Kueri | Pernyataan SQL digunakan untuk mengkueri data. | Data dikueri berdasarkan tampilan materialized yang Anda buat. Pernyataan yang digunakan untuk membuat tampilan materialized: Pernyataan yang digunakan untuk mengkueri data berdasarkan tampilan materialized yang Anda buat: Jika fitur penulisan ulang kueri diaktifkan untuk tampilan materialized, data langsung diperoleh dari hasil kueri yang terkandung dalam tampilan materialized saat Anda mengeksekusi pernyataan SQL pertama dalam kode berikut: |
Karakteristik Kueri | Kueri melibatkan pembacaan tabel, JOIN, dan operasi filter (klausa WHERE). Jika tabel sumber berisi banyak data, kecepatan kueri lambat. Operasi kueri kompleks dan efisiensi kueri rendah. | Kueri melibatkan pembacaan tabel dan operasi filter. Operasi JOIN tidak dilibatkan. MaxCompute secara otomatis mencocokkan tampilan materialized optimal dan membaca data dari tampilan materialized optimal. Ini sangat meningkatkan efisiensi kueri. |
Operasi
Operasi | Deskripsi | Pengguna Berwenang | Platform Operasi |
Buat tampilan materialized yang mendukung pengelompokan atau partisi | Membuat tampilan materialized berdasarkan pernyataan kueri. | Pengguna dengan izin CreateTable pada proyek. | Operasi ini dapat dilakukan menggunakan platform berikut: |
Memperbarui tampilan materialized yang ada. | Pengguna dengan izin Alter pada tabel. | ||
Mengubah siklus hidup tampilan materialized yang ada. | Pengguna dengan izin Alter pada tabel. | ||
Aktifkan atau nonaktifkan fitur siklus hidup untuk tampilan materialized yang ada | Mengaktifkan atau menonaktifkan fitur siklus hidup untuk tampilan materialized yang ada. | Pengguna dengan izin Alter pada tabel. | |
Mengkueri informasi dasar tentang tampilan materialized. | Pengguna dengan izin Describe pada metadata tabel. | ||
Mengkueri status tampilan materialized. | Pengguna dengan izin Describe pada metadata tabel. | ||
Menampilkan daftar semua tampilan materialized dalam proyek, atau yang memenuhi aturan tertentu. | Pengguna dengan izin List untuk melihat daftar objek dalam proyek. | ||
Menghapus tampilan materialized yang ada. | Pengguna dengan izin Drop pada tabel. | ||
Menghapus partisi dari tampilan materialized yang ada. | Pengguna dengan izin Drop pada tabel. | ||
Mengkueri data dari tabel partisi sumber jika data partisi yang ingin dikueri tidak terkandung dalam tampilan materialized. | Pengguna dengan izin Write dan CreateTable pada proyek. | ||
Tulis ulang kueri umum menjadi kueri dari tampilan materialized | Menulis ulang kueri umum menjadi kueri dari tampilan materialized. | Pengguna dengan izin Write dan CreateTable pada proyek. | |
Lakukan pembaruan terjadwal pada tampilan materialized yang ada | Melakukan pembaruan terjadwal pada data tampilan materialized yang ada. | Pengguna dengan izin Alter pada tabel. |
Batasan
Fungsi jendela, fungsi tabel bernilai pengguna (UDTF), dan fungsi non-deterministik seperti fungsi skalar yang ditentukan pengguna (UDF) dan fungsi agregat yang ditentukan pengguna (UDAF) tidak didukung.
Jika Anda harus menggunakan fungsi non-deterministik, jalankan perintah set odps.sql.materialized.view.support.nondeterministic.function=true; pada tingkat sesi.
Buat tampilan materialized yang mendukung pengelompokan atau partisi
Anda dapat membuat tampilan materialized yang mendukung pengelompokan atau partisi berdasarkan data untuk skenario tampilan materialized.
Batasan
Nama tampilan materialized yang ingin dibuat tidak boleh sama dengan nama tabel, tampilan, atau tampilan materialized yang ada di proyek saat ini. Anda dapat menjalankan perintah
SHOW TABLES;untuk melihat nama semua tabel dan tampilan materialized dalam proyek.Anda tidak dapat membuat tampilan materialized berdasarkan tampilan materialized yang sudah ada.
Anda tidak dapat membuat tampilan materialized berdasarkan tabel eksternal.
Perhatian
Jika pernyataan kueri yang digunakan untuk membuat tampilan materialized gagal dieksekusi, Anda tidak dapat membuat tampilan materialized.
Kolom kunci partisi dalam tampilan materialized harus berasal dari tabel sumber. Urutan dan jumlah kolom dalam tampilan materialized harus sama dengan urutan dan jumlah kolom dalam tabel sumber. Nama kolom bisa berbeda.
Anda harus menentukan komentar untuk semua kolom, termasuk kolom kunci partisi. Jika Anda hanya menentukan komentar untuk beberapa kolom, kesalahan akan dikembalikan.
Anda dapat menentukan atribut partisi dan pengelompokan untuk tampilan materialized. Dalam hal ini, data di setiap partisi memiliki atribut pengelompokan yang ditentukan.
Jika pernyataan kueri yang digunakan untuk membuat tampilan materialized berisi operator yang tidak didukung oleh tampilan materialized, kesalahan akan dikembalikan. Untuk informasi lebih lanjut tentang operator yang didukung oleh tampilan materialized, lihat Kueri dan tulis ulang untuk tampilan materialized.
Secara default, MaxCompute tidak mengizinkan pembuatan tampilan materialized menggunakan fungsi non-deterministik seperti UDF atau UDAF. Jika Anda harus menggunakan fungsi non-deterministik, jalankan perintah
set odps.sql.materialized.view.support.nondeterministic.function=true;pada tingkat sesi.Jika tabel sumber tampilan materialized berisi partisi kosong, Anda dapat menyegarkan tampilan materialized untuk menghasilkan partisi kosong dalam tampilan materialized.
Sintaksis
CREATE MATERIALIZED VIEW [IF NOT EXISTS][project_name.]<mv_name> [LIFECYCLE <days>] -- Siklus hidup tampilan materialized. [BUILD DEFERRED] -- Menentukan bahwa hanya skema yang dibuat dan data tidak diperbarui saat Anda membuat tampilan materialized. [(<col_name> [COMMENT <col_comment>],...)] -- Komentar kolom. [DISABLE REWRITE] -- Menentukan apakah akan menonaktifkan operasi penulisan ulang kueri yang dilakukan berdasarkan tampilan materialized. [COMMENT 'komentar tabel'] -- Komentar tampilan materialized. [PARTITIONED BY (<col_name> [, <col_name>, ...]) -- Partisi dalam tampilan materialized. Parameter ini diperlukan saat Anda membuat tampilan materialized yang dipartisi. [CLUSTERED BY|RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> BUCKETS] -- Atribut shuffle dan sort tampilan materialized. Parameter ini diperlukan saat Anda membuat tampilan materialized yang dikelompokkan. [REFRESH EVERY <num> MINUTES/HOURS/DAYS] [TBLPROPERTIES("compressionstrategy"="normal/high/extreme", -- Kebijakan kompresi untuk penyimpanan data tampilan materialized. "enable_auto_substitute"="true", -- Menentukan apakah akan mengkueri data dari tabel partisi sumber jika data partisi yang ingin Anda kueri tidak terkandung dalam tampilan materialized. "enable_auto_refresh"="true", -- Menentukan apakah akan mengaktifkan fitur pembaruan terjadwal. "refresh_interval_minutes"="120", -- Interval pembaruan. "only_refresh_max_pt"="true" -- Menentukan apakah akan memperbarui data partisi terbaru di tabel sumber ke tampilan materialized. )] AS <select_statement>;Tabel berikut menjelaskan parameter dalam kode.
Parameter
Diperlukan
Deskripsi
IF NOT EXISTS
Tidak
Jika Anda tidak menentukan IF NOT EXISTS dan tampilan materialized sudah ada, kesalahan akan dikembalikan.
project_name
Tidak
Nama proyek MaxCompute tempat tampilan materialized berada. Jika Anda tidak mengonfigurasi parameter ini, proyek MaxCompute saat ini digunakan. Untuk melihat nama proyek MaxCompute, lakukan langkah-langkah berikut: Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah. Lihat nama proyek MaxCompute di halaman Workspace > Projects.
mv_name
Ya
Nama tampilan materialized yang ingin Anda buat.
days
Tidak
Siklus hidup tampilan materialized yang ingin Anda buat. Satuan: hari. Nilai valid: 1 hingga 37231.
BUILD DEFERRED
Tidak
Jika kata kunci ini ditambahkan, hanya skema yang dibuat dan data tidak diperbarui saat Anda membuat tampilan materialized.
col_name
Tidak
Nama kolom dalam tampilan materialized yang ingin Anda buat.
col_comment
Tidak
Komentar pada kolom dalam tampilan materialized yang ingin Anda buat.
DISABLE REWRITE
Tidak
Menentukan apakah akan menonaktifkan operasi penulisan ulang kueri yang dilakukan berdasarkan tampilan materialized ini. Jika Anda tidak mengonfigurasi parameter ini, operasi penulisan ulang kueri berdasarkan tampilan materialized ini diizinkan. Dalam hal ini, Anda dapat mengeksekusi pernyataan
ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE;untuk menonaktifkan operasi penulisan ulang kueri yang dilakukan berdasarkan tampilan materialized. Anda juga dapat mengeksekusi pernyataanALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE;untuk mengaktifkan operasi penulisan ulang kueri yang dilakukan berdasarkan tampilan materialized.PARTITIONED BY
Tidak
Kolom kunci partisi dalam tampilan materializedyang ingin Anda buat. Jika Anda ingin membuat tampilan materialized yang dipartisi, Anda harus mengonfigurasi parameter ini.
CLUSTERED BY|RANGE CLUSTERED BY
Tidak
Atribut shuffle dari tampilan materialized yang ingin Anda buat. Jika Anda ingin membuat tampilan materialized yang dikelompokkan, Anda harus menentukan parameter clustered by atau range clustered by.
SORTED BY
Tidak
Atribut sort dari tampilan materialized yang ingin Anda buat. Jika Anda ingin membuat tampilan materialized yang dikelompokkan, Anda harus mengonfigurasi parameter ini.
REFRESH EVERY
Tidak
Konfigurasikan interval pembaruan terjadwal untuk tampilan materialized. Unit yang tersedia adalah menit, jam, atau hari.
number_of_buckets
Tidak
Jumlah bucket dalam tampilan materialized yang ingin Anda buat. Jika Anda ingin membuat tampilan materialized yang dikelompokkan, Anda harus menentukan parameter ini.
TBLPROPERTIES
Tidak
compressionstrategy menentukan kebijakan kompresi untuk penyimpanan data tampilan materialized yang ingin Anda buat. Nilai valid: normal, high, dan extreme. enable_auto_substitute menentukan apakah akan secara otomatis mengkueri data dari tabel sumber jika tampilan materialized tidak berisi partisi yang ingin Anda kueri. Untuk informasi lebih lanjut, lihat Kueri dan tulis ulang untuk tampilan materialized.
enable_auto_refresh: opsional. Setel parameter ini ke
truejika Anda ingin sistem memperbarui data secara otomatis.refresh_interval_minutes: kondisional opsional. Jika
enable_auto_refreshdisetel ketrue, Anda perlu mengonfigurasi parameter ini. Satuan: menit.only_refresh_max_pt: opsional. Parameter ini valid untuk tampilan materialized yang dipartisi. Jika parameter ini disetel ke
true, data partisi terbaru di tabel sumber diperbarui ke tampilan materialized.
select_statement
Ya
Pernyataan SELECT. Untuk informasi lebih lanjut tentang sintaksis pernyataan SELECT, lihat Sintaksis SELECT.
Contoh
Contoh 1: Buat tampilan materialized.
Buat tabel bernama
mf_tdanmf_t1serta masukkan data ke dalam tabel.CREATE TABLE IF NOT EXISTS mf_t( id bigint, value bigint, name string) PARTITIONED BY (ds STRING); ALTER TABLE mf_t ADD PARTITION (ds='1'); INSERT INTO mf_t PARTITION (ds='1') VALUES (1,10,'kyle'),(2,20,'xia'); SELECT * FROM mf_t WHERE ds ='1'; -- Hasil berikut dikembalikan: +------------+------------+------------+------------+ | id | value | name | ds | +------------+------------+------------+------------+ | 1 | 10 | kyle | 1 | | 2 | 20 | xia | 1 | +------------+------------+------------+------------+ CREATE TABLE IF NOT EXISTS mf_t1( id bigint, value bigint, name string) PARTITIONED BY (ds STRING); ALTER TABLE mf_t1 ADD PARTITION (ds='1'); INSERT INTO mf_t1 PARTITION (ds='1') VALUES (1,10,'kyle'),(3,20,'john'); SELECT * FROM mf_t1 WHERE ds ='1'; -- Hasil berikut dikembalikan: +------------+------------+------------+------------+ | id | value | name | ds | +------------+------------+------------+------------+ | 1 | 10 | kyle | 1 | | 3 | 20 | john | 1 | +------------+------------+------------+------------+Buat tampilan materialized.
Contoh 1: Buat tampilan materialized yang berisi kolom kunci partisi bernama ds.
CREATE MATERIALIZED VIEW mf_mv LIFECYCLE 7 ( key comment 'unique id', value comment 'input value', ds comment 'partitiion' ) PARTITIONED BY (ds) AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1'; -- Kueri data dari tampilan materialized yang dibuat. SELECT * FROM mf_mv WHERE ds =1; +------------+------------+------------+ | key | value | ds | +------------+------------+------------+ | 1 | 10 | 1 | +------------+------------+------------+Contoh 2: Buat tampilan materialized non-partisi yang dikelompokkan.
CREATE MATERIALIZED VIEW mf_mv2 LIFECYCLE 7 CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1';Contoh 3: Buat tampilan materialized yang dipartisi dan dikelompokkan.
CREATE MATERIALIZED VIEW mf_mv3 LIFECYCLE 7 PARTITIONED BY (ds) CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1';
Contoh 2: Perbarui tampilan materialized yang tabel sumbernya berisi partisi kosong. Partisi kosong dihasilkan dalam tampilan materialized.
CREATE TABLE mf_blank_pts(id bigint ,name string) PARTITIONED BY (ds bigint); ALTER TABLE mf_blank_pts ADD PARTITION (ds = 1); ALTER TABLE mf_blank_pts ADD PARTITION (ds = 2); INSERT INTO TABLE mf_blank_pts PARTITION(ds=1) VALUES (1,"aba"),(2,"cbd"); CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_blank_pts PARTITIONED BY (ds) AS SELECT id,name,ds FROM mf_blank_pts; ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>0); SHOW PARTITIONS mf_mv_blank_pts; -- Partisi ds=2 di tabel sumber tidak berisi data apa pun. Setelah Anda mengeksekusi pernyataan ALTER yang berisi ekspresi ds>0, partisi kosong dihasilkan dalam tampilan materialized. ds=1 ds=2 SELECT * FROM mf_mv_blank_pts WHERE ds>0; -- Hasil yang dikembalikan menunjukkan bahwa hanya partisi ds=1 yang memiliki data. +------------+------------+------------+ | id | name | ds | +------------+------------+------------+ | 1 | aba | 1 | | 2 | cbd | 1 | +------------+------------+------------+
Perbarui tampilan materialized
Jika Anda melakukan operasi seperti insert, overwrite, update, dan delete pada tabel atau partisi yang sesuai dengan tampilan materialized, tampilan materialized menjadi tidak valid dan tidak dapat digunakan untuk operasi penulisan ulang kueri. Anda dapat memeriksa status tampilan materialized. Jika tampilan materialized tidak valid, Anda harus memperbaruinya. Untuk informasi lebih lanjut tentang cara mengkueri status tampilan materialized, lihat Kueri Informasi tentang Tampilan Materialized.
Perhatian
Data dalam tampilan materialized atau partisi dalam tampilan materialized hanya diperbarui ketika data dalam tabel sumber atau partisi dalam tabel sumber berubah.
Anda dapat mengaktifkan fitur pembaruan terjadwal untuk tampilan materialized guna memperbarui data secara berkala. Lihat Pembaruan Terjadwal Tampilan Materialized.
Sintaksis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> REBUILD [PARTITION (<ds>=max_pt(<table_name>),<expression1>...)];Tabel berikut menjelaskan parameter dalam kode.
Parameter
Diperlukan
Deskripsi
project_name
Tidak
Nama proyek MaxCompute tempat tampilan materialized berada. Jika Anda tidak mengonfigurasi parameter ini, proyek MaxCompute saat ini digunakan. Untuk melihat nama proyek MaxCompute, lakukan langkah-langkah berikut: Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah. Lihat nama proyek MaxCompute di halaman Workspace > Projects.
mv_name
Ya
Nama tampilan materialized yang ingin Anda perbarui.
ds
Tidak
Nama bidang partisi dalam tampilan materialized.
max_pt
Tidak
Nilai partisi maksimum dari tabel atau tampilan materialized yang ditentukan oleh table_name.
expression
Tidak
Ekspresi yang digunakan untuk menentukan partisi yang ingin Anda perbarui. Jika Anda ingin memperbarui tampilan materialized yang dipartisi, Anda harus mengonfigurasi parameter ini.
Contoh
Contoh 1: Perbarui tampilan materialized non-partisi.
-- Buat tabel non-partisi. CREATE TABLE count_test(a BIGINT, b BIGINT); -- Buat tampilan materialized non-partisi. CREATE MATERIALIZED VIEW count_mv LIFECYCLE 7 AS SELECT COUNT(*) FROM count_test; -- Perbarui tampilan materialized non-partisi. ALTER MATERIALIZED VIEW count_mv rebuild;Contoh 2: Perbarui partisi dari tampilan materialized yang dipartisi.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1');Contoh 3: Perbarui partisi dari tampilan materialized yang dipartisi. Partisi memenuhi kondisi tertentu.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2');Contoh 4: Perbarui data partisi terbaru ke tampilan materialized yang dipartisi.
-- Buat tabel yang dipartisi. CREATE TABLE IF NOT EXISTS sale_detail_jt (shop_name STRING , customer_id STRING , total_price DOUBLE ) PARTITIONED BY (sale_date STRING ,region STRING ); ALTER TABLE sale_detail_jt ADD PARTITION (sale_date='2013',region='china'); INSERT INTO sale_detail_jt PARTITION (sale_date='2013',region='china') VALUES ('s1','c1',100.1), ('s2','c2',100.2), ('s3','c3',100.3); ALTER TABLE sale_detail_jt ADD PARTITION (sale_date='2013',region='en'); INSERT INTO sale_detail_jt PARTITION (sale_date='2013',region='en') VALUES ('t1','c5',200.0), ('t2','c6',300.0); -- Lihat data partisi. SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='china'; +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s5 | c2 | 100.2 | 2013 | china | +-----------+-------------+-------------+-----------+--------+ -- Lihat data partisi. SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='en'; +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | t1 | c5 | 200.0 | 2013 | en | | t2 | c6 | 300.0 | 2013 | en | +-----------+-------------+-------------+-----------+--------+ -- Buat tampilan materialized. CREATE MATERIALIZED VIEW mv_deferred BUILD DEFERRED AS SELECT * FROM sale_detail_jt; -- Kueri data dari tampilan materialized mv_deferred. SELECT * FROM mv_deferred; -- Hasil berikut dikembalikan: +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+ -- Buat tabel yang dipartisi. CREATE TABLE mf_part (id bigint,name string) PARTITIONED BY (dt string); -- Masukkan data ke dalam tabel. INSERT INTO mf_part PARTITION(dt='2013') VALUES(1,'name1'),(2,'name2'); -- Kueri data dari tabel. SELECT * FROM mf_part WHERE dt='2013'; -- Hasil berikut dikembalikan: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+ -- Buat tampilan materialized yang dipartisi. CREATE MATERIALIZED VIEW mv_rebuild BUILD DEFERRED PARTITIONED ON (dt) AS SELECT * FROM mf_part; -- Kueri data dari tampilan materialized. SELECT * FROM mv_rebuild WHERE dt='2013'; -- Hasil berikut dikembalikan: +------------+------+----+ | id | name | dt | +------------+------+----+ +------------+------+----+ -- Perbarui data partisi terbaru ke tampilan materialized. ALTER MATERIALIZED VIEW mv_rebuild REBUILD PARTITION(dt=max_pt('mf_part')); -- Kueri data dari tampilan materialized. SELECT * FROM mv_rebuild WHERE dt='2013'; -- Hasil berikut dikembalikan: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+
Ubah siklus hidup tampilan materialized yang ada
Anda dapat mengubah siklus hidup tampilan materialized yang ada.
Sintaksis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> SET LIFECYCLE <days>;Tabel berikut menjelaskan parameter dalam kode.
Parameter
Diperlukan
Deskripsi
project_name
Tidak
Nama proyek MaxCompute tempat tampilan materialized berada. Jika Anda tidak mengonfigurasi parameter ini, proyek MaxCompute saat ini digunakan. Untuk melihat nama proyek MaxCompute, lakukan langkah-langkah berikut: Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah. Lihat nama proyek MaxCompute di halaman Workspace > Projects.
mv_name
Ya
Nama tampilan materialized yang ingin Anda perbarui.
days
Ya
Siklus hidup baru tampilan materialized. Satuan: hari.
Contoh
-- Ubah siklus hidup tampilan materialized yang ada menjadi 10 hari. ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;
Aktifkan atau nonaktifkan fitur siklus hidup untuk tampilan materialized yang ada
Anda dapat mengaktifkan atau menonaktifkan fitur siklus hidup untuk tampilan materialized yang ada.
Sintaksis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> [<pt_spec>] enable|disable LIFECYCLE;Tabel berikut menjelaskan parameter dalam kode.
Parameter
Diperlukan
Deskripsi
project_name
Tidak
Nama proyek MaxCompute tempat tampilan materialized berada. Jika Anda tidak mengonfigurasi parameter ini, proyek MaxCompute saat ini digunakan. Untuk melihat nama proyek MaxCompute, lakukan langkah-langkah berikut: Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah. Lihat nama proyek MaxCompute di halaman Workspace > Projects.
mv_name
Ya
Nama tampilan materialized yang ingin Anda aktifkan atau nonaktifkan fitur siklus hidupnya.
pt_spec
Tidak
Informasi partisi tampilan materialized yang ingin Anda aktifkan atau nonaktifkan fitur siklus hidupnya. Format:
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama bidang partisi. partition_col_value menunjukkan nilai partisi.enable|disable
Ya
Opsi
enablemenentukan bahwa fitur siklus hidup diaktifkan untuk tampilan materialized atau partisi dari tampilan materialized. Opsidisablemenentukan bahwa fitur siklus hidup dinonaktifkan untuk tampilan materialized atau partisi dari tampilan materialized. Jika Anda menonaktifkan fitur siklus hidup, manajemen siklus hidup tidak diperlukan untuk tampilan materialized atau partisi.Contoh
Contoh 1: Aktifkan fitur siklus hidup untuk tampilan materialized.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') enable LIFECYCLE;Contoh 2: Nonaktifkan fitur siklus hidup untuk tampilan materialized.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') disable LIFECYCLE;
Kueri informasi tentang tampilan materialized
Anda dapat mengkueri informasi tentang tampilan materialized, termasuk skema dan waktu modifikasi tampilan materialized.
Sintaksis
DESC EXTENDED [<project_name>.]<mv_name>;Tabel berikut menjelaskan parameter dalam kode.
Parameter
Diperlukan
Deskripsi
project_name
Tidak
Nama proyek MaxCompute tempat tampilan materialized berada. Jika Anda tidak mengonfigurasi parameter ini, proyek MaxCompute saat ini digunakan. Untuk melihat nama proyek MaxCompute, lakukan langkah-langkah berikut: Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah. Lihat nama proyek MaxCompute di halaman Workspace > Projects.
mv_name
Ya
Nama tampilan materialized yang ingin Anda kueri.
Contoh
DESC EXTENDED mv;Kode berikut menunjukkan hasil kueri sampel:
CatatanHasil sampel berikut hanya dapat dikembalikan jika versi klien MaxCompute adalah V0.43 atau lebih baru. Untuk informasi lebih lanjut, lihat bagian "Pembaruan Versi" di Klien MaxCompute (odpscmd).
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$$****@***.aliyunid.com | | Project: m**** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-05-30 13:16:07 | | LastDDLTime: 2023-05-30 13:16:07 | | LastModifiedTime: 2023-05-30 13:16:07 | +------------------------------------------------------------------------------------+ | MaterializedView: YES | | ViewText: select id,name from mf_refresh | | Rewrite Enabled: true | | AutoRefresh Enabled: true | | Refresh Interval Minutes: 10 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | bigint | | | true | NULL | | | name | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | IsOutdated: false | | TableID: 569ec712873e44b3868e79b7a8beabab | | IsArchived: false | | PhysicalSize: 1875 | | FileNum: 2 | | StoredAs: CFile | | CompressionStrategy: normal | | odps.timemachine.retention.days: 1 | | ColdStorageStatus: N/A | | encryption_enable: false | +------------------------------------------------------------------------------------+ | AutoRefresh History: | +------------------------------------------------------------------------------------+ | InstanceId | Status | StartTime | EndTime | +------------------------------------------------------------------------------------+ | 20230619070546735ghwl1****** | TERMINATED | 2023-06-19 15:05:46 | 2023-06-19 15:05:47 | | 20230619065545586gwllc****** | TERMINATED | 2023-06-19 14:55:45 | 2023-06-19 14:55:46 | | 20230619064544463gcjgom****** | TERMINATED | 2023-06-19 14:45:44 | 2023-06-19 14:45:45 | | 20230619063543334gzxs2d****** | TERMINATED | 2023-06-19 14:35:43 | 2023-06-19 14:35:44 | | 2023061906254257gi21w2****** | TERMINATED | 2023-06-19 14:25:42 | 2023-06-19 14:25:43 | | 20230619061540813giacg8****** | TERMINATED | 2023-06-19 14:15:41 | 2023-06-19 14:15:41 | | 20230619060539674gswjq9****** | TERMINATED | 2023-06-19 14:05:39 | 2023-06-19 14:05:40 | | 20230619055538578gvdjk****** | TERMINATED | 2023-06-19 13:55:38 | 2023-06-19 13:55:40 | | 20230619054537356glqdne****** | TERMINATED | 2023-06-19 13:45:37 | 2023-06-19 13:45:38 | | 2023061905353687gcc5pl****** | TERMINATED | 2023-06-19 13:35:36 | 2023-06-19 13:35:37 | +------------------------------------------------------------------------------------+
Kueri status tampilan materialized
Anda dapat mengkueri status tampilan materialized. Operasi ini memungkinkan Anda melihat perubahan pada tabel sumber dan menentukan apakah tampilan materialized valid. Tampilan materialized dapat berada dalam salah satu dari status berikut:
Valid
Saat Anda mengeksekusi pernyataan kueri, MaxCompute mengkueri data dari tampilan materialized alih-alih mengkueri data dari tabel sumber.
Tidak Valid
Saat Anda mengeksekusi pernyataan kueri, MaxCompute tidak dapat langsung mengkueri data dari tampilan materialized. Dalam hal ini, MaxCompute mengkueri data dari tabel sumber. Akibatnya, kecepatan kueri tidak dipercepat.
Anda dapat menggunakan fungsi untuk memeriksa apakah data dalam tampilan materialized valid.
Sintaksis
boolean materialized_view_is_valid(<mv_name>,<partition_value>);Contoh
Periksa apakah data dalam tampilan materialized mf_mv_refresh4 konsisten dengan data terbaru dalam tabel sumber. Jika data konsisten,
truedikembalikan. Jika tidak,falsedikembalikan.SELECT materialized_view_is_valid("count_mv");SELECT materialized_view_is_valid("mf_mv_blank_pts","1");
Daftar semua tampilan materialized dalam proyek
Daftarkan semua tampilan materialized dalam proyek, atau yang memenuhi aturan tertentu.
SHOW MATERIALIZED VIEWS memerlukan versi 0.43.0 klien MaxCompute (odpscmd) atau versi yang lebih baru.
Sintaksis
--Daftarkan semua tampilan materialized dalam proyek. SHOW MATERIALIZED VIEWS; --Daftarkan semua tampilan materialized dalam proyek yang namanya cocok dengan 'materialized_view'. SHOW MATERIALIZED VIEWS LIKE '<materialized_view>';Contoh
--Daftarkan semua nama tampilan materialized dalam proyek yang dimulai dengan 'test'. ('*' menunjukkan karakter apa pun setelahnya.) SHOW MATERIALIZED VIEWS LIKE 'test*';Kode berikut menunjukkan hasil sampel:
ALIYUN$account_name:test_two_mv ALIYUN$account_name:test_create_one_mv
Hapus tampilan materialized yang ada
Anda dapat menghapus tampilan materialized yang ada.
Sintaksis
DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name> [purge];Tabel berikut menjelaskan parameter dalam kode.
Parameter
Diperlukan
Deskripsi
IF EXISTS
Tidak
Jika Anda tidak menentukan IF EXISTS dan tampilan materialized tidak ada, kesalahan akan dikembalikan.
project_name
Tidak
Nama proyek MaxCompute tempat tampilan materialized berada. Jika Anda tidak mengonfigurasi parameter ini, proyek MaxCompute saat ini digunakan. Untuk melihat nama proyek MaxCompute, lakukan langkah-langkah berikut: Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah. Lihat nama proyek MaxCompute di halaman Workspace > Projects.
mv_name
Ya
Nama tampilan materialized yang ingin Anda hapus.
purge
Tidak
Jika Anda menentukan parameter
purge, data dalam tampilan materialized dihapus saat Anda menghapus tampilan materialized.Contoh
Hapus tampilan materialized
mv.DROP MATERIALIZED VIEW count_mv;Hapus tampilan materialized
mvdan hapus data dalam tampilan materialized pada saat yang sama.DROP MATERIALIZED VIEW count_mv purge;
Hapus partisi dari tampilan materialized yang ada
Anda dapat menghapus satu atau lebih partisi dari tampilan materialized yang ada.
Sintaksis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> DROP [IF EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec>, PARTITION <pt_spec>....];Tabel berikut menjelaskan parameter dalam kode.
Parameter
Diperlukan
Deskripsi
project_name
Tidak
Nama proyek MaxCompute tempat tampilan materialized berada. Jika Anda tidak mengonfigurasi parameter ini, proyek MaxCompute saat ini digunakan. Untuk melihat nama proyek MaxCompute, lakukan langkah-langkah berikut: Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah. Lihat nama proyek MaxCompute di halaman Workspace > Projects.
mv_name
Ya
Nama tampilan materialized yang dipartisi dari mana Anda ingin menghapus partisi.
IF EXISTS
Tidak
Jika Anda tidak menentukan IF EXISTS dan tampilan materialized tidak ada, kesalahan akan dikembalikan.
pt_spec
Ya
Partisi yang ingin Anda hapus. Anda harus menentukan setidaknya satu partisi. Format:
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama bidang partisi. partition_col_value menunjukkan nilai partisi.Contoh
Contoh 1: Hapus partisi dari tampilan materialized yang dipartisi. Pernyataan sampel:
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1');Contoh 2: Hapus partisi yang memenuhi kondisi tertentu dari tampilan materialized yang dipartisi. Pernyataan sampel:
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds>='1' AND ds<='2');
Lakukan kueri penetrasi pada tampilan materialized
Tampilan materialized yang dipartisi tidak berisi data semua partisi dalam tabel partisi sumber jika hanya data partisi terbaru yang diperbarui ke tampilan materialized yang dipartisi. Jika data partisi yang ingin Anda kueri tidak ada dalam tampilan materialized yang dipartisi, sistem melakukan kueri penetrasi untuk mengkueri data dari tabel partisi sumber. Gambar berikut menunjukkan cara melakukan kueri penetrasi.

Untuk mengizinkan tampilan materialized mendukung kueri penetrasi, Anda harus mengonfigurasi parameter berikut:
Saat membuat tampilan materialized, tambahkan "enable_auto_substitute"="true" ke tblproperties.
Contoh berikut menunjukkan cara melakukan kueri penetrasi berdasarkan tampilan materialized.
Buat tampilan materialized yang dipartisi yang mendukung kueri penetrasi.
-- Buat tabel bernama src. CREATE TABLE src(id bigint,name string) PARTITIONED BY (dt string); -- Masukkan data ke dalam tabel. INSERT INTO src PARTITION(dt='20210101') VALUES(1,'Alex'); INSERT INTO src PARTITION(dt='20210102') VALUES(2,'Flink'); -- Buat tampilan materialized yang dipartisi yang mendukung kueri penetrasi. CREATE MATERIALIZED VIEW IF NOT EXISTS mv LIFECYCLE 7 PARTITIONED BY (dt) tblproperties("enable_auto_substitute"="true") AS SELECT id, name, dt FROM src;Kueri data partisi 20210101 dalam tabel src dari tampilan materialized mv.
SELECT * FROM mv WHERE dt='20210101';Kueri data partisi 20210102 dalam tabel src dari tampilan materialized mv. Tampilan materialized mv tidak berisi data partisi tersebut. Oleh karena itu, kueri penetrasi dilakukan untuk mengkueri data partisi dari tabel src.
SELECT * FROM mv WHERE dt = '20210102'; -- Pernyataan di atas setara dengan pernyataan berikut karena tampilan materialized mv tidak berisi data partisi 20210102 dan data partisi perlu dikueri dari tabel src. SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20210102') t;Kueri data partisi 20201230 hingga 20210102 dari tampilan materialized mv. Tampilan materialized mv tidak berisi semua data partisi. Oleh karena itu, kueri penetrasi dilakukan untuk mendapatkan data yang tidak terkandung dalam tampilan materialized mv, dan operasi UNION dilakukan pada data yang diperoleh dan data yang dikueri dari tampilan materialized mv untuk mengembalikan hasil akhir.
SELECT * FROM mv WHERE dt >= '20201230' AND dt<='20210102' AND id='5'; -- Tampilan materialized mv tidak berisi data partisi 20210102 dan kueri penetrasi dilakukan untuk mengkueri data partisi 20210102 dari tabel sumber. Pernyataan di atas setara dengan pernyataan berikut: SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20211231' OR dt='20210102' UNION ALL SELECT * FROM mv WHERE dt='20210101' ) t WHERE id = '5';
Aturan penagihan
Saat menggunakan tampilan materialized, Anda dikenakan biaya untuk item berikut:
Penyimpanan
Tampilan materialized menggunakan penyimpanan fisik. Anda dikenakan biaya untuk penyimpanan fisik yang digunakan oleh tampilan materialized. Untuk informasi lebih lanjut tentang harga penyimpanan, lihat Harga Penyimpanan (bayar sesuai pemakaian).
Komputasi
Data dikueri saat Anda membuat, memperbarui, dan mengkueri tampilan materialized, serta menulis ulang kueri (jika tampilan materialized valid). Operasi ini mengonsumsi sumber daya komputasi dan menghasilkan biaya komputasi.
Jika proyek MaxCompute Anda menggunakan metode penagihan langganan, tidak ada biaya komputasi tambahan yang dihasilkan.
Jika proyek MaxCompute Anda menggunakan metode penagihan bayar sesuai pemakaian, biaya dihitung berdasarkan kompleksitas SQL dan jumlah data masukan. Untuk informasi lebih lanjut tentang penagihan, lihat bagian "Penagihan untuk pekerjaan SQL standar" di Harga Komputasi. Perhatikan poin-poin berikut:
Pernyataan SQL yang digunakan untuk memperbarui tampilan materialized sama dengan pernyataan SQL yang digunakan untuk membuat tampilan materialized. Jika proyek tempat tampilan materialized berada terikat pada grup sumber daya langganan, sumber daya langganan yang dibeli digunakan, dan tidak ada biaya tambahan yang dihasilkan. Jika proyek terikat pada grup sumber daya bayar sesuai pemakaian, biaya bervariasi berdasarkan jumlah data masukan dan kompleksitas pernyataan SQL. Setelah Anda memperbarui tampilan materialized, Anda dikenakan biaya penyimpanan berdasarkan ruang penyimpanan yang digunakan.
Jika tampilan materialized valid, data dibaca dari tampilan materialized saat operasi penulisan ulang kueri dilakukan. Jumlah data masukan yang dibaca dari tampilan materialized dari pernyataan kueri terkait dengan tampilan materialized dan tidak terkait dengan tabel sumber tampilan materialized. Jika tampilan materialized tidak valid, operasi penulisan ulang kueri tidak dapat dilakukan, dan data dikueri dari tabel sumber. Jumlah data masukan untuk pernyataan kueri terkait dengan tabel sumber. Untuk informasi lebih lanjut tentang cara mengkueri status tampilan materialized, lihat Kueri Status Tampilan Materialized dalam topik ini.
Pembengkakan data mungkin terjadi jika tampilan materialized dihasilkan berdasarkan asosiasi beberapa tabel. Oleh karena itu, jumlah data yang dibaca oleh tampilan materialized mungkin tidak selalu lebih sedikit daripada jumlah data dalam tabel sumber. MaxCompute tidak dapat menjamin bahwa membaca data dari tampilan materialized lebih murah daripada membaca data dari tabel sumber.
Referensi
Untuk informasi lebih lanjut tentang cara menulis ulang kueri umum menjadi kueri dari tampilan materialized, lihat Kueri dan Tulis Ulang untuk Tampilan Materialized.
Untuk informasi lebih lanjut tentang fitur pembaruan terjadwal tampilan materialized, lihat Pembaruan Terjadwal Tampilan Materialized.