Tampilan yang di-materialisasi (materialized view) melakukan pra-komputasi dan menyimpan hasil operasi yang memakan waktu, seperti JOIN dan AGGREGATE, sehingga kueri berikutnya dapat langsung membaca hasil yang tersimpan tanpa perlu menghitung ulang.
Latar Belakang
view adalah tabel virtual yang didefinisikan oleh sebuah kueri. Sebaliknya, materialized view adalah tabel fisik yang menyimpan hasil kueri yang telah dipra-hitung dan mengonsumsi sumber daya penyimpanan. Untuk detail penagihan, lihat Aturan Penagihan.
Materialized view cocok untuk skenario berikut:
Kueri yang sering dieksekusi dengan pola tetap.
Kueri yang melibatkan operasi yang memakan waktu, seperti agregasi dan penggabungan tabel (joins).
Kueri yang hanya mengakses sebagian kecil data dalam suatu tabel.
Tabel berikut membandingkan kueri tradisional dengan kueri materialized view.
Item | Kueri tradisional | Kueri Tampilan Terwujud |
Pernyataan kueri | Anda mengkueri data secara langsung menggunakan pernyataan SQL. | Buat materialized view, lalu kueri materialized view tersebut. Pernyataan berikut membuat materialized view: Kueri tampilan yang dimaterialisasi: Jika query rewrite diaktifkan untuk materialized view, sistem secara otomatis menggunakan materialized view saat Anda menjalankan kueri berikut: |
Karakteristik kueri | Kueri membaca tabel, melakukan join, dan menerapkan filter (klausa WHERE). Untuk tabel sumber yang besar, operasi ini lambat dan intensif sumber daya. | Kueri membaca materialized view dan menerapkan filter. Tidak diperlukan join. MaxCompute secara otomatis mencocokkan kueri dengan materialized view optimal dan membaca data langsung darinya, yang secara signifikan meningkatkan performa kueri. |
Perintah
Jenis | Deskripsi | Izin | Titik masuk |
Membuat materialized view berdasarkan pernyataan kueri. | Memerlukan izin CreateTable. | Jalankan perintah ini menggunakan alat berikut: | |
Memperbarui materialized view. | Memerlukan izin Alter. | ||
Mengubah siklus hidup materialized view. | Memerlukan izin Alter. | ||
Mengaktifkan atau menonaktifkan siklus hidup materialized view. | Memerlukan izin Alter. | ||
Mengkueri informasi dasar tentang materialized view. | Memerlukan izin Describe. | ||
Memeriksa apakah materialized view valid atau tidak valid. | Memerlukan izin Describe. | ||
Menampilkan semua materialized view dalam proyek, atau materialized view yang sesuai dengan kriteria tertentu. | Memerlukan izin List. | ||
Menghapus materialized view. | Memerlukan izin Drop. | ||
Menghapus partisi dari materialized view. | Memerlukan izin Drop. | ||
Otomatis mengambil data dari tabel partisi sumber jika data yang dikueri tidak ada di materialized view. | Memerlukan izin Write dan CreateTable. | ||
Menulis ulang pernyataan kueri agar menggunakan materialized view. | Memerlukan izin Write dan CreateTable. | ||
Menjadwalkan pembaruan berkala untuk materialized view. | Memerlukan izin Alter. |
Batasan
Fungsi window, user-defined table-valued function (UDTF), dan fungsi non-deterministik seperti user-defined scalar function (UDF) serta user-defined aggregate function (UDAF) tidak didukung.
Jika Anda harus menggunakan fungsi non-deterministik, atur properti tingkat sesi berikut: set odps.sql.materialized.view.support.nondeterministic.function=true;.
Buat materialized view (partisi dan clustering)
Membuat materialized view dari hasil kueri. Anda dapat secara opsional mempartisi dan mengelompokkan (cluster) materialized view tersebut.
Batasan
Nama materialized view harus unik dalam proyek dan tidak boleh sama dengan tabel, view, atau materialized view yang sudah ada. Anda dapat menjalankan perintah
SHOW TABLES;untuk melihat nama semua tabel dan materialized view dalam proyek.Anda tidak dapat membuat materialized view berdasarkan materialized view yang sudah ada.
Anda tidak dapat membuat materialized view berdasarkan tabel eksternal.
Catatan penggunaan
Jika kueri pendefinisian gagal, pembuatan materialized view juga gagal.
Kolom kunci partisi materialized view harus berasal dari tabel sumber. Urutan dan jumlah kolom kunci partisi harus sesuai dengan tabel sumber, tetapi nama kolomnya boleh berbeda.
Jika Anda menentukan komentar hanya untuk sebagian kolom, operasi akan mengembalikan error.
Anda dapat menentukan partisi dan clustering sekaligus. Dalam kasus ini, data dalam setiap partisi memiliki properti clustering yang ditentukan.
Jika kueri pendefinisian berisi operator yang tidak didukung, operasi akan mengembalikan error. Untuk daftar operator yang didukung, lihat Penulisan ulang kueri materialized view.
Secara default, MaxCompute tidak mendukung pembuatan materialized view menggunakan fungsi non-deterministik, seperti user-defined function (UDF) dan user-defined aggregate function (UDAF). Jika kasus penggunaan Anda memerlukan fungsi non-deterministik, jalankan perintah
set odps.sql.materialized.view.support.nondeterministic.function=true;pada tingkat sesi.Materialized view mendukung partisi kosong. Saat partisi tabel sumber kosong, penyegaran materialized view secara otomatis membuat partisi kosong yang sesuai.
Sintaks
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]<mv_name> [LIFECYCLE <days>] --Menentukan siklus hidup. [BUILD DEFERRED] --Membuat skema tanpa mengisi data. [(<col_name> [COMMENT <col_comment>], ...)] --Komentar kolom. [DISABLE REWRITE] --Menentukan apakah materialized view dapat digunakan untuk query rewrite. [COMMENT 'table comment'] --Komentar tabel. [PARTITIONED BY (<col_name> [, <col_name>, ...])] --Membuat materialized view sebagai tabel partisi. [CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> BUCKETS] --Menetapkan properti shuffle dan sort untuk tabel terkluster. [REFRESH EVERY <num> {MINUTES | HOURS | DAYS}] [TBLPROPERTIES("compressionstrategy"="{normal|high|extreme}", --Menentukan strategi kompresi penyimpanan data untuk tabel. "enable_auto_substitute"="true", --Menentukan apakah akan mengaktifkan penembusan kueri ke tabel sumber saat partisi tidak ada. "enable_auto_refresh"="true", --Menentukan apakah akan mengaktifkan penyegaran otomatis. "refresh_interval_minutes"="120", --Menentukan interval penyegaran. "only_refresh_max_pt"="true" --Untuk materialized view partisi, hanya menyegarkan partisi terbaru dari tabel sumber. )] AS <select_statement>;Parameter
Parameter
Wajib
Deskripsi
IF NOT EXISTS
Tidak
Jika Anda tidak menentukan IF NOT EXISTS dan materialized view sudah ada, operasi akan gagal dengan error.
project_name
Tidak
Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.
Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Lihat nama proyek Anda.
mv_name
Ya
Nama materialized view.
days
Tidak
Siklus hidup materialized view dalam hari. Nilainya harus bilangan bulat antara 1 hingga 37231.
BUILD DEFERRED
Tidak
Jika ditentukan, membuat skema materialized view tanpa mengisinya dengan data.
col_name
Tidak
Nama kolom dalam materialized view.
col_comment
Tidak
Komentar untuk kolom.
DISABLE REWRITE
Tidak
Menonaktifkan query rewrite untuk materialized view. Secara default, query rewrite diaktifkan. Anda dapat menjalankan
ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE;untuk menonaktifkan query rewrite, dan menjalankanALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE;untuk mengaktifkannya.PARTITIONED BY
Tidak
Kolom kunci partisi. Gunakan parameter ini untuk membuat materialized view partisi.
CLUSTERED BY|RANGE CLUSTERED BY
Tidak
Properti shuffle untuk membuat tabel terkluster.
SORTED BY
Tidak
Properti sort untuk membuat tabel terkluster.
REFRESH EVERY
Tidak
Interval penyegaran terjadwal untuk materialized view. Satuan yang valid adalah MINUTES, HOURS, atau DAYS.
number_of_buckets
Tidak
Jumlah bucket saat membuat tabel terkluster.
TBLPROPERTIES
Tidak
compressionstrategy: Menentukan strategi kompresi penyimpanan data. Nilai yang valid adalah
normal,high, danextreme. enable_auto_substitute: Menentukan apakah akan mengaktifkan penembusan kueri ke tabel partisi sumber saat partisi tidak ada. Untuk informasi lebih lanjut, lihat Penulisan ulang kueri materialized view.enable_auto_refresh: Opsional. Atur properti ini ke
trueuntuk mengaktifkan penyegaran data otomatis.refresh_interval_minutes: Parameter ini hanya diperlukan ketika
enable_auto_refreshdiatur ketrue. Ini menentukan interval penyegaran dalam menit.only_refresh_max_pt: Opsional. Properti ini hanya berlaku untuk materialized view partisi. Jika diatur ke
true, hanya partisi terbaru dari tabel sumber yang disegarkan.
select_statement
Ya
Pernyataan SELECT yang mendefinisikan materialized view. Untuk informasi lebih lanjut, lihat Sintaks SELECT.
Contoh
Contoh 1: Buat materialized view
Buat dua tabel,
mf_tdanmf_t1, dan masukkan data.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 materialized view.
Contoh 1: Buat materialized view partisi dengan
dssebagai kunci partisi.CREATE MATERIALIZED VIEW mf_mv LIFECYCLE 7 ( key comment 'unique id', value comment 'input value', ds comment 'partition' ) 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 materialized view. SELECT * FROM mf_mv WHERE ds =1; +------------+------------+------------+ | key | value | ds | +------------+------------+------------+ | 1 | 10 | 1 | +------------+------------+------------+Contoh 2: Buat materialized view non-partisi yang terkluster.
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 materialized view partisi dan terkluster.
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: Buat partisi kosong dengan menyegarkan dari partisi sumber kosong.
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 kosong. Menyegarkan partisi dengan ds > 0 membuat partisi kosong yang sesuai di materialized view. ds=1 ds=2 SELECT * FROM mf_mv_blank_pts WHERE ds>0; --Hasil menunjukkan bahwa hanya partisi ds=1 yang berisi data. +------------+------------+------------+ | id | name | ds | +------------+------------+------------+ | 1 | aba | 1 | | 2 | cbd | 1 | +------------+------------+------------+
Perbarui materialized view
Saat data dalam tabel sumber atau partisinya berubah, materialized view menjadi tidak valid dan tidak dapat digunakan untuk query rewrite. Periksa status view dan bangun ulang jika diperlukan. Untuk informasi lebih lanjut, lihat Kueri informasi tentang materialized view.
Catatan
Operasi rebuild hanya memperbarui tabel sumber atau partisi yang berubah.
Anda dapat mengaktifkan penyegaran terjadwal untuk memperbarui data secara otomatis. Untuk informasi lebih lanjut, lihat Penyegaran terjadwal untuk materialized view.
Sintaks
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> REBUILD [PARTITION (<ds>=max_pt(<table_name>),<expression1>...)];Parameter
Parameter
Wajib
Deskripsi
project_name
Tidak
Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.
Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Lihat nama proyek Anda.
mv_name
Ya
Nama materialized view yang akan diperbarui.
ds
Tidak
Nama bidang partisi dalam materialized view.
max_pt
Tidak
Mengambil nilai partisi maksimum dari tabel atau materialized view yang ditentukan (
table_name).expression
Tidak
Ekspresi yang menentukan partisi yang akan dibangun ulang. Ini digunakan untuk materialized view partisi.
Contoh
Contoh 1: Perbarui materialized view non-partisi.
-- Buat tabel non-partisi. CREATE TABLE count_test(a BIGINT, b BIGINT); -- Buat materialized view non-partisi. CREATE MATERIALIZED VIEW count_mv LIFECYCLE 7 AS SELECT COUNT(*) FROM count_test; -- Perbarui materialized view non-partisi. ALTER MATERIALIZED VIEW count_mv rebuild;Contoh 2: Perbarui partisi materialized view.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1');Contoh 3: Perbarui partisi berdasarkan kondisi.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2');Contoh 4: Perbarui partisi terbaru.
-- Buat tabel partisi contoh. 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 materialized view. CREATE MATERIALIZED VIEW mv_deferred BUILD DEFERRED AS SELECT * FROM sale_detail_jt; -- Kueri materialized view mv_deferred. SELECT * FROM mv_deferred; -- Hasil berikut dikembalikan: +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+ -- Buat tabel partisi. CREATE TABLE mf_part (id bigint,name string) PARTITIONED BY (dt string); -- Masukkan data. INSERT INTO mf_part PARTITION(dt='2013') VALUES(1,'name1'),(2,'name2'); -- Kueri data. SELECT * FROM mf_part WHERE dt='2013'; -- Hasil berikut dikembalikan: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+ -- Buat materialized view partisi. CREATE MATERIALIZED VIEW mv_rebuild BUILD DEFERRED PARTITIONED BY (dt) AS SELECT * FROM mf_part; -- Kueri data dari materialized view. SELECT * FROM mv_rebuild WHERE dt='2013'; -- Hasil berikut dikembalikan: +------------+------+----+ | id | name | dt | +------------+------+----+ +------------+------+----+ -- Segarkan data partisi terbaru. ALTER MATERIALIZED VIEW mv_rebuild REBUILD PARTITION(dt=max_pt('mf_part')); -- Kueri data dari materialized view. SELECT * FROM mv_rebuild WHERE dt='2013'; -- Hasil berikut dikembalikan: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+
Ubah siklus hidup materialized view
Mengubah siklus hidup materialized view yang sudah ada.
Sintaks
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> SET LIFECYCLE <days>;Parameter
Parameter
Wajib
Deskripsi
project_name
Tidak
Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.
Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Lihat nama proyek Anda.
mv_name
Ya
Nama materialized view yang akan diubah.
days
Ya
Siklus hidup baru untuk materialized view, dalam hari.
Contoh
-- Atur siklus hidup materialized view menjadi 10 hari. ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;
Aktifkan atau nonaktifkan siklus hidup materialized view
Mengaktifkan atau menonaktifkan manajemen siklus hidup untuk materialized view.
Sintaks
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> [<pt_spec>] {enable|disable} LIFECYCLE;Parameter
Parameter
Required
Description
project_name
No
Nama Proyek MaxCompute untuk tampilan yang di-materialisasi. Jika Anda menghilangkan parameter ini, proyek saat ini akan digunakan.
Login ke MaxCompute console dan pilih Wilayah di pojok kiri atas.
Pada panel navigasi sebelah kiri, pilih .
Lihat nama proyek Anda.
mv_name
Yes
Nama tampilan yang di-materialisasi yang akan dimodifikasi.
pt_spec
No
Partisi yang akan dimodifikasi. Formatnya adalah
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...), di mana partition_col adalah kolom partisi dan partition_col_value adalah nilainya.enable|disable
Yes
enableberarti diaktifkan, dandisableberarti dinonaktifkan. Jika dinonaktifkan, partisi atau tabel tersebut tidak dikenai manajemen lifecycle.Contoh
Contoh 1: Aktifkan manajemen siklus hidup untuk partisi materialized view.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') enable LIFECYCLE;Contoh 2: Nonaktifkan manajemen siklus hidup untuk partisi materialized view.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') disable LIFECYCLE;
Informasi materialized view
Menampilkan detail materialized view, seperti skema dan waktu modifikasi.
Sintaks
DESC EXTENDED [<project_name>.]<mv_name>;Parameter
Parameter
Wajib
Deskripsi
project_name
Tidak
Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.
Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Lihat nama proyek Anda.
mv_name
Ya
Nama materialized view yang akan dikueri.
Contoh
DESC EXTENDED mv;Perintah ini mengembalikan output berikut:
CatatanOutput contoh ini hanya tersedia di klien MaxCompute v0.43 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Terhubung ke MaxCompute menggunakan 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 materialized view
Kueri status materialized view untuk memeriksa apakah valid. Materialized view memiliki salah satu status berikut:
Valid
MaxCompute membaca data langsung dari materialized view, bukan dari tabel sumber.
Tidak valid
MaxCompute tidak dapat membaca data dari materialized view. Kueri kembali ke tabel sumber tanpa akselerasi performa.
Gunakan fungsi berikut untuk memeriksa apakah data dalam materialized view valid.
Sintaks
boolean materialized_view_is_valid(<mv_name>,<partition_value>);Contoh
Memeriksa apakah data dalam materialized view konsisten dengan data terbaru di tabel sumber. Fungsi mengembalikan
truejika data konsisten danfalsejika tidak.SELECT materialized_view_is_valid("count_mv");SELECT materialized_view_is_valid("mf_mv_blank_pts","1");
Daftar materialized view
Menampilkan semua materialized view dalam proyek, atau hanya yang sesuai dengan pola tertentu.
Perintah SHOW MATERIALIZED VIEWS memerlukan klien MaxCompute (odpscmd) v0.43.0 atau yang lebih baru.
Sintaks
-- Menampilkan semua materialized view dalam proyek. SHOW MATERIALIZED VIEWS; -- Menampilkan materialized view dalam proyek yang sesuai dengan pola <materialized_view>. SHOW MATERIALIZED VIEWS LIKE '<materialized_view>';Contoh
-- Menampilkan materialized view yang dimulai dengan 'test'. Tanda bintang (*) adalah wildcard. SHOW MATERIALIZED VIEWS LIKE 'test*';Perintah ini mengembalikan hasil berikut:
ALIYUN$account_name:test_two_mv ALIYUN$account_name:test_create_one_mv
Hapus materialized view
Menghapus materialized view.
Sintaks
DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name> [purge];Parameter
Parameter
Wajib
Deskripsi
IF EXISTS
Tidak
Jika Anda tidak menentukan IF EXISTS, operasi akan mengembalikan error jika materialized view tidak ada.
project_name
Tidak
Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.
Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Lihat nama proyek Anda.
mv_name
Ya
Nama materialized view yang akan dihapus.
purge
Tidak
Jika Anda menentukan
purge, operasi segera menghapus data materialized view.Contoh
Hapus materialized view
count_mv.DROP MATERIALIZED VIEW count_mv;Hapus materialized view
count_mvdan segera hapus datanya.DROP MATERIALIZED VIEW count_mv purge;
Hapus partisi dari materialized view
Menghapus satu atau beberapa partisi dari materialized view yang sudah ada.
Sintaks
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> DROP [IF EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec>, PARTITION <pt_spec>....];Parameter
Parameter
Wajib
Deskripsi
project_name
Tidak
Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.
Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Lihat nama proyek Anda.
mv_name
Ya
Nama materialized view partisi tempat partisi akan dihapus.
IF EXISTS
Tidak
Jika Anda menghilangkan IF EXISTS dan materialized view tidak ada, error akan dikembalikan.
pt_spec
Ya
Partisi yang akan dihapus. Anda harus menentukan minimal satu partisi. Formatnya adalah
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menentukan kolom partisi, dan partition_col_value menentukan nilai partisi.Contoh
Contoh 1: Hapus partisi dari materialized view partisi.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1');Contoh 2: Hapus partisi yang memenuhi kondisi tertentu dari materialized view partisi.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds>='1' AND ds<='2');
Penembusan kueri materialized view
Materialized view partisi mungkin tidak berisi data untuk semua partisi — misalnya, jika Anda hanya menyegarkan yang terbaru. Saat kueri menargetkan partisi yang tidak memiliki data di materialized view, sistem secara otomatis kembali ke tabel partisi sumber. Gambar berikut mengilustrasikan proses ini.

