MaxCompute memperkenalkan fitur Delta Live Materialized View untuk membantu Anda membangun pipeline pembaruan inkremental yang sederhana dan mudah digunakan. Topik ini menjelaskan cara menggunakan Delta Live Materialized View di MaxCompute.
Pengenalan Fungsi
Dibandingkan dengan materialized view berbasis full-refresh, Delta Live Materialized View menyeimbangkan kesegaran data dan biaya komputasi. Fitur ini menggunakan kembali hasil komputasi yang telah ada dan menerapkan algoritma inkremental cerdas untuk mengurangi biaya komputasi sekaligus meningkatkan kesegaran data.
Fitur ini saat ini dalam pratinjau undangan. Untuk informasi lebih lanjut tentang cara menggunakan fitur ini, lihat Petunjuk.
Ikhtisar Arsitektur

Keunggulan
Fitur Delta Live Materialized View di MaxCompute menawarkan keunggulan berikut:
SQL deklaratif, operasi sepenuhnya dikelola (fully managed), dan pelapisan gudang data otomatis.
Arsitektur gudang data yang disederhanakan. Satu logika komputasi dan satu engine mendukung komputasi inkremental maupun penuh, memenuhi kebutuhan latensi rendah dan throughput tinggi.
Hemat biaya. Menyeimbangkan kesegaran data dan biaya untuk ETL penuh maupun inkremental yang efisien.
Skenario Penggunaan
Fitur ini berlaku untuk skenario berikut:
Pemrosesan Real-time untuk layanan offline
Beralih dari gudang data T+1 ke gudang data near-real-time dengan latensi tingkat menit.
Pemrosesan penuh dan inkremental terpadu
Komputasi inkremental near-real-time untuk partisi hari ini memenuhi persyaratan kesegaran data tinggi dengan biaya komputasi rendah.
(Opsional) Isi ulang (backfill) partisi historis untuk mengarsipkan atau memperbaiki data guna analitik skala besar di downstream.
Prasyarat
Anda telah membuat proyek MaxCompute.
Aktifkan Change Data Capture (CDC) pada tabel sumber. Jenis tabel sumber yang didukung meliputi:
Tabel inkremental Delta Table, dan harus memiliki fitur CDC yang diaktifkan.
Ini adalah materialized view dinamis. Fitur Change Data Capture (CDC) diaktifkan secara default.
Catatan Penting
Delta Live Materialized View tidak boleh mengandung komputasi non-deterministik, seperti fungsi RAND atau user-defined function (UDF).
Delta Live Materialized View mendukung penuh komputasi inkremental untuk semua logika SQL umum, termasuk operator berikut:
INNER JOIN pada dua stream
(LEFT/RIGHT) OUTER JOIN pada dua stream
Semua fungsi agregasi kecuali UDAF, termasuk fungsi tanpa GROUP BY atau agregasi
WINDOW
TableFunctionScan
UNION ALL
FILTER/Project
SUBQUERY
Membuat Delta Live Materialized View
Sintaksis
CREATE MATERIALIZED VIEW [IF NOT EXISTS][<project_name>.]<mv_name>
[LIFECYCLE <days>] -- Tentukan siklus hidup
[BUILD DEFERRED] -- Hasilkan hanya skema tabel, bukan data, saat pembuatan
[(<col_name> [COMMENT <col_comment>],...)] -- Komentar kolom
[DISABLE REWRITE] -- Tentukan apakah tampilan dapat digunakan untuk penulisan ulang kueri
[COMMENT <table comment>] -- Komentar tabel
[PARTITIONED ON/BY (<col_name> [, <col_name>, ...]) -- Buat materialized view sebagai tabel partisi
[REFRESH EVERY <num> MINUTES/HOURS/DAYS] -- Atur interval refresh terjadwal
TBLPROPERTIES(
"refresh_mode"="incremental"
[,"enable_auto_refresh"="true"] -- Aktifkan auto-refresh
[,"refresh_cron"="xx"] -- Konfigurasi refresh berbasis waktu, terjadwal, atau berbasis interval menggunakan ekspresi cron
[,"refresh_job_settings"="xx"]
)
AS <select_statement>;Sintaksis Delta Live Materialized View kompatibel dengan sintaksis materialized view standar, dengan perbedaan berikut:
Anda tidak dapat membuat materialized view dinamis sebagai clustered table.
Anda tidak dapat mengatur parameter
enable_auto_substituteke true. Delta Live Materialized View bersifat asinkron. Data tabel dasar yang digunakan mungkin bukan versi terbaru, yang bertentangan denganenable_auto_substitute= true.
Deskripsi Parameter
Parameter | Wajib | Deskripsi |
project_name | Tidak | Nama proyek. |
mv_name | Ya | Nama Delta Live MV. |
LIFECYCLE <days> | Tidak | Tentukan siklus hidup. |
BUILD DEFERRED | Tidak | Hasilkan hanya skema tabel, bukan data, saat pembuatan. |
col_name | Tidak | Nama kolom. |
col_comment | Tidak | Komentar kolom. |
DISABLE REWRITE | Tidak | Tentukan apakah tampilan dapat digunakan untuk penulisan ulang kueri. |
table comment | Tidak | Komentar tabel. |
REFRESH EVERY <num> MINUTES/HOURS/DAYS | Tidak | Atur interval jadwal refresh. Nilai minimum adalah 1 menit. |
enable_auto_refresh | Tidak | Aktifkan auto-refresh.
|
refresh_mode | Tidak | Mode refresh.
|
refresh_cron | Tidak | Tentukan ekspresi cron untuk mengatur laju refresh, seperti pembaruan interval terjadwal, pembaruan berbasis waktu tertentu, atau kombinasi keduanya. Nilainya harus berupa string dalam format QUARTZ Cron. Untuk detail penggunaan, lihat Contoh ekspresi cron. Contohnya sebagai berikut: |
refresh_job_settings | Tidak |
|
select_statement | Ya | Pernyataan kueri SQL. |
Contoh
Contoh 1: Membuat Dynamic Materialized View Sederhana
Buat Delta Live Materialized View bernama mv1 yang melakukan incremental refresh setiap 5 menit. Tabel sumber adalah Delta Table dengan CDC yang diaktifkan.
CREATE MATERIALIZED VIEW IF NOT EXISTS mv1
REFRESH EVERY 5 MINUTES
TBLPROPERTIES("enable_auto_refresh"="true", "refresh_mode"="incremental")
AS
SELECT name, COUNT(*) FROM source GROUP BY name;Contoh 2: Membuat dynamic materialized view dengan parameter tuning umum
CREATE MATERIALIZED VIEW IF NOT EXISTS part_dlmv_department
PRIMARY KEY(dept_id)
LIFECYCLE 10
BUILD DEFERRED
PARTITIONED BY (pt)
TBLPROPERTIES('refresh_mode'='incremental',
'refresh_job_settings'='set odps.sql.split.size=128;set odps.sql.reshuffle.dynamicpt
=false;')
AS SELECT *, get_setting('odps.custom.setting.department.pt') AS pt FROM t_department;Contoh 3: Membuat Delta Live Materialized View terpartisi dengan incremental refresh per partisi
Saat membuat Delta Live Materialized View terpartisi, tambahkan kata kunci BUILD DEFERRED untuk menunjukkan bahwa hanya operasi DDL yang dijalankan.
-- Buat Delta Live Materialized View
CREATE MATERIALIZED VIEW dlmv_pt
PRIMARY KEY(value) BUILD DEFERRED PARTITIONED BY (ds) TBLPROPERTIES
('refresh_mode'='incremental', 'enable_auto_refresh'='true')
AS SELECT value, AVG(value2), ds FROM dlmv_pt_src GROUP BY value, ds;
-- Refresh satu partisi
ALTER MATERIALIZED VIEW dlmv_pt REBUILD PARTITION(ds='20250730');Untuk detail tentang merefresh Delta Live Materialized View, lihat Refresh manual.
Contoh 4: Membuat Delta Live Materialized View berparameter
Mendukung definisi berparameter untuk memigrasikan pekerjaan partisi offline ke pekerjaan inkremental.
Fungsi get_setting memungkinkan Anda mengambil nilai parameter yang diatur di Session Flag. Nama parameter harus diawali dengan awalan
dps.custom.setting.Ganti
${biz_date}dalam pekerjaan offline tradisional denganget_setting(odps.custom.setting.xx)untuk mengaktifkan parameterisasi.Tambahkan session flag sebelum merefresh Delta Live Materialized View:
set odps.custom.setting.xx=yy.Saat runtime, MaxCompute mengganti
get_setting(odps.custom.setting.xx)denganyy.
Contoh:
-- Buat Delta Live Materialized View
CREATE MATERIALIZED VIEW mv1
BUILD DEFERRED -- Jalankan hanya DDL, tanpa pembuatan data
PARTITIONED BY (ds)
REFRESH EVERY 5 minutes
TBLPROPERTIES("enable_auto_refresh"="true", "refresh_mode"="incremental")
AS
SELECT A.* FROM A JOIN B ON A.c1 = B.c1
AND A.ds=get_setting('odps.custom.setting.bizdate.a')
AND B.ds=get_setting('odps.custom.setting.bizdate.b');
-- Logika refresh. Penjadwalan DataWorks secara otomatis mengganti ${biz_date} dan ${yesterday}.
SET odps.custom.setting.bizdate.a=${biz_date};
SET odps.custom.setting.bizdate.b=${yesterday};
ALTER MATERIALIZED VIEW mv1 REBUILD PARTITION(ds=${biz_date});Mengelola dynamic materialized views
Hapus
DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name>;Pembaruan manual
Delta Live Materialized View mendukung refresh manual untuk partisi tunggal. Sintaksisnya sama dengan materialized view standar:
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name>
REBUILD [PARTITION(<ds>=max_pt(<table_name>),<expression1>...)];Di sini, ds adalah kolom kunci partisi.
Nonaktifkan auto-refresh
Jalankan perintah berikut untuk menonaktifkan auto-refresh dengan memperbarui TBLPROPERTIES:
ALTER MATERIALIZED VIEW <mv_name> SET TBLPROPERTIES("enable_auto_refresh"="false");Aktifkan atau lanjutkan auto-refresh
Jalankan perintah berikut untuk mengaktifkan atau melanjutkan auto-refresh:
ALTER MATERIALIZED VIEW <mv_name> SET TBLPROPERTIES("enable_auto_refresh"="true");Ubah frekuensi refresh
Jalankan perintah berikut untuk mengubah frekuensi refresh:
ALTER MATERIALIZED VIEW <mv_name>
SET TBLPROPERTIES("refresh_interval_minutes"="xx");Nilai minimum untuk refresh_interval_minutes adalah 1. Kami menyarankan mengaturnya kurang dari siklus hidup CDC tabel dasar.
Melihat Tampilan yang di-materialisasi dinamis
Lihat riwayat perubahan data
Jalankan perintah berikut untuk melihat catatan perubahan data pada Delta Live Materialized View:
SHOW HISTORY FOR TABLE <mv_name>;Contoh output:
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
TABLE d95ec7015e8b432e8e0092d01da962a9 incremental_mv 0000000000000001 2024-08-18 21:06:32 CREATE
TABLE d95ec7015e8b432e8e0092d01da962a9 incremental_mv 0000000000000002 2024-08-18 21:11:13 UPDATELihat riwayat refresh
Jalankan perintah berikut untuk melihat riwayat refresh (hanya untuk operasi REFRESH):
SELECT * FROM
Delta_Live_MV_Refresh_History(['<project_name>', '<schema_name>',]'<table_name>');Deskripsi Parameter
Parameter | Deskripsi |
project_name | Nama proyek. |
schema_name | Nama skema. |
table_name | Nama tabel. |
Deskripsi Nilai Kembali
Nama Bidang | Deskripsi |
project_name | Proyek yang memiliki Delta Live MV. |
schema_name | Skema yang memiliki Delta Live MV. |
name | Nama Delta Live MV. |
refresh_start_time | Waktu mulai refresh. |
refresh_end_time | Waktu akhir refresh. Nilai ini NULL ketika status pekerjaan RUNNING. |
instance_id | ID pekerjaan. Gunakan untuk mengakses Logview. |
duration_in_seconds | Durasi refresh. |
state | Status pekerjaan.
|
refresh_trigger | Metode refresh.
|
refresh_mode | Mode refresh.
|
error_message | Pesan error jika refresh gagal. Nilai ini NULL jika refresh berhasil. |
source_tables | Nama dan versi tabel dasar yang digunakan oleh Delta Live MV. |
numInsertedRows | Jumlah baris yang dimasukkan. |
numDeletedRows | Jumlah baris yang dihapus. |
Aturan Penagihan
Penagihan untuk Delta Live Materialized View mencakup biaya komputasi dan penyimpanan. Aturan ini sama dengan aturan penagihan untuk operasi materialized view standar.
Biaya komputasi
Sumber daya komputasi dikonsumsi—dan biaya komputasi dikenakan—ketika pekerjaan benar-benar dijalankan selama pembuatan atau refresh. Penagihan mengikuti aturan yang sama dengan pekerjaan SQL standar.
Jika tidak ada perubahan data inkremental, auto-refresh tidak memicu pekerjaan SQL dan tidak dikenai biaya.
Kami menyarankan menempatkan Delta Live Materialized View dalam proyek khusus untuk melacak pekerjaan auto-refresh, penggunaan sumber daya komputasi, dan biaya terkait.
Biaya penyimpanan
Delta Live Materialized View ditagih untuk penyimpanan seperti materialized view standar atau tabel biasa.
Materialized view dinamis dapat menggunakan algoritma komputasi inkremental berbasis status untuk operator tertentu, menghasilkan tabel status internal yang mengonsumsi storage space.
Delta Live Materialized View memerlukan penyimpanan CDC inkremental dan time travel, mirip dengan Delta Table standar.