Untuk mengaktifkan fitur kueri penembusan untuk materialized view, atur parameter berikut:
Saat membuat materialized view, tambahkan konfigurasi "enable_auto_substitute"="true" ke tblproperties.
Contoh berikut menunjukkan cara menggunakan materialized view yang mendukung kueri penembusan.
Buat materialized view partisi yang mendukung kueri penembusan.
-- Buat tabel sumber bernama src. CREATE TABLE src(id bigint,name string) PARTITIONED BY (dt string); -- Masukkan data. INSERT INTO src PARTITION(dt='20210101') VALUES(1,'Alex'); INSERT INTO src PARTITION(dt='20210102') VALUES(2,'Flink'); -- Buat materialized view partisi yang mendukung kueri penembusan. 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 dari partisi
20210101di materialized viewmv.SELECT * FROM mv WHERE dt='20210101';Kueri data dari partisi
20210102di materialized viewmv. Sistem secara otomatis melakukan kueri penembusan ke tabel sumber karena partisi ini belum dimaterialisasi.SELECT * FROM mv WHERE dt = '20210102'; -- Karena data untuk partisi 20210102 belum dimaterialisasi, kueri ditulis ulang untuk mengakses tabel sumber. Ini setara dengan: SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20210102') t;Kueri data dari rentang partisi di materialized view
mv. Sistem secara otomatis melakukan kueri penembusan ke tabel sumber untuk data yang tidak dimaterialisasi dan menggabungkannya dengan data yang dimaterialisasi menggunakan operasiUNIONsebelum mengembalikan hasil.SELECT * FROM mv WHERE dt >= '20201230' AND dt<='20210102' AND id=5; -- Karena data untuk partisi 20201230 dan 20210102 belum dimaterialisasi, kueri ditulis ulang untuk mengakses tabel sumber. Ini setara dengan: SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20201230' OR dt='20210102' UNION ALL SELECT * FROM mv WHERE dt='20210101' ) t WHERE id = 5;
Aturan Penagihan
Biaya materialized view terdiri dari dua komponen:
Biaya penyimpanan
Materialized view mengonsumsi penyimpanan fisik, sehingga dikenakan biaya penyimpanan berdasarkan pay-as-you-go. Untuk informasi lebih lanjut, lihat Harga penyimpanan (pay-as-you-go).
Biaya komputasi
Membuat, memperbarui, dan mengkueri materialized view — termasuk penulisan ulang kueri saat view valid — mengonsumsi sumber daya komputasi dan dikenakan biaya komputasi.
Jika proyek MaxCompute Anda menggunakan paket langganan , tidak ada biaya tambahan yang dikenakan.
Jika proyek MaxCompute Anda menggunakan paket pay-as-you-go , MaxCompute menghitung biaya berdasarkan kompleksitas SQL dan volume data masukan. Untuk informasi lebih lanjut, lihat Harga SQL Standar. Perhatikan hal berikut:
Pernyataan SQL yang digunakan untuk menyegarkan materialized view sama dengan kueri pendefinisinya. Jika proyek terikat ke kelompok sumber daya komputasi langganan, operasi menggunakan sumber daya yang telah Anda beli tanpa biaya tambahan. Jika proyek menggunakan kelompok sumber daya pay-as-you-go, biaya tergantung pada volume data masukan dan kompleksitas SQL. Setelah penyegaran, biaya penyimpanan dikenakan berdasarkan ukuran aktual materialized view.
Saat materialized view valid, query rewrite membaca data dari view tersebut. Volume data masukan bergantung pada materialized view, bukan tabel sumber. Jika view tidak valid, query rewrite tidak tersedia dan kueri membaca langsung dari tabel sumber. Untuk informasi lebih lanjut, lihat Kueri status materialized view.
Saat materialized view dibuat dari join multi-tabel, pembengkakan data (data bloat) dapat terjadi. Membaca dari materialized view tidak selalu mengurangi biaya dibandingkan membaca dari tabel sumber.
Referensi
Untuk informasi tentang penulisan ulang kueri materialized view, lihat Penulisan ulang kueri materialized view.
Untuk informasi tentang penyegaran terjadwal materialized view, lihat Penyegaran terjadwal materialized view